• ベストアンサー

チェックボックスで選択したものが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
  • 回答数3
  • ありがとう数2

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

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

>$html = str_replace('_%color%_', $str_color, $html); >として追加内容確認画面で ><input type="hidden" name="color" value="_%color%_"> >_%color%_ のあたりが何をやりたいかよくわかりませんが・・・ SQL文を先につくってから表示すればエラー状況がわかると思います。 $sql='insert into table1(name,color) values("'.$_POST['name'].'","'.$_POST['color'].'")'; mysql_query($sql); print $sql; なおここできちんとSQL文ができているなら >color char(1) が微妙に問題あるかも。もう少し大きな値、たとえばchar(10)とか でやってみては?

mjnike
質問者

補足

>$html = str_replace('_%color%_', $str_color, $html); >として追加内容確認画面で ><input type="hidden" name="color" value="_%color%_"> >_%color%_ >のあたりが何をやりたいかよくわかりませんが・・・ ここはただ確認画面に $html = str_replace('_%name%_', $_POST["name"], $html); で値を置換して確認画面を純粋なhtmlとして入力した値を表示させたいだけです。特にこれといって意味は無いのかも知れません。 $sql='insert into table1(name,color) values("'.$_POST['name'].'","'.$_POST['color'].'")'; mysql_query($sql); print $sql; としたところ、やっぱりcolorだけ値が入ってませんでした。 values("山田太郎","")

その他の回答 (2)

回答No.3

mysql_query('insert into table1(name,color) values("'.$_POST['name'].'","'.$_POST['color'].'")'); この記述部分の「$_POST['color']」の中身の値について、コレは一つもチェックが入っていない場合は、空となり、何か一つでも値が入っていれば、配列となりますので、正常に値が取得できません。 なので、 implode(',', $_POST['color']); とでもすれば値が挿入されたりしますが テーブルの設計上、colorフィールドは、1バイトしか値を挿入できませんので、それも出来ません。 設計自体がおかしいのだと思いますが、テーブルの設計と、フォームの設計のどちらが正しいのか、一度何をやりたいのかを確認して整理してはいかがでしょうか。

mjnike
質問者

補足

>implode(',', $_POST['color']); を入れたところちゃんと入りました。 char(1)も直しました。 数値で登録する場合はどのあたりを直すべきなんでしょう。 最初のHTMLからでしょうか?

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.2

書いてある情報では、流れが良く判りません・・・ 最後にある「color」の値は日本語が入っているのでは? それが1文字のエリアへ格納するなら、正しく設定されないです。 もし、colorが日本語では無くチェックボックスの場合でもおかしいです。 チェックボックスは複数選択できるから、配列の情報を1文字のエリアに格納できません。

mjnike
質問者

補足

確かに日本語で入ってました。 char(1)が完全におかしかったみたいです。 でもDBに登録するときは数値のほうがいいんですよね?

