PHPでDB操作(9)
ではichiran.phpから該当の歌を選択した後で、編集画面としてedit.phpを作成します。具体的には以下のような感じにしました。
<?php
$dsn ='mysql:dbname=<データベース名>;host=localhost';
$user =<ユーザー名>;
$pass =<パスワード>;
// DBへ接続
try{
$dbh = new PDO($dsn, $user, $pass);
$sql="select * from hyakunin_issyu where id = :id";
$stmt= $dbh->prepare($sql);
$stmt->bindvalue(':id', $_GET['id'], PDO::PARAM_INT);
$stmt->execute();
$member=$stmt->fetch(PDO::FETCH_OBJ);
} catch (PDOException $e) {
echo "DB接続エラー" . $e->getMessage();
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>百人一首更新</title>
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body>
<h3>百人一首 短歌更新</h3>
<hr>
<form action="update.php" method="post">
<input name="id" hidden value="<?php $_GET['id']?>">
<table>
<tr><th class="input">作者</th><td><input type="text" name="sakusya" id="sakusya" width="100" required value="<?php print($member->name)?>"></td></tr>
<tr><th class="input">短歌</th><td><textarea type="text" name="tanka" id="tanka" cols="50" rows="3" required><?php print($member->tanka)?></textarea></td></tr>
</table>
<button>更新</button>
</form>
</body>
</html>
変数$sqlにテーブルhyakunin_issyuからidが編集したいid(=:id)となる歌を拾うSQL文を与えます。あとはほぼ同じなのですが、bindvalueメソッドでその :id と実データである $GET_['id'] をバインドして、そのあとでSQL文を実行してその結果を$memberという配列変数に代入しています。
その$memberの中身をtouroku.htmlをベースにして表示させるのですが、inputタグのvalue属性に$memberのnameだけをとりだしてprint文で表示させています。なお、textareaにはvalue属性がないので、textareaの値として$memberのtankaだけをとりだしてprint文で表示させています。
なお、データを更新するときに、どの短歌を更新するのかを指定する必要がありますが、ここではinputタグにhidden属性を与えて、ブラウザからは見えないように工夫しています。
このままではただ表示させているだけなので、適宜値を変更して「更新」ボタンを押すことでformタグのaction属性で与えられているupdate.phpに遷移させます。ここは次回に。