Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не работает проверка правильности ввода данных
 
 автор: Костян   (22.08.2008 в 21:37)   письмо автору
 
 

Пример из книги 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(); то проверка работает, но при этом в браузер сразу после загрузки выдается 'Поле "Имя" не заполнено'.

  Ответить  
 
 автор: Trianon   (22.08.2008 в 22:27)   письмо автору
 
   для: Костян   (22.08.2008 в 21:37)
 

Это файл - обработчик формы.
Он не вызывается руками. Он вызывается тогда, когда форма отправляется браузером.
Руками вызывать нужно файл с формой.

  Ответить  
 
 автор: Костян   (24.08.2008 в 09:25)   письмо автору
 
   для: Trianon   (22.08.2008 в 22:27)
 

Форма из Вашей книги MySQL5 один в один. Листинг 39.21.

  Ответить  
 
 автор: Valick   (24.08.2008 в 09:57)   письмо автору
 
   для: Костян   (24.08.2008 в 09:25)
 

 // Проверяем не пустой ли суперглобальный массив $_POST 
if(empty($_POST['name'])) exit(); 
  // Проверяем правильно ли заполнены обязательные поля 
  if(empty($_POST['name'])) exit('Поле "Имя" не заполнено');


Это по крайней мере странно...
Вообще какой-то неудачный пример обработки формы
И прикрепите форму, ну нет у нас сейчас под рукой этой книги

  Ответить  
 
 автор: Trianon   (24.08.2008 в 11:13)   письмо автору
 
   для: Костян   (24.08.2008 в 09:25)
 

Это не моя книга. Так что текст формы придется привести.

  Ответить  
 
 автор: Костян   (24.08.2008 в 19:29)   письмо автору
 
   для: 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($usr0);
  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:40)   письмо автору
 
   для: Костян   (24.08.2008 в 19:29)
 

>>Я вообще то хотел бы, если получится, сделать свою регистрацию платной...
Думаете пользователи будут платить за регистрацию?

  Ответить  
 
 автор: Костян   (24.08.2008 в 20:21)   письмо автору
 
   для: Незнайка   (24.08.2008 в 19:40)
 

Предположим, что будут.

  Ответить  
 
 автор: Trianon   (24.08.2008 в 20:01)   письмо автору
 
   для: Костян   (24.08.2008 в 19:29)
 

Зачем понадобилось убирать условие?

  Ответить  
 
 автор: Костян   (24.08.2008 в 20:20)   письмо автору
 
   для: Trianon   (24.08.2008 в 20:01)
 

Это просто наблюдение. Я увидел 2 одинаковых условия и решил одно убрать. Скорее всего в первом условии должен проверяться какой-то другой параметр, не $_POST['name'].

  Ответить  
 
 автор: Trianon   (24.08.2008 в 20:29)   письмо автору
 
   для: Костян   (24.08.2008 в 20:20)
 

перое логично изменить на if(empty($_POST)) exit();

  Ответить  
 
 автор: Костян   (24.08.2008 в 20:39)   письмо автору
 
   для: Trianon   (24.08.2008 в 20:29)
 

... получается то же самое, что и при удалении первого условия из приведенного листинга. Думаю, этот вариант сработал бы, если бы форма и обработчик были на разных страницах. Может, я и ошибаюсь. не проверял.

  Ответить  
 
 автор: Trianon   (24.08.2008 в 20:50)   письмо автору
 
   для: Костян   (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('Поле "Имя" не заполнено');

  Ответить  
 
 автор: Костян   (25.08.2008 в 06:57)   письмо автору
 
   для: Trianon   (24.08.2008 в 20:50)
 

Спасибо. А насчет реализации платной регистрации что-нибудь можете подсказать? С WM?

  Ответить  
 
 автор: OLi   (23.08.2008 в 02:06)   письмо автору
 
   для: Костян   (22.08.2008 в 21:37)
 

Форму покажи свою!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования