入力されたメッセージを受け取る
今回は、前回作成したフォームのHTMLから送信されるデータをPHPで受け取れるようにしていきます。
メッセージの入力フォームは次の3つのステップで作成していきますが、今回は2つ目の部分です。
- 入力フォームのHTMLを作成
- メッセージのデータを受け取る ← 今回
- ファイルへデータを書き込み
「ひと言掲示板を作る」の概要については「ひと言掲示板を作る」をご覧ください。
デモはこちら
前回作成したコードはこちら:Github
入力したデータの受け渡し
データの受け渡しはなんだか複雑になりそうなイメージですが、実際には驚くほどシンプルです。
すでに作成したフォームはデータの送信先を特に指定していませんが、この場合は「自分自身」に送信します。
次のようなイメージです。
つまり、1つのページでデータの送信&受信をどちらも行うことができてしまいます。
さらに、受け取ったデータは「スーパーグローバル」と呼ばれる変数の1つである「$_POST」に自動的に代入されるため、ここから簡単にアクセスすることができます。
なので実はデータの受け取り自体は手作業で行う必要がなく、自動的に取得したデータへのアクセスのみPHPで記述していきます。
スーパーグローバルは$_POST以外にもGET通信のデータが入る「$_GET」、セッションが入る「$_SESSION」、ファイルが入る「$_FILES」など様々なものが用意されています。
より詳しくは、PHPの公式ドキュメントを参照してください。
スーパーグローバル - php.net
受け取ったデータを表示してみる
とりあえず受け取ったデータを表示してみましょう。
前回作成した「index.php」に、次の赤字のコードを追記してください。
index.php
<?php
var_dump($_POST);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ひと言掲示板</title>
---- 省略 ----
コードを記述した後、ブラウザでアクセスしてみると次のように「array...」と空の配列データが表示されます。
これはアクセスした時点ではまだデータの受け渡しが行われていないため、$_POSTが空であることを示しています。
そこで、続いて次のようにデータを適当に入力して「書き込む」ボタンを押してみてください。
「書き込む」ボタンが押されると、POST形式による通信で「表示名」と「ひと言メッセージ」が送信されます。
そして、先ほどは空だった$_POSTにデータが自動的に代入されるため、次のように入力した内容が表示されます。
(データをそのまま出力しているだけなので見た目は気にしないでください)
出力されたデータを少し整えると次のようになります。
出力したデータ例
array(3) {
["view_name"]=> string(15) "テスト太郎"
["message"]=> string(52) "POST通信によるデータの受け取りテスト"
["btn_submit"]=> string(12) "書き込む"
}
受け取ったデータをよくみると、HTMLで指定したname属性に対応する形で入力した値が渡されていることを確認できます。
ちなみに、「書き込む」ボタンもinput要素なので、ボタンが押されると入力データとして一緒に送信されます。
データが渡されたか確認する
ここまででデータの受け渡しを確認することができました。
ここからもう一歩進んで、「index.php」を読み込む際に入力データの受け渡しがあるかを確認する機能を実装していきます。
入力データの受け渡しの有無をPHPで調べることができたら、ユーザーはメッセージの書き込みを行なおうとしているのか、もしくは掲示板を表示したいのかを判断することができるようになります。
フォームで入力したデータは$_POSTに代入されるので、ここにデータがあるかを確認することで入力データの受け渡しがあるかを判断できそうです。
そこで、データが送信される時に必ず押される「書き込み」ボタンが$_POSTに含まれているかを調べて判断するようにしましょう。
先ほど記述したPHPのコードを、次のように修正します。
index.php
<?php
if( !empty($_POST['btn_submit']) ) {
var_dump($_POST);
}
?>
---- 省略 ----
もともとあった「var_dump($_POST);」をif文で囲む形になります。
「書き込み」ボタンのデータは$_POST['btn_submit']からアクセスできますが、この変数が存在しているかを確認するためにempty関数を使います。
empty関数は変数が存在しない、または空であればtrueを返す関数です。
今回はその反対の意味で「空じゃなければtrue」にしたいので、関数の前に「!」を付けています。
これで、ユーザーが書き込みを行うためにページを開いたのかを自動的に判別できるようになりました。
今回はここまでにになります。
入力されたデータをPHPで受け取る機能と、データの受け渡しがあるかを確認する機能を付けました。
次回は渡されたデータをテキストファイルに書き込んで保存する機能を付けていきます。
今回作成したコード:Github