前回書いた記事「PHPで簡単な掲示板の作成方法」では、掲示板の基本となるデータベースの内容を取り出して表示させる方法について解説しました。
今回は、掲示板に書き込んだ内容をデータベースへと保存する方法についてお話していきます。
投稿フォームの仕組み
まずは今回作る投稿フォームがどのような動作をするものなのか説明します。
- リスト投稿フォームに名前やコメントを書き込む
- 投稿フォームに書き込まれた内容を送信する
- 投稿フォームから送信した内容を受け取る
- 受け取った内容をデータベースに書き込む
動作の流れはこのようになります。
では、この流れの中で必要なものを作っていきましょう。
投稿フォームをHTMLで作る
まずは1つめの「投稿フォームに名前やコメントを書き込む」を実現するために、投稿フォームを作ります。
投稿フォームそのものはHTMLタグを使って書きます。
<form>
<input type="text">
<input type="submit" value="書き込む">
</form>
こんな感じの基本的なフォームの書き方です。
しかし、これだけだと投稿フォームの表示はできますが、「書き込む」のボタンをクリックしてもデータのやり取りはできません。
データのやり取りを行うための部分をPHPで実装します。
HTMLで見た目を作ってPHPで動作を作るイメージです
投稿フォームの内容を送信する
PHPを実装するために、先程作ったフォームで、送信先のPHPファイルを指定します。
今回はsend.phpとします。また、データの送信方法にはPOSTを使います。
送信方法にはGETとPOSTがありますが、それぞれについての説明はここでは割愛します。
<form action="send.php" method="post">
<input type="text">
<input type="submit" value="書き込む">
</form>
これでフォームに書き込んだデータをsend.phpに送信することができます。
名前、コメント、削除用パスワードを入力したいので、それぞれの枠を作ります。
<form action="send.php" method="post">
<input type="text">
<input type="text">
<input type="text">
<input type="submit" value="書き込む">
</form>
しかし、これだけだとどれに何を入力したのか区別がつかなくなるので、それぞれに名前をつけます。
<form action="send.php" method="post">
<input type="text" name="name">
<input type="text" name="comment">
<input type="text" name="password">
<input type="submit" value="書き込む">
</form>
このようにそれぞれのBOXに名前をつけて送信するデータが何なのか区別できるようにします。
これで投稿フォームからの送信ができるようになりました。
PHPで受け取ったデータを処理する
ここからPHPの実装です。
先程作ったフォームで指定したsend.phpを作っていきます。
HTMLからPOSTされたデータをPHPで受け取る
HTMLからPOSTで送信されてきたデータはPHP内で$_POSTというスーパーグローバル変数と呼ばれる変数で受け取ることができます。
例えば、
<input name="name" type="text">
このBOXに入力されたデータは$_POST[“name”]へと格納されます。
そうです、それぞれのBOXに付けた名前に紐付いているのです。
そのため、commentとpasswordもそれぞれ$_POST[“comment”]、$_POST[“password”]に格納されてます。
データベースへと登録する
これでPHPファイル内で投稿フォームから送信されたデータを扱うことができるようになったので、これらのデータをデータベースに格納していきます。データベースへの格納にはINSERT文を使います。
試しに先程受け取ったname、comment、passwordをINSERT文で表現してみます。
INSERT INTO table (name, comment, password) VALUE (:name, :comment, :password)”;
tableというテーブルの要素であるname、comment、passwordに対して:name、:comment、:passwordという値を入れるという意味になります。
これをPHPで実行して、データベースに登録してみましょう。
<?php
$insert = "INSERT INTO `table` (name, comment, password) VALUE (:name, :comment, :password)";
$stmt = $pdo->prepare($insert);
$param = $array(":name" => $_POST["name"], ":comment" => $_POST["comment"], ":password" => $_POST["password"]);
$stmt->execute($param);
?>
先程のINSERT文を変数$insertに代入し、それをprepareメソッドを使い名前の通りデータベースへ送信するための準備をします。このprepareメソッドを使うことにより、好きな箇所に好きな値を入れることができるようになります。
INSERT文で:name、:comment、:passwordという値が出てきましたが、これは「ここに後から値を代入しますよ」という目印と考えてもらえればOKです。これをINSERT文に入れて、prepareメソッドで準備しておくことにより、直接SQL文に値を入れることなく、後からその箇所に必要な値を代入するだけで済むようになるため使い回し等柔軟な対応が可能となります。
その後$param変数に、それぞれの目印にはどの値を入れるかを書きます。今回は投稿フォームから受け取った$_POST[“name”]、$_POST[“comment”]、$_POST[“password”]を代入したいので、それぞれ指定します。
これまで書いてきたものをexecuteメソッドを使うことによりはじめて実際にデータベースへと書き込むことができるといった流れになります。
PHPで掲示板の投稿フォームを作る方法まとめ
前回書いた記事「PHPで簡単な掲示板の作成方法」とあわせて今回で、
- 掲示板の内容を表示
- 投稿フォームへ書き込み
ここまでが実装できるようになりました。
掲示板としての最低限の機能は実装できるようになったことにはなりますが、このままでは書き込みの削除は管理者しか行うことができません。次回は今回登録した削除用パスワードを使用して、書き込みを削除する機能を実装していきます。