Опубликован: 08.05.2007 | Доступ: свободный | Студентов: 12881 / 3013 | Оценка: 4.13 / 3.77 | Длительность: 12:58:00
Лекция 7:

Базовая обработка форм

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

Проверка формы

При работе со страницами, которые включают обработку форм, часто необходимо проверять вводимые пользователем данные.

PHP имеет много строковых и числовых функций, которые можно использовать для проверки ввода пользователя. Часть строковых функций, применяемых здесь, обсуждаются также в "Данные PHP" . Наиболее часто используемые функции представлены ниже:

is_string(string) – определяет, является ли переменная string строкой. Возвращает значение true или false.

is_int(string) или is_integer(string) – определяет, является ли переменная string целым числом. Возвращает значение true или false.

is_numeric(string) – определяет, является ли переменная string числовой строкой. Возвращает значение true или false.

is_double(string) или is_float(string) – определяет, является ли переменная string числом с плавающей точкой. Возвращает значение true или false

strlen(string) – возвращает длину строки string.

strpbrk(string1, string2) – ищет в строке string1 символ из строки string2, возвращает строку, начинающуюся с найденного символа (или FALSE, если ничего не найдено).

strtolower(string) – преобразует строку, хранящуюся в переменной string, в символы нижнего регистра.

strtoupper(string) — преобразует строку, хранящуюся в переменной string, в символы верхнего регистра.

Рассмотрим следующую страницу с формой XHTML:


Эта страница формы требует, чтобы пользователь ввел имя, имя учетной записи (имя пользователя) и пароль длиной не менее 4 символов, прежде чем происходит обработка формы. Такой тип проверки формы является важным, так как он помогает гарантировать, что ввод пользователя имеет правильный формат, который можно записать в базу данных, — текстовый файл, используемый для создания сообщения e-mail или для повторного вывода пользователю. Однако один XHTML не может выполнить проверку такого типа. Этот процесс выполняется с помощью перечисленных выше строковых и числовых функций PHP.

Отправка формы становится теперь трехшаговым процессом.

  1. Ввод данных формы и щелчок на кнопке отправки.
  2. Проверка ввода с помощью функций PHP.
  3. Обработка (запись в файл, генерация автоматического сообщения e-mail или воспроизведение ввода на экране) данных с помощью PHP.

Следующий сценарий демонстрирует этот процесс.

<?php
   
//Проверка, была ли нажата кнопка отправки. Если да, начинается проверка данных формы.
   
  if(isset($_POST['submitB']))  {
     //Проверяет, что было введено в поле name 
     
		$valid_form = true;
     
		if ($_POST['name'] == "")
		{
			echo "Введите свое имя";
			$valid_form = false;
		}
		
		else
		{
			$name = $_POST['name'];
		}
		
		if ($_POST['uname'] == "")
		{
			echo "Введите имя пользователя";
			$valid_form = false;
		}
		
		else
		{
			$username = $_POST['uname'];
		}
		
		if ($_POST['pass'] == "")
		{
		
			echo "Введите пароль";
			$valid_form = false;
		}
		
		elseif (strlen($_POST['pass']) < 4)
		{
			
			echo "Пароль должен содержать не менее 4 символов";
			$valid_form = false;
		}
		
		else
		{
			$password = $_POST['pass'];
		}
				
		//если все поля формы были введены правильно, начинаем обработку 
		
		if($valid_form == true)
		{
		
			//код обработки формы находится здесь 
		
		}
  }
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>A Web Page</title>
</head>
<body>

<form method="post" action="http://...form_validate.php"/>
Enter Name: <input type="text" name="name"/>
Enter user name: <input type="text" name="uname"/>
Enter Password (must contain at least 4 characters): <input type="password" name="pass"/>
<input type="submit" name="submitB" value="Submit"/>
</form>

</body>
</html>
Пример 7.3.

