PHPでの単一ファイルフォーム処理
前回のレッスンでは、フォームはあるページに配置され、
別のページに送信されました。
実際には、これは必須ではありません。
属性actionを空のままにするか、
完全に削除すると、フォームは同じページに送信されます。
動作方法:初めてページにアクセスしたとき、 フォームにデータを入力してボタンをクリックします。 その後、ページが更新され、フォームデータと共に コードが再度実行されます。
例を見てみましょう。1つのファイルに フォームとその処理があるとします:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
var_dump($_GET);
?>
ページに初めてアクセスしたとき、関数var_dump
は空の配列を出力します。フォーム送信後、
フォームデータを出力します。
つまり、最初は$_GETが空で、
2回目はフォームデータを含みます。
これは問題を引き起こす可能性があります。 例えば、フォームに数値を入力し、 それらの合計を画面に表示したいとします:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
echo $_GET['test1'] + $_GET['test2'];
?>
この場合、初めてページにアクセスすると、
$_GET配列が空なのにその要素に
アクセスしているため、PHPのエラーが表示されます。
ここで、ブラウザにエラーが表示されない場合もあることを 言及しておきます。その場合は、 PHPのエラー出力が有効になっていることを確認し、 アドレスバーにフォームデータがない状態で 初めてページにアクセスしていることを確認してください。
この問題を修正しましょう。そのためには、 フォームが送信されたかどうかを確認する条件を追加します。
例えば、$_GETが空でないかどうかを
確認できます。$_GETが空でない場合、
フォームが送信されたので、合計を実行できます。
それ以外の場合は、まだページへの初回アクセスであり、
合計は実行されません。修正されたコードは次のとおりです:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
if (!empty($_GET)) {
echo $_GET['test1'] + $_GET['test2'];
}
?>
ユーザーに姓、名、父称(ミドルネーム)を尋ねてください。 フォーム送信後、入力されたデータを画面に表示してください。