PHPによるデータベースのupdate文について
こんばんは。PHP初心者です。
現在、学生の登録システムを作成していますが、生徒情報をupdateする作業が上手くいきません。
こちらのサイトを元にphpを作成していますが、現在名前だけは更新できるものの、他の情報の更新ができません。
https://noumenon-th.net/programming/2016/01/20/mysql-3/
生徒情報を表示したページから、編集をクリックすると編集画面になり、編集画面では、前ページから引っ張ってきた情報を予めValueに入れ、変更の為の入力があった場合は変更された文字をValueに入れてデータベースの情報を更新したいと考えています。
現在、試行錯誤している為、名前と性別のupdateのみとなっております。
update2sample.phpの49行目に「$Gender」を記入し、「UPDATE studentinfo SET Name=?, Gender=? WHERE id=?」や「UPDATE studentinfo SET Name=:Name, Gender=:Gender WHERE id=?」なども試しましたが、うまくいきません。
また、テストの為、色々作業を試しているのですが、実際にはデータベースの更新がされていないにも関わらず、「更新が完了しました」と表示されてしまう為、エラー表記につきましてもご教授ください。
初めての質問の為、不明点などあるかと思いますが、お力添えのほどよろしくお願いいたします。
発生している問題・エラーメッセージ
現在、名前は更新できるのですが、その他の内容が更新できません。 現在は、途中の為、名前と性別のupdateを試しています。
該当のソースコード
php
1**SELECT文にて下記表示** 2 3<div class="button"> 4<form action="update1sample.php" method="post"> 5 6 7<input type="hidden" name="id" value="<?=$row['id']?>"> 8<input type="hidden" name="Name" value="<?=htmlspecialchars($row['Name'], ENT_QUOTES, 'UTF-8')?>"> 9<input type="hidden" name="Gender" value="<?=htmlspecialchars($row['Gender'],ENT_QUOTES,'UTF-8')?>"> 10<input type="submit" value="編集"> 11</form> 12 13</div> 14 15**updatesample1.phpの記載** 16require_once("db_studentinfo.php"); 17$mysqli = db_connect(); 18 19if(empty($_POST)) { 20 echo "<a href='update1.php'>update1.php</a>←こちらのページからどうぞ"; 21 exit(); 22}else{ 23 if (!isset($_POST['id']) || !is_numeric($_POST['id']) ){ 24 echo "IDエラー"; 25 exit(); 26 }else{ 27 //プリペアドステートメント 28 $stmt = $mysqli->prepare("SELECT * FROM studentinfo WHERE id=?"); 29 if ($stmt) { 30 //プレースホルダへ実際の値を設定する 31 $stmt->bind_param('i', $id, $Name, $Gender); 32 $id = $_POST['id']; 33 $Name = $_POST['Name']; 34 $Gender = $_POST['Gender']; 35 36 //クエリ実行 37 $stmt->execute(); 38 39 //結果変数のバインド 40 $stmt->bind_result($id,$Name,$Gender); 41 // 値の取得 42 $stmt->fetch(); 43 44 //ステートメント切断 45 $stmt->close(); 46 }else{ 47 echo $mysqli->errno . $mysqli->error; 48 } 49 } 50} 51 52<body> 53<h1>変更画面</h1> 54 55<p>変更箇所を入力してください</p> 56<form action="update2sample.php" method="post"> 57<p>名前:<input type="text" name="Name" placeholder="" value="<?=htmlspecialchars($Name, ENT_QUOTES, 'UTF-8')?>"></P> 58<p>性別:<input type="text" name="Gender" placeholder="" value="<?=htmlspecialchars($Gender, ENT_QUOTES, 'UTF-8')?>"></P> 59 60 61<input type="hidden" name="id" value="<?=$id?>"> 62<input type="submit" value="変更する"> 63</form> 64 65</body> 66 67**updatesample2.phpの記載** 68 69header("Content-type: text/html; charset=utf-8"); 70 71require_once("db_studentinfo.php"); 72$mysqli = db_connect(); 73 74if(empty($_POST)) { 75 echo "<a href='update1.php'>update1.php</a>←こちらのページからどうぞ"; 76 exit(); 77}else{ 78 //名前入力チェック 79 if (!isset($_POST['Name']) || $_POST['Name'] === "" ){ 80 $errors['Name'] = "名前が入力されていません。"; 81 } 82 83 if(count($errors) === 0){ 84 //プリペアドステートメント 85 $stmt = $mysqli->prepare("UPDATE studentinfo SET Name=? WHERE id=?"); 86 if ($stmt) { 87 //プレースホルダへ実際の値を設定する 88 $stmt->bind_param('si', $Name, $id); 89 $Name = $_POST['Name']; 90 $id = $_POST['id']; 91 $Gender = $_POST['Gender']; 92 93 94 95 //クエリ実行 96 $stmt->execute(); 97 //ステートメント切断 98 $stmt->close(); 99 }else{ 100 echo $mysqli->errno . $mysqli->error; 101 } 102 } 103} 104<h1>変更画面</h1> 105 106<?php if (count($errors) === 0): ?> 107<p>変更完了しました。</p> 108<?php elseif(count($errors) > 0): ?> 109<?php 110foreach($errors as $value){ 111 echo "<p>".$value."</p>"; 112} 113?> 114<?php endif; ?> 115 116</body>
試したこと
update2sample.phpの49行目に「$Gender」を記入し、「UPDATE studentinfo SET Name=?, Gender=? WHERE id=?」や「UPDATE studentinfo SET Name=:Name, Gender=:Gender WHERE id=?」なども試しましたが、うまくいきません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答3件
あなたの回答
tips
プレビュー