• ベストアンサー

PHP + PDOでデータ登録

PHPでデータの登録を行っています いろいろ調べながら試行錯誤しています 登録できる条件があります 1.番号が重複じゃない 2.番号、氏名、住所が空白でない場合です 現状 1.2両方できていてデータも追加されるのですが、 2の条件、空白だった場合エラーメッセージを表示したいのですが表示されず困っています <?php $err = ""; if(empty($_POST['ID'])) $err.= "<br><br>番号入力してください。<br><br>"; if(empty($_POST['NAME'])) $err.= "<br><br>氏名入力してください。<br><br>"; if(empty($_POST['ADDR'])) $err.= "<br><br>住所を入力してください。<br><br>"; if(empty($err)) { $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "****"); $st = $pdo->prepare("INSERT INTO tbl_test VALUES(?,?,?)"); $st->execute(array($_POST['ID'], $_POST['NAME'],$_POST['ADDR'])); if($st->rowCount()>0) { header('Location: http://localhost/top.php'); }else{ print "既に登録している番号です"; } echo $err; } ?> 重複したときは"既に登録している番号です"と表示されるのですが、空白だった場合$errが表示されません

noname#197690
noname#197690
  • MySQL
  • 回答数1
  • ありがとう数12

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

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

すくなくとも「echo $err」の位置は変 if(empty($err)){ ・・・・ } の外側もしくは、elseなどで処理しないと 「もし空なら」のブロックの中で表示しようとしても 空かヒットしないかのどっちらかでしょ それと、しつこいようですがINSERTは「IGNORE」で行わないと エラーになるので思った処理にならないかもしれませんよ

noname#197690
質問者

お礼

返事遅くなりすいません。 指摘通り「IGNORE」にしてif文の外側にしたら出来ました。ありがとうございます。いつも助かっています 質問攻めですいません エラーメッセージをエラーが出たら入力フォームにメッセージを返すことは可能ですか? 可能ならいい参考になるものないですかね?

noname#197690
質問者

補足

JavaScriptを使わないなら$_SESSIONしかやり方ないですか?

