こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

チェックボックスで選択したものが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)
です。

投稿日時 - 2009-10-26 17:06:32

QNo.5398333

すぐに回答ほしいです

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

>$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)とか
でやってみては?

投稿日時 - 2009-10-26 18:03:34

補足

>$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("山田太郎","")

投稿日時 - 2009-10-26 18:22:38

ANo.1

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

mysql_query('insert into table1(name,color) values("'.$_POST['name'].'","'.$_POST['color'].'")');

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

投稿日時 - 2009-10-27 01:08:25

補足

>implode(',', $_POST['color']);
を入れたところちゃんと入りました。
char(1)も直しました。

数値で登録する場合はどのあたりを直すべきなんでしょう。
最初のHTMLからでしょうか?

投稿日時 - 2009-10-27 10:25:51

ANo.2

書いてある情報では、流れが良く判りません・・・
最後にある「color」の値は日本語が入っているのでは?
それが1文字のエリアへ格納するなら、正しく設定されないです。

もし、colorが日本語では無くチェックボックスの場合でもおかしいです。
チェックボックスは複数選択できるから、配列の情報を1文字のエリアに格納できません。

投稿日時 - 2009-10-26 18:14:16

補足

確かに日本語で入ってました。
char(1)が完全におかしかったみたいです。

でもDBに登録するときは数値のほうがいいんですよね?

投稿日時 - 2009-10-27 10:24:59

あなたにオススメの質問