PHP フォームとユーザー入力
PHP の $_GET 変数と $_POST 変数は、フォーム内の情報(ユーザー入力など)を取得するために使用されます。
PHP フォーム処理
重要な点として、HTML フォームを処理するとき、PHP は HTML ページ内のフォーム要素を自動的に PHP スクリプトで使用できるようにします。
実例
以下の例には、2 つの入力ボックスと 1 つの送信ボタンを備えた HTML フォームが含まれています。
form.html ファイルのコード:
<html>
<head>
<meta charset="utf-8">
<title>サンプル(example.com)</title>
</head>
<body>
<form action="welcome.php" method="post">名前:<input type="text" name="fname">年齢:<input type="text" name="age">
<input type="submit" value="送信">
</form>
</body>
</html>
ユーザーが上記のフォームに記入して送信ボタンをクリックすると、フォームのデータは "welcome.php" という名前の PHP ファイルに送信されます。
welcome.php ファイルのコード:
ようこそ<?php echo $_POST["fname"]; ?>!<br>あなたの年齢は<?php echo $_POST["age"]; ?>歳です。
ブラウザでアクセスしたデモは次のとおりです。

次の章では、PHP の $_GET 変数と $_POST 変数について説明します。
PHP ドロップダウンメニューのデータを取得する
PHP ドロップダウンメニュー 単一選択
以下の例では、ドロップダウンメニューに 3 つのオプションを設定しています。フォームは GET 方式でデータを取得し、action 属性の値が空の場合は現在のスクリプトに送信されます。select の name 属性からドロップダウンメニューの値を取得できます。
php_form_select.php ファイルのコード:
<?php
$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
if($q) {
if($q =='サンプル') {
echo 'サンプル<br>http://www.example.com';
} else if($q =='GOOGLE') {
echo 'Google 検索<br>http://www.google.com';
} else if($q =='TAOBAO') {
echo '淘宝<br>http://www.taobao.com';
}
} else {
?>
<form action="" method="get">
<select name="q">
<option value="">サイトを選択してください:</option>
<option value="サンプル">サンプル</option>
<option value="GOOGLE">Google</option>
<option value="TAOBAO">Taobao</option>
</select>
<input type="submit" value="送信">
</form>
<?php
}
?>
PHP ドロップダウンメニュー 複数選択
ドロップダウンメニューが複数選択の場合( multiple="multiple")、select を設定することでname="q[]"配列として取得できます。以下は POST 方式で送信する例で、コードは次のとおりです。
php_form_select_mul.php ファイルのコード:
<?php
$q = isset($_POST['q'])? $_POST['q'] : '';
if(is_array($q)) {
$sites = array(
'サンプル' => 'サンプル: http://www.example.com',
'GOOGLE' => 'Google 検索: http://www.google.com',
'TAOBAO' => '淘宝: http://www.taobao.com',
);
foreach($q as $val) {
echo $sites[$val] . PHP_EOL;
}
} else {
?>
<form action="" method="post">
<select multiple="multiple" name="q[]">
<option value="">サイトを選択してください:</option>
<option value="サンプル">サンプル</option>
<option value="GOOGLE">Google</option>
<option value="TAOBAO">Taobao</option>
</select>
<input type="submit" value="送信">
</form>
<?php
}
?>
ラジオボタンフォーム
PHP のラジオボタンフォームでは、name 属性の値は同じで、value の値は異なります。コードは次のとおりです。
php_form_radio.php ファイルのコード:
<?php
$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
if($q) {
if($q =='サンプル') {
echo 'サンプル<br>http://www.example.com';
} else if($q =='GOOGLE') {
echo 'Google 検索<br>http://www.google.com';
} else if($q =='TAOBAO') {
echo '淘宝<br>http://www.taobao.com';
}
} else {
?><form action="" method="get">
<input type="radio" name="q" value="サンプル" />サンプル
<input type="radio" name="q" value="GOOGLE" />Google
<input type="radio" name="q" value="TAOBAO" />Taobao
<input type="submit" value="送信">
</form>
<?php
}
?>
checkbox チェックボックス
PHP checkbox チェックボックスでは、複数の値を選択できます:
php_form_select_checkbox.php ファイルのコード:
<?php
$q = isset($_POST['q'])? $_POST['q'] : '';
if(is_array($q)) {
$sites = array(
'サンプル' => 'サンプル: http://www.example.com',
'GOOGLE' => 'Google 検索: http://www.google.com',
'TAOBAO' => '淘宝: http://www.taobao.com',
);
foreach($q as $val) {
echo $sites[$val] . PHP_EOL;
}
} else {
?><form action="" method="post">
<input type="checkbox" name="q[]" value="サンプル"> サンプル<br>
<input type="checkbox" name="q[]" value="GOOGLE"> Google<br>
<input type="checkbox" name="q[]" value="TAOBAO"> Taobao<br>
<input type="submit" value="送信">
</form>
<?php
}
?>
フォーム検証
ユーザー入力はできる限り検証する必要があります(クライアントスクリプトを使用)。ブラウザでの検証は高速で、サーバーの負荷を軽減できます。
ユーザー入力をデータベースに挿入する必要がある場合は、サーバー側での検証を検討する必要があります。サーバーでフォームを検証する良い方法の 1 つは、フォームのデータを別のページにリダイレクトするのではなく、現在のページに送信することです(非同期送信の方がさらに良いです)。これにより、ユーザーは同じフォームページでエラーメッセージを確認でき、エラーを見つけやすくなります。
その他の拡張