Когда нажимается кнопка отправки, применяется последовательность операторов для проверки содержимого полей формы. Сначала проверяется, что поле name не NULL (значение $_POST['name'] ). Если $_POST['name'] содержит значение NULL, это указывает, что пользователь не ввел имя в поле 'name'. Оператор echo используется для вывода пользователю сообщения об ошибке. Если $_POST['name'] содержит значение, то оно присваивается скалярной переменной $name, которая может использоваться позже в программе, когда начнется обработка данных. Затем проверяется поле 'user name' с помощью того же метода, который применялся для проверки поля 'name'. Если имя пользователя не введено, выводится сообщение об ошибке. Иначе значение присваивается скалярной переменной $username. Наконец, проверяется поле пароля 'password'. Проверка пароля является двухшаговым процессом: 1) проверяется, что пароль был введен, и 2) если пароль был введен, проверяется, что он содержит не меньше 4 символов. Первый оператор if проверяет, что пароль был введен. Оператор elseif (который выполняется, только если предыдущий оператор if будет оцениваться как false ) проверяет введенный пароль с помощью функции strlen(). Эта функция возвращает длину пароля. Полученная длина сравнивается с числом 4. Если значение меньше 4, выводится ошибка. Иначе длина пароля будет допустима, и он присваивается скалярной переменной $password.

Если все поля формы содержат допустимые данные, можно начинать обработку формы. Можно задать флаг, чтобы помочь в отслеживании проверки. Сначала флаг задается ( $valid_form = true ) в начале блока кода. Если какое-то из полей формы не содержит допустимые данные, то флагу присваивается значение false ( $valid_form ). После проверки всех полей формы применяется финальный оператор if для проверки статуса флага ( $valid_form ). Если значение $valid_form будет true (все поля формы содержат допустимые данные), можно начинать обработку формы, иначе блок обработки формы пропускается. Пользователь получает сообщение об ошибке, возникшей во время процесса проверки, и может начинать делать исправления.

Контрольный вывод введенных значений формы

Когда страница формы PHP отправляется на сервер, все значения полей формы посылаются сценарию PHP с помощью метода формы get или post. Когда страница формы выводится снова, все поля формы будут пустыми, независимо от того, будут или нет значения допустимыми. Это происходит, потому что сервер извлекает новый экземпляр страницы PHP и посылает его браузеру. Однако пользователю было бы удобно, чтобы при повторном выводе формы ее поля были заполнены отправленной ранее информацией. В этом случае пользователю нужно будет только исправить ошибочные данные, а не заново вводить значения во все поля. Это не является проблемой для формы с двумя полями, однако будет крайне неудобно для формы с большим числом полей.


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

Вспомните, что значения полей посланной формы хранятся в суперглобальных переменных $_POST или $_GET. В предыдущем примере имя пользователя хранится в переменной массива $_POST['FName'], а фамилия — в переменной массива $_POST['LName']. Поэтому вывод значений полей формы можно выполнить, присваивая атрибутам 'value' полей формы с помощью кода PHP значения, содержащиеся в массиве. Следующий код демонстрирует такой подход.

process.php

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>Страница Web </title>
</head>
<body>

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

First Name: <input type="text" name="FName" value="<?php echo $_POST['FName']?>"/>
Last Name: <input type="text" name="LName" value="<?php echo $_POST['LName']?>"/>


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

</form>

</body>
</html>

Отметим, что значения текстовых полей First Name и Last Name обновлены, чтобы включить следующий код PHP:

<?php echo $_POST['FName']?> 
<?php echo $_POST['LName']?>

Когда этот код присваивается атрибуту 'value', он снова выводит значения, введенные ранее пользователем. Когда страница загружается в первый раз, значения переменных POST будут NULL, а value = "". Атрибут value содержит значение только после того, как была нажата кнопка submit.

Повторный вывод полей формы является полезным приемом, который будет активно использоваться в последующих разделах.

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Максим Матросов
Максим Матросов
Наталья Джабасова
Наталья Джабасова