создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

Урок 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>

Содержание

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

Ваше письмо×
Free Web Hosting