- ベストアンサー
データーベース接続入力フォームの作成方法とエラーハンドリングについて
- phpでデータベース接続と入力フォームの作成方法を説明します。
- 入力フォームから新しいデータを追加する際に、重複や空白のエラーメッセージを表示させる方法を教えます。
- 具体的なプログラム例も示していますので、参考にしてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
if ($_POST['ID'] != '' && $_POST['NAME'] != '' && $_POST[ADDR] != '') { $sql="INSERT INTO tbl_test (番号, 氏名, 住所) VALUES ('$_POST[ID]','$_POST[NAME]','$_POST[ADDR]')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } echo "登録完了しました"; } else { echo "入力エラー"; }
その他の回答 (4)
- t_ohta
- ベストアンサー率38% (5238/13705)
> エラーはなくなりましたがこんどはデータが追加されません!POSTのエスケープした処理をしないからですか? ID、NAME、ADDR のいずれかが空だとINSERTは実行されないので、どれかが空なのではないでしょうか。 > またエスケープ処理の命令の記述のしかたも教えてもらっていいですか? $sql="INSERT INTO tbl_test (番号, 氏名, 住所) VALUES ('$_POST[ID]','$_POST[NAME]','$_POST[ADDR]')"; を $id = mysqli_real_escape_string($con, $_POST['ID']); $name = mysqli_real_escape_string($con, $_POST['NAME']); $addr = mysqli_real_escape_string($con, $_POST['ADDR']); $sql="INSERT INTO tbl_test (番号, 氏名, 住所) VALUES ('$id','$name','$addr')"; と置き換えて下さい。
お礼
ありがとうございます! Unknown column '番号' in 'field list' 今度は番号のカラムがないといってきました。 番号というカラムがあるのに なぜでしょう
補足
すいませんできました。 あとデータをすべて入力し番号が重複したらエラーがでます。出ない方法ってありますか? あと今度は表示されているデータの名前をクリックしたら別ウインドウで1件ずつ表示し、変更や削除させたいのですかどうしたらいいですか? 参考に書き方をおしえてください 何度もすいません
- t_ohta
- ベストアンサー率38% (5238/13705)
> どこに入力すればいいですか? 追加プログラムの、以下の部分を置き換えて下さい。 簡易的なチェック方法を描いただけですので、POSTされた値のエスケープ処理など適切な処理を追加しましょう。 $sql="INSERT INTO tbl_test (番号, 氏名, 住所) VALUES ('$_POST[ID]','$_POST[NAME]','$_POST[ADDR]')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } echo "登録完了しました";
お礼
またエスケープ処理の命令の記述のしかたも教えてもらっていいですか?何度もすいません
補足
ありがとうございます!エラーはなくなりましたがこんどはデータが追加されません!POSTのエスケープした処理をしないからですか?
以下で解説している「初心者がやりがちなミス」に複数該当しています。まずはそこから見直しを行ってください。 Qiita - PHPでデータベースに接続するとのまとめ http://qiita.com/mpyw/items/b00b72c5c95aac573b71 エラーがあったときの復帰の方法によって、どうすべきかが変わってくるので両方説明しておきます。 【エラーメッセージとともに「戻る」を表示する】 以下の私の回答を参考にして、出力内容のバッファリングを行い、内容を取り消せるようにしてください。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13126914973 【エラーメッセージを出して入力フォームを再表示する】 すべての処理を1ファイルにまとめて、送信ボタンの種類によって処理内容・表示内容を分岐させてください。もしくは、セッションにエラーメッセージをセットしてheader関数でページ遷移させるようにしてください。 なお、これらに加えて「クロスサイトリクエストフォージェリ」への対策が不可欠です。 Qiita - とっても簡単なCSRF対策 http://qiita.com/mpyw/items/8f8989f8575159ce95fc
お礼
ありがとうございます。
- agunuz
- ベストアンサー率65% (288/438)
>if文の書き方を教えてください http://www.php.net/manual/ja/control-structures.if.php >また番号を空白だとエラーが返ってきます。どうしたらいいですか? 番号が空白でないことをチェックする。でも、空白でなくても「数字」として扱えないものはダメですよね? http://www.php.net/manual/ja/function.ctype-digit.php というか「POSTされたデータを登録する」のに、エスケープしていないのは何故ですか?またmysqli_set_charsetが見当たらないので、日本語をキチンと扱えない怖れがあります(というか確実に破綻しますし、エスケープが意味を為さなくなります)。 http://www.php.net/manual/ja/mysqli.real-escape-string.php http://www.php.net/manual/ja/mysqli.set-charset.php なお「mysqliでないと困る」理由がない限りは、PDOを推奨しておきます(PDOの方が書きやすいと思います)。 #body要素全体がblockquote要素ってhtmlはどうなんですかね(汗
お礼
ありがとうございました
お礼
ありがとうございます 追加登録のプログラム(toroku.php) <HTML> <HEAD><TITLE>登録完了</TITLE></HEAD> <BODY> <?php $con=mysqli_connect("localhost","root","パスワード","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $sql="INSERT INTO tbl_test (番号, 氏名, 住所) VALUES ('$_POST[ID]','$_POST[NAME]','$_POST[ADDR]')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } echo "登録完了しました"; mysqli_close($con); ?> <BR><BR> <A HREF="http://localhost/test5.php"> <INPUT TYPE = "SUBMIT" VALUE = "一覧へ戻る"></A> </BODY> </HTML> どこに入力すればいいですか? もうわけがわからなくなっておねがいします