関連するQ&A

  • チェックボックスのデータの受け取り方について

    以下のようなチェックボックスを作ったとき、 test.phpではどうやって受け取ればよいのでしょうか? nameがそれぞれ違う場合は分かるのですが... 教えてください。 <form method="POST" action="test.php"> <input type="checkbox" name="color" value="red">赤</input> <input type="checkbox" name="color" value="blue">青</input> <input type="checkbox" name="color" value="white">白</input> <input type="checkbox" name="color" value="black">黒</input> <input type="submit" value="送信" > </form>

    • ベストアンサー
    • PHP
  • checkboxの初期値設定(postの時)

    php初心者です。 以下はどのようにやればいいのでしょうか。 色々調べたのですが、考え方がわからず困っています。 (やりたい事) (1)入力画面(index.php)にチェックボックス (赤、青、黄、緑)つくる (2)確認画面(confirm.php)にpostで飛ばす (3)修正があれば、index.phpに戻るが、 チェックしたものが保持された状態で 戻る。 このような事をしたいのですが、以下で手が止まって しまいました。 ◆index.php <?php <form method="post" action="confirm.php"> <input type="checkbox" name="colors[]" value="赤">赤 <input type="checkbox" name="colors[]" value="青">青 <input type="checkbox" name="colors[]" value="黄">黄 <input type="checkbox" name="colors[]" value="緑">緑 <input type="submit" value="送る"> </form> ?> ◆confirm.php <?php  <form method="post" action="index.php">  foreach ($_POST['colors'] as $color){  echo $color ." /"; } <input type="submit" value="戻る"> </form> ?> これをどう加工していけばよいか、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 特定のチェックボックスをチェックするには

    特定のチェックボックス「白」を CHECKEDにする方法を教えて下さい。 #数と位置が変動するので配列は取得できません。 #「もしもcolorの値が白なら CHECKED」のような関数にしたい。 <INPUT TYPE="CHECKBOX" NAME="color" VALUE="おまかせ"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="白"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="ピンク"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="緑">

  • チェックボックス選択で(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
  • チェックボックスの全選択

    <input type="checkbox" name="chk" value=1> <input type="checkbox" name="chk" value=2> <input type="checkbox" name="chk" value=3> <input type="checkbox" name="chk" value=4> <input type="checkbox" name="chk" value=5> このように同一名称のチェックボックスに対して ボタンを押下された時全てのチェックボックスを チェックするJavaScriptの 書き方を教えて貰えないでしょうか

  • チェックボックスの初期選択と選択保持

    複数のチェックボックスのうちどれかを初期選択させ、ボタン押下後は選択保持をさせたいです。 片方のみならできるのですが、どなたかご教授いただけるとうれしいです。 現在のソースはこんな感じになっていて選択したものの保持はできるのですが、初期選択ができていません。よろしくおねがいします。 <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
  • チェックボックスで複数選択する方法教えて下さい

    いつもありがとうございます。 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
  • チェックボックスの戻り

    チェックボックスの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
  • チェックボックス等の扱い。

    http://oguchan.s4.xrea.com/language/php/ のサイトにて、 <FORM> <INPUT TYPE="TEXT" NAME="hoge" VALUE="1"> <INPUT TYPE="SUBMIT"> </FORM> は、phpスクリプト内で$hogeで参照でき、しかしそれは危険であるから、 register_globals を無効にしてこれをできなくする。とあります。 PHP4~もそういうように設定されていると聞きました。 しかし、チェックボックスで同じname、で異なるvalueをもつ複数のデータを扱うときに、 <input type="checkbox" name="delno[]" value="no1"> <input type="checkbox" name="delno[]" value="no2"> としたときに、 echo $_POST['delno'][0]; echo $_POST['delno'][1]; と参照できてしまうのですが、これはいいのですか?

    • ベストアンサー
    • PHP
  • チェックボックス 横並びに保存

    htmlファイルから、 <form action="./ppp.cgi" method="POST"> <table border="1"> <tr> <td> 好きな色(複数選択可):</td> <td> <input type="checkbox" name="color" value="white">白 <input type="checkbox" name="color" value="red">赤 <input type="checkbox" name="color" value="green">緑 <input type="checkbox" name="color" value="pink">桃色 <input type="checkbox" name="color" value="yellow">黄色 <input type="checkbox" name="color" value="purple">紫 <input type="checkbox" name="color" value="orange">橙色 <input type="checkbox" name="color" value="blue">青 <input type="checkbox" name="color" value="black">黒</td></tr> </table><br> <input type="submit" value=" 送信 "> <input type="reset" value=" クリア "> でデータを送信して、 ------------------------------------- #!/usr/bin/perl require './jcode.pl'; $file = "houkoku.txt"; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } open( WRITE, "+< $file" ); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); # タグ処理 $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/\t//g; $value =~ s/\r\n/\n/g; $value =~ s/\r/\n/g; $value =~ s/^\s+//; $value =~ s/\s+$//; $FORM{$name} .= (defined $FORM{$name}) ? "," . $value : $value; @value = $value; print WRITE"@value\n"; } foreach ( keys %FORM ) { if( $FORM{$_} eq '' ) { $FORM{$_} = '入力がありません'; } } if ( $FORM{'color'} eq '' ) { $FORM{'color'} = '入力がありません'; } print "Content-Type: text/html\n\n"; print <<END_HTML; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <center> <table border="1"> <td> あなたの好きな色</td> <td> $FORM{'color'}</td></tr> </table> </center> </body> </html> END_HTML exit; ---------------------------------- でデータを受け取って、houkoku.txtに書き込みをしたいのですが、 一応書き込みはされていますが、縦にデータが並んでいます。 横にカンマ仕切りで、white,yellow,redと保存するにはどうしたらよいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう