LINUX.ORG.RU

История изменений

Исправление Deleted, (текущая версия) :

KERNEL_PANIC

Не понимаю, как реализовать проверку ввода данных - если данных в $_POST нету, то выводить сообщение. Проверка через isset срабатывает сразу после первой загрузки, что и логично. Что тут можно придумать?

С целью пояснения по данному вопросу подготовил страницу, скрипт.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ru"><head>
	<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
	<title>Форма для теста</title>
	<style type="text/css">
	span.success, span.error {
		font-weight: bold;
		padding: 1mm 2mm;
		border-radius: 5px;
	}
	span.success {
		background-color: lightgreen;
		border: 1px solid green;
	}
	span.error {
		background-color: pink;
		border: 1px solid red;
	}
	</style>
</head><body>
	<h3>Форма для теста</h3>
	<form action="" method="post">
	<p><input type="text" name="name" maxlength="30"> Ваше имя</p>
	<p><input type="text" name="year" maxlength="4"> Год рождения</p>
	<p>
		Пол:
		<input type="radio" name="sex" value="m" checked> Муж
		<input type="radio" name="sex" value="f"> Жен
	</p>
	<p><input type="text" name="phone" maxlength="12"> Номер телефона, 12 цифр</p>
	<p>
		<input type="submit" value="Готово">
		<input type="reset" value="Очистить">
	</p>
	</form>
<?php
// Функция tail() обеспечивает завершение скрипта c выводом сообщения об ошибке, если имеется.
function tail( $error_message ) {
	if ( !empty($error_message) ) echo "<p><span class=\"error\">$error_message</span></p>\n";
	echo "</body></html>";
	exit;
}

// Если форма открыта впервые, дополнительных действий не производить.
if ( !isset($_POST['name'], $_POST['year'], $_POST['sex'], $_POST['phone']) ) tail('');

// Извлечь параметры скрипта из массива $_POST
$name = trim( $_POST['name'] ); // Устранить пробелы в начале, окончании строки $_POST['name']
$year = $_POST['year'];
$sex = $_POST['sex'];
$phone = $_POST['phone'];

/* if ( empty($name) || empty($sex) || empty($phone) || empty($year) ) >----v
Предпочитаю не использовать функцию empty() в процессе верификации параметров скрипта, т.к. empty()
возвращает значение "истина" для строки "0", которая не является пустой. */
if ( $name === '' || $sex === '' || $phone === '' || $year === '' ) tail('Отдельные поля формы не заполнены!');

if ( strlen($name) < 5 || strlen($name) > 30 ) tail('Укажите имя длиной от 5 до 30 символов!');

// Год - строка из 4-х цифровых символов
if ( strlen($year) !== 4 || !ctype_digit($year) || $year < 1900 || $year > 2010 ) tail('Год указан неверно!');

// m - Male, f - Female
if ( $sex !== 'm' && $sex !== 'f' ) tail('Пол указан неверно!');

// Номер мобильного телефона - строка из 12 цифровых символов  
if ( strlen($phone) !== 12 || !ctype_digit($phone) ) tail('Номер мобильного телефона указан неверно!');

/* Перед добавлением данных к базе рекомендуется "зачистить" параметры вручную,
либо применить т.н. подготовленные выражения (prepared statement). */

echo "<p><span class=\"success\">Запись добавлена к БД успешно!</span></p>\n";
echo "<p>Имя '$name'</p>\n";
echo "<p>Год рождения '$year'</p>\n";
echo "<p>Пол '$sex'</p>\n";
echo "<p>Номер телефона '$phone'</p>\n";
tail('');
?>

Исходная версия Deleted, :

KERNEL_PANIC

Не понимаю, как реализовать проверку ввода данных - если данных в $_POST нету, то выводить сообщение. Проверка через isset срабатывает сразу после первой загрузки, что и логично. Что тут можно придумать?

С целью пояснения по данному вопросу подготовил скрипт.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ru"><head>
	<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
	<title>Форма для теста</title>
	<style type="text/css">
	span.success, span.error {
		font-weight: bold;
		padding: 1mm 2mm;
		border-radius: 5px;
	}
	span.success {
		background-color: lightgreen;
		border: 1px solid green;
	}
	span.error {
		background-color: pink;
		border: 1px solid red;
	}
	</style>
</head><body>
	<h3>Форма для теста</h3>
	<form action="" method="post">
	<p><input type="text" name="name" maxlength="30"> Ваше имя</p>
	<p><input type="text" name="year" maxlength="4"> Год рождения</p>
	<p>
		Пол:
		<input type="radio" name="sex" value="m" checked> Муж
		<input type="radio" name="sex" value="f"> Жен
	</p>
	<p><input type="text" name="phone" maxlength="12"> Номер телефона, 12 цифр</p>
	<p>
		<input type="submit" value="Готово">
		<input type="reset" value="Очистить">
	</p>
	</form>
<?php
// Функция tail() обеспечивает завершение скрипта c выводом сообщения об ошибке, если имеется.
function tail( $error_message ) {
	if ( !empty($error_message) ) echo "<p><span class=\"error\">$error_message</span></p>\n";
	echo "</body></html>";
	exit;
}

// Если форма открыта впервые, дополнительных действий не производить.
if ( !isset($_POST['name'], $_POST['year'], $_POST['sex'], $_POST['phone']) ) tail('');

// Извлечь параметры скрипта из массива $_POST
$name = trim( $_POST['name'] ); // Устранить пробелы в начале, окончании строки $_POST['name']
$year = $_POST['year'];
$sex = $_POST['sex'];
$phone = $_POST['phone'];

/* if ( empty($name) || empty($sex) || empty($phone) || empty($year) ) >----v
Предпочитаю не использовать функцию empty() в процессе верификации параметров скрипта, т.к. empty()
возвращает значение "истина" для строки "0", которая не является пустой. */
if ( $name === '' || $sex === '' || $phone === '' || $year === '' ) tail('Отдельные поля формы не заполнены!');

if ( strlen($name) < 5 || strlen($name) > 30 ) tail('Укажите имя длиной от 5 до 30 символов!');

// Год - строка из 4-х цифровых символов
if ( strlen($year) !== 4 || !ctype_digit($year) || $year < 1900 || $year > 2010 ) tail('Год указан неверно!');

// m - Male, f - Female
if ( $sex !== 'm' && $sex !== 'f' ) tail('Пол указан неверно!');

// Номер мобильного телефона - строка из 12 цифровых символов  
if ( strlen($phone) !== 12 || !ctype_digit($phone) ) tail('Номер мобильного телефона указан неверно!');

/* Перед добавлением данных к базе рекомендуется "зачистить" параметры вручную,
либо применить т.н. подготовленные выражения (prepared statement). */

echo "<p><span class=\"success\">Запись добавлена к БД успешно!</span></p>\n";
echo "<p>Имя '$name'</p>\n";
echo "<p>Год рождения '$year'</p>\n";
echo "<p>Пол '$sex'</p>\n";
echo "<p>Номер телефона '$phone'</p>\n";
tail('');
?>