Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Правильная регистрация
Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011
Помог: 0 раз(а)
Многоуважаемые , помогите пожалуйста! Перелапатил тонну сообщений и что-то никак не могу сделать Проблема в следующем...
При нажатии на F5 в обработчике файла регистрации. Данный повторно заносятся в базу! После этого, если нажать еще раз на F5, то пишет, что логин существует такой уже и мыло...
Во общем помогите с кодом. Что поправить, чтобы был хороший, качественный,правильный код! Буду чрезмерно благодарен!
Понимаю, что есть лишние проверки, но все же.. Как написать правильно?
if(isset($_POST['login'])){$login=$_POST['login'];if($login==''){unset($login);echo"Вы не заполнили форму логин.<br />";exit();}}
if(isset($_POST['name'])){$name=$_POST['name'];if($name==''){unset($name);echo "Вы не заполнили форму Ф.И.О.<br />";exit();}}
if(isset($_POST['mail'])){$mail=$_POST['mail'];if($mail==''){unset($mail);echo "Вы не заполнили форму E-mail.<br />";exit();}}
if(isset($_POST['password'])){$password=$_POST['password'];if($password==''){unset($password);echo "Вы не заполнили форму Пароль.<br />";exit();}}
if(isset($_POST['password2'])){$password2=$_POST['password2'];if($password2==''){unset($password2);echo "Вы не заполнили форму повтор пароля.<br />";exit();}}
if(!$_POST['login'])
{
echo"Вы не заполнили форму логин.";
}
else
{
$login=($_POST['login']);
}
if(!$_POST['name'])
{
echo"Вы не заполнили форму Ф.И.О.";
}
else
{
$name=($_POST['name']);
}
if(!$_POST['mail'])
{
echo"Вы не заполнили форму E-mail:Пожалуйста, указывайте реальный е-mail, на него предет подтверждение регистрации в Клубе «Osako»";
$result=mysql_query("SELECT id FROM users WHERE login='".$login."' OR mail = '".$mail."'",$db);//извлекаем из базы все данные о пользователе с введенным логином
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
После того, как пользователь зарегистрировался, делайте перенаправление скрипта самого на себя при помощи, например, header.
Только помните, что при использовании этого Вам нужно позаботиться, чтоб скрипт ничего не выводил (в Вашем случае это "Регистрация прошла успешно")
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Dezmonds
Отправлено: 12 Мая, 2011 - 15:01:24
Новичок
Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011
Помог: 0 раз(а)
Думал, касаемо этого, а если все же как-то по другому сделать ? Более правильно. Потому, что если после регистрации пользователь попробует зарегистрироваться с тем же логином, или мылом, то ему это без проблем удастся.. Вообще ничего не могу понять...вроде ошибок в коде нет.. может просто глаза замылил.. Помогите в коде разобраться.
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Dezmonds пишет:
о ему это без проблем удастся
Почему же это?
Все действия произведены, пользователь добавился. И если он попробоует снова - то следуя логике Вашего же скрипта это ему не удастся.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Dezmonds
Отправлено: 12 Мая, 2011 - 15:11:25
Новичок
Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011
Помог: 0 раз(а)
EuGen пишет:
Dezmonds пишет:
о ему это без проблем удастся
Почему же это?
Все действия произведены, пользователь добавился. И если он попробоует снова - то следуя логике Вашего же скрипта это ему не удастся.
Сам не знаю.. но так оно и есть.. видимо где то грубейшая ошибка
----- Колян! Я надыбал макароны!
Dezmonds
Отправлено: 12 Мая, 2011 - 17:33:49
Новичок
Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011
Помог: 0 раз(а)
Многоуважаемые, помогите, нужно разобраться Что тут ни так с проверкой логина, и почему записывается абсолютно такое же значение в БД.
----- Колян! Я надыбал макароны!
Zuldek
Отправлено: 12 Мая, 2011 - 17:40:16
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
Dezmonds пишет:
Многоуважаемые, помогите, нужно разобраться Что тут ни так с проверкой логина, и почему записывается абсолютно такое же значение в БД.
код у вас кошмарный. Вот даже читать, когда несколько условных выражений записано в одну строку, не удобно. Попробуем разобраться... .
Когда у вас идёт запись нового юзера в базу - 0,'$login','$name','$mail','$pass'. В какое поле записывается значение "0" ?.
Есть подозрение что может писаться как раз в поле для id. И при проверке функцией isset для массива, как вам известно, когда значение ноль у элемента массива, условие вернёт вам False, проверка пройдёт и логин будет записан повторно.
Структуру таблицы в студию, либо, если "Ах точно!", — исправляйте.
else{echo"Видимо вы не ввели не заполнили поля...";}
?>
Какая то видимо проблема как раз таки в проверки пользователя в таблице. Код начинает проверять, только после того, как ты зарегистрировался, нажал F5 или ввел данные повторно, он добавил поле, и только потом после нажатия обновления, пишет, якобы такой пользователь уже есть..
----- Колян! Я надыбал макароны!
Zuldek
Отправлено: 12 Мая, 2011 - 22:32:38
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
ещё раз покажи код всего срипта после испралений
Dezmonds
Отправлено: 13 Мая, 2011 - 10:03:34
Новичок
Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011
if(isset($_POST['login'])){$login=$_POST['login'];if($login==''){unset($login);echo"Вы не заполнили форму логин.<br />";exit();}}
if(isset($_POST['name'])){$name=$_POST['name'];if($name==''){unset($name);echo "Вы не заполнили форму Ф.И.О.<br />";exit();}}
if(isset($_POST['mail'])){$mail=$_POST['mail'];if($mail==''){unset($mail);echo "Вы не заполнили форму E-mail.<br />";exit();}}
if(isset($_POST['password'])){$password=$_POST['password'];if($password==''){unset($password);echo "Вы не заполнили форму Пароль.<br />";exit();}}
if(isset($_POST['password2'])){$password2=$_POST['password2'];if($password2==''){unset($password2);echo "Вы не заполнили форму повтор пароля.<br />";exit();}}
if(!$_POST['login'])
{
echo"Вы не заполнили форму логин.";
}
else
{
$login=($_POST['login']);
}
if(!$_POST['name'])
{
echo"Вы не заполнили форму Ф.И.О.";
}
else
{
$name=($_POST['name']);
}
if(!$_POST['mail'])
{
echo"Вы не заполнили форму E-mail:Пожалуйста, указывайте реальный е-mail, на него предет подтверждение регистрации в Клубе «Osako»";
$result=mysql_query("SELECT login FROM users WHERE login='$login' OR mail = '$mail'",$db);//извлекаем из базы все данные о пользователе с введенным логином
Остался только вопрос по оптимизации. Как написать правильно, чтобы регистрация была максимально хорошей. Чтобы с максимальной защитой... Про шифрование паролей пока, что не будем говорить...
И попутно еще вопрос.. после того как, пользователь допустим. что то не ввел у меня код прерывается exit()... Соответственно весь остальной дизайн на сайте тоже не отображается.. как это можно сделать чтобы все отображалось, но код после exit ничего не обрабатывал. Спасибо
----- Колян! Я надыбал макароны!
AdMeen
Отправлено: 13 Мая, 2011 - 10:14:48
Посетитель
Покинул форум
Сообщений всего: 370
Дата рег-ции: Сент. 2009 Откуда: Воронеж
Помог: 1 раз(а)
Dezmonds пишет:
Остался только вопрос по оптимизации. Как написать правильно, чтобы регистрация была максимально хорошей. Чтобы с максимальной защитой... Про шифрование паролей пока, что не будем говорить...
Во-первых, шифрование паролей - это уже половина защиты. Во-вторых, я так думаю, что если бы кто-то написал идеальный код, мы бы все уже пользовались им давно. А так, у вас mysql injection пройдет, введите ограничение по длине логина/пароля для начала.
Используйте не exit, а, например, переменную сессии
Логика должна быть такая: Из файла 1.php получаем сессии в файл 2.php , если есть сессии login, password, id, тогда соединимся с БД и проверим, действительно ли совпадать пароль который мы присвоили сессии с паролем в БД. у пользователя по которому мы проверяем. Если все верно, тогда соединяемся опять с БД, вытаскиваем нужные нам значения, выводим формы, засовываем полученные значения в них...
Проблема в следующем: Почему мне постоянно пишет, Пароли не совпадают....
Понимаю, что наверно достал, но все же. очень надеюсь на вашу помощь. Заранее Огромное спасибо!
----- Колян! Я надыбал макароны!
Dezmonds
Отправлено: 14 Мая, 2011 - 16:45:36
Новичок
Покинул форум
Сообщений всего: 49
Дата рег-ции: Май 2011
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.