チェックボックスを使った複数選択からデータベースへの登録

このQ&Aのポイント
  • チェックボックスを使った複数選択の処理を教えて下さい。
  • チェックボックスを使った複数選択の処理について、簡単な方法を教えてください。
  • データベースへの登録も含めて、チェックボックスを使った複数選択の処理をスムーズに行いたいです。
回答を見る
  • ベストアンサー

チェックボックスを使った複数選択からデータベースへの登録

チェックボックスを使った複数選択の処理を教えて下さい。 現在の処理は下記のようにしております。 00.phpの中のチェックボックスの記述です。複数選択してから01.phpに値を渡します。 <label> <input type="checkbox" name="working_days1" value="ド短期1日~OK"> ド短期1日~OK</label> <label> <input type="checkbox" name="working_days2" value="週2、3日程度"> 週2、3日程度</label> <label>     <input type="checkbox" name="working_days3" value="月~金曜日"> 月~金曜日</label> <br> <label> <input type="checkbox" name="working_days4" value="土日祝日のみ"> 土日祝日のみ</label> <label> <input type="checkbox" name="working_days5" value="毎日オールフリー"> 毎日オールフリー</label> 00.phpから01.phpへPOSTでデータを渡します。 <? $working_days1 = htmlspecialchars($_POST["working_days1"]); $working_days2 = htmlspecialchars($_POST["working_days2"]); $working_days3 = htmlspecialchars($_POST["working_days3"]); $working_days4 = htmlspecialchars($_POST["working_days4"]); $working_days5 = htmlspecialchars($_POST["working_days5"]); 各変数の中を確認してチェックするかどうかへ決め、変数に格納します。 if($working_days1 == "ド短期1日~OK" ){$d01 = "checked";} if($working_days2 == "週2、3日程度"){$d02 = "checked";} if($working_days3 == "月~金曜日"){$d03 = "checked";} if($working_days4 == "土日祝日のみ" ){$d04 = "checked";} if($working_days5 == "毎日オールフリー"){$d05 = "checked";} ?> 変数に格納されたチェックを実行してチェック済みとします。 <label> <input type="checkbox" name="working_days1" value="ド短期1日~OK" <?php echo $d01 ?>> ド短期1日~OK</label>  <label> <input type="checkbox" name="working_days2" value="週2、3日程度" <?php echo $d02 ?>> 週2、3日程度</label> <label>     <input type="checkbox" name="working_days3" value="月~金曜日" <?php echo $d03 ?>> 月~金曜日</label> <label> <input type="checkbox" name="working_days4" value="土日祝日のみ" <?php echo $d04 ?>> 土日祝日のみ</label> <label> <input type="checkbox" name="working_days5" value="毎日オールフリー" <?php echo $d05 ?>> 毎日オールフリー</label> こんな感じでチェックされた項目の確認をした後で、内容をMYSQLのデータベースに登録をしたいのですが、 データベースへの登録も含めて、一連の流れの中で、配列を利用して、もっと簡単なよい方法が ないか御指導いただけませんでしょうか? データベースへの登録も配列に格納しないとworking_dayというテーブルしか用意をしていないので その中にどのように格納して、また取り出しをすればよいかわかりません。 どうぞ超初心者レベルでのご指導をお手間ですが、よろしくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 条件 参考まで。

nicolemen
質問者

お礼

本当に詳しくご指導をして下さって、ありがとうございます。 よく内容を理解することができました。 特に文字でデータベースに登録する必要はないので、 そのままいこうと思いました。 でも文字の場合ならどうかとか分かりやすく教えて頂き よく分かりました。他でも悩んでいたことが一気に解決できました。 ありがとうございます。

その他の回答 (1)

回答No.1

別に質問者さんのように日本語の値を入れても構わないのですが、チェックボックスの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デス。 参考まで。

nicolemen
質問者

お礼

ありがとうございます。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なのでしょうか? 度々申し訳ありません。御指導をお願い致します。

