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

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

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

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

<form action="" method="GET"> <input name="test1"> <input name="test2"> <input type="submit"> </form> <?php var_dump($_GET); ?>

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

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

<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 не пустой - то форма была отправлена и можно выполнять суммирование. В противном случае у нас еще первый заход на страницу и суммирование выполнено не будет. Итак, вот исправленный код:

<form action="" method="GET"> <input name="test1"> <input name="test2"> <input type="submit"> </form> <?php if (!empty($_GET)) { echo $_GET['test1'] + $_GET['test2']; } ?>

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