こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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']));
?>

レコードを修正しました。

今の現状
エラーが出ないでレコードを修正しました。と表示されるがレコードが修正されていない
どこがいけないと思いますか?

投稿日時 - 2014-04-16 16:19:09

QNo.8556845

すぐに回答ほしいです

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

参考にどうぞ

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12127689987

投稿日時 - 2014-04-16 17:12:11

お礼

ありがとうございます
参考にします

投稿日時 - 2014-04-17 09:47:30

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

> ここから氏名と住所が空白だったらエラーメッセージを出したいのでがtryで出せばいいですか

try~catchは例外が発生した場合に、エラーを補足するために使用します。

未入力などのエラーチェック機構は自分で実装する必要があります。
※以下は簡易例です。

update2.php

<?php
$err = "";
if(empty($_POST['NAME'])) $err.= "名前を入力してください。<br>";
if(empty($_POST['ADDR'])) $err.= "住所を入力してください。<br>";
if(empty($err)){
 $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'],$_POST['ID']));
}else{
 echo $err;
}
?>

投稿日時 - 2014-04-16 17:21:16

補足

すいませんできました

投稿日時 - 2014-04-17 13:55:23

お礼

ありがとうございます
未入力だと

住所を入力してくだざい

レコードを修正しましたと表示されます
<html>
<body>
<blockquote>
<?php
$err = "";
if(empty($_POST['NAME'])) $err.= "名前を入力してください。<br>";
if(empty($_POST['ADDR'])) $err.= "住所を入力してください。<br>";
if(empty($err)){
$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'],$_POST['ID']));
}else{
echo $err;
}

?>
<br>
レコードを修正しました
<br><br><br> <a href="http://localhost/top.php">
<input type = "submit" value = "一覧に戻る" style ="WIDTH: 150px; HEIGHT: 40px"></A>
</blockquote>
</body>
</html>

どこにレコード修正しましたを入れれば直したときだけ出ますか?

投稿日時 - 2014-04-17 13:13:09

ANo.2

> $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?");

そのままコピペしているのでしたら、「住所=?」と「WHERE」の間はスペースを空けないとだめですね。

> $st->execute(array($_POST['ID'],$_POST['NAME'], $_POST['ADDR']));

それと、バインドする値の順序が違うような・・・

$st->execute(array($_POST['NAME'], $_POST['ADDR'], $_POST['ID']));

明確にするなら、プレースホルダとbindValue()などを使う方がいいと思います。

$st = $pdo->prepare("UPDATE tbl_test SET 氏名 = :name, 住所 = :addr WHERE 番号 = :id");
$st->bindValue(':name', $_POST['NAME']);
$st->bindValue(':addr', $_POST['ADDR']);
$st->bindValue(':id', $_POST['ID']);
$st->execute();

そもそも、エラーを補足できるように、try~catchを使う方がいいです。

try{
 $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");
 $st = $pdo->prepare("UPDATE tbl_test SET 氏名 = :name, 住所 = :addr WHERE 番号 = :id");
 $st->bindValue(':name', $_POST['NAME']);
 $st->bindValue(':addr', $_POST['ADDR']);
 $st->bindValue(':id', $_POST['ID']);
 $st->execute();
}catch(PDOException $e){
 echo $e->getMessage();
 exit;
}

投稿日時 - 2014-04-16 16:48:57

お礼

ありがとうございます
順序が違ってました。
ここから氏名と住所が空白だったらエラーメッセージを出したいのでがtryで出せばいいですか

投稿日時 - 2014-04-16 16:53:28

ANo.1

executeの引数の順序がUPDATE文とあっていないのではないでしょうか。

投稿日時 - 2014-04-16 16:43:14

お礼

ありがとうございます
順番が違ってました

投稿日時 - 2014-04-17 13:37:15

あなたにオススメの質問