|
|
|
| Пример из книги MySQL5
Листинг 39.21
<?php
// Обработчик HTML-формы
/////////////////////////////////////////////////
// 1. Блок проверки правильности данных
/////////////////////////////////////////////////
// Удаляем лишние пробелы
$_POST['name'] = trim($_POST['name']);
$_POST['pass'] = trim($_POST['pass']);
$_POST['pass_again'] = trim($_POST['pass_again']);
// Проверяем не пустой ли суперглобальный массив $_POST
if(empty($_POST['name'])) exit();
// Проверяем правильно ли заполнены обязательные поля
if(empty($_POST['name'])) exit('Поле "Имя" не заполнено');
if(empty($_POST['pass'])) exit('Одно из полей "Пароль" не заполнено');
if(empty($_POST['pass_again'])) exit('Одно из полей "Пароль" не заполнено');
if($_POST['pass'] != $_POST['pass_again']) exit('Пароли не совпадают');
// Если введён e-mail проверяем его на соответсвие
if(!empty($_POST['email']))
{
if(!preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i", $_POST['email']))
{
exit('Поле "E-mail" должно соответствовать формату somebody@somewhere.ru');
}
}
|
Где ошибка?
Если убрать первое условие if(empty($_POST['name'])) exit(); то проверка работает, но при этом в браузер сразу после загрузки выдается 'Поле "Имя" не заполнено'. | |
|
|
|
|
|
|
|
для: Костян
(22.08.2008 в 21:37)
| | Это файл - обработчик формы.
Он не вызывается руками. Он вызывается тогда, когда форма отправляется браузером.
Руками вызывать нужно файл с формой. | |
|
|
|
|
|
|
|
для: Trianon
(22.08.2008 в 22:27)
| | Форма из Вашей книги MySQL5 один в один. Листинг 39.21. | |
|
|
|
|
|
|
|
для: Костян
(24.08.2008 в 09:25)
| |
// Проверяем не пустой ли суперглобальный массив $_POST
if(empty($_POST['name'])) exit();
// Проверяем правильно ли заполнены обязательные поля
if(empty($_POST['name'])) exit('Поле "Имя" не заполнено');
|
Это по крайней мере странно...
Вообще какой-то неудачный пример обработки формы
И прикрепите форму, ну нет у нас сейчас под рукой этой книги | |
|
|
|
|
|
|
|
для: Костян
(24.08.2008 в 09:25)
| | Это не моя книга. Так что текст формы придется привести. | |
|
|
|
|
|
|
|
для: Trianon
(24.08.2008 в 11:13)
| | Вот весь код на всякий случай
<table>
<form method=post>
<tr><td>Имя:</td><td><input type=text name=name></td></tr>
<tr><td>Пароль:</td><td><input type=password name=pass></td></tr>
<tr><td>Пароль:</td><td><input type=password name=pass_again></td></tr>
<tr><td>e-mail:</td><td><input type=text name=email></td></tr>
<tr><td>URL:</td><td><input type=text name=url></td></tr>
<tr><td></td><td><input type=submit value='Зарегистрировать'></td></tr>
</form>
</table>
<?php
// Обработчик HTML-формы
/////////////////////////////////////////////////
// 1. Блок проверки правильности данных
/////////////////////////////////////////////////
// Удаляем лишние пробелы
$_POST['name'] = trim($_POST['name']);
$_POST['pass'] = trim($_POST['pass']);
$_POST['pass_again'] = trim($_POST['pass_again']);
// Проверяем не пустой ли суперглобальный массив $_POST
if(empty($_POST['name'])) exit();
// Проверяем правильно ли заполнены обязательные поля
if(empty($_POST['name'])) exit('Поле "Имя" не заполнено');
if(empty($_POST['pass'])) exit('Одно из полей "Пароль" не заполнено');
if(empty($_POST['pass_again'])) exit('Одно из полей "Пароль" не заполнено');
if($_POST['pass'] != $_POST['pass_again']) exit('Пароли не совпадают');
// Если введён e-mail проверяем его на соответсвие
if(!empty($_POST['email']))
{
if(!preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i", $_POST['email']))
{
exit('Поле "E-mail" должно соответствовать формату somebody@somewhere.ru');
}
}
// Если на сервер не включены "магические кавычки"
// обрабатываем введённые пользователями данные
// функцией mysql_escape_string()
if (!get_magic_quotes_gpc())
{
$_POST['name'] = mysql_escape_string($_POST['name']);
$_POST['pass'] = mysql_escape_string($_POST['pass']);
$_POST['email'] = mysql_escape_string($_POST['email']);
$_POST['url'] = mysql_escape_string($_POST['url']);
}
/////////////////////////////////////////////////
// 2. Блок проверки имени на уникальность
/////////////////////////////////////////////////
// Устанавливаем соединение с базой данных
require_once("config.php");
// Проверяем не было ли переданное имя
// зарегистрировано ранее
$query = "SELECT COUNT(*) FROM userslist WHERE name = '$_POST[name]'";
$usr = mysql_query($query);
if(!$usr) exit("Ошибка - ".mysql_error());
$total = mysql_result($usr, 0);
if($total > 0)
{
exit("Данное имя уже зарегистрировано, пожалуйста, выберите другое");
}
/////////////////////////////////////////////////
// 3. Блок регистрации пользователя
/////////////////////////////////////////////////
// Формируем и выполняем SQL-запрос на
// добавление нового пользователя
$query = "INSERT INTO userslist
VALUES(NULL,
'$_POST[name]',
'$_POST[pass]',
'$_POST[email]',
'$_POST[url]')";
if(mysql_query($query))
{
// Осуществляем перезагрузку страницы,
// чтобы сбросить POST-данные
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=$_SERVER[PHP_SELF]'>
</HEAD></HTML>";
} else exit("Ошибка при добавлении данных - ".mysql_error());
?>
|
Я вообще то хотел бы, если получится, сделать свою регистрацию платной. Подскажите, как это реализовать? Или хотя бы с чего начать? Например, с помощью wm. | |
|
|
|
|
|
|
|
для: Костян
(24.08.2008 в 19:29)
| | >>Я вообще то хотел бы, если получится, сделать свою регистрацию платной...
Думаете пользователи будут платить за регистрацию? | |
|
|
|
|
|
|
|
для: Незнайка
(24.08.2008 в 19:40)
| | Предположим, что будут. | |
|
|
|
|
|
|
|
для: Костян
(24.08.2008 в 19:29)
| | Зачем понадобилось убирать условие? | |
|
|
|
|
|
|
|
для: Trianon
(24.08.2008 в 20:01)
| | Это просто наблюдение. Я увидел 2 одинаковых условия и решил одно убрать. Скорее всего в первом условии должен проверяться какой-то другой параметр, не $_POST['name']. | |
|
|
|
|
|
|
|
для: Костян
(24.08.2008 в 20:20)
| | перое логично изменить на if(empty($_POST)) exit(); | |
|
|
|
|
|
|
|
для: Trianon
(24.08.2008 в 20:29)
| | ... получается то же самое, что и при удалении первого условия из приведенного листинга. Думаю, этот вариант сработал бы, если бы форма и обработчик были на разных страницах. Может, я и ошибаюсь. не проверял. | |
|
|
|
|
|
|
|
для: Костян
(24.08.2008 в 20:39)
| | Нет. Просто еще нужно поднять строку с этим условием на четыре строки выше.
// Проверяем не пустой ли суперглобальный массив $_POST
if(empty($_POST)) exit();
// Удаляем лишние пробелы
$_POST['name'] = trim($_POST['name']);
$_POST['pass'] = trim($_POST['pass']);
$_POST['pass_again'] = trim($_POST['pass_again']);
// Проверяем правильно ли заполнены обязательные поля
if(empty($_POST['name'])) exit('Поле "Имя" не заполнено');
|
| |
|
|
|
|
|
|
|
для: Trianon
(24.08.2008 в 20:50)
| | Спасибо. А насчет реализации платной регистрации что-нибудь можете подсказать? С WM? | |
|
|
|
|
|
|
|
для: Костян
(22.08.2008 в 21:37)
| | Форму покажи свою! | |
|
|
|