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

解決済みの質問

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でエラ-がおきて先に進めません

投稿日時 - 2014-04-16 10:22:21

QNo.8556501

すぐに回答ほしいです

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

ANo.1です

番号<br> <?php echo $ID ?><br>
echo '<input type="hidden" name="ID" value="' . $ID . '">';
氏名<br>

echoの前に <?php がなかったですね(さすがにそこから説明しないといけないとは思わなかった・・・・)。

<?php echo '<input type="hidden" name="ID" value="' . $ID . '">';

もちろん好みに応じて

<input type="hidden" name="ID" value="<?php echo $ID; ?>">

でもいいです。


その他必要な注意事項はTo_aru_Userさんが指摘されているので割愛します(汗

投稿日時 - 2014-04-16 11:24:51

お礼

指摘どおり直しましたがエラーはなくなりました
けどまだデータの修正が出来ません

投稿日時 - 2014-04-16 11:51:32

ANo.3

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

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

回答(6)

ANo.6

POSTとGETの絡みかもしれないので
$id=isset($_REQUEST["id"])?$_REQUEST["id"]:0;

$id=isset($_POST["id"])?$_POST["id"]:(isset($_GET["id"])?$_GET["id"]:0);
にしてください

それと
UPDATE tbl_test SET `名前`=?,`住所`=? WHERE `番号`=?

UPDATE tbl_test SET `氏名`=?,`住所`=? WHERE `番号`=?
でしたっけ?

投稿日時 - 2014-04-16 13:52:38

補足

まだ11をクリックしても
番号 0になりますね

投稿日時 - 2014-04-16 13:59:20

お礼

いまこんな感じです
はい名前でなく氏名です

<?php
$id=isset($_POST["id"])?$_POST["id"]:(isset($_GET["id"])?$_GET["id"]:0);
$pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");

if(isset($_POST["modify"]) and $_POST["modify"]==1){
$name = $_REQUEST["name"];
$add = $_REQUEST["add"];
$st = $pdo->prepare("UPDATE tbl_test SET `氏名`=?,`住所`=? WHERE `番号`=?");
$st->execute(array($name,$add,$id));
}
$st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?");
$st->execute(array($id));
$row = $st->fetch();
?>
<form method="post">
番号<br> <?php echo $id; ?><br>
氏名<br>
<input type="text" SIZE = "50" NAME="name" value="<?php echo htmlspecialchars($row["氏名"]); ?>"><br>
住所<br>
<input type="text" SIZE = "130"NAME="add" value="<?php echo htmlspecialchars($row["住所"]); ?>"><br>
<input type="hidden" name="id" value="<?php echo htmlspecialchars($id); ?>">
<input type="hidden" name="modify" value="1">
<input type="submit" value="更新">
</form>

投稿日時 - 2014-04-16 13:58:46

ANo.5

><?php echo $ID; ?><br>


<?php echo $id; ?><br>
かもね、申し訳ないが同じ環境つくれるわけではないので
細かいtypoは自分で判断して修正してください

あとエラーで止まるならエラーメッセージを書いてください
(ただし前みたいに個人情報かかないで)

投稿日時 - 2014-04-16 12:47:13

補足

まだ更新できません
mysqlでやったほうがいいですかね?

投稿日時 - 2014-04-16 13:14:02

お礼

ありがとうございます
エラーはなくなりました

修正をクリックすると
番号
0と
なり氏名と住所は空白になります

投稿日時 - 2014-04-16 13:08:36

ANo.4

なんかまぁ・・・mysqliの手続き型つかったりPDOつかったり
できれば統一した方がいいですよ。

更新方法についてはざっとこんな感じ
update.php
<?php
$id=isset($_REQUEST["id"])?$_REQUEST["id"]:0;
$pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin");

if(isset($_POST["modify"]) and $_POST["modify"]==1){
$name = $_REQUEST["name"];
$add = $_REQUEST["add"];
$st = $pdo->prepare("UPDATE tbl_test SET `名前`=?,`住所`=? WHERE `番号`=?");
$st->execute(array($name,$add,$id));
}
$st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?");
$st->execute(array($id));
$row = $st->fetch();
?>
<form method="post">
番号<br> <?php echo $ID; ?><br>
氏名<br>
<input type="text" SIZE = "50" NAME="name" value="<?php echo htmlspecialchars($row["氏名"]); ?>"><br>
住所<br>
<input type="text" SIZE = "130"NAME="add" value="<?php echo htmlspecialchars($row["住所"]); ?>"><br>
<input type="hidden" name="id" value="<?php echo htmlspecialchars($id); ?>">
<input type="hidden" name="modify" value="1">
<input type="submit" value="更新">
</form>

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

補足

SET 名前でなく氏名ですよね?

番号<br> <?php echo $ID; ?><br>
あとこの行でエラーがおきました

投稿日時 - 2014-04-16 11:54:21

既に指摘があるように、INPUT要素で再度渡された値を埋め込む必要があります。それに加えて…

・isset構文で本当にGETやPOSTで渡される値が存在しているかどうか調べて、存在していない場合に対する例外処理を書きましょう。出来れば文字列であるかどうかも調べた方がベターです。

Qiita - $_GET, $_POSTなどを受け取る際の処理
http://qiita.com/mpyw/items/2f9955db1c02eeef43ea

・PDOのオプションでエラーモードを例外スローモードに設定しましょう。
・PDOのDSNで文字セットを「utf8」に指定しましょう。「UTF-8」とは書かないことに注意してください。
・SELECTするものが1件以下と最初から確定している場合は「LIMIT 1」を付けた方が高速になります。
・update.phpで本当に1件SELECTできているかどうか確かめましょう。具体的にはfetchメソッドの返り値がFALSEでないかどうかを確かめます。
・update2.phpで本当にレコードを1件更新できているかどうか調べましょう。具体的にはrowCountメソッドの返り値が0でないかどうかを確かめます。

Qiita - PHPでデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

投稿日時 - 2014-04-16 10:50:30

お礼

ありがとうございます
参考までにどう書けばよろしいか教えていただけませんか?

投稿日時 - 2014-04-16 11:00:21

ANo.1

>番号は主キーなので表示のみにして編集できないようにした


表示(echo)しかしていないのに、$_POST['ID']で受け取る前提で書いているのがアウト。




update.phpの

>番号<br> <?php echo $ID ?><br>

のあとに

echo '<input type="hidden" name="ID" value="' . $ID . '">';

を追加すること。

投稿日時 - 2014-04-16 10:31:01

補足

ちなみにいま
番号
11
echo";氏名

住所


送信
と表示されます
echo";氏名
これが原因ですか

投稿日時 - 2014-04-16 10:46:35

お礼

ありがとうございます。
<?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>
echo '<input type="hidden" name="ID" value="' . $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>
こんな感じですか?

エラーはなくなり
レコードを修正しましたと出るのですがレコードが修正されません!なぜですかね?

投稿日時 - 2014-04-16 10:41:29

あなたにオススメの質問