関連するQ&A

  • php pdo データベース

    前に書き込んだのが状況がわかったので再度書きます update.phpでGETで取った番号のデータを表示します 番号は主キーなので変更できないように表示のみにします update.phpのフォームをuptate2.phpに送ります <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> <input type="hidden" name="ID" value="<?php echo $ID; ?>"> 氏名<br> <input type="text" SIZE = "50" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" SIZE = "130"NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデ-トphp update2.php <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['ID'],$_POST['NAME'], $_POST['ADDR'])); ?> レコードを修正しました。 今の現状 エラーが出ないでレコードを修正しました。と表示されるがレコードが修正されていない どこがいけないと思いますか?

    • ベストアンサー
    • PHP
  • php データベース更新

    番号 int プライマリーキー 氏名  varchar 住所 varchar 一覧画面に修正というボタンをつくりボタンクリックすると入っているデータがテキストボックスで表示され入力できるようにした。 番号は主キーなので表示のみにして編集できないようにした ソース GETで番号をとりupdate2.phpにわたす update.php <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> 氏名<br> <input type="text" SIZE = "50" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" SIZE = "130"NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデートphpは下記のとおり update2.php <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['ID'],$_POST['NAME'], $_POST['ADDR'])); ?> レコードを修正しました。 だかupdate2.phpでエラ-がおきて先に進めません

    • ベストアンサー
    • PHP
  • PHP Mysql エラー

    データの新規登録を行っているのですが 番号が重複しないでまたデータがすべて入力されたらデータの追加を行いたいのですが エラーが出て対処できずに困っています 下記のエラーがでます Parse error: syntax error, unexpected end of file in C:\WWW\test\htdoes\insert.php on line 20 20行目は一番下の行です <html> <body> <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); if($st->rowCount()>0){ if ($_POST['ID'] != '' && $_POST['NAME'] != '' && $_POST['ADDR'] != ''){ $st = $pdo->prepare("insert ignore into tbl_test values(?,?,?)"); $st->execute(array($_POST['ID'], $_POST['NAME'],$_POST['ADDR'])); header('Location: http://localhost/top.php'); }else{ print データ未入力の場所があります; } }else{ print "既に登録している番号です"; ?> </body> </html>

    • ベストアンサー
    • MySQL
  • PDOでDB

    PDOでDBを表示させ修正ボタンを押し別ウインドウが開き選んだデータの修正を行いたいのですがupdate2.phpでエラ-メッセージが出ます。どうやったら直りますか 下記のメッセージです Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\WWW\test\htdoes\update2.php on line 4 レコードを修正しました。 ちなみに 番号 int プライマリ-キ- 氏名 varchar 住所 varcharです 下記はソースです 一覧画面 <HTML> <HEAD> <TITLE>一覧画面</TITLE> </HEAD> <BODY> <table border="1"> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr> <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->query("SELECT * FROM tbl_test"); while ($row = $st->fetch()) { $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr><td>$ID</td><td>$NAME</td><td>$ADDR</td><td><a href='update.php?番号=$ID'>修正</a></td></tr>"; } ?> </table> </BODY> </HTML> アップデートの入力フォーム update.php <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> 氏名<br> <input type="text" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデートの処理 update2.php <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 番号=?,氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['NAME'], $_POST['ADDR'])); ?> レコードを修正しました。 アップデートの処理 update2.phpで 最初のエラーが出ます

  • php データ新規追加

    入力フォームに入力された番号が登録されてなかったら新規登録できるようにしたい INSEPT IGNORE INTOで主キーを無視するのではなく重複したらエラーメッセージを出しユーザにもう一度入力させるようにする 新規登録フォーム <html> <head><title>新規登録</title></head> <body> <blockquote> <form action = "insert.php" method = "POST"> <br><br>登録画面<br><br> すべての項目入力してください<br> 番号<input type="number" name = "ID"> (一覧画面にない番号を入力してください) <br> <br>氏名<input type="text" size = "50" name = "NAME"><br><br> 住所<input type="text" size = "130" name = "ADDR"><br><br> <a href="http://localhost/top.php"> <input type = "submit" value = "登録する" style ="font-size:20px; width: 100px; height: 40px"></A> <a href="http://localhost/top.php"> <input type = "button" value = "一覧に戻る" style ="font-size:20px; width: 100px; height: 40px"></A> </body> </blockquote> </form> </body> </html> 登録を実行するフォーム <?php $con=mysqli_connect("localhost","root","admin","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } if ($_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')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } header('Location: http://localhost/top.php'); exit(); } else { ?> <html> <body> <blockquote> <br><br>データが未入力の箇所があります。すべてデータを入力してください <br><br><br> <a href="http://localhost/regist.php"> <INPUT TYPE = "button" VALUE = "登録画面に戻る" style ="font-size:20px; width: 140px; height: 40px"></A> <br><br><br> <A HREF="http://localhost/top.php"> <INPUT TYPE = "button" VALUE = "一覧に戻る" style ="font-size:20px; width: 140px; height: 40px"></A> </blockquote> </body> </html> <?php } mysqli_close($con); ?> どういう風にselect文を書けばいですか?

    • ベストアンサー
    • MySQL
  • php パラメータ

    新規登録として登録できたら別ウインドウに遷移せずそのままtopに戻し戻ってきたらデータが登録されているようにしたいですがなかなか出来ません 調べたら、exec関数を使えばできるとのことですが $return_data = exec("/usr/local/bin/php ./top.php param1 = 1 m2 = 2"); こんな例がありましたが自分の力ではこのプログラムのどこを修正すればtop.phpに返ってくるかわかりません 下記は新規登録を行うための入力フォームです 登録するボタンを押したらそのままtopに移動したいのですがいまはinsert.phpに飛んでしまいます regist.php <html> <head><title>新規登録</title></head> <body> <blockquote> <form action = "insert.php" method = "POST"> <br><br>登録画面<br><br> すべての項目入力してください<br> 番号<input type="number" name = "ID"> (一覧画面にない番号を入力してください) <br> <br>氏名<input type="text" size = "50" name = "NAME"><br><br> 住所<input type="text" size = "130" name = "ADDR"><br><br> <a href="http://localhost/top.php"> <input type = "submit" value = "登録する" style ="font-size:20px; width: 100px; height: 40px"></A> <a href="http://localhost/top.php"> <input type = "button" value = "一覧に戻る" style ="font-size:20px; width: 100px; height: 40px"></A> </body> </blockquote> </form> </body> </html> 下記はinsert.phpです <!--insert.php 登録完了--> <html> <body> <blockquote> <?php $con=mysqli_connect("localhost","root","admin","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } if ($_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')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); } echo "登録完了しました"; } else { echo "<br><br>データが未入力の箇所があります。すべてデータを入力してください"; } mysqli_close($con); $return_data = exec("/usr/local/bin/php ./top.php param1 = 1 m2 = 2"); ?> <br><br><br> <a href="http://localhost/regist.php"> <INPUT TYPE = "button" VALUE = "登録画面に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A> <br><br><br> <A HREF="http://localhost/top.php"> <INPUT TYPE = "button" VALUE = "一覧に戻る" style ="font-size:20px; WIDTH: 140px; HEIGHT: 40px"></A> </blockquote> </body> </html> どこを直せばいいですか? 本格的に直さないとできないですか?

    • ベストアンサー
    • PHP
  • <?php

    <?php if (isset($_POST['reg']) && isset($_POST['reg'])) { $ErrFlg = false; // 氏名欄をチェック $first_name = $_REQUEST['first_name']; $last_name = $_REQUEST['last_name']; if (!trim($first_name) || trim($last_name) == '') { $_POST['err_name_req'] = '氏名が入力されておりません。<br />'; $error = TRUE; } else { unset($_POST['err_name_req']); } // 生年月日欄をチェック $b_year = $_REQUEST['b_year']; $b_month = $_REQUEST['b_month']; $b_day = $_REQUEST['b_day']; if (!trim($b_year) || trim($b_month) || trim($b_day) == '') { $_POST['err_birthday_req'] = '生年月日が入力されておりません。<br />'; $error = TRUE; } else { unset($_POST['err_birthday_req']); } if (checkdate($b_month, $b_day, $b_year) === false) { $_POST['err_birth_ereg'] = '生年月日が正しくありません。<br />'; $error = TRUE; } else { unset($_POST['err_birth_ereg']); } } ?> <html> <body> <form action="<?php $_SERVER["PHP_SELF"]; ?>" method="POST"> 氏名<br /> <?php print $_POST['err_name_req']; ?><br /> <input type="text" name="first_name" value="<?php print $first_name; ?>" /><input type="text" name="last_name" value="<?php print $last_name; ?>" /><br /> 生年月日<br /> <?php print $_POST['err_birth_req'].$_POST['err_birth_ereg']; ?><br /> <input type="text" name="b_year" value="<?php print $b_year; ?>" size="5" />年 <input type="text" name="b_month" value="<?php print $b_month; ?>" size="2" />月 <input type="text" name="b_day" value="<?php print $b_day; ?>" size="2" />日 <br /> <input type="submit" name="reg" value="登録" /> </form> </body> </html> としています。 登録ボタンを押した際に入力チェックされることがなければデータベースに登録したいのですが、どこに記述してよいのか困っています。 また、どのように記述したらよろしいでしょうか? イメージとしては登録ボタンを押したら、「登録しました。」というコメントだけが表示されるようにしたいのですが・・・ javascriptの使用は考えておりませんので、できればPHPでお願いいたします。 もしお分かりの方がいらっしゃいましたらご教授いただけないでしょうか? また上記の内容でおかしいところがありましたらご指摘いただけないでしょうか?

    • ベストアンサー
    • PHP
  • PHPでユーザ登録フォーム&表示プログラムの作成

    質問させていただきます。 PHPでユーザ登録フォームと表示プログラムの作成をしているのですが、 登録フォームはなんとかできたのですが、表示プログラムに添付画像のようにテーブルに出力させるにはどうやればいいでしょうか。 またこのプログラムだと若干エラーが出ているようでそれも気になりまして、教えていただければ幸いです。 <?php echo "<table border=1>"; echo "<tr><td>姓(名前){$_POST['ln']}</tr></td><tr><td>名(名前){$_POST['fn']}</tr></td><br />"; echo "性別 : "; if($_POST['seibetsu'] =="1") echo "男"; else echo "女"; echo "<br />"; echo "都道府県 : {$_POST['pref']}<br />"; echo "市区町村 : {$_POST['addr1']}<br />"; echo "番地 : {$_POST['addr2']}<br />"; echo "生年月日 : {$_POST['year']}年{$_POST['month']}月{$_POST['day']}日<br />"; echo "アドレス : {$_POST['email']}<br />"; echo "電話番号 :{$_POST['phone1']}-{$_POST['phone2']}-{$_POST['phone3']}<br />"; ?>

    • ベストアンサー
    • PHP
  • PHPでエラーを元の画面にかえすには

    エラーメッセージを次の画面に行かずに 新規登録ボタンを押したら エラー表示を入力している画面に 表示するにはどうしたら出来ますか? javascriptは触れたことがないので使いたくないです ありましたら簡単なサンプルも教えて下さい 下記は入力フォームです <html> <head><title>新規登録</title></head> <body> <blockquote> <form action = "insert.php" method = "POST"> <br><br>登録画面<br><br> すべての項目入力してください<br> 番号<input type="number" name = "ID"> (一覧画面にない番号を入力してください) <br> <br>氏名<input type="text" size = "50" name = "NAME"><br><br> 住所<input type="text" size = "130" name = "ADDR"><br><br> <input type = "submit" value = "登録する" style ="font-size:20px; width: 100px; height: 40px"> <a href="http://localhost/top.php"> <input type = "button" value = "一覧に戻る" style ="font-size:20px; width: 100px; height: 40px"></A> </body> </blockquote> </form> </body> </html> 空白だったら入力フォームにエラー表示し再度ユーザに入力させたい

    • ベストアンサー
    • PHP
  • <?php

    <?php if(isset($_POST['name'])){ $name = htmlspecialchars($_POST['name']); if (empty($name)) { $message = '未入力があります'; } } if(isset($_POST['regist'])) { $regist = htmlspecialchars($_POST['regist']); if($message) { header('Location:regist2.php'); } } ?> <html> <form action="regist2.php" name="form" method="post"> <div align=left> 名前<input type="text" name="name" maxlength="16" istyle="1" format="M" mode="hiragana" style="-wap-input-format:&quot;*&lt;ja:h&gt;&quot;; -wap-input-format:*M;" /><br /> <input type="submit" name="regist" value="送信" /> </form> と携帯サイトを作成してるのですが、空白でもそのままregist2にいってしまい困っております。 空白の場合はsubmit押してもエラーを表示させたいのです 問題がなければ、そのままregist2.phpへいかせる方法はないでしょうか? ご教授お願い致します。

    • 締切済み
    • PHP