PHPのみに限らず、ウェブアプリケーションの基本的な仕組みは、フォームに入力されたデータに対して何らかの処理を行い、データベース等へ登録していくことです。まずは入門として、フォームを作成し、入力したデータを画面遷移させて次の画面に送ってみましょう。
スポンサーリンク
今回は、HTMLでフォーム画面(001.html)を作り、入力されたデータを次のページ(001.php)へと送り、表示させる仕組みを作ります。
フォーム画面を作成する
まずはHTMLでフォーム画面を作成します。
001.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<!DOCTYPE html> <html> <head> <title>001.html</title> <meta charset="utf-8"> </head> <body> <p>↓GETメソッドで送る</p> <form action="001.php" method="get"> 名前を入力:<input type="text" name="yourname"> <input type="submit" value="送信"> </form> <p>↓POSTメソッドで送る<p> <form action="001.php" method="post"> 名前を入力:<input type="text" name="yourname"> <input type="submit" value="送信"> </form> </body> </html> |
GETメソッドとPOSTメソッド
ユーザがブラウザからサーバに対してデータをリクエストする場合、主にGETメソッドとPOSTメソッドの2つに分かれます。
9〜13行目、15〜19行目の部分にそれぞれGETメソッドとPOSTメソッドによるフォーム(form)があります。method属性の部分でget及びpostを指定します。
以下のデモ画面のリンクを見てわかるように、GETメソッドの場合はURLの部分に入力したデータが表示されています。つまりURLを利用してデータを送っています。これはあえてデータが見えるようにするためで、URLをブックマークして保存することが可能となります(検索結果の画面など)。
?yourname=の後に「ウェブの葉」というワードが追記されている。
https://noumenon-th.net/programming/sample/php/001.php?yourname=ウェブの葉
POSTメソッドは、住所登録や問い合わせのような一般的なフォーム画面で利用され、大量のデータを送ることができます。
データの送信先は、formのaction属性においてそのファイル名を指定します。今回は001.phpを指定しています。 次にそのデータを受け取る側の001.phpを作成します。
001.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php //$_GETで受け取る $get_yourname = $_GET["yourname"]; //$_POSTで受け取る $post_yourname = $_POST['yourname']; ?> <!DOCTYPE html> <html> <head> <title>001.php</title> <meta charset="utf-8"> </head> <body> <p>↓GETメソッドで送った場合、名前が表示される<p/> <?php echo $get_yourname."さん、こんにちは"; ?> <p>↓POSTメソッドで送った場合、名前が表示される<p/> <?php echo $post_yourname."さん、こんにちは"; ?> </body> </html> |
4行目ではGETメソッドで送信された場合のリクエストを受け取っています。
同様に、 7行目ではPOSTメソッドで送信された場合のリクエストを受け取っています。
$_GETや$_POSTはスーパーグローバル変数と呼ばれ、それぞれGET、POSTメソッドで送信されたデータを受け取ることができます。
受け取ったデータは4行目の$get_yournameのように自分で変数を作成して、保存しています。保存したデータは、20行目及び23行目において出力させています。
※注意
上記のコードはセキュリティー対策を行っていません。例えば、クロスサイト・スクリプティング(XSS)対策のためにPOSTやGETで受け取った文字は、HTMLで表示させる直前にhtmlspecialchars()関数を利用してエスケープしなければいけません。
1 |
<?php echo htmlspecialchars($post_yourname, ENT_QUOTES, 'UTF-8')."さん、こんにちは"; ?> |
試しに上記のデモ画面にて <h1>サンプル</h1> を入力し、送信してみて下さい。h1タグが反映されてサンプルの文字が大きく表示されてしまいます。またFireFoxブラウザでデモ画面を開き、下記のスクリプトを入力してみて下さい。画面遷移先でアラートが表示されてしまいます(ChromeやSafariはある程度対策されています)。
1 |
<script>alert("こんにちは")</script> |
関連ページ