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

Форум MySQL

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

 

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

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

тема: Проверка уникальности ника
 
 автор: (Sandr)   (20.08.2011 в 23:34)   письмо автору
 
 

Начал делать проверку уникальности ника, но столкнулся с проблемами.
$name_list = mysql_fetch_array(mysql_query("SELECT `name` FROM `users` WHERE `name`='".mysql_real_escape_string($name)."'"));
if($name_list['name'] == $name) {
    echo 'Пользователь с таким именем уже зарегестрирован';
    exit;
} else {
    echo 'Пропуск';
}
        
$res_reg = mysql_query("INSERT INTO `users` (`name`,`pass`,`mail`)VALUES('".mysql_real_escape_string($name)."','".mysql_real_escape_string(md5($pass))."','".mysql_real_escape_string($mail)."')");


Пробую в первый раз, когда в бд пусто, выдаёт "Пользователь с таким именем уже зарегистрирован" и заносит данные в бд.
Пробую во-второй раз, когда в бд уже есть данные с таким же ником. Выдаёт "Пользователь с таким именем уже зарегистрирован" но уже не заносит ничего.
Чот вообще не пойму, в первом случае вообще чушь получается...

  Ответить  
 
 автор: cheops   (20.08.2011 в 23:47)   письмо автору
 
   для: (Sandr)   (20.08.2011 в 23:34)
 

Не понятно. Зачем используется mysql_fetch_array()? Используйте mysql_num_rows(), а еще лучше mysql_result() совместно с COUNT(*). mysql_query() возвращает false в случае ошибочного запроса, вы его без проверки подставляете в mysql_fetch_array(), а что происходит, когда нет подходящей строки и нет результирующей таблицы? Если у вас нет ошибок, значит идет работа по пустой результирующей таблице и скрипт всегда возвращает 'Пользователь с таким именем уже зарегестрирован'.

PS Лучше не экономить строки и обрабатывать запросы из другой среды, как положено, тогда можно исключить целый класс ошибок. Чуть-чуть дисциплины и такого рода ошибки вообще возникать не будут никогда. В этот раз заметили, а в другой раз можете и пропустить и в системе останется логическая ошибка/дыра/мина замедленного действия.

  Ответить  
 
 автор: (Sandr)   (21.08.2011 в 11:43)   письмо автору
 
   для: cheops   (20.08.2011 в 23:47)
 

Спасибо за подсказку)
Только вот ещё что не понятно..

После echo 'Пользователь с таким именем уже зарегестрирован'; идёт exit; так что программа должна останавливаться, но когда пробую в первый раз, то данные всё равно заносятся в бд.

  Ответить  
 
 автор: cheops   (21.08.2011 в 11:54)   письмо автору
 
   для: (Sandr)   (21.08.2011 в 11:43)
 

Да, это странно. А у вас этот фрагмент кода никуда не вставляется при помощи include и require? Не может так случиться, что он два раза вызывается?

  Ответить  
 
 автор: (Sandr)   (21.08.2011 в 12:10)   письмо автору
 
   для: cheops   (21.08.2011 в 11:54)
 

Нет. И ещё, если убрать строку

$res_reg = mysql_query("INSERT INTO `users` (`name`,`pass`,`mail`)VALUES('".mysql_real_escape_string($name)."','".mysql_real_escape_string(md5($pass))."','".mysql_real_escape_string($mail)."')"); 

То проверка ника идёт нормально.

  Ответить  
 
 автор: (Sandr)   (21.08.2011 в 12:27)   письмо автору
 
   для: cheops   (21.08.2011 в 11:54)
 

Кстати, сделал другую проверку

$name_list = mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `name`='".mysql_real_escape_string('Alex')."'"),0);
if($name_list == 1) {
    echo $name_list;
    exit('Данный ник уже зарегестрирован');
} else {
    $res_reg = mysql_query("INSERT INTO `users` (`name`,`pass`,`mail`)VALUES('".mysql_real_escape_string('Alex')."',
        '".mysql_real_escape_string(md5(md5('123')))."','".mysql_real_escape_string('admin@ooo.ru')."')");
    if($res_reg == true)
        echo 'Вы успешно зарегестрированы';
    else
        echo 'Ошибка при регистрации.';
}


Теперь правильно?)

  Ответить  
 
 автор: cheops   (21.08.2011 в 13:15)   письмо автору
 
   для: (Sandr)   (21.08.2011 в 12:27)
 

Правильно, но лучше не сравнивать при помощи ==, лучше использовать условие > 0

  Ответить  
 
 автор: (Sandr)   (21.08.2011 в 16:14)   письмо автору
 
   для: cheops   (21.08.2011 в 13:15)
 

Спасибо, помогло)

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

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