- ベストアンサー
チェックボックスを使った複数選択からデータベースへの登録
- チェックボックスを使った複数選択の処理を教えて下さい。
- チェックボックスを使った複数選択の処理について、簡単な方法を教えてください。
- データベースへの登録も含めて、チェックボックスを使った複数選択の処理をスムーズに行いたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>さてMySQLでの記述ですが、これはまだ試していないのですが、 >if(isset($_POST["working_days"][0]){ >foreach($_POST["working_days"] as $chkflg){ >$sql="insert into job(job_id, title, working_days)values >('" . $_POST["job_id"] . "','" . $_POST["title"] . "','" . $_POST["working_days"] . "')"; >というように記述するのでOKなのでしょうか? OKかどうかは分かりませんが、この場合の$chkflgはチェックボックスの中のチェックされたvalue値です。例えば0なら"ド短期1日~OK"に対応しますね。 データベースへの記録は文字列ではなく、整数のままで良いと言うならこのままでよいと思います(定型文字列であれば、対応数字をつくっておいてそのまま数字で記録の方が良い)。 なお、データベースへ登録する時そのまま$_POST値をSQL文に投入するとSQLインジェクションという脆弱性につながりますので、整形したりチェックする必要があります。 http://ja.wikipedia.org/wiki/SQL%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3 面倒でも、例えばMySQLならば $title = mysql_real_escape_string($_POST["title"]); のように整形する必要がありますね。ですから、例文であれば、 $sql="insert into job(job_id, title, working_days)values ('" . mysql_real_escape_string($_POST["job_id"] ). "','" . mysql_real_escape_string($_POST["title"]) . "','" . $chkflg. "')"; となります。 なお、別にチェックボクスの数字(value値)と文字列(ド短期1日~OKのような文字列)のテーブルを作っておけば、 例 create table checkbox_tb ( checkobx_id int(4), checkbox_name varchar(32), PRIMARY KEY (checkbox_id) ); SQL取得時に表示名も一緒に取得する事が出来るので便利です。 SELECT job.*,checkbox_tb.checkbox_name FROM job,checkbox_tb WHERE checkbox_tb.checkbox_id = job.working_days AND 条件 参考まで。
その他の回答 (1)
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
別に質問者さんのように日本語の値を入れても構わないのですが、チェックボックスのvalueなんかは通常は数字等にしておく方が便利です。また、チェックボックスは配列のまま送信する事が出来ます。配列の中でチェックされた値だけ送信されます。 00.php $labels = array("ド短期1日~OK", "週2、3日程度", "月~金曜日","土日祝日のみ", "毎日オールフリー"); //ラベルの配列 これをforeachでループしましょう。 $i=0; foreach($labels as $label){ echo "<label>\n<input type=\"checkbox\" name=\"working_days[]\" value=\"{$i}\"/>{$label}</label>"; $i++; } これにチェックを入れて送信すると、例えばvalue=0,3,4にチェックを入れて送信すると、POSTの値は次のようになります。 Array ( [working_days] => Array ( [0] => 0 [1] => 3 [2] => 4 ) ) 確認画面ではこれがあるかないかでチェックする必要がありますから、先ほどのループに$checkedと言う変数を加えて $i=0; foreach($labels as $label){ $checked = (ereg("[0-9]+",array_search($i,$_POST["working_days"])))? " checked":""; echo "<label>\n<input type=\"checkbox\" name=\"working_days[]\" value=\"{$i}\" {$checked} />{$label}</label>"; $i++; } というようにすればOKデス。 MySQLにはチェックされた値だけ格納、即ち、 if(isset($_POST["working_days"][0]){ foreach($_POST["working_days"] as $chkflg){ $sql = "INSERT INTO ....."; } } なんてすればOKデス。 参考まで。
お礼
ありがとうございます。00.php並びに01.phpは本当にうまく表示ができました。感謝致します。長い文もすっきりしましたし、他でも使えるのでとてもうれしいです。 さてMySQLでの記述ですが、これはまだ試していないのですが、 if(isset($_POST["working_days"][0]){ foreach($_POST["working_days"] as $chkflg){ $sql="insert into job(job_id, title, working_days)values ('" . $_POST["job_id"] . "','" . $_POST["title"] . "','" . $_POST["working_days"] . "')"; というように記述するのでOKなのでしょうか? 度々申し訳ありません。御指導をお願い致します。
お礼
本当に詳しくご指導をして下さって、ありがとうございます。 よく内容を理解することができました。 特に文字でデータベースに登録する必要はないので、 そのままいこうと思いました。 でも文字の場合ならどうかとか分かりやすく教えて頂き よく分かりました。他でも悩んでいたことが一気に解決できました。 ありがとうございます。