История изменений
Исправление 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('');
?>