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

Форум MySQL

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

 

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

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

тема: Вопрос по примеру из Вашей книги
 
 автор: coolerd   (10.06.2005 в 15:35)   письмо автору
 
 

Книга - практика создания веб-сайтов
Пример - создание рассылки (код взят с компакт-диска)
По порядку:
1) создаем в БД users подписчика с e-mail: ttt@tt.tt
2) на самом сайте размещаем форму для ввода e-mail для подписки на новости
3) в обработчик формы (вызов describe.php из describeform.php) размещаем код проверки на наличие такого адреса в базе данных:

// Проверяем не имеется ли уже такого e-mail в базе данных
  $query = "SELECT COUNT(*) FROM users WHERE email LIKE ".$_POST['email'];
  $usr = mysql_query($query);
  if($usr)
  {
    if(mysql_num_rows($usr)>0) { links("Подписка на данный e-mail уже произведена");}
  }


4) вводим в форму e-mail уже имеющийся в базе (ttt@tt.tt)
5) обработчик все равно заносит подписчика в базу. То есть условие if(mysql_num_rows......... равно false

Вопрос, где ошибка в коде?

   
 
 автор: P@Sol   (10.06.2005 в 15:50)   письмо автору
 
   для: coolerd   (10.06.2005 в 15:35)
 

надо или
SELECT * FROM users WHERE email LIKE ".$_POST['email']
или
if ($usr>0)

вроде так;)

   
 
 автор: Coolerd   (10.06.2005 в 16:25)   письмо автору
 
   для: P@Sol   (10.06.2005 в 15:50)
 

Не помогло, насколько я понимаю первая ошибка в самом запросе - там используется символ @. То есть e-mail адрес должен быть в кавычках.
Если ставить одиночные ковычки:

  $query = "SELECT COUNT(*) FROM users WHERE email LIKE '".$_POST['email']."'";

То тогда на любой введенный адрес срабатывает, условие=true, то есть на экран выводится сообщение о существование такого e-mail в БД, хотя его там нет.
Прикол, что phpmyadmin на такой запрос выдает Count(*) = 0, а сайт выбрасывает Count (*)=1
Блин, где я торможу?

   
 
 автор: Loki   (10.06.2005 в 17:02)   письмо автору
 
   для: Coolerd   (10.06.2005 в 16:25)
 

Все правильно дело в том, что условие

if (mysql_num_rows>0)

всегда TRUE, так как результат нашего запроса всегда равен одной строке.

Попробуйте так

if (mysql_result($usr,0))

Мне кажется это должно работать.

А email естественно должен быть в кавычках - это же строка.

   
 
 автор: Coolerd   (10.06.2005 в 17:31)   письмо автору
 
   для: Loki   (10.06.2005 в 17:02)
 

Вообщем удалил все и написал заново с нуля, как всегда все заработало.
Если будете выкладывать на сайте maillist с компакта который шел с книгой меняйте код:

// Проверяем не имеется ли уже такого e-mail в базе данных
  $tot = mysql_query("SELECT COUNT(*) FROM users WHERE email LIKE '".$_POST['email']."'");
  if ($tot) $total = mysql_result($tot,0);
  if(($total)>0) links("Подписка на данный e-mail уже произведена");

   
 
 автор: Loki   (10.06.2005 в 18:01)   письмо автору
 
   для: Coolerd   (10.06.2005 в 17:31)
 

достаточно просто

if ($total) 

будет обрабатываться корректно.

а в вашем варианте ошибка: будет произведена попытка добавить пользователя в базу даже если при проверке ответ от базы не получен.

   
Rambler's Top100
вверх

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