関連するQ&A

  • チェックボックスで複数選択する方法教えて下さい

    いつもありがとうございます。 00.PHPというファイルにチェックボックスを配置して複数選択し 同じ00.phpにPOSTで情報送り、表示させたいのですが、 下記の記述では「Array」としか表示されません。 検索結果を最終的にはMYSQLにデータ登録をしたいのですが うまくいきません。御指導お願いします。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>無題ドキュメント</title> </head> <body> <? echo $_POST["working_days"] ?> <form action="00.php" method="post">  <label>  <input type="checkbox" name="working_days[1]" value="1"> ド短期1日~OK <input type="checkbox" name="working_days[2]" value="2"> 週2、3日程度  <input type="checkbox" name="working_days[3]" value="3"> 月~金曜日 <input type="checkbox" name="working_days[4]" value="4"> 土日祝日のみ <input type="checkbox" name="working_days[5]" value="5"> 毎日オールフリー</label>      <input type="submit" name="Submit" value="登録"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • Mysqlの配列のデータをチェックボックスで表示させる方法を教えて下さい。

    Mysqlにチェックボックスからのデータとして「0,1,3」というように 配列を登録しました。 それを今度、phpで呼び出して、ホームページ上に表示させる方法を 教えて下さい。 $labels = array("ド短期1日~OK", "週2、3日程度", "月~金曜日","土日祝日のみ", "毎日オールフリー"); データベースのテーブル名は「job」フィールド名は「working_days」です。 この配列のデータを元にチェックボックスに <label><input type="checkbox" name="working_days[]" value="0" checked >ド短期1日~OK</label> <label><input type="checkbox" name="working_days[]" value="1" checked >週2、3日程度</label> <label><input type="checkbox" name="working_days[]" value="2" >月~金曜日</label> <label><input type="checkbox" name="working_days[]" value="3" checked >土日祝日のみ</label> <label><input type="checkbox" name="working_days[]" value="4" >毎日オールフリー</label> というようにする方法を御指導頂けませんでしょうか。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • チェックボックスの初期選択と選択保持

    複数のチェックボックスのうちどれかを初期選択させ、ボタン押下後は選択保持をさせたいです。 片方のみならできるのですが、どなたかご教授いただけるとうれしいです。 現在のソースはこんな感じになっていて選択したものの保持はできるのですが、初期選択ができていません。よろしくおねがいします。 <html> <body> <form name="form" method="post"> <?php test1() ?> test1 <?php test2() ?> test2 <?php test3() ?> test3<br><br> <input type="submit" name="button" value="button"> </form> <?php function test1(){ if ($_POST['test1']){ echo "<input type=\"checkbox\" name=\"test1\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test1\">"; } } function test2(){ if ($_POST['test2']){ echo "<input type=\"checkbox\" name=\"test2\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test2\">"; } } function test3(){ if ($_POST['test3']){ echo "<input type=\"checkbox\" name=\"test3\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test3\">"; } } ?> </body> </html>

    • 締切済み
    • PHP
  • 配列をデータベースに登録する方法を教えて下さい

    いつもありがとうございます。 前回質問させて頂いて、いいところまで行ったと思ったのですが、 どうもその後暗礁に乗り上げて困っております。 どうか御指導をお願いします。 01.php内に下記の記述をして、チェックボックスで複数選択したデータを02.phpにPOSTで渡して それをそのままMysqlに登録したいのですが、どうもうまくいきません。 $labels = array("ド短期1日~OK", "週2、3日程度", "月~金曜日","土日祝日のみ", "毎日オールフリー"); if(is_array($_POST["working_days"] )){ $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++; } } 理想としては、Mysqlのテーブル「working_days」には、「0,3,5」というように登録され それを登録されたかどうか確認する画面には、 「"ド短期1日~OK", "月~金曜日", "毎日オールフリー"」 というように表示をさせたいのですが、 まずは、 データベースに登録する際に $working_days = ($_POST["working_days"]); $sql = "insert into job (job_id, working_days, job_persons)values ('" . $job_id . "','" . $working_days . "','" . $_POST["job_persons"] . "')"; とするとworking_daysのところに「Array」と表示されて「0,3,5」と表示されない。 それとその数字を元に内容を表示させたいのですが、それはそこまでまだ行きません。 どうかご指導をお願いします。

    • 締切済み
    • PHP
  • 配列の複数の値のデータベースへの登録方法教えて下さい。

    お世話になります。 チェックボックスの値を複数選択した値をデータベースに登録する方法を教えて下さい。 01.php内の下記のチェックボックスの値からチェックされたデータを02.phpにPOSTで値を渡しMysqlに登録したいのですが どのように考えたらよいかわかりません。どうぞご指導をお願いします。 $labels = array("ド短期1日~OK", "週2、3日程度", "月~金曜日","土日祝日のみ", "毎日オールフリー"); if(is_array($_POST["working_days"] )){ $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++; } イメージとしては、正規化ということを以前に教えて頂きましたので、 テーブル「working_days」 フィールド「job_id」「day_id」 ------------------- job_id day_id ------------------- c105 0 c105 1 c105 3 というように登録をさせたいと思うのですが、わかりません。初歩的なこととは思いますが どうぞよろしくお願いします。 02.php $labels = array("ド短期1日~OK", "週2、3日程度", "月~金曜日","土日祝日のみ", "毎日オールフリー"); if(is_array($_POST["working_days"] )){ $i=0; foreach($labels as $label){ $sql = "insert into working_days(job_id, day_id)values ('" . $job_id . "','" . $i . "')"; $res=mysql_query($sql); $i++; } }

    • ベストアンサー
    • PHP
  • 複数のチェックボックスをチェックしたい

    質問させてください。 複数のチェックボックスを項目別に全てチェックするようなjqueryの書き方をご教授いただきたいです。 <table> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />a</li> <li><input type="checkbox" name="" value="" />b</li> <li><input type="checkbox" name="" value="" />c</li> <li><input type="checkbox" name="" value="" />d</li> </td> </tr> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />e</li> <li><input type="checkbox" name="" value="" />f</li> <li><input type="checkbox" name="" value="" />g</li> <li><input type="checkbox" name="" value="" />h</li> </td> </tr> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />i</li> <li><input type="checkbox" name="" value="" />j</li> <li><input type="checkbox" name="" value="" />k</li> <li><input type="checkbox" name="" value="" />l</li> </td> </tr> </table> 上記のようにそれぞれの項目に「まとめてチェック」のチェックボックスがあり、 そこに該当するチェック項目は全てチェックorチェックを外す っという挙動の実装を考えています。 jqueryでやりたいのですが、javascript、jqueryがかなり苦手でいまいちいきません。 ググって $(function(){ $('#all').click(function(){ if(this.checked){ $('#check input').attr('checked','checked'); }else{ $('#check input').removeAttr('checked'); } }); }); このソースを見つけたのですが、これだと一つの項目でしか実装できず 項目分このjqueryを書くのも余り良い書き方だと思えません。 どなたか、ご教授お願いいたします。

  • チェックボックスからデータベースへ複数書き込み

    こんにちは。 現在アンケートサイトを作成しているのですが、チェックボックスを利用した質問の複数選択した回答をデータベースに登録できません。 htmlやphp、PostgreSQLに詳しい方指摘お願いします。 ※sample.html <form method="post" action="sample.php"> <b>7.あなたはどのような資格を持っていますか?</b><br> <input type="checkbox" name="sikaku[]" value="1" checked>ITパスポート <input type="checkbox" name="sikaku[]" value="2">漢字検定3級以上 <input type="checkbox" name="sikaku[]" value="3">英語検定3級以上 <input type="checkbox" name="sikaku[]" value="4">自動車運転免許 <input type="checkbox" name="sikaku[]" value="5">簿記 <input type="checkbox" name="sikaku[]" value="6">宅建 <input type="checkbox" name="sikaku[]" value="7">TOEIC600点以上 <input type="checkbox" name="sikaku[]" value="8">その他<br><br> <input type="submit" name="OK" value="OK"> </form> ※sample.php <?php //htmlから"sikaku"を取得 $sikaku = $_REQUEST["sikaku"]; //dbに接続・dbに書き込みSQL文 $dbconn = pg_connect ("dbname=****** user=********"); $result = pg_query ($dbconn, urldecode("insert into sample03 values('$sikaku');")); //接続を閉じる pg_close($dbconn); ?> ※PostgreSQL(table : sample03) //テーブル作成 ********=> create table sample03( ********(> 資格 int); CREATE TABLE //権限 ********=> grant select on sample03 to ********; GRANT //テーブルの表示 ********=> select * from sample03; 資格 ------ (0 rows)

  • チェックボックスの内容が送信出来ません。

    PHPのメールフォームにチェックボックスを追加しましたがうまく送れず頭を抱えています。 お力をお貸しください。 必要だと思われるソースです。 inquiry.html <form action="check_inquiry.php" method="POST"> <p><label for="title">お名前:</label> <input type="text" name="title" size="60"> </p> <p><INPUT type="checkbox" name="check[]" value="資料請求" />資料請求<INPUT type="checkbox" name="check[]" value="至急" />至急<INPUT type="checkbox" name="check[]" value="質問" />質問</p> <br /> <p><label for="massage">メッセージ:</label></p> <p><textarea name="message" cols="50" rows="20"></textarea></p> <p><input type="submit" value="内容の確認"></p> </form> check_inquiry.php <?php $title = htmlspecialchars($_POST['title'], ENT_QUOTES); $message = htmlspecialchars($_POST['message'], ENT_QUOTES); $m_check = $_POST['check']; ?> ■内容を確認してください。 <br> <form action="send_inquiry.php" method="POST"> <input type="hidden" name="title" value="<?php echo $title; ?>" /> <input type="hidden" name="message" value="<?php echo $message; ?>" /> <input type="hidden" name="check" value="<?php for($i=0; $i<sizeof($m_check); $i++){ echo "【${m_check[$i]}】"; } ?>" /> <br /> お名前: <br /> <?php echo $title; ?> <br /> 問い合わせ内容: <?php for($i=0; $i<sizeof($m_check); $i++){echo "【${m_check[$i]}】"; }; ?> <br /> メッセージ詳細: <br /> <?php // 改行部分にBRタグを埋め込む echo nl2br($message); ?> <br /> <input type="submit" value="お問い合わせ内容の送信"> </form> send_inquiry.php <?php $title = htmlspecialchars($_POST['title'], ENT_QUOTES); $message = htmlspecialchars($_POST['message'],ENT_QUOTES); $m_check = $_POST['check']; //日本語UTF8 mb_language('ja'); mb_internal_encoding('UTF8'); //自動送信<送信元のアドレス $name = '自動送信'; $email = 'メールアドレス'; $header = 'From: '. mb_encode_mimeheader($name) . '<' . $email .'>'; // メール送信 $result = mb_send_mail($email, $title, $message, $header, $m_check); //メール送信の確認 if ($result) { // メール送信の成功 echo '■管理人へ送信しました。'; } else { // メール送信の失敗 echo '■管理人への送信に失敗しました。'; } ?> チェックボックスにチェックを入れないと送信出来ますが チェックを入れると送信に失敗します。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • チェックボックスのうちひとつでもチェックがなければエラー

    チェックボックスが複数個(5~6個)あります。 hajime.html <form action="niban.php" method="post"> <input type="checkbox" value="A" name="CHK1" /> <input type="checkbox" value="B" name="CHK2" /> <input type="checkbox" value="C" name="CHK3" /> <input type="checkbox" value="D" name="CHK4" /> <input type="checkbox" value="E" name="CHK5" /> <input type="checkbox" value="F" name="CHK6" /> </form> ●このA~Fのうち、ひとつでもチェックされていなければ チェックしてください。とエラー表示させたいのですが… ●次のページではこのようにデータを受取していします。 niban.php// フォームの値取得は下記のように行っています。 if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $v = addslashes($v); $$k = $v; } } else { exit(); } $ErrFlg = 0;(エラーの時は$ErrFlgを1にします) ●エラー構文のサンプル↓ if ($name == "" ) { echo "<p>名前を入力してください。"; $ErrFlg = 1; } どうぞお力をおかしください

    • 締切済み
    • PHP
  • チェックボックスで選択したものがINSERTできません。

    <input type="checkbox" name="color[]" value="1" checked>赤 <input type="checkbox" name="color[]" value="2" >青 <input type="checkbox" name="color[]" value="3" >黄 <input type="checkbox" name="color[]" value="4" >緑 をPOSTで送ってPHPで $color_arr=Array(1=>"赤",2=>"青",3=>"黄",4=>"緑"); $color=$_POST["color"]; $str_color=""; foreach ($color as $key => $value){ if($str_color!="") $str_color.=","; $str_color.=$color_arr[$value]; } $html = str_replace('_%color%_', $str_color, $html); として追加内容確認画面で <input type="hidden" name="color" value="_%color%_"> _%color%_ として、チェックしたものを 赤,黄のように表示させて「OK」ボタンを押して PHPでINSERTするんですが、 mysql_query('insert into table1(name,color) values("'.$_POST['name'].'","'.$_POST['color'].'")'); としても空白のままです。nameはちゃんと入ってます。 テーブルは name varchar(50) color char(1) です。

    • ベストアンサー
    • PHP

専門家に質問してみよう