|
|
|
| Начал делать проверку уникальности ника, но столкнулся с проблемами.
$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)."')");
|
Пробую в первый раз, когда в бд пусто, выдаёт "Пользователь с таким именем уже зарегистрирован" и заносит данные в бд.
Пробую во-второй раз, когда в бд уже есть данные с таким же ником. Выдаёт "Пользователь с таким именем уже зарегистрирован" но уже не заносит ничего.
Чот вообще не пойму, в первом случае вообще чушь получается... | |
|
|
|
|
|
|
|
для: (Sandr)
(20.08.2011 в 23:34)
| | Не понятно. Зачем используется mysql_fetch_array()? Используйте mysql_num_rows(), а еще лучше mysql_result() совместно с COUNT(*). mysql_query() возвращает false в случае ошибочного запроса, вы его без проверки подставляете в mysql_fetch_array(), а что происходит, когда нет подходящей строки и нет результирующей таблицы? Если у вас нет ошибок, значит идет работа по пустой результирующей таблице и скрипт всегда возвращает 'Пользователь с таким именем уже зарегестрирован'.
PS Лучше не экономить строки и обрабатывать запросы из другой среды, как положено, тогда можно исключить целый класс ошибок. Чуть-чуть дисциплины и такого рода ошибки вообще возникать не будут никогда. В этот раз заметили, а в другой раз можете и пропустить и в системе останется логическая ошибка/дыра/мина замедленного действия. | |
|
|
|
|
|
|
|
для: cheops
(20.08.2011 в 23:47)
| | Спасибо за подсказку)
Только вот ещё что не понятно..
После echo 'Пользователь с таким именем уже зарегестрирован'; идёт exit; так что программа должна останавливаться, но когда пробую в первый раз, то данные всё равно заносятся в бд. | |
|
|
|
|
|
|
|
для: (Sandr)
(21.08.2011 в 11:43)
| | Да, это странно. А у вас этот фрагмент кода никуда не вставляется при помощи include и require? Не может так случиться, что он два раза вызывается? | |
|
|
|
|
|
|
|
для: 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)."')");
|
То проверка ника идёт нормально. | |
|
|
|
|
|
|
|
для: 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 'Ошибка при регистрации.';
}
|
Теперь правильно?) | |
|
|
|
|
|
|
|
для: (Sandr)
(21.08.2011 в 12:27)
| | Правильно, но лучше не сравнивать при помощи ==, лучше использовать условие > 0 | |
|
|
|
|
|
|
|
для: cheops
(21.08.2011 в 13:15)
| | Спасибо, помогло) | |
|
|
|