HTML文の<form>タグにおいて、フォームへの入力データの送信先を指示するaction属性に「$_SERVER["PHP_SELF"]」を指定すると、そのPHPファイル自身にデータを送信することができます。この方法を使うと、「HTMLフォームを表示するためのHTML文」と「入力されたデータを処理するPHPスクリプト」を1つのPHPファイル内にまとめることができます。
この時、フォームを表示するためのHTMLは通常の書き方で構いません。データを受け取る側のPHPスクリプトでは、初めてそのPHPファイルが呼ばれたのか、あるいはHTMLフォームからデータが送信されて呼ばれたのかを判別する必要があります。この例では「isset($_POST["btnExec"])という式でそれを判別しています。
HTMLフォームからデータが送信された場合はsubmitボタンがクリックされているので、ボタンのname属性である「btnExec」という変数の情報も一緒に送られてきます。そして、そこにはボタンのvalue属性に設定された文字列が代入されています。変数に何らかの阿多が代入されているので、「isset($_POsT["btnExec"])」の返り値はTrueとなり、if文で囲まれた、受け取り側のデータを画面出力するスクリプトが実行されます。
一方、このPHPファイルが初めて呼ばれた場合は「btnExec」変数は未定義の状態で、「isset($_POST[btnExec])」はFalseを返します。このためif構文で囲まれたスクリプトは実行されず、以降のHTMLフォームを表示するHTML文だけがWebブラウザに送られます。
<!DOCTYPE HTML> <html lang="ja-JP"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <?php if(isset($_POST["btnExec"])){ $name = $_POST["username"]; $address = $_POST["useraddress"]; echo "送信送信されたデータは<br>"; echo "名前→" . $name . "<br>"; echo "住所→" . $address . "<br>"; } ?> 名前と住所を入力して「送信」ボタンをクリックしてください。 <form action="<?=$_SERVER["PHP_SELF"]?>" method="POST"> 名前:<input type="text" size="40" name="username"><br> 住所:<input type="text" size="40" name="useraddress"><br> <input type="submit" name="btnExec" value="送信"> </form> </body> </html>