Окт 082011
 

В этом уроке мы рассмотрим работу с формами.

Нарисуем простую форму

<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: это флажки, радиокнопки, выпадающий список и пр. Все они выглядят по разному, но у всех одна и та же функция — передать данные на обработку скрипту. Ниже я написал для урока небольшую программу-калькулятор, ознакомьтесь с тем, какие виды инпутов в ней использованы, и то, как они обрабатываются скриптом.

Показать »

<!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>

Теперь давайте заменим все наши POST на GET — и посмотрим что выйдет.

Показать »

<!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>

Обратите внимание, если ранее в адресной строке все оставалось без изменений, то сейчас там передаются данные из формы, и мы видим примерно такую картину
http://localhost/calc.php?num1=1&op=%2B&num2=3&go=посчитать
все наши данные из формы в адресной строке. Лично я такой метод отправки форм применяю крайне редко. как правило, я им пользуюсь отнюдь не отправляя данные из форм, а для отображение содержимого на странице, формы лучше отправлять через post, так как адресная строка имеет свои ограничения длинны, различные в разных браузерах, при использовании post никаких ограничений нет.

Пока все, жду ваших вопросов, комментариев.

Дорогие читатели! Мною было принято решение закрыть комментарии на блоге. Теперь все обсуждения переносятся на недавно открытый форум, ввиду того, что формат сообщений там намного удобней для обсуждения. Не стесняйтесь задавать любые вопросы по тематике блога! Я всегда на связи.
Перейти на форум
.
 Опубликовано в 5:52 пп

  7 комментариев в “Изучение PHP — урок 3: работа с формами”

  1. Не работает. По первому примеру пишет в браузер:
    syntax error, unexpected ‘<' in Z:\home\1yrokiphp\www\3.php on line 2
    По второму примеру, при вводе данных в форму, при нажатии на кнопку, ничего не выводит. Опубликуйте пожалуйста к уроку проверенные файлы в виде архива.

  2. Сейчас скопировал примеры методом двойного клика.
    Первый пример заработал.
    Второй пример выводит в браузер:
    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in Z:\home\1yrokiphp\www\3.php on line 12

  3. vedomo.ru/files/3.zip

    • у вас перед echo введены какие то невидимые символы… просто удалите »    echo » (вместе с пробелами) и напишите echo заново.

  4. Спасибо, заработало.

Извините, форма комментирования закрыта в данный момент.