Изучение PHP – урок 3: работа с формами

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

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

<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 никаких ограничений нет.

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

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

  1. dobrmir

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

    1. Озим Автор запису

      Вы что то неверно скопировали :)

  2. dobrmir

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

    1. Озим Автор запису

      залейте куда-то код-полностью файл, я посмотрю.

    1. Озим Автор запису

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

Коментарі закриті.