PHPによるデータベースのupdate文について
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を試しています。
該当のソースコード
SELECT文にて下記表示
<div class="button">
<form action="update1sample.php" method="post">
<input type="hidden" name="id" value="<?=$row['id']?>">
<input type="hidden" name="Name" value="<?=htmlspecialchars($row['Name'], ENT_QUOTES, 'UTF-8')?>">
<input type="hidden" name="Gender" value="<?=htmlspecialchars($row['Gender'],ENT_QUOTES,'UTF-8')?>">
<input type="submit" value="編集">
</form>
</div>
updatesample1.phpの記載
require_once("db_studentinfo.php");
$mysqli = db_connect();
if(empty($_POST)) {
echo "<a href='update1.php'>update1.php</a>←こちらのページからどうぞ";
exit();
}else{
if (!isset($_POST['id']) || !is_numeric($_POST['id']) ){
echo "IDエラー";
exit();
}else{
//プリペアドステートメント
$stmt = $mysqli->prepare("SELECT * FROM studentinfo WHERE id=?");
if ($stmt) {
//プレースホルダへ実際の値を設定する
$stmt->bind_param('i', $id, $Name, $Gender);
$id = $_POST['id'];
$Name = $_POST['Name'];
$Gender = $_POST['Gender'];
//クエリ実行
$stmt->execute();
//結果変数のバインド
$stmt->bind_result($id,$Name,$Gender);
// 値の取得
$stmt->fetch();
//ステートメント切断
$stmt->close();
}else{
echo $mysqli->errno . $mysqli->error;
}
}
}
<body>
<h1>変更画面</h1>
<p>変更箇所を入力してください</p>
<form action="update2sample.php" method="post">
<p>名前:<input type="text" name="Name" placeholder="" value="<?=htmlspecialchars($Name, ENT_QUOTES, 'UTF-8')?>"></P>
<p>性別:<input type="text" name="Gender" placeholder="" value="<?=htmlspecialchars($Gender, ENT_QUOTES, 'UTF-8')?>"></P>
<input type="hidden" name="id" value="<?=$id?>">
<input type="submit" value="変更する">
</form>
</body>
updatesample2.phpの記載
header("Content-type: text/html; charset=utf-8");
require_once("db_studentinfo.php");
$mysqli = db_connect();
if(empty($_POST)) {
echo "<a href='update1.php'>update1.php</a>←こちらのページからどうぞ";
exit();
}else{
//名前入力チェック
if (!isset($_POST['Name']) || $_POST['Name'] === "" ){
$errors['Name'] = "名前が入力されていません。";
}
if(count($errors) === 0){
//プリペアドステートメント
$stmt = $mysqli->prepare("UPDATE studentinfo SET Name=? WHERE id=?");
if ($stmt) {
//プレースホルダへ実際の値を設定する
$stmt->bind_param('si', $Name, $id);
$Name = $_POST['Name'];
$id = $_POST['id'];
$Gender = $_POST['Gender'];
//クエリ実行
$stmt->execute();
//ステートメント切断
$stmt->close();
}else{
echo $mysqli->errno . $mysqli->error;
}
}
}
<h1>変更画面</h1>
<?php if (count($errors) === 0): ?>
<p>変更完了しました。</p>
<?php elseif(count($errors) > 0): ?>
<?php
foreach($errors as $value){
echo "<p>".$value."</p>";
}
?>
<?php endif; ?>
</body>
試したこと
update2sample.phpの49行目に「$Gender」を記入し、「UPDATE studentinfo SET Name=?, Gender=? WHERE id=?」や「UPDATE studentinfo SET Name=:Name, Gender=:Gender WHERE id=?」なども試しましたが、うまくいきません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。