|
|
|
| Книга - практика создания веб-сайтов
Пример - создание рассылки (код взят с компакт-диска)
По порядку:
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
Вопрос, где ошибка в коде? | |
|
|
|
|
|
|
|
для: coolerd
(10.06.2005 в 15:35)
| | надо или
SELECT * FROM users WHERE email LIKE ".$_POST['email']
или
if ($usr>0)
вроде так;) | |
|
|
|
|
|
|
|
для: 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
Блин, где я торможу? | |
|
|
|
|
|
|
|
для: Coolerd
(10.06.2005 в 16:25)
| | Все правильно дело в том, что условие
всегда TRUE, так как результат нашего запроса всегда равен одной строке.
Попробуйте так
if (mysql_result($usr,0))
|
Мне кажется это должно работать.
А email естественно должен быть в кавычках - это же строка. | |
|
|
|
|
|
|
|
для: 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 уже произведена");
|
| |
|
|
|
|
|
|
|
для: Coolerd
(10.06.2005 в 17:31)
| | достаточно просто
будет обрабатываться корректно.
а в вашем варианте ошибка: будет произведена попытка добавить пользователя в базу даже если при проверке ответ от базы не получен. | |
|
|
|