
次のような、3項目×100人分(100行)からなるシンプルな表があります。
(環境: MySQL5.0.37、PHP5.2.2)
左から、出席番号を表すテキストボックス(Readonly)、
宿題の提出の有無を表すチェックボックス、氏名です。
表の一番下に、登録ボタン(submit)があります。
-------------------------------
出席番号 チェック 氏名
myNo myCheck myName
-------------------------------
[ 1] [ ] 阿藤
-------------------------------
[ 2] [ ] 伊藤
-------------------------------
[ 3] [ ] 宇藤
-------------------------------
:(以降、100人続く)
[チェック状態をDBに登録する]
このチェックボックスのOn/Offの状況を、SQLのUpdate文で一括登録したいのですが、
うまくできません。
テキストボックスに記入された出席番号の配列($myNo[])には、count($myNo)と
やると100があると返ってきます。
チェックボックスに記入された配列($myCheck[])は、チェックされた場合しか
配列に格納されないという特性があるようです。
何もチェックしないでSubmitボタンを押下した場合、count($myCheck)はゼロを
返してくるのです。
ですので、つい最近、全然別件で、同じような質問をして解決したばかりですが、
http://oshiete1.goo.ne.jp/qa5054417.html
ここにある解法は通じないように思います。
以下のコメント部分、どのように記述すればうまくUpdate文を適用できるでしょうか?
<?php
$con = mysql_connect(localhost, username, userpw);
$selectdb = mysql_select_db(dbname, $con);
//■■■■■■■↓↓↓↓質問の本題:ここの部分をどう記述すればいいですか?
if ($_POST["exec"] != "") {
$sql = "update mytable set myCheck = ?????? where myNo = ??????";
mysql_query($sql, $con);
}
//■■■■■■■ここまで
$sql = "select * from mytable";
$rst = mysql_query($sql, $con);
$recmax = mysql_num_rows($rst);
$body .= "<table border=\"1\">\n";
$body .= "\t<tr>\n";
$body .= "\t\t<th>出席番号</th>\n";
$body .= "\t\t<th>チェック</th>\n";
$body .= "\t\t<th>氏名</th>\n";
$body .= "\t</tr>\n";
for ($recnum = 0; $recnum < $recmax; $recnum++) {
$col = mysql_fetch_array($rst);
$body .= "\t<tr>\n";
$body .= "\t\t<td><input type=\"text\" name=\"myNo[]\" value=\"" . $col["myNo"] . "\" readonly></td>\n";
$value_myCheck = "";
if ($col["myCheck"] == '1') {
$value_myCheck = " checked";
}
$body .= "\t\t<td><input type=\"checkbox\" name=\"myCheck[]\" value=\"1\"" . $value_myCheck . "></td>\n";
$body .= "\t\t<td>" . $col["myName"] . "></td>\n";
$body .= "\t</tr>\n";
}
$body .= "</table>\n";
?>
<html>
<head></head>
<body>
<form method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
<?= $body ?>
<input type="submit" name="exec" value="チェック状態をDBに登録する">
</form>
</body>
</html>
No.2ベストアンサー
- 回答日時:
手順は2つ。
まず、全員のチェックをはずします。
$sql = "update mytable set myCheck =0";
その次に、値を受け取ったものだけチェックをします
$myChecks=implode(",",$myCheck);
$sql = "update mytable set myCheck =1 WHERE myNo in ({$myChecks})";
yamabejpさん、いつもお世話になっております。
大変参考になるご回答ありがとうございます。
> 手順は2つ。
> まず、全員のチェックをはずします。
なるほど!ものすごい目からウロコです。
> その次に、値を受け取ったものだけチェックをします
> $myChecks=implode(",",$myCheck);
> $sql = "update mytable set myCheck =1 WHERE myNo in ({$myChecks})";
なるほど、そういえば、SQL文でin(a,b,c)なる構文もありましたね。
それとimplode関数でカンマ区切りの文字列に仕立てて
in()内に展開させるわけですね。
ただ、結論的にこのまま組み込んでもだめでした。
> $myChecks=implode(",",$myCheck);
は、
$myNos=implode(",",$myNo);
のタイプミスですよね?そうですと、元質問に書いたように
MyNoはチェックの有無に関わらず全ての値が配列$myNoに格納されてしまうようです。
checkboxやめてradioにすれば解決しそうですが。。。
No.4
- 回答日時:
#3のフォローありがとうございます。
ソースを読み違えていました
$body .= "<td><input type='checkbox' name='myCheck[]' value='{ $col["myNo"]}'{$value_myCheck}></td>\n";
ですね。または
$body .= "<td><input type='checkbox' name='myCheck[{$col["myNo"]}]' value='1'{$value_myCheck}></td>\n";
でもフローを変えればいけそうです
yambejpさん、たびたびありがとうございました。
おかげさまで頭のスイッチを切り替えられました。
解決して大変助かりました。ありがとうございました。
No.3
- 回答日時:
yambejpさんの
> $myChecks=implode(",",$myCheck);
は意図的にあっているかと思います。
問題は、配列 $myCheck のデータ内容ではないでしょうか。
> $body .= "\t\t<td><input type=\"checkbox\" name=\"myCheck[]\" value=\"1\"" . $value_myCheck . "></td>\n";
これでは各々のチェックボックス判別に意味をなさないと思うので、
value を 1 ではなく $col["myNo"] をあてれば
チェックされた該当の番号のみが送られると思います。
atseさん、レスありがとうございました。
>チェックされた該当の番号のみが送られると
なるほど!
ようやく発想の転換ができました。
checkboxというだけで、1を送るという固定概念に
とらわれていました。
おかげさまで解決いたしました。ありがとうございました。
No.1
- 回答日時:
> このチェックボックスのOn/Offの状況を、SQLのUpdate文で一括登録したいのですが、うまくできません。
このUpdate処理で既存データが
Off→Onになる処理だけではなく
On→Offになったり
Off→Onにと、どちらの処理も行いたいということでしょうか?
この回答への補足
ryoumasanさん、前回質問でも大変お世話になりました。
>On→Offになったり
>Off→Onにと、どちらの処理も行いたいということでしょうか?
ご推察のとおりです。チェックしてあってもチェックが外れたら
0(またはNULLとか空白"")をUpdateしたいと思っております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQL+PHPでキーワード検索を...
-
フォームへの前回入力値をクリ...
-
extract($_POST)
-
明細行の複数ボタンの処理に関して
-
syntax error, unexpected '}' ...
-
入力した部分を表示させたまま...
-
チェックボックスのvalueを連結...
-
HTMLで前の画面に戻る時、入力...
-
table を配列で取得
-
Javascript→PHPに...
-
クレジットカード決済のPHP
-
入力フォーム→確認画面→送信画...
-
フォームボタンを押すたびに数...
-
HTMLのリンクをクリックするこ...
-
POSTデータのNAME属性をVALUEに...
-
リスト上のcheckboxのON/OFF状...
-
チェックボックスによる検索(...
-
検索時の選択内容を保持する方法
-
フォームでのリセットを使う方法
-
PHPでURLにジャンプするには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
検索時の選択内容を保持する方法
-
HTMLで前の画面に戻る時、入力...
-
同じページでフォームデータを...
-
PHPで、ボタンを押すと同じペー...
-
フォームボタンを押すたびに数...
-
フォームへの前回入力値をクリ...
-
DBの値をチェックボックスに反...
-
チェックボックスによる検索
-
HTMLフォームで複数選択のチェ...
-
フォームでのリセットを使う方法
-
エラーを元の画面に表示させるには
-
PHP ボタンが押されたら処理を...
-
チェックボックスの必須項目指定
-
【PHPチェック】ラジオボタンが...
-
POSTやGETの変数をフォーム無し...
-
PHPでクリックするたびに変数を...
-
POSTデータのNAME属性をVALUEに...
-
入力した部分を表示させたまま...
-
ラジオボタンをsessionで使いたい
-
<input type="hidden" >で配列...
おすすめ情報