チェックボックスの複数項目をDBにinsertしたい

このQ&Aのポイント
  • チェックボックスの複数項目をDBにインサートする方法がわからない。
  • プログラミング初心者ですので、コードが正しいかどうかわかりません。
  • チェックボックスで選択した科目がうまくDBに挿入されていません。
回答を見る
  • ベストアンサー

チェックボックスの項目をDBにinsertしたい

チェックボックスの複数項目をDBにインサートしたいのですが、DBのフィールドを見ると、チェックボックスの値だけ空になってしまいます。 プログラミング初心者のため、基本的なところでつまずいている可能性も高いのですが、正しいコードがわかる方がいらっしゃいましたらご教授ください。 よろしくお願いします。 ■DBの構造 以下のようなフィールド構造にしており、一人につき1行でデータを持ちたいと思っています。 フィールド   name/ mail/comment/kokugo/sugaku/rika/syakai/eigo/・・・ ● 実際のデータの持ち方(以下のようにしたいです。) 例 太郎/ taro@/hello/ 国語/数学/ / /   次郎/ jiro@/ nice/ / 数学/ /社会/ 英語 ※太郎は、国語と数学をチェックボックスで選択 ※次郎は、数学と社会と英語をチェックボックスで選択 ■チェックボックス画面html(一部抜粋) ---- <form action="regist.php" method="post"> 名前:<br /> <input type="text" name="name" size="30" value="" /><br /> メールアドレス:<br /> <input type="text" name="mail" size="30" value="" /><br /> コメント:<br /> <textarea name="comment" cols="30" rows="5"></textarea><br /> 科目<br /> <form name="kamoku" method="post" action="regist.php"> 国語<input type="checkbox" name="kokugo" value="国語"> 数学<input type="checkbox" name="sugaku" value="数学"> 理科<input type="checkbox" name="rika" value="理科"> 社会<input type="checkbox" name="syakai" value="社会"> 英語<input type="checkbox" name="eigo" value="英語"> <br /> ----- ■phpのファイル(regist.php) ※該当部分だけ記述させていただきます。 ---- <?php // $checkboxの中身は配列 $checkbox = $_REQUEST["chk"]; ?> <html> <head> <title>DB登録練習</title> </head> <body> // 選んだ科目を画面に表示させる <tr> <td>科目</td><td><?php for($i=0; $i<sizeof($checkbox); $i++){ print "${checkbox[$i]}<br>"; } ?></td> </tr> // DB登録部分 <?php $name = $_REQUEST['name']; $mail = $_REQUEST['mail']; $comment = $_REQUEST['comment']; $kokugo = $_REQUEST['kokugo']; $sugaku = $_REQUEST['sugaku']; $rika = $_REQUEST['rika']; $syakai = $_REQUEST['syakai']; $eigo = $_REQUEST['eigo']; $del_flag = $_REQUEST['del_flag']; $reg_date = $_REQUEST['reg_date']; $result = mysql_query("INSERT INTO DBpractice(name, mail, comment, kokugo,sugaku,rika, syakai, eigo,del_flag,reg_date) VALUES('$name', '$mail', '$comment','$kokugo','$sugaku','$rika','$syakai','$eigo','0', now())", $conn); if (!$result) { exit('データを登録できませんでした。'); } ---- チェックボックスで選択した複数科目をブラウザ上で表示させるところは上手くできるのですが、DBに挿入するときのみ、科目のみがうまく入りません。(他の項目は挿入されています。) よろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
回答No.1

$checkbox = $_REQUEST["chk"]; の前に、 print_r($_POST); と書いて、どんな風に値が渡されているのか確認しましょう。 解決方法は見えてくると思いますよ。

tanakataro2010
質問者

お礼

おっしゃるとおり、手を動かしてみたら何とか解決できました。 ありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

解決しているのであればよいですが、見た限り 国語<input type="checkbox" name="chk[]" value="国語"> 数学<input type="checkbox" name="chk[]" value="数学"> 理科<input type="checkbox" name="chk[]" value="理科"> 社会<input type="checkbox" name="chk[]" value="社会"> 英語<input type="checkbox" name="chk[]" value="英語"> という処理なのではないですか?

