В этом уроке мы рассмотрим работу с формами.
Нарисуем простую форму
<form id="form1" name="form1" method="post" action=""> <p> <label for="myinput"></label> <input type="text" name="myinput" id="myinput" /> </p> <p> <input type="submit" name="go" id="go" value="Отправить" /> </p> </form>
В php для обработки данных из форм существую специальные переменные: $_POST, $_GET, $_REQUEST
Впрочем, переменные $_GET, $_REQUEST обрабатывают, например, адресной строки, которые прекрасно передаются и без формы (index.php?id=1 например)
Приведенная выше форма отправляет данные через пост, соответственно, для ее обработки мы будем использовать переменную $_POST.
Как это работает: пользователь на сайте нажимает кнопку “отправить”, и передает данные, которые он ввел в текстовом поле (вариантов форм намного больше, но сейчас мы рассмотрим только текстовое поле), если у нас имя поля выглядит как myinput, то переменная, принимающая значение вписанных туда данных будет выглядеть как $_POST[‘myinput’].
В описании формы есть атрибуты method=”post” и action=””. method=”post” означает что данные будут переданные методом пост, и не будут видны ни в адресной строке, ни где либо еще при отправке. action=”” означает скрипт, на который будет идти отправка данных из формы, пустое значение означает, что данные отправляются в текущую страницу.
Теперь давайте напишем php код для обработки отправленных данных
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Страница обработки данных из формы</title> </head> <body> <?php if ($_POST['myinput']) // если существует перемення $_POST['myinput'] { echo 'Вот данные, который вы ввели в текстовое поле: '.$_POST['myinput'];// выводим ее содержимое на экран } ?> <form id="form1" name="form1" method="post" action=""> <p> <label for="myinput"></label> <input type="text" name="myinput" id="myinput" /> </p> <p> <input type="submit" name="go" id="go" value="Отправить" /> </p> </form> </body> </html>
сохраняем все это в файл, переходим на эту страницу браузером, вводим что нибудь в поле, жмем кнопку, и видим вывод на экран введенных данных. if ($_POST[‘myinput’])это упрощенная форма проверки, дословно она говорит “если переменная $_POST[‘myinput’]”. Более правильно было бы написать
if (isset($_POST['myinput']))
что означает “а существует ли переменная $_POST[‘myinput’]”. На самом деле, как правило приходится пользоваться немного другой структурой. Ведь пользователь может ничего не ввести в поле, тогда отправка данных лишена смысла т.е. поля формы пустые, соответственно, следует проверять, ввел пользователь что-либо или нет. Для этого я использую конструкцию !empty. По отдельности “!” и “empty” означают одно и тоже – пустое значение, насколько я могу судить, разница лишь в том, что ! это оператор, а empty функция. В паре они образуют интересную конструкцию, которая означает следующее: если переменная установлена, т.е. существует, и она не несет пустое значение. В практике пишется так:
if (!empty($_POST['myinput']))
Немного о функциях: функции, это предопределенные инструкции поведения. Бывают функции, заложенные в самом языке программирования (такие как echo, empty и многие другие, которые мы обязательно изучим), а бывают написанные самостоятельно. К ним мы подойдем чуть позже.
Вернемся к формам. Кроме текстовых полей, вы наверняка видели в Сети множество других типов input: это флажки, радиокнопки, выпадающий список и пр. Все они выглядят по разному, но у всех одна и та же функция – передать данные на обработку скрипту. Ниже я написал для урока небольшую программу-калькулятор, ознакомьтесь с тем, какие виды инпутов в ней использованы, и то, как они обрабатываются скриптом.
[spoiler show=”Показать” hide=”Скрыть”]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Страница обработки данных из формы</title> </head> <body> <?php if (!empty($_POST['num1']) && !empty($_POST['num2'])) // если существует перемення $_POST['myinput'] { if ($_POST['op']=='+') { $say=' суммы '; $res=$_POST['num1']+$_POST['num2']; } elseif ($_POST['op']=='-') { $say=' вычитания '; $res=$_POST['num1']-$_POST['num2']; } elseif ($_POST['op']=='/') { $say=' деления '; $res=$_POST['num1']/$_POST['num2']; } elseif ($_POST['op']=='*') { $say=' умножения '; $res=$_POST['num1']*$_POST['num2']; } echo '<font color="#FF0000">Результат '.$say.' чисел: '.$res.'</font>'; } ?><br /> Вариант калькулятора 1 <form id="form1" name="form1" method="post" action=""> <input name="num1" type="text" id="num1" size="5" maxlength="5" width="5" /> <select name="op" id="op"> <option value="+">+ (плюс)</option> <option value="-">- (минус)</option> <option value="*">* (умножить)</option> <option value="/">/ (разделить)</option> </select> <input name="num2" type="text" id="num2" size="5" maxlength="5" width="5" /><br /> <input name="go" type="submit" value="посчитать" /> </form> <hr /> Вариант калькулятора 2 <form id="form2" name="form2" method="post" action=""> <input name="num1" type="text" id="num1" size="5" maxlength="5" width="5" /> <label> <input type="radio" name="op" value="+" id="radioGroup1_0" /> + (плюс)</label> <label> <input type="radio" name="op" value="-" id="radioGroup1_1" /> - (минус)</label> <label> <input type="radio" name="op" value="*" id="radioGroup1_2" /> * (умножить)</label><label> <input type="radio" name="op" value="/" id="radioGroup1_3" /> / (разделить)</label> <input name="num2" type="text" id="num2" size="5" maxlength="5" width="5" /><br /> <input name="go" type="submit" value="посчитать" /> </form> </body> </html>
[/spoiler]
Теперь давайте заменим все наши POST на GET – и посмотрим что выйдет.
[spoiler]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Страница обработки данных из формы</title> </head> <body> <?php if (!empty($_GET['num1']) && !empty($_GET['num2'])) // если существует перемення $_GET['myinput'] { if ($_GET['op']=='+') { $say=' суммы '; $res=$_GET['num1']+$_GET['num2']; } elseif ($_GET['op']=='-') { $say=' вычитания '; $res=$_GET['num1']-$_GET['num2']; } elseif ($_GET['op']=='/') { $say=' деления '; $res=$_GET['num1']/$_GET['num2']; } elseif ($_GET['op']=='*') { $say=' умножения '; $res=$_GET['num1']*$_GET['num2']; } echo '<font color="#FF0000">Результат '.$say.' чисел: '.$res.'</font>'; } ?><br /> Вариант калькулятора 1 <form id="form1" name="form1" method="get" action=""> <input name="num1" type="text" id="num1" size="5" maxlength="5" width="5" /> <select name="op" id="op"> <option value="+">+ (плюс)</option> <option value="-">- (минус)</option> <option value="*">* (умножить)</option> <option value="/">/ (разделить)</option> </select> <input name="num2" type="text" id="num2" size="5" maxlength="5" width="5" /><br /> <input name="go" type="submit" value="посчитать" /> </form> <hr /> Вариант калькулятора 2 <form id="form2" name="form2" method="get" action=""> <input name="num1" type="text" id="num1" size="5" maxlength="5" width="5" /> <label> <input type="radio" name="op" value="+" id="radioGroup1_0" /> + (плюс)</label> <label> <input type="radio" name="op" value="-" id="radioGroup1_1" /> - (минус)</label> <label> <input type="radio" name="op" value="*" id="radioGroup1_2" /> * (умножить)</label><label> <input type="radio" name="op" value="/" id="radioGroup1_3" /> / (разделить)</label> <input name="num2" type="text" id="num2" size="5" maxlength="5" width="5" /><br /> <input name="go" type="submit" value="посчитать" /> </form> </body> </html>
[/spoiler]
Обратите внимание, если ранее в адресной строке все оставалось без изменений, то сейчас там передаются данные из формы, и мы видим примерно такую картину
http://localhost/calc.php?num1=1&op=%2B&num2=3&go=посчитать
все наши данные из формы в адресной строке. Лично я такой метод отправки форм применяю крайне редко. как правило, я им пользуюсь отнюдь не отправляя данные из форм, а для отображение содержимого на странице, формы лучше отправлять через post, так как адресная строка имеет свои ограничения длинны, различные в разных браузерах, при использовании post никаких ограничений нет.
Пока все, жду ваших вопросов, комментариев.
Не работает. По первому примеру пишет в браузер:
syntax error, unexpected ‘<' in Z:\home\1yrokiphp\www\3.php on line 2
По второму примеру, при вводе данных в форму, при нажатии на кнопку, ничего не выводит. Опубликуйте пожалуйста к уроку проверенные файлы в виде архива.
Вы что то неверно скопировали :)
Сейчас скопировал примеры методом двойного клика.
Первый пример заработал.
Второй пример выводит в браузер:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in Z:\home\1yrokiphp\www\3.php on line 12
залейте куда-то код-полностью файл, я посмотрю.
vedomo.ru/files/3.zip
у вас перед echo введены какие то невидимые символы… просто удалите ” echo ” (вместе с пробелами) и напишите echo заново.
Спасибо, заработало.