激凹みから立ち直る方法

<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)
です。

A 回答 (3件)

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

この回答への補足

>$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
    • good
    • 0

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



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

この回答への補足

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

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

補足日時:2009/10/27 10:25
    • good
    • 0

書いてある情報では、流れが良く判りません・・・


最後にある「color」の値は日本語が入っているのでは?
それが1文字のエリアへ格納するなら、正しく設定されないです。

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

この回答への補足

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

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

補足日時:2009/10/27 10:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!