Урок 11: Передача переменных через формы

Интерактивные сайты принимают ввод от пользователей. Один из распространённых способов получения ввода - формы.

В этом уроке посмотрим, как создать форму и обработать ввод на сервере.

<form>

При создании формы участвуют два важных атрибута: action и method.

action
Используется для ввода URL, куда отправляется форма. Это может быть PHP-файл, который обрабатывает ввод.
method
Может иметь значение "post" или "get", которые являются различными методами передачи данных. Пока вам нет необходимости углубляться в отличия этих методов; методом "get" данные отправляются через URL, а методом "post" - как блок данных через стандартный сервис ввода/standard input service (STDIN). В последнем пройденном уроке мы видели, как данные получаются через URL с использованием документация$_GET. В этом уроке мы рассмотрим, как получаются данные, отправленные через форму методом "post".

HTML-страница с формой

Страница с формой не обязаны быть РНР-файлом (но может быть). Она даже не обязана находиться на том же сайте, что и файл, который получает данные.

В нашем первом примере мы рассмотрим очень простую форму с одним текстовым полем:


	<html>
	<head>
	<title>Форма</title>
	</head>
	<body>

	<h1>Введите ваше имя</h1>

	<form method="post" action="handler.php">
	<input type="text" name="username">
	<input type="submit">
	</form>

	</body>
	</html>

	
	

В браузере отобразится форма:

Form

Теперь начинается самое интересное: получение и обработка данных с помощью PHP.

Запрашивание данных формы с помощью PHP

Если вам необходимо запросить данные, отправленные через форму (методом post), вы используете документация$_POST:

	
	$_POST["fieldname"];
	
	

который возвратит значение поля формы. Попробуем это на примере.

Сначала создадим страницу с формой, как ранее. Затем создадим РНР-страницу (обработчик) "handler.php" (обратите внимание, что это имя страницы, которое мы записали в атрибуте action в нашей <form>).

Файл "handler.php" будет содержать:


	<html>
	<head>
	<title>Форма</title>
	</head>

	<body>

	<?php

	echo "<h1>Привет, " . $_POST["username"] . "</h1>";

	?>

	</body>
	</html>
	
	

Пользовательский ввод и условия

В следующем примере мы попробуем использовать пользовательский ввод для создания условий. Сначала нам понадобится форма:


	<html>
	<head>
	<title>Форма</title>
	</head>
	<body>

	<form method="post" action="handler.php">

	<p>Как вас зовут:</p>
	<input type="text" name="username"></p>

	<p>Ваш любимый цвет:
	<input type="radio" name="favoritecolor" value="r" /> Красный 
	<input type="radio" name="favoritecolor" value="g" /> Зелёный 
	<input type="radio" name="favoritecolor" value="b" /> Синий </p>

	<input type="submit" value="Submit" />

	</form>

	</body>
	</html>
	
	

В браузере это будет так:

Теперь используем эти вводы для создания страницы, которая автоматически изменяет цвет фона на основе указаний пользователя. Это делается созданием условия (см. Урок 6), которое использует данные, введённые пользователем в форму.

	<?php

	$strHeading = "<h1>Привет, " . $_POST["username"] . "</h1>";

	switch ($_POST["favoritecolor"]) {
	case "r":
		$strBackgroundColor = "rgb(255,0,0)";
		break;
	case "g";
		$strBackgroundColor = "rgb(0,255,0)";
		break;
	case "b":
		$strBackgroundColor = "rgb(0,0,255)";
		break;
	default:
		$strBackgroundColor = "rgb(255,255,255)";
		break;
	}

	?>

	<html>
	<head>
	<title>Форма</title>

	</head>
	<body style="background: <?php echo $strBackgroundColor; ?>;">

	<? echo $strHeading; ?>

	</body>
	</html>
	
	

Фон будет белым, если пользователь не укажет в форме предпочтительный цвет. Это достигается установкой значения default (по умолчанию), которое применяется, если ни одно из условий не выполнено.

Но что будет, если пользователь не укажет своё имя? Тогда в заголовке будет только "Привет,". Создадим дополнительное условие для изменения этого варианта.


	<?php

	$strUsername = $_POST["username"];
	 
	if ($strUsername != "") {
	    $strHeading = "<h1>Привет, " . $_POST["username"] . "</h1>";
	}
	else {
	    $strHeading = "<h1>Привет, незнакомец!</h1> ";
	}

	switch ($_POST["favorite color"]) {
	case "r":
		$strBackgroundColor = "rgb(255,0,0)";
		break;
	case "g";
		$strBackgroundColor = "rgb(0,255,0)";
		break;
	case "b":
		$strBackgroundColor = "rgb(0,0,255)";
		break;
	default:
		$strBackgroundColor = "rgb(255,255,255)";
		break;
	}

	?>

	<html>

	<head>

	<title>Форма</title>
	</head>
	<body style="background: <?php echo $strBackgroundColor; ?>;">

	<? echo $strHeading; ?>

	</body>
	</html>

	
	

В вышеприведённом примере мы используем условия для проверки информации от пользователя. В данном случае не столь важно, если пользователь не укажет имя. Но поскольку ваш код становится всё более навороченным, жизненно важно, чтобы учитывался вариант, когда пользователь вообще не заполняет формы.

Пример: Форма контактной информации

Основываясь на имеющихся знаниях о PHP и формах, вы можете создать форму контактной информации с использованием функции документацияmail, которая имеет следующий синтаксис:

	
	mail(куда, субъект, сообщение);
	
	

Сначала создаём простую HTML-форму:


	<html>
	<head>
	<title>Форма контактной информации</title>
	</head>
	<body>

	<h1>Форма контактной информации</h1>

	<form method="post" action="handler.php">
	<p>Субъект:<br /><input type="text" name="subject" /></p>
	<p>Сообщение:<br /><textarea name="message"></textarea></p>
	<input type="submit">
	</form>

	</body>
	</html>
	
	

Затем понадобится РНР-скрипт для отправки пользовательского ввода:


	<html>
	<head>
	<title>Функции</title>
	</head>
	<body>

	<?php

	// Получатель (измените на ваш e-mail адрес)
	$strEmail = "name@mydomain.com";

	// Получить пользовательские вводы
	$strSubject = $_POST["subject"];
	$strMessage = $_POST["message"];

	mail($strEmail,$strSubject,$strMessage);
	echo "Mail Sent.";
	 
	
	?>

	</body>
	</html>
	
	

Заметьте, что пример работает, только если у вас есть доступ к почтовому серверу. По умолчанию это не так в XAMPP и в большинстве бесплатных хостов. Итак, некоторые хосты могут требовать наличия заголовка формы, который выполняется с дополнительным параметром:

	
	mail("вы@имявашегодомена.com", "Тест", "Это тестовое сообщение", "От: мне@мойдомен.com");
	
	


<< Урок 10: Передача данных через URL

Урок 12: Сессии >>