アプリ版:「スタンプのみでお礼する」機能のリリースについて

前に書き込んだのが状況がわかったので再度書きます
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']));
?>

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

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

A 回答 (4件)

    • good
    • 0
この回答へのお礼

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

お礼日時:2014/04/17 09:47

> ここから氏名と住所が空白だったらエラーメッセージを出したいのでが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/17 13:55
    • good
    • 0
この回答へのお礼

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

住所を入力してくだざい

レコードを修正しましたと表示されます
<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

> $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;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/04/16 16:53

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2014/04/17 13:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!