Урок 9. Формы в PHP
Теория
Формы - это элементы HTML-страницы, в которые пользователь может вводить данные, например, свое имя, фамилию, возраст, логин и пароль и так далее.
Эти данные затем могут быть переданы в PHP и обработаны нужным образом.
К примеру, пользователь вводит свое имя и фамилию в форму, нажимает на кнопку отправки и введенные данные уходят на сервер в PHP. Там получаем введенные имя и фамилию и, к примеру, сохраняем их в базу данных.
Как сделать форму на HTML
Форма создается с помощью тега form. Этот тег имеет 2 важных атрибута.
Атрибут action задает адрес страницы сайта, на которую будут отправляться введенные данные. Если оставить этот атрибут пустым - будет задействована текущая страница сайта.
Атрибут method задает способ отправки формы. Может принимать значение GET или POST. При отправки методом GET данные из формы будут видны в адресной строке, а при отправке методом POST - не видны.
Имейте ввиду, что PHP-код страницы с формой выполнится не 1 раз, как может показаться, а 2 раза - 1-й раз пользователь зайдет на страницу сайта, заполнит форму, нажмет на кнопку отправки, данные из формы отправятся на сервер и PHP-код страницы начнет выполняться сначала.
Поля формы
Внутри тега form можно располагать различные элементы формы: поле ввода input, кнопку отправки формы, многострочное поле ввода textarea и некоторые другие элементы, которые нам пока не нужны.
Пример формы:
<form method=GET>
<input type=text name=u>
<textarea name=m></textarea>
<input type=submit>
</form>
Отправить
Как получить данные из формы в PHP
Можно получить данные, которые ввел пользователь в форму, в PHP-коде. Это делается с помощью глобальных массивов $_GET, $_POST, $_REQUEST.
В $_GET будут лежать данные, отправленные методом GET, в $_POST будут лежать данные, отправленные методом POST, в $_REQUEST - данные, отправленные и тем, и другим методом одновременно.
Как это делается: пусть в форме есть input с атрибутом name=u. Тогда после отправки этой формы мы можем получить данные из этого input таким образом: $_GET[u] или $_POST[u], или $_REQUEST[u].
Сохраняем значения полей формы после отправки
Сделать так, чтобы при отправке формы не стирались значения из input:
<form method=GET>
<input type=text name=u value="<?echo$_REQUEST[u]?>">
<input type=submit>
</form>
Пример выше будет генерировать предупреждение PHP при 1-м заходе на страницу, в случае, когда отправка формы еще не была сделана. Исправим это:
<form method=GET>
<input name=u value="<?if(isset($_REQUEST[u]))echo$_REQUEST[u]?>">
<input type=submit>
</form>
Видео по теме: yadi.sk/d/KHfTDYtjfqbQL
Практика
Примеры решения задач
Задача
Спросить город пользователя с помощью формы. Результат записать в переменную $g. Вывести на экран фразу 'Ваш город: %Город%'.
Решение:
<form method=GET>
<input type=text name=g>
<input type=submit>
</form>
<?/*Если форма была отправлена и город не пустой:*/if(!empty($_REQUEST[g])){$g=$_REQUEST[g];echo'Ваш город: '.$g;}?>
Задача
Запрет ввода тегов.
Решить предыдущую задачу так, чтобы пользователь не мог вводить теги и сломать сайт. Для этого при записи содержимого поля в переменную $g обработать содержимое, т.е. $_REQUEST['g']) функцией strip_tags, которая удалит теги (можно вместо нее обработать функцией htmlspecialchars):
ПРОВЕРЬ!!!
<form method=GET>
<input type=text name=g>
<input type=submit>
</form>
<?/*Если форма была отправлена и город не пустой:*/if(isset($_REQUEST[g])){$g=strip_tags($_REQUEST[g]);echo'Ваш город: '.$g;}?>
Задача
Скрыть форму после отправки.
Сделать так, чтобы форма после отправки скрывалась:
<?/*Если город пустой, покажем форму*/if(isset($_REQUEST[g])){?>
<form method=GET>
<input type=text name=g>
<input type=submit>
</form>
<?}?>
<?/*Если форма была отправлена и город не пустой:*/if(isset($_REQUEST[g])){$g=strip_tags($_REQUEST[g]);echo'Ваш город: '.$g;}?>
Задачи для решения. Формы
Задача
Спросить имя пользователя с помощью формы. Результат записать в переменную $n. Вывести на экран фразу 'Привет, %Имя%'.
Решение:
<form method=GET>
<input type=text name=n>
<input type=submit>
</form>
<?if(isset($_REQUEST[n])){$n=$_REQUEST[n];echo'Привет, '.$n;}?>
Задача
Спросить у пользователя имя, возраст, а также попросите его ввести сообщение (в textarea). Вывести эти данные на экран в формате, приведенном под данной задачей. Позаботиться о том, чтобы пользователь не мог вводить теги (удалить теги) и ломать сайт.
Привет, Иван. Ваш возраст 25.
Ваше сообщение: …
Решение:
<form method=GET>
<input type=text name=n>
<input type=text name=v>
<textarea name=m></textarea>
<input type=submit name=s>
</form>
<?if(isset($_REQUEST[s])){$v=strip_tags($_REQUEST[v]);$n=strip_tags($_REQUEST[n]);$m=strip_tags($_REQUEST[m]);echo"Привет, $n. Ваш возраст $v. Ваше сообщение: $m";}?>
Задача
Спросить возраст пользователя. Если форма была отправлена и введен возраст, то вывести его на экран, а форму убрать. Если же форма не была отправлена (это будет при 1-м заходе на страницу), просто показать ее.
Решение:
<?if(!isset($_REQUEST[v])){?>
<form method=GET>
<input type=text name=v>
<input type=submit>
</form>
<?}?>
<?if(isset($_REQUEST[v])){$v=strip_tags($_REQUEST[v]);echo'Ваш возраст '.$v;}?>
Задача
Спросить у пользователя логин и пароль (в браузере должны быть звездочки). Сравнить их с логином $l и паролем $p, хранящихся в файле. Если все верно, вывести "Доступ разрешен", иначе, - "Доступ запрещен". Сделать так, чтобы скрипт обрезал концевые пробелы в строках, которые ввел пользователь.
ПРОВЕРЬ!!!
Решение:
<form method=GET>
<input type=text name=l>
<input type=password name=p>
<input type=submit name=s>
</form>
<?if(isset($_REQUEST[s])){$l=u;$p=1;$o=trim($_REQUEST[l]);$q=trim($_REQUEST[p]);if($l==$o and$p==$q){echo'Доступ разрешен';}else{echo'Доступ запрещен';}}?>
Атрибуты value и placeholder
Задача
Спросить имя пользователя с помощью формы. Результат записать в переменную $n. Сделать так, чтобы после отправки формы значения ее полей не пропадали.
Решение:
<form method=GET>
<input name=n value="<?if(isset($_GET[n]))echo$_GET[n]?>">
<input type=submit name=s>
</form>
<?if(isset($_REQUEST[s])){$n=$_REQUEST[n];echo$n;}?>
Задача
Спросить у пользователя имя, а также попросить его ввести сообщение (textarea). Сделайть так, чтобы после отправки формы значения его полей не пропадали.
Решение:
<form method=GET>
<input name=n value="<?if(isset($_GET[n]))echo$_GET[n]?>">
<textarea name=m><?if(isset($_GET[m]))echo$_GET[m]?></textarea>
<input type=submit>
</form>