PHP入門 | form送信の基本 | フォームの送信
サーバーサイドプログラムを書くということは、「クライアントとサーバーの間で情報をやり取りする」ためのものだと言ってよい。ここでいうクライアントとは、サーバーにアクセスするプログラムである。つまりWebブラウザーのことだ。ブラウザーとサーバーの間でさまざまな情報をやり取りしながら動作するプログラムを作るには、サーバーサイドプログラムが必要になる。ブラウザーの中だけで動作するならJavaScriptだけで十分であり、サーバーサイドプログラムは不要である。
クライアントとサーバーの間でやり取りを行う場合、もっとも一般的に使われるのが「フォーム(form)」である。HTMLで入力フィールドやボタンなどを表示し、それを送信するおなじみの仕組みだ。フォームを用意し、それをサーバーへ送信し、送信された値をサーバープログラムで処理して、再びクライアントへ結果を返す。このようにWebアプリケーションは動作する。
それではPHPを使って、フォームから送られてきたデータを処理してみよう。次のような簡単な例を書いてみる。
<?php
$str = $_POST['text1'];
if ($str != null){
$result = "あなたは「{$str}」と書きました。";
} else {
$result = "何も書かれていません。";
}
?>
<!DOCTYPE html>
<html lang="ko">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>sample page</title>
</head>
<body>
<h1>Hello PHP!</h1>
<div><?php echo $result; ?></div>
<form method="post" action="./index.php">
<input type="text" name="text1">
<input type="submit">
</form>
</body>
</html>
これをWebブラウザーからアクセスしてみよう。
ここでは、次のような形でフォームを用意している。
-
<form>タグmethodは"post"、actionは"./index.php"である。methodは送信方式を示すもので、HTTPというプロトコルのGETまたはPOSTのどちらかを指定する。GETは通常ページの内容を受け取るためのもので、POSTはデータを書き込むためのものだ。どちらでも送信はできるが、ここではPOSTを指定する。- また、
actionはフォームの送信先を指定する。ここではこのindex.phpファイル自身へ送信している。つまりフォームを送信すると、サーバーで再びこのファイルを読み込み、送られてきたフォームをそこで処理するということだ。
-
<input type="text">タグ- テキストを入力するタグである。ここでは
name="text1"と指定している。これは重要である。フォームをサーバーへ送信したとき、送信されたデータはこのnameで識別されるからだ。
- テキストを入力するタグである。ここでは
-
<input type="submit">タグ- 送信ボタンである。これは特に
nameやidなどの設定は必要ない。送信以外にサーバー側へ影響するものがないためである。
- 送信ボタンである。これは特に
送信フォームと$_GET、$_POST
では、送信されたフォームの内容はどこでどのように受け取っているのだろうか。受け取っている部分は、ファイルの先頭にある<?php ?>タグ内にある。ここで次の処理を行っている。
$str = $_POST['text1'];
この$_POSTは、送信されたフォームの内容を保存する配列である。配列を覚えているだろうか。多くの値をまとめて管理できる特別な変数である。配列はインデックスで管理され、連想配列はキーという値で管理される。つまり$_POSTは「連想配列」なのである。
今回はPOSTで送信したため、この$_POSTに内容がまとめられた。もしGETで送信した場合は、$_GET配列にまとめられる。この2つの連想配列がフォームの内容を管理するためのものである。
この配列には、フォームの内容がnameで指定された名前ごとに整理されている。ここではname="text1"という属性のタグが用意されているため、$_POST['text1']のような形で値が保存されている。
注意したいのは、$_GETや$_POSTのようにPHPのシステムが提供する配列は「値を取り出すだけ」のものだという点である。たとえば、この値を書き換えてフォームに表示される値を設定しようとしても、それはできない。これはあくまで「送信されたデータを渡すだけ」のものだと考えよう。
テキストへ値を書き込むこと(変数展開)
ここでは、実はもう1つのテクニックを使っている。先頭のスクリプトで$resultにテキストを設定している部分を見てみよう。
$result = "あなたは「{$str}」と書きました。";
このように書かれている。{$str}は、変数$strの値をテキストの中へ入れている部分である。つまり、この場所に$strの内容が差し込まれたテキストが作られる。
ダブルクォート(")で囲まれたテキストには、このように変数を入れられる。つまり、さまざまな変数を使ってテキストを生成できるということだ。
逆に、$strという文字列そのものを出力したい場合は、シングルクォート(')を使ってテキストを作る。シングルクォートのテキストでは変数展開は行われず、書いたとおりのテキストを得られる。
echo 'Variables do not $str';
たとえば上のようにすると、画面にはVariables do not $strがそのまま表示される。
この2種類のテキストの書き方の違いは、しっかり覚えておこう。