PHPでの単一ファイルフォーム処理

前回のレッスンでは、フォームはあるページに配置され、 別のページに送信されました。 実際には、これは必須ではありません。 属性actionを空のままにするか、 完全に削除すると、フォームは同じページに送信されます。

動作方法:初めてページにアクセスしたとき、 フォームにデータを入力してボタンをクリックします。 その後、ページが更新され、フォームデータと共に コードが再度実行されます。

例を見てみましょう。1つのファイルに フォームとその処理があるとします:

form.php<form action="" method="GET">
  <input name="test1">
  <input name="test2">
  <input type="submit">
</form>

<?php
  var_dump($_GET);
?>

ページに初めてアクセスしたとき、関数var_dump は空の配列を出力します。フォーム送信後、 フォームデータを出力します。 つまり、最初は$_GETが空で、 2回目はフォームデータを含みます。

これは問題を引き起こす可能性があります。 例えば、フォームに数値を入力し、 それらの合計を画面に表示したいとします:

html<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が空でない場合、 フォームが送信されたので、合計を実行できます。 それ以外の場合は、まだページへの初回アクセスであり、 合計は実行されません。修正されたコードは次のとおりです:

html<form action="" method="GET">
  <input name="test1">
  <input name="test2">
  <input type="submit">
</form>

<?php
  if (!empty($_GET)) {
    echo $_GET['test1'] + $_GET['test2'];
  }
?>
Задание 1

ユーザーに姓、名、父称(ミドルネーム)を尋ねてください。 フォーム送信後、入力されたデータを画面に表示してください。