• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mysql データ登録)

phpのフォームからmysqlのデータ登録について

このQ&Aのポイント
  • フォームからMySQLのデータ登録に関しての質問です。フォームには10個以上の項目があり、空の値は登録しないようにしたいです。
  • 現在のクエリでは、10項目全てが入力された場合にのみ登録されますが、空の値の項目がある場合でも登録されてしまいます。
  • どのようにすれば空の値の項目を除外し、入力された項目のみを登録することができるでしょうか。お知恵をお貸しいただければ幸いです。

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

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

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>

h-h13
質問者

お礼

ご回答有難う御座います。 度重なるご質問で申し訳ないのですが、 ご教示いただいたコードをもとにフォームを作成してみましたが、データの登録までにたどりつかず頭が混乱してしまいました。 内容は フォーム画面 <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を使ったのがはじめてのためあってるのかわかりませんが宜しくお願いします。

その他の回答 (4)

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

>とValuesの横に,が入っていました。 じゃ、まずそのカンマを取るところからはじめてください

h-h13
質問者

お礼

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

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

>Column count doesn't match value count これは単に・・・ INSERT INTO hoge(a,b,c) values('x','y'); みたいに投入するフィールドの指定と、データ数に差異があるだけだと思います

h-h13
質問者

お礼

ご回答有難う御座います。 >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の横に,が入っていました。 これは関係しますでしょうか?

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

>$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.php

h-h13
質問者

お礼

度重なるご回答有難う御座います。 SESSIONはできたのですが、データベースへの登録ができなくエラーがでてしまいます。 エラー文はColumn count doesn't match value count at row 1のように表示されます。 データベースの構成など調べたのですが間違いはないのにでてしまいます。 お分かりになりますでしょうか?

  • bakaok
  • ベストアンサー率22% (33/148)
回答No.2

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

h-h13
質問者

お礼

ありがとうございます。

関連するQ&A