PHPでDB操作(5)
ではtouroku.htmlに入力された値をデータベースに登録する処理をinput_ok.phpにコーディングしていきます。以下のようになると思います。
<?php
$dsn ='mysql:dbname=<データベース名>;host=localhost';
$user ='<ユーザーID>';
$pass ='<パスワード>';
// DBへ接続
try{
$dbh = new PDO($dsn, $user, $pass);
$sakusya=htmlspecialchars($_POST["sakusya"],ENT_QUOTES);
$tanka =htmlspecialchars($_POST["tanka"],ENT_QUOTES);
//値はプレースホルダ
$sql = $dbh->prepare("INSERT into hyakunin_issyu (name, tanka) values (:name, :tanka)");
// bindPramでプレースホルダを変数に設定、PARAM_でデータ型を指定
$sql->bindParam( ':name', $sakusya, PDO::PARAM_STR);
$sql->bindParam( ':tanka', $tanka, PDO::PARAM_STR);
//SQL実行
$res = $sql->execute();
echo "<h3>登録完了</h3>";
echo '<a href="touroku.html">登録画面に戻る</a>';
}
catch(PDOException $e){
print("データベースの接続に失敗しました".$e->getMessage());
die();
}
// 接続を閉じる
$dbh = null;
?>
HTMLのフォームから受け取ってきた値をhtmlspecialchars関数で変換してから変数$sakusya,$tankaに入れています。この関数はHTMLのフォームにjavascriptの関数などを入れてプログラムを悪用する(SQLインジェクション)ことのできないようにするものです。
その後prepareメソッドにSQL文を書いています。SQL文は先に作成したデータベースを操作する言語です。あまり触れませんが、この例ではhyakunin_issyuというテーブルのname,tankaフィールドに値を挿入するという意味です。PHPではプレースホルダを値にとり、直接何らかの値を指定する方式はとりません(セキュリティ的に問題があるため)。
そのプレースホルダはbindparamというメソッドでプレースホルダと変数を結びつけてから実際のSQL文を実行するという方式となっています。
これでどんどん百人一首をデータベースに登録していきましょう。