В этом уроке мы рассмотрим работу с формами.
Нарисуем простую форму
<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 заново.
Спасибо, заработало.