ついにメールフォームを作成します!
このあたりからPHPを駆使していきますね。
メールフォーム用のHTMLを作成
準備中としていたinquiry.phpを、以下のように修正します。
<?php $page_title = "お問い合わせ";?> <?php require "header.php";?> <p> お問い合わせは以下よりお願いします </p> <form action="inquiry.php" method="post"> <div> お名前<br> <input type="text" name="uname" size="30"> </div> <div> メールアドレス<br> <input type="text" name="email" size="30"> </div> <div> お問い合わせ内容<br> <textarea name="body" rows="5" cols="20"></textarea> </div> <div> <input type="submit" name="send" value="送信する"> </div> </form> <?php require "footer.php";?>
以下は各行の説明です。
<form action="inquiry.php" method="post">
formタグによって、以降のinputタグに入力された値を送信します。
「送信する」ボタンが押されると、formタグに囲まれた範囲の入力項目がセットになって、指定されたページに飛ばされます。
“inquiry.php”(自分自身のページ)へ、”post”方式で送信するという記述になります。
なお、主なmethodには「post」と「get」があります。こういったフォーム送信については、まずは「post」で行うと覚えておいてください。
お名前<br> <input type="text" name="uname" size="30">
inputタグとtype=”text”の指定により、テキスト入力フォームが表示されます。
name=”uname”という指定により、入力された値はunameという名前で送信されます。
お問い合わせ内容<br> <textarea name="body" rows="5" cols="20"></textarea>
textareaタグは、複数行のテキストを入力するための入力項目を表示します。
name=”body”という指定により、入力された値はbodyという名前で送信されます。
rows=”5″は入力枠の行数が5行であることを意味します。
cols=”20″は入力枠の幅が20文字であることを意味します。
<input type="submit" name="send" value="送信する">
type=”submit”と指定されたボタンをクリックされると、formの中身を送信します。
name=”send”という指定により、value値(「送信する」という文字列)はsendという名前で送信されます。
上記のinquiry.phpを表示すると、以下のようになります。
送信した値を確認
さて、「送信する」ボタンを押したあと、値はどこに飛ばされてくるのでしょうか。
それはformタグに書かれた、action=”inquiry.php”に答えがあります。
今回のケースでは、送信された値は自分自身である、「inquiry.php」に飛んでくるわけです。
そこで、送信するデータを確認するために、ブラウザの開発者ツールを利用してみます。
開発者ツールの起動
はじめに、ブラウザから先ほど作成したinquiry.phpをApache経由で表示します。
表示されたら、キーボード奥側の、「F12キー」を押してください。すると開発者ツールが表示されます。
今回はInternet Explorler 11での例になりますが、最近のブラウザならほぼ同じ手順になります。
開発者ツールが表示されたら、「ネットワーク」タブを開き、通信内容のキャプチャを開始します。キャプチャを開始すると、以降の通信内容が記録されるようになります。
キャプチャ実行
フォームに値を入力したら、「送信する」ボタンを押します。
すると、開発者ツールに送信内容が記録されます。
結果一覧の中から、inquiry.phpの行をダブルクリックします。
通信内容の確認
上記に続いて、「詳細」「要求本文」を選択します。
すると、postされた通信内容が表示されます。
データはエンコードされて、一連の文字列になってサーバに送信されたわけです。
Apacheのログ確認
ついでに、Apacheのログも見てみましょう。
C:\xampp\apache\logs\access.log
をテキストエディタで開いて一番下の行を確認します。
すると、
::1 - - [02/Apr/2016:19:40:21 +0900] "GET /step1-050/style.css HTTP/1.1" 200 108 "http://localhost/step1-050/inquiry.php" "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko"
こんな感じで記録されているのがわかります。
前述の「開発者ツール」ではブラウザサイドからの確認であるのに対して、Apacheのログ表示については、サーバサイドでの確認になります。
この両者を活用することで、行き詰まったときのヒントになります。
PHPでの確認
プログラムの上部に、
<?php var_dump($_REQUEST);?>
を記載することで、送信されてきた値をダンプ出力することができます。
上記を記載して「送信する」ボタンを押してみてください。
以下のような結果が表示されます。
<?php var_dump($_REQUEST);?> <?php $page_title = "お問い合わせ";?> <?php require "header.php";?> <p> お問い合わせは以下よりお願いします </p> ・・・・・・
また、ダンプ内容が読みづらいようでしたら、ブラウザの操作で「ソースを表示」をすると、わかりやすくなります。ソースの表示については、画面上で右クリックをするとメニューが出てきますので、その中から「ソースの表示」を選ぶと行えます。
今回var_dump関数によってダンプされているのは、$_REQUESTという配列型(array)の変数です。
通常の数値型や文字列型の変数では1つの値しか格納できませんが、配列型では、複数の値を格納することができます。
array(4) { ["uname"]=> string(12) "山田太郎" ["email"]=> string(16) "test@example.com" ["body"]=> string(41) "こんにちは! はじめまして!" ["send"]=> string(12) "送信する" }
PHPに渡されるパラメータ
postやgetメソッドで値が送信されると、PHPでは値をスーパーグローバル変数に展開し、プログラムで利用できる状態になります。
スーパーグローバル変数
PHPではスーパーグローバル変数というものがあり、この変数はプログラムのどこからでも呼び出せます。
前述の例で使った「$_REQUEST」という変数もスーパーグローバル変数です。
PHPのプログラムでは、ユーザーが送信した値をスーパーグローバル変数などから取り出して、メール送信に使ったり、データベース登録に使ったりします。
スーパーグローバル変数は、主要なものに以下のようなものがあります。
$_POST
postメソッドで送信されてきた値が格納されます。
$_GET
getメソッドで送信されてきた値が格納されます。
$_COOKIE
クッキーで送信されてきた値が格納されます。
$_REQUEST
$_POST/$_GET/$_COOKIEの結果が合わさった値が格納されます。
$_SESSION
セッションの値が格納されます。
$_SERVER
Webサーバの情報が格納されます。
getメソッドについて
上記ではpostメソッドを例にしていますが、getメソッドを利用することができます。
getメソッドは、送信値をURLに含める形で表現したデータ送信方法です。
postではなくgetで送信するように修正
inquiry.phpのformタグを以下のように修正します。
<form action="inquiry.php" method="get">
ブラウザから送信
上記に修正したら、フォームに値を入力して、「送信する」を押します。
すると、URL欄に値が入ってきます。
それでも、$_REQUESTに入ってくる値は同じです。
URLに含めた値を取得するケースはありますが、『わざわざアプリケーションで、フォーム値をgetで送信する』というケースはあまりありません。