tanakataro2010
質問者

お礼

配列で持つとうまくデータを処理できなかったため、 結局、nameは一つ一つ個別で持つことにしました。 回答ありがとうございました。 ※解決ステータスに変更するのを忘れておりました。失礼しました。

関連するQ&A

  • チェックボックスの戻り

    チェックボックスのvalue値に数字を入れてPOSTしています。 DB登録の前にその値を足し算してDBに登録しています。 <input type="checkbox" name="cb[0]" value="1"> <input type="checkbox" name="cb[1]" value="2"> <input type="checkbox" name="cb[2]" value="4"> <input type="checkbox" name="cb[3]" value="8"> <input type="checkbox" name="cb[4]" value="16"> ・・・のようにしています。DBの値を読み取ってcheckedを付ける際はどのようにしたら効率よく処理できるでしょうか?switchを使うとすごくチェックボックスの数が増えると厄介です。困っています。教えてください。

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

    こんにちは。 現在アンケートサイトを作成しているのですが、チェックボックスを利用した質問の複数選択した回答をデータベースに登録できません。 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)

  • チェックボックスにチェックしたファイルだけをダウンロードできるようにしたい

    サーバーにpdfファイルを10個保存しています。 HTMLページでチェックボックスにチェックを入れたpdfだけを ダウンロードできるようにURL入りの返信メールを自動的に送りたい のですが、やり方がわかりません。 どなたか詳しい人がおられましたら、教えていただけますでしょうか。 一応チェックボックスの過去の回答を見たのですが見当たりません。 (全て見れたわけではないですが) チェックボックス表示までは以下のところまでできたのですが。 よろしくお願いします。 <form> <input type="checkbox" name="グループ1" value="項目1">Apdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目2">Bpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目3">Cpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目4">Dpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目5">Epdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目6">Fpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目7">Gpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目8">Hpdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目9">Ipdf<br><br><br><br> <input type="checkbox" name="グループ1" value="項目10">Jpdf<br><br><br><br> </form>

  • ある複数のフィールドに特定の数字が存在する回数を得たい

    複数のフィールドで、指定した数字が入ってる回数を得るSQLの書き方が分かりません。 具体例を書きますと、フィールド名がそれぞれ id,name,kokugo,sugaku,shakai,rika,eigo,created_date となっており、入ってるデータが 1,YamadaTarou,80,100,100,74,100,2009-05-27 となってる場合、このうち「kokugo,sugaku,shakai,rika,eigo」のフィールドに100が入ってる回数を得たいのです(具体例の場合、3を得たい)。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • チェックボックスによる検索(複数チェックの場合)

    プログラム超初心者です。色々なサイトを検索し参考にしたのですがどうしても結果が得られないため投稿させていただきました。(似たようなものは多かったのですがわかりませんでした。) チェックボックスにて複数チェックされる可能性があるものをMYSQLより検索をかけ結果を表示したいと思っております。 地域:□北海道、□東北、□関東、□北陸、□中部、 ジャンル:□イタリアン、□アジアン料理、□洋食、□すべて 以上にチェックをいれてもらったものに対し検索結果画面をだす予定です。 検索をかけるhtml画面は以下のように致しました。 <form method="POST" action="search.php"> <input name="area[]" type="checkbox" value="0"/>北海道<br> <input name="area[]" type="checkbox" value="1"/>東北<br> <input name="area[]" type="checkbox" value="2"/>関東<br> <input name="area[]" type="checkbox" value="3"/>北陸<br> <input name="area[]" type="checkbox" value="4"/>中部<br> <input name="genre[]" type="checkbox" value="a"/>イタリアン<br> <input name="genre[]" type="checkbox" value="b"/>アジア料理<br> <input name="genre[]" type="checkbox" value="c"/>洋食<br> <input name="genre[]" type="checkbox" value="g"/>すべて<br> <input type="submit" name="bottun1" value="入 力"> PHPで$変数名a = $_POST["area"];と$変数名b = $_POST["genre"]; とし配列 foreach関数を使うのでは・・・とまで考えたのですがその後どうすればよいかわかりません。こんなにわからない状態でお伺いするのは恥ずかしいのですがお知恵を頂きたく投稿させていただきました。 お忙しいかと思いますがどうか宜しくお願いいたします。

    • ベストアンサー
    • 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
  • ラジオボタンとチェックボックスの計算について

    ラジオボタンとチェックボックスで選択して、その合計を表示させたいのですが、合計の最高は50になる用に作ったのですが、9点にしかなりません。 私が考えるに、<script language="JavaScript">~</script>の間が間違っていると思うのですがどうでしょうか? 皆様ご教授の程お願いします。 <script language="JavaScript"> <!-- // 項目の合計を計算 function ttlValue() { chn = 10; // ラジオボタンとチェックボックスの総数 ttl = 0; for(i=0; i<chn; i++) { if(document.nForm.elements[i].checked) { ttl += eval(document.nForm.elements[i].value); } } document.nForm.result.value = ttl; } //--> </script> </head> <body alink="#000000" bgcolor="#f0f8ff" link="#00ffff" text="#000000" vlink="#ff0000"> <br> それぞれの項目で該当する回答を1つずつ選択して下さい。 <form name="nForm">項目1<br> <input name="ch1" value="3" checked="checked" type="radio">a<br> <input name="ch1" value="2" type="radio">b<br> <input name="ch1" value="1" type="radio">c<br> <input name="ch1" value="0" type="radio">d<br> <br> 項目2<br> <input name="ch2" value="3" checked="checked" type="radio">a<br> <input name="ch2" value="2" type="radio">b<br> <input name="ch2" value="1" type="radio">c<br> <input name="ch2" value="0" type="radio">d<br> <br> 項目3<br> <input name="ch3" value="3" checked="checked" type="radio">a<br> <input name="ch3" value="2" type="radio">b<br> <input name="ch3" value="1" type="radio">c<br> <input name="ch3" value="0" type="radio">d<br> <br> 項目4<br> <input name="ch4" value="1" checked="checked" type="radio">a<br> <input name="ch4" value="0" type="radio">b<br> <br> 項目5<br> <input name="ch5" value="1" checked="checked" type="radio">a<br> <input name="ch5" value="0" type="radio">b<br> <br> オプションがあれば選択して下さい。(複数選択可)<br> <input name="bx1" value="1" type="checkbox">1<br> <input name="bx1" value="1" type="checkbox">2<br> <input name="bx1" value="1" type="checkbox">3<br> <input name="bx1" value="1" type="checkbox">4<br> <input name="bx1" value="1" type="checkbox">5<br> <input name="bx1" value="1" type="checkbox">6<br> <input name="bx1" value="1" type="checkbox">7<br> <input name="bx1" value="1" type="checkbox">8<br> <input name="bx1" value="1" type="checkbox">9<br> <input name="bx1" value="1" type="checkbox">10<br> <input name="bx1" value="1" type="checkbox">11<br> <input name="bx1" value="1" type="checkbox">12<br> <input name="bx1" value="1" type="checkbox">13<br> <input name="bx1" value="1" type="checkbox">14<br> <input name="bx1" value="1" type="checkbox">15<br> <input name="bx1" value="1" type="checkbox">16<br> <input name="bx1" value="1" type="checkbox">17<br> <input name="bx1" value="1" type="checkbox">18<br> <input name="bx1" value="1" type="checkbox">19<br> <input name="bx1" value="1" type="checkbox">20<br> <input name="bx1" value="1" type="checkbox">21<br> <input name="bx1" value="1" type="checkbox">22<br> <input name="bx1" value="1" type="checkbox">23<br> <input name="bx1" value="1" type="checkbox">24<br> あなたの獲得したメダルは何色?<br> <select name="ch2"> <option value="0" selected="selected">なし</option> <option value="5">金メダル</option> <option value="3">銀メダル</option> <option value="1">銅メダル</option> </select> <br> <br> メダル獲得まで何年かかりましたか?<br> 項目6<br> <input name="ch6" value="10" checked="checked" type="radio">20年以上<br> <input name="ch6" value="5" type="radio">19年~10年<br> <input name="ch6" value="3" type="radio">9年~5年<br> <input name="ch6" value="1" type="radio">4年~3年<br> <input name="ch6" value="0" type="radio">2年未満<br> <br> <input value="合計金額を計算" onclick="ttlValue()" type="button"><br> <br> 合計<input name="result" size="10" type="text"> </form> <br>

  • 複数のチェックボックスの一括チェック/解除などのコントロール

    チェックボックスである、1月~12月の値を検索条件としてPHPに渡します。 その際、次のように動作するjavascriptをご教示下さい。よろしくお願い致します。 (1) 通年をチェックしたら、1月~12月もチェック(解除されたら全て解除) (2) 上半期をチェックしたら、1月~6月もチェック(〃) (3) 下半期をチェックしたら、6月~12月もチェック(〃) (4) 通年、上半、下半は、いずれかがチェックされている間、他はdisabledに。 チェックが外れたら、全てアクティブかつ全チェックが解除される状態に。 以上が妥当と思いますが、(4)にの仕様についてはより洗練いただければ誠に幸いです。 <html> <head> <script language="javascript"> </script> </head> <body> <form method="post" action="search.php" id="form1" name="form1"> <input type="checkbox" name="month[]" value="200501">2005年1月<br> <input type="checkbox" name="month[]" value="200502">2005年2月<br> <input type="checkbox" name="month[]" value="200503">2005年3月<br>          :(gooの文字数制限により略) <input type="checkbox" name="month[]" value="200510">2005年10月<br> <input type="checkbox" name="month[]" value="200511">2005年11月<br> <input type="checkbox" name="month[]" value="200512">2005年12月<br> <input type="checkbox" name="all" value="">通年<br> <input type="checkbox" name="1sthalf" value="">上半期のみ<br> <input type="checkbox" name="2ndhalf" value="">下半期のみ<br> <input type="submit" name="exec" value="検索"> </form> </body> </html>

  • checkbox 特定項目だけを、チェックするには

    こんにちは。いつもお世話になります。 checkbox内で、同じnameの中から特定のものだけ チェックさせるにはどうしたら良いでしょうか。 条件として、name='or52'の部分は変更出来ません。 <input type='button' value='A,B,Cだけを同時にチェック' onclick='checkAll();'> <form action='xxx.cgi' method='post' name='f1'> <input name='or5' type='checkbox' value='A'><br> <input name='or5' type='checkbox' value='B'><br> <input name='or5' type='checkbox' value='C'><br> <input name='or5' type='checkbox' value='D'><br> <input name='or5' type='checkbox' value='E'><br> <input name='or5' type='checkbox' value='F'><br> ......... </form> それで、こんなのをウェブから探してきました。 function checkAll() { for (i=0; i<7; i++) document.f1.elements["or52"+i].checked = true; } そして、同時にチェックしたいものだけ下記の様にしました。 <input name='or52' type='checkbox' value='A' id='or51'> <input name='or52' type='checkbox' value='B' id='or52'> <input name='or52' type='checkbox' value='C' id='or53'> 取りあえずできますが、エラーがでます。 「document.f1.elements["..."]は、objまたはnullではない!」 どうか教えて下さい。よろしくお願いします。

  • チェックボックス選択で(3つ)まで

    チェックボックス選択で(3つ)まで <input type="checkbox" name="fhobby" value="animation">アニメ <input type="checkbox" name="fhobby" value="game">ゲーム <input type="checkbox" name="fhobby" value="reading">読書 <input type="checkbox" name="fhobby" value="amusement">娯楽 <input type="checkbox" name="fhobby" value="comics">漫画 <input type="checkbox" name="fhobby" value="jogging">ジョギング<br> <input type="checkbox" name="fhobby" value="cycling">サイクリング <input type="checkbox" name="fhobby" value="shopping">ショッピング <input type="checkbox" name="fhobby" value="picture">絵画 <input type="checkbox" name="fhobby" value="travel">旅行 <input type="checkbox" name="fhobby" value="others">その他

    • ベストアンサー
    • HTML