- ベストアンサー
PHPデータベース更新方法とエラーの解決法
- 一覧画面に修正ボタンを実装し、ボタンクリックでデータを編集可能にする方法
- GETで番号を取得し、update2.phpに渡す方法
- update2.phpでエラーが発生した場合の対処法
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
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さんが指摘されているので割愛します(汗
その他の回答 (5)
- yambejp
- ベストアンサー率51% (3827/7415)
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 `番号`=? でしたっけ?
お礼
いまこんな感じです はい名前でなく氏名です <?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>
補足
まだ11をクリックしても 番号 0になりますね
- yambejp
- ベストアンサー率51% (3827/7415)
><?php echo $ID; ?><br> <?php echo $id; ?><br> かもね、申し訳ないが同じ環境つくれるわけではないので 細かいtypoは自分で判断して修正してください あとエラーで止まるならエラーメッセージを書いてください (ただし前みたいに個人情報かかないで)
お礼
ありがとうございます エラーはなくなりました 修正をクリックすると 番号 0と なり氏名と住所は空白になります
補足
まだ更新できません mysqlでやったほうがいいですかね?
- yambejp
- ベストアンサー率51% (3827/7415)
なんかまぁ・・・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>
補足
SET 名前でなく氏名ですよね? 番号<br> <?php echo $ID; ?><br> あとこの行でエラーがおきました
既に指摘があるように、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
お礼
ありがとうございます 参考までにどう書けばよろしいか教えていただけませんか?
- agunuz
- ベストアンサー率65% (288/438)
>番号は主キーなので表示のみにして編集できないようにした 表示(echo)しかしていないのに、$_POST['ID']で受け取る前提で書いているのがアウト。 ∴ update.phpの >番号<br> <?php echo $ID ?><br> のあとに echo '<input type="hidden" name="ID" value="' . $ID . '">'; を追加すること。
お礼
ありがとうございます。 <?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> こんな感じですか? エラーはなくなり レコードを修正しましたと出るのですがレコードが修正されません!なぜですかね?
補足
ちなみにいま 番号 11 echo";氏名 あ 住所 い 送信 と表示されます echo";氏名 これが原因ですか
お礼
指摘どおり直しましたがエラーはなくなりました けどまだデータの修正が出来ません