PHP Формы и пользовательский ввод


Переменные $_GET и $_POST в PHP используются для получения информации из форм, такой как пользовательский ввод.


Обработка форм в PHP

Важно отметить, что при обработке HTML-форм PHP может автоматически делать элементы формы со страницы HTML доступными для PHP-скриптов.

Пример

Следующий пример содержит 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>

Когда пользователь заполняет форму выше и нажимает кнопку отправки, данные формы будут отправлены в PHP-файл с именем "welcome.php":

код файла welcome.php:

Добро пожаловать<?php echo $_POST["fname"]; ?>!<br>Ваш возраст<?php echo $_POST["age"]; ?>лет.

Демонстрация, доступная через браузер, выглядит следующим образом:

Мы объясним переменные $_GET и $_POST в PHP в следующей главе.


Получение данных выпадающего меню в PHP

Выпадающее меню PHP (одиночный выбор)

В следующем примере мы задаём три опции для выпадающего меню. Форма использует метод GET для получения данных. Пустое значение атрибута action означает отправку текущему скрипту. Мы можем получить значение выпадающего меню через атрибут name элемента select:

код файла php_form_select.php:

<?php $q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : ''; if($q) { if($q =='EXAMPLE') { echo 'Пример руководства<br>http://www.example.com'; } else if($q =='GOOGLE') { echo 'Поиск Google<br>http://www.google.com'; } else if($q =='TAOBAO') { echo 'Taobao<br>http://www.taobao.com'; } } else { ?>
<form action="" method="get"> <select name="q"> <option value="">Выберите сайт:</option> <option value="EXAMPLE">Пример</option> <option value="GOOGLE">Google</option> <option value="TAOBAO">Taobao</option> </select> <input type="submit" value="Submit"> </form>
<?php } ?>

Выпадающее меню PHP (множественный выбор)

Если раскрывающееся меню является множественным выбором (multiple="multiple"), мы можем задать у selectname="q[]", чтобы получить значения в виде массива. Далее используется метод POST для отправки, код выглядит следующим образом:

Код файла php_form_select_mul.php:

<?php $q = isset($_POST['q'])? $_POST['q'] : ''; if(is_array($q)) { $sites = array( 'EXAMPLE' => 'Пример руководства: http://www.example.com', 'GOOGLE' => 'Поиск Google: http://www.google.com', 'TAOBAO' => '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="EXAMPLE">Example</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 =='EXAMPLE') { echo 'Пример руководства<br>http://www.example.com'; } else if($q =='GOOGLE') { echo 'Поиск Google<br>http://www.google.com'; } else if($q =='TAOBAO') { echo 'Taobao<br>http://www.taobao.com'; } } else {
?><form action="" method="get"> <input type="radio" name="q" value="EXAMPLE" />Пример <input type="radio" name="q" value="GOOGLE" />Google <input type="radio" name="q" value="TAOBAO" />Taobao <input type="submit" value="Отправить"> </form>
<?php } ?>

Флажок

Флажки PHP могут выбирать несколько значений:

Код файла php_form_select_checkbox.php:

<?php $q = isset($_POST['q'])? $_POST['q'] : ''; if(is_array($q)) { $sites = array( 'EXAMPLE' => 'Пример руководства: http://www.example.com', 'GOOGLE' => 'Поиск Google: http://www.google.com', 'TAOBAO' => '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="EXAMPLE"> Пример<br> <input type="checkbox" name="q[]" value="GOOGLE"> Google<br> <input type="checkbox" name="q[]" value="TAOBAO"> Taobao<br> <input type="submit" value="Submit"> </form>
<?php } ?>

Проверка формы

Мы должны проверять пользовательский ввод как можно больше (с помощью клиентских скриптов). Проверка в браузере быстрее и может снизить нагрузку на сервер.

Если пользовательский ввод необходимо вставить в базу данных, следует рассмотреть возможность использования серверной проверки. Хороший способ проверки форм на сервере — отправлять данные формы на текущую страницу (асинхронная отправка даже лучше), а не перенаправлять на другую страницу. Так пользователи могут получать сообщения об ошибках на той же странице формы, что упрощает обнаружение ошибок.

Другие расширения