• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPとMySQLを使ったフォームを作っていますが、うまくできないこと)

PHPとMySQLを使ったフォームでのデータ登録について

このQ&Aのポイント
  • PHPとMySQLを使ったフォームでのデータ登録において、空欄がある場合に問題が発生することがあります。
  • フォームから送信されたデータを受け取り、MySQLに登録する際に空欄があるとデータベースへの追加や変更ができないことがあります。
  • 年齢のフィールドが空欄の場合、データベースへの登録が正常に行われないことがあります。

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

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

たとえば、default値があるのですから、入力時点ではじくこともできます。 <? $name="test_name"; $address="test_address"; //$age="test_age"; $list=array("name"=>$name,"address"=>$address,"age"=>$age); foreach($list as $key=>$val){ if($val=="") unset($list[$key]); } $keys="`".implode("`,`",array_keys($list))."`"; $vals="'".implode("','",$list)."'"; $sql="INSERT INTO tablename({$keys})VALUES({$vals})"; print $sql; ?>

hoso1974
質問者

お礼

お礼が遅くなりました、申し訳ありません。 そうですよね。 PHPを初めて、毎回「自分の発想力次第だな」と思っているのに、 なかなか、それを実践できないので反省です。 大変参考になりました。 現在、アドバイスいただきました内容を基に、順調に動作しております。 本当にありがとうございました。

その他の回答 (2)

noname#243182
noname#243182
回答No.3

上手くいかない場合のコードでは NULL が文字列として扱われていませんか。 エラーを捕捉するコードを書くことが大切です。 http://jp.php.net/manual/ja/function.mysql-errno.php http://jp.php.net/manual/ja/function.mysql-error.php マニュアルは全て読んでください。必要なのは気合と根性と十分な睡眠です。

参考URL:
http://jp.php.net/manual/ja/ref.mysql.php
hoso1974
質問者

お礼

ありがとうございます。 int mysql_errno てのがあるんですね。 いつも、うまく動けば「これでいいや」って思っていましたが、おかしいな、と感じたら、原因をはっきりさせておいた方がいいですよね。 ありがとうございました。 参考にさせていただきます。

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

データのバリデート(チェック)はしていないのでしょうか? ユーザーから流れてくるデータは汚染されている前提でかならずチェックし想定外の データはすべてはじいてください。 仮に今のままだとしても$ageに値提示がなくても'$age'は''となり、投入すると「0」として 認識されると思いますが・・・明確にロジック的には$ageが数値として有効であれば'$age'、そうでないならNULLを指示してみるか、(name,address,age)のageを指定しないような 書式をつかうのが妥当でしょう

hoso1974
質問者

お礼

ありがとうございます。 データのチェックは行っています。 今回の質問をわかりやすくするために省略いたしました。 その後、自分なりに回避策としてデータベース登録時の処理を //データベースへの登録 if($age == ""){ $rs = mysql_query("INSERT INTO tablename(name,address,age)VALUES('$name','$address',NULL)",$db); } else{ $rs = mysql_query("INSERT INTO tablename(name,address,age)VALUES('$name','$address','$age')",$db); } とすることで解決できました。 が、この方法では、もう少し大きなフォームで、入力が必須でない項目が複数できてしまった時に、その数だけの分岐を作ることになりそうなので、もう少しほかの方法を模索したいと思っています。 ちなみに、上記のコードを以下のように書いた場合はうまくできませんでした。 //データベースへの登録 if($age == ""){ $age = NULL;//$ageに何も含まれていなければNULLを代入 } $rs = mysql_query("INSERT INTO tablename(name,address,age)VALUES('$name','$address','$age')",$db); アドバイスありがとうございました。

関連するQ&A