アプリ版:「スタンプのみでお礼する」機能のリリースについて

phpのフォームからmysqlのデータ登録についてお聞きしたいことがあります。

フォームで
<select name="test1">
<option value="">--</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="hoge1">
<option value="">--</option>
<option value="サッカー">サッカー</option>
<option value="野球">野球</option>
<option value="バスケ">バスケ</option>
</select>

<select name="test2">
<option value="">--</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="hoge2">
<option value="">--</option>
<option value="サッカー">サッカー</option>
<option value="野球">野球</option>
<option value="バスケ">バスケ</option>
</select>





これが10項目ぐらいあります。
これをデータ登録するときに空の値はデータを登録しないとしたいのですが、空の値でも登録されてしまいます。

queryは下記のようになっています。
$testquery = sprintf("INSERT INTO `testhoge` (`test`,`hoge`) VALUES
('$test1','$hoge1'),('$test2','$hoge2),('$test3','$hoge3'),('$test4','$hoge4'),
('$test5','$hoge5'),('$test6','$hoge6'),('$test7','$hoge7'),('$test8','$hoge8'),
('$test9','$hoge9'),('$test10','$hoge10')
");
}

test1とhoge1が1:サッカー。
test2とhoge2が2:野球。
test3とhoge3が1:バスケ。
(必ずしもtest項目の番号が123ではない。)
となり4項目以降は空の場合は3項目までが登録される。
10項目全部入力されれば全部登録される。
としたいのです。

どなたかおわかりの方がいらっしゃいましたらご教示お願いします。

A 回答 (5件)

selectのnameを工夫すると楽です



<?PHP
$test=$_REQUEST["test"];
$hoge=$_REQUEST["hoge"];
$vals="";
$sql="";
foreach((array) $test as $key=>$val){
if($val!=="" and $hoge[$key]!==""){
if($vals!=="") $vals.=",";
$vals.="('{$val}','{$hoge[$key]}')";
}
}
if($vals!==""){
$sql="INSERT INTO `testhoge` (`test`,`hoge`) VALUES".$vals;
}
print $sql;

?>
<form>
<select name="test[1]">
<option value="">--</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="hoge[1]">
<option value="">--</option>
<option value="サッカー">サッカー</option>
<option value="野球">野球</option>
<option value="バスケ">バスケ</option>
</select>
<select name="test[2]">
<option value="">--</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="hoge[2]">
<option value="">--</option>
<option value="サッカー">サッカー</option>
<option value="野球">野球</option>
<option value="バスケ">バスケ</option>
</select>
<input type="submit" value="go">
</form>
    • good
    • 0
この回答へのお礼

ご回答有難う御座います。

度重なるご質問で申し訳ないのですが、
ご教示いただいたコードをもとにフォームを作成してみましたが、データの登録までにたどりつかず頭が混乱してしまいました。

内容は
フォーム画面
<form>
<select name="test[1]">
<option value="">--</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="hoge[1]">
<option value="">--</option>
<option value="サッカー">サッカー</option>
<option value="野球">野球</option>
<option value="バスケ">バスケ</option>
</select>
<select name="test[2]">
<option value="">--</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="hoge[2]">
<option value="">--</option>
<option value="サッカー">サッカー</option>
<option value="野球">野球</option>
<option value="バスケ">バスケ</option>
</select>
<input type="submit" value="確認">

確認画面
$testtxt = $_REQUEST['test'];
$hogetxt = $_REQUEST['hoge'];

$_SESSION['testtxt'] = $testtxt;
$_SESSION['hogetxt'] = $hogetxt;

foreach((array) $_SESSION['testtxt'] as $key => $val){
if($val !== "" && $_SESSION['hogetxt'][$key] !== ""){
$txt .= $val. ":" .$_SESSION['hogetxt'][$key]. '<br />'."\n";
}
}

echo $txt;

登録画面
ここでわからなくなってしまいました。
$txtに渡してから登録画面ではNULLと表示されてしまいます。
SESSIONも考えていたのですが、このような感じであっていますでしょうか?

$_REQUESTを使ったのがはじめてのためあってるのかわかりませんが宜しくお願いします。

お礼日時:2011/07/23 17:47

>とValuesの横に,が入っていました。



じゃ、まずそのカンマを取るところからはじめてください
    • good
    • 0
この回答へのお礼

できました。
有難う御座います。

お礼日時:2011/07/27 02:33

>Column count doesn't match value count



これは単に・・・

INSERT INTO hoge(a,b,c) values('x','y');
みたいに投入するフィールドの指定と、データ数に差異があるだけだと思います
    • good
    • 0
この回答へのお礼

ご回答有難う御座います。

>INSERT INTO hoge(a,b,c) values('x','y');
>みたいに投入するフィールドの指定と、データ数に差異があるだけだと思います
ですが、
INSERT INTO hoge(a,b,c) values('x','y',Z);
にしています。
また、IDの構成かと思いしらべたのですが、AUTO_INCREMENTになっています。
vr_dumpをやったところ、
INSERT INTO hoge(a,b,c) values,('x','y',Z);
とValuesの横に,が入っていました。
これは関係しますでしょうか?

お礼日時:2011/07/26 00:04

>$testtxt = $_REQUEST['test'];


>$hogetxt = $_REQUEST['hoge'];

>$_SESSION['testtxt'] = $testtxt;
>$_SESSION['hogetxt'] = $hogetxt;

どこでセッションを利用しているか微妙ですが
前回提示したソースは$_REQUEST['test']と$_REQUEST['hoge']は
それぞれ配列を想定しています
配列データはSESSION変数に乗らないので、シリアライズし
受け取った側でアンシリアライズします。

http://www.php.net/manual/ja/function.serialize. …
    • good
    • 0
この回答へのお礼

度重なるご回答有難う御座います。

SESSIONはできたのですが、データベースへの登録ができなくエラーがでてしまいます。
エラー文はColumn count doesn't match value count at row 1のように表示されます。

データベースの構成など調べたのですが間違いはないのにでてしまいます。

お分かりになりますでしょうか?

お礼日時:2011/07/25 23:44

データが空かのチェックをしてそれにあわせてINSERT文を生成するようにする。

    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2011/07/23 18:22

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