PHP実習:POSTとGET
今日も続きをやっていきます。仕事疲れた。
ちなみに、昨日までのMySQLの話でこの教材が半分終わったことになります。
第8章ー01
今までは別のページへデータを渡す方法としてPOSTを使っていたが、今回はGETについて学んでいく。取り急ぎhtmlでファイルを一つ作成。
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>GETでデータを送信する</h1>
<p>お名前を入力してください</p>
<form action="get_receive.php" method="GET">
<label>お名前</label>
<input type="text" name="name">
<label>趣味</label>
<input type="text" name="hobby">
<input type="submit" value="送信する">
</form>
</body>
</html>
どんなもんだい。次のページへのデータの受け渡し方法として、methodでGETを指定する。続いて、この次のページとなるget_receive.phpを作成する。
<?php
$name=$_GET['name'];
$hobby=$_GET['hobby'];
?><html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>受信ページ</h1>
<p>あなたの名前は<?php echo $name.;?>です。</p>
<p>あなたの趣味は<?php echo $hobby.;?>です。</p>
</body>
</html>
POSTのときと同じように、スーパーグローバル変数である$_GETができているので、それを使ってデータを取得する。書き方はPOSTのときと同じ。
実際にこのページへデータを送信してみると…
ちゃんとデータが送信されていることが分かるが、URL欄に着目すると先ほど入力した内容が「?name=あーる&hobby=プログラミング」と出ていることが分かる。試しに、入力欄に何も入れずに「送信する」ボタンを押すと…
名前に「R」、趣味に「映画」と入れると…
以上のテストで、入力内容に応じてURL欄の内容が変わることが分かる。このように、URLを通じてのデータ送信をGETという。
第8章-02
これを機にいろいろなフォームの部品を使ってみる。
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>POSTでデータを送信する</h1>
<p>プロフィールを登録しよう</p>
<form action="post_receive.php" method="POST">
<p>名前:<input type="text" name="name"></p>
<p>性別:
<input type="radio" name="sex" value="1">男
<input type="radio" name="sex" value="2">女
</p>
<p>血液型
<select name="blood">
<option value="A">A型</option>
<option value="B">B型</option>
<option value="O">O型</option>
<option value="AB">AB型</option>
</select>
</p>
<p>ひとこと:<br>
<textarea name="comment" rows="4" cols="40"></textarea>
</p>
<p><input type="submit" value="送信"></p>
</form>
</body>
</html>
次に、データの受信ページを作る。とりあえずvar_dumpで受け取った$_POSTを確認する。
<?php
var_dump($_POST); //POST全体の中身を確認
$name=$_POST['name'];
$sex=$_POST['sex'];
$blood=$_POST['blood'];
$comment=$_POST['comment'];
このように入力して送信すると…
こうなる。
これを基にしてHTML部分を作成する。
<?php
$name=$_POST['name'];
$sex=$_POST['sex'];
$blood=$_POST['blood'];
$comment=$_POST['comment'];
?>
<html>
<head>
<meta charset="utf-8">
<title>POST受信ページ</title>
</head>
<body>
<h1>受信ページ</h1>
<p>あなたの名前は<?php echo $name;?>さんです。</p>
<p>性別は
<?php if ($sex==="1") {
echo '男性';
}else{
echo '女性';
}?>
です。</p>
<p>血液型は<?php echo $blood; ?>型です。</p>
<p>
<?php echo n12br($comment); ?>
</p>
</body>
</html>
このように表示される。
なお、<textarea>に入力されたデータが改行を含む場合、改行を表す「\n」が入力されている。HTMLで出力するときにはこれを<br>に置き換える必要があり、n12brという関数は\nを<br>に変換するものである。
第8章-03
GETとPOSTの違いについてまとめる。
GET
・データの呼び方...クエリ情報
・データの渡し方...URLから送信。「キー名=値」を付加し、フォームからの送信も可。
・データの受け取り方...$_GET['キー名']
・送信できるデータ量...ブラウザによってサイズ制限がある(例:IE=2048バイト) 。最新バージョンのものでは無制限の場合もある。
・使用例...ブログのライタープロフィールページや記事など、データベースと連動してリンクが必要になる場合。
POST
・データの呼び方...ポストデータ
・データの渡し方...フォームから「name="キー名"」を指定して送信。URLには表示されない。
・データの受け取り方...$_POST['キー名']
・送信できるデータ量...事実上制限なし
・使用例...会員登録やお問い合わせなどのフォームからの送信データを取得する場合
GETではURLからデータが渡せるので、ブックマークしておくことができる、リンクができるという利点がある。
POSTによるデータ送信はデータ量が無制限なので、それ以外のケースすべてに使えるといえる。しかし、URLに表示されない=安全というわけではない。送信中に部外者からデータを覗かれないようにするには暗号化通信であるSSLを利用する。SSLを利用するとURLの最初が「https://~」となり、安全性の証明にもなる。
今夜はここまで、明日は画像データの送信と第8章の実習。
==========
近日中に各記事のタイトルを変更予定。今のままでは書いている本人も何がどこにあるかわからない。