Обработка формы в одном файле PHP

В предыдущем уроке наша форма была размещена на одной странице, а отправлялась на другую. На самом деле это не обязательно. Если оставить атрибут action пустым или убрать его совсем, то форма будет отправляться на эту же страницу.

Как это будет работать: при первом заходе на страницу мы заполним форму данными и нажмем на кнопку. После этого страница обновится и ее код выполнится снова, но уже с данными формы.

Давайте посмотрим на примере. Пусть у нас в одном файле есть форма и ее обработка:

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

<?php
  var_dump($_GET);
?>

При первом заходе на страницу функция var_dump выведет пустой массив. А после отправки формы он выведет уже данные формы. To есть первый раз $_GET будет пуст, а второй раз - будет содержать данные формы.

Это может привести к проблемам. Пусть, к примеру, мы в форму будем вводить числа и хотим вывести сумму этих чисел на экран:

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

<?php
  echo $_GET['test1'] + $_GET['test2'];
?>

В этом случае при первом заходе на страницу мы увидим ошибки PHP, связанные с тем, что массив $_GET пуст, а мы обращаемся к его элементам.

Здесь следует сказать, что у вас ошибки могут и не появится в браузере. В этом случае проверьте, что у вас включен вывод ошибок 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

Спросите у пользователя фамилию, имя и отчество. После отправки формы выведите на экран введенные данные.