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) { //PHP_EOL は改行用の定数です 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) { //PHP_EOL は改行用の定数です 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 つは、フォームのデータを別のページにリダイレクトするのではなく、現在のページに送信することです(非同期送信の方がさらに良いです)。これにより、ユーザーは同じフォームページでエラーメッセージを確認でき、エラーを見つけやすくなります。

その他の拡張