checkboxクリックをクリックすると、その時点でSQLを実行し、その結果によりボタンの有効・無効を決めたいと思っております
(あるチェックボックスが選択されている状態では、特定のボタンを無効化し、選択できないようにしたいと思います)。
しかし数点詰まってしまった所がございましたのでアドバイスいただける方がいらっしゃいましたら、よろしくお願いします。
私が試した所、下記の条件付きであればデータベースの中身を見て、その内容をボタンに反映させる事が出来ました。
【現状】
1. 予めSQLを実行して結果を変数に格納しておき、checkboxクリック時にその変数を呼び出す。
2. checkboxは1つのみ(現在はデータベースの最終行の値でボタンの有効・無効が決定されております)。
それを下記のように修正したいと思ったのですが、方法が分かりませんでした。
【やりたいこと】
1. SQLは予め実行するのではなく、checkboxクリック時に実行したい。
2. checkboxが3つあった場合、1つめのcheckboxクリック時はテーブルの1行目、2つめのcheckboxクリック時はテーブルの2行目の値を見に行きたい。
【テーブル構造(mysql使用)】
-----------------
| |field1|field2|field3|
-----------------
|1行目| 1 | 0 | 1 |
-----------------
|2行目| 0 | 1 | 1 |
-----------------
|3行目| 1 | 0 | 0 |
-----------------
【ソースコード】
<?php
$connect = mysql_connect('localhost', 'データベースユーザー名', 'データベースユーザーパスワード名');
mysql_select_db('データベース名', $connect);
$query = mysql_query("SELECT * FROM テーブル名", $connect);
while ($row = mysql_fetch_array($query)) {
$ans1 = $row["field1"];
$ans2 = $row["field2"];
$ans3 = $row["field3"];
}
mysql_close($connect);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>title</title>
<script type="text/javascript">
function checkbox_func()
{
var ans1 = "<?php echo $ans1 ?>";
var ans2 = "<?php echo $ans2 ?>";
var ans3 = "<?php echo $ans3 ?>";
if (document.getElementById("checkbox_form").check1.checked) {
// 0なら有効, 1なら無効
if (ans1 != 0) {
document.getElementById("button1").disabled = true;
} else {
document.getElementById("button1").disabled = false;
}
if (ans2 != 0) {
document.getElementById("button2").disabled = true;
} else {
document.getElementById("button2").disabled = false;
}
if (ans3 != 0) {
document.getElementById("button3").disabled = true;
} else {
document.getElementById("button3").disabled = false;
}
} else {
document.getElementById("button1").disabled = false;
document.getElementById("button2").disabled = false;
document.getElementById("button3").disabled = false;
}
}
</script>
</head>
<body>
<form id="checkbox_form" name="checkbox_form" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<p>チェックボックス1<input type="checkbox" name="check1" value="check1" onclick="checkbox_func()" onkeypress="checkbox_func()" /></p>
</form>
<input id="button1" type="button" value="ボタン1" />
<input id="button2" type="button" value="ボタン2" />
<input id="button3" type="button" value="ボタン3" />
</body>
</html>
以上、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
補足になりますが
>多分phpで出来そうかなという気はするのですが。
SQLのインタラクティブな発行はajax以外はよほどのことがない限り
無理だと考えた方がよいです。
ですのでajaxを想定していないのであれば、本件は仕様のままでは
実現は不可能だとおもってください。
もちろん、ページ全体を再読み込みしていいなら話は別ですが。
>whereで取得する方法などを考えています。
whereで結果を限定するのは賢明です
ただし結果が常に1つしかないのであればwhileでまわす必要は
ないですね
まだフローの練りこみがかなり足りないと思います。
もう少し設計段階できちんとしないと、運用で苦労しますよ
この回答への補足
いつもお世話になっております。
その後ご教示いただいた内容を元に実装してみた所、phpとjavascriptを用いページ全体を再読み込みさせることで希望の動作となりました。
まだまだ改善の余地があるソースですが、当初の目的は達成できましたので質問を締め切らさせていただきたいと思います。
どうもありがとうございました。
ありがとうございます。
SQLのインタラクティブな発行はajax以外無理と考えた方が良いのですね。
勉強になりました。
ちなみにajax以外無理と思われる理由をご存知でしたら、ご教授いただいてもよろしいでしょうか?
その点について人に説明する必要があるかもしれないので。
私のほうでもいただいたアドバイス内容を元に検索してみようとは思いますが。
それと
> もちろん、ページ全体を再読み込みしていいなら話は別ですが。
ページ全体の再読込は仕様上大丈夫です。
特に再読込不可という制約はありません。
ajax化に伴う予算増加は認められなさそうという制約はありますが。。。
後、確かにwhileは必要ないですね。
結果は常に1つになります。
何となく今お教えいただいた方法で頭の中で処理の流れを考えてみました。
<?php
if (チェックボックスから何らかの値を渡されたら) {
・phpでSQLを発行し、ボタンのOFF/ONを設定する。
(もしかしたら常にSQLを発行し、値が渡されていない場合はkey=0の値を見に行き、
key=0にはボタンがすべてONになるような値を設定しておけばよいのかもしれません。)
}
?>
<html>
・チェックボックス(ここをクリック時、何らかの値を渡し、リロードする)
・ボタン(チェックボックスクリックに伴うSQLの結果を元にOFF/ONを設定)
</html>
後、今のソースでは再読み込み時にチェックボックスのOFF/ONを保持する仕組みがない為、
それを実装すれば、ここの部分については一応意図した動作になるのかなと思いました。
そのため、上記のような感じで一度組んでみて試してみようと思います。
No.1
- 回答日時:
>1. SQLは予め実行するのではなく、checkboxクリック時に実行したい。
ajaxを使えばできないことはない。
ただしそこまでするほどのこともないような気がします。
>2. checkboxが3つあった場合、1つめのcheckboxクリック時はテーブルの1行目、
>2つめのcheckboxクリック時はテーブルの2行目の値を見に行きたい
現状はみればわかるが、3回ループするなかで毎回$ans1~3が上書きされてる。
配列をつかってうければ処理できるんじゃないですかね?
ありがとうございます。
今の所、ajaxを使う事は想定しておりません。
多分phpで出来そうかなという気はするのですが。
それと2については下記のようにテーブルに主キーを設定し、checkboxクリック時にcheckboxの引数に主キーの値を入れておき、whereで取得する方法などを考えています。
-------------------
| |key|field1|field2|field3|
-------------------
|1行目| 1 | 1 | 0 | 1 |
-------------------
|2行目| 2 | 0 | 1 | 1 |
-------------------
|3行目| 3 | 1 | 0 | 0 |
-------------------
もっとも、それを行うにはcheckboxクリック時にSQLを発行する必要があるとは思いますが。
この点については引き続き調べてみようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DBで検索結果に該当するデータ...
-
検索結果をgoogleのように数件...
-
エクセルVBAについて
-
PHP+MySQLでの配列のinsert文に...
-
mysql_insert_id()の使い方
-
検索結果($_POST)が2ページ目...
-
phpとSQLでアクセスカウンタと...
-
php 投票システム
-
PHPで[]の使い方について
-
sortable ギブアップです…助け...
-
mysql,GROUP BY,mysql_fetch_ar...
-
phpでmysqlを使ってデータベー...
-
PHPとSmartyを使い、データベー...
-
dbに登録したデータをphpのプル...
-
チェックボックスによる複数の...
-
テーブル<TR></TR>の処理について
-
checkboxクリック時、SQLを実行...
-
MYSQLからデータを取り出して表...
-
PHPのupdate文はこれでいいので...
-
PHPでMySQLデータを呼び出し、w...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで[]の使い方について
-
php テーブルが作成できない
-
dbに登録したデータをphpのプル...
-
phpでmysqlを使ってデータベー...
-
アラートでyes noを作りたいです。
-
DBで検索結果に該当するデータ...
-
checkboxクリック時、SQLを実行...
-
文字化けが解決できません。お...
-
SELECT結果から動的にコンボボ...
-
PHPでMySQLデータを呼び出し、w...
-
while文の中にwhile文を書きた...
-
sortable ギブアップです…助け...
-
PHP と MySQL でテーブルの行数...
-
重複レコードをグループ化した...
-
PHPでMySQLのデータを2次元配...
-
mysql>PHPにデータ表示、10件ご...
-
PHPについてなのですが未定義の...
-
VBA初心者です。
-
ラジオボタンをループすること...
-
BLOBでの画像表示について
おすすめ情報