|
|
|
| Здравствуйте!Я новичок в плане php, но базу знаю хорошо.В моей форме регистрации 6 полей:"Ваше Имя","Фамилия","Логин","Пароль","Повтор пароля","Ваш Email".Все поля должны заноситься в БД Помогите,пожалуйста,видоизменить скрипт приведённый ниже, а то у меня уже мозги в косичку заплетаются плюс боюсь накосячить видоизменяя этот скрипт
// Страница регситрации нового пользователя
# Соединямся с БД
mysql_connect("localhost", "myhost", "myhost");
mysql_select_db("testtable");
if(isset($_POST['submit']))
{
$err = array();
# проверям логин
if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['login']))
{
$err[] = "Логин может состоять только из букв английского алфавита и цифр";
}
if(strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30)
{
$err[] = "Логин должен быть не меньше 3-х символов и не больше 30";
}
# проверяем, не сущестует ли пользователя с таким именем
$query = mysql_query("SELECT COUNT(user_id) FROM users WHERE user_login='".mysql_escape_string($_POST['login'])."'");
if(mysql_result($query, 0) > 0)
{
$err[] = "Пользователь с таким логином уже существует в базе данных";
}
# Если нет ошибок, то добавляем в БД нового пользователя
if(count($err) == 0)
{
# Убераем лишние пробелы
$login = trim($_POST['login']);
# Убераем лишние пробелы и делаем двойное шифрование
$password = md5(md5(trim($_POST['password'])));
mysql_query("INSERT INTO users SET user_login='".$login."', user_password='".$password."'");
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=register_success.php'>
</HEAD>"; ; exit();
}
else
{
print "<b>При регистрации произошли следующие ошибки:</b><br>";
foreach($err AS $error)
{
print $error."<br>";
}
}
}
?>
|
Большая просьба: Помогите! | |
|
|
|
|
|
|
|
для: xin
(21.04.2010 в 01:53)
| | Так в чём проблема ? В какой кодировке у вас данные?
может вместо strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30 стоит проверять сразу в рв if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['login'])) | |
|
|
|
|
|
|
|
для: oliss
(21.04.2010 в 02:11)
| | Данные у меня в кодировке windows-1251.Мне нужно чтобы все данные заносились в БД.Соответственно в БД для них есть поля: name, lastname, login, password, passagain, email.Как вставить это дело в скрипт не накосячив я пока не понял | |
|
|
|
|
|
|
|
для: xin
(21.04.2010 в 01:53)
| | > "INSERT INTO users SET user_login='".$login."', user_password='".$password."'"
Что вы там хорошо-то знаете?
INSERT INTO table (col1,col2) VALUES (value1, value2);
Плюс у вас в обработке есть лишние действия. Например, зачем очищать от пробелов после регулярного выражения? Оно (рег.выражение) все равно не пропустит логин с пробелами. | |
|
|
|
|
|
|
|
для: neadekvat
(21.04.2010 в 07:33)
| | trim вообще то не лишнее! Это чтобы потом не было гемороя | |
|
|
|
|
|
|
|
для: xin
(21.04.2010 в 18:43)
| | Какого геморроя? Я же говорю, что "/^[a-zA-Z0-9]+$/" не пропустит пробел в принципе. trim надо делать ДО проверки на соответствие этому шаблону, чтобы случайный пробел не стал причиной отказа в регистрации. | |
|
|
|
|
|
|
|
для: neadekvat
(21.04.2010 в 18:56)
| | Извиняюсь.Когда я вам писал я думал о другом куске кода...вот такие пироги... | |
|
|
|
|
|
|
|
для: xin
(21.04.2010 в 01:53)
| | зачем Вам в БД поле passagain?
Зачем там хранить повторенный пароль?
Это помимо того, зачем хранить пароль вообще. | |
|
|
|
|
|
|
|
для: Trianon
(21.04.2010 в 09:45)
| | Я начал разбираться.Поле passagain как то в процессе уже удалил.Только теперь возникла другая проблема: в конце кода обработчика я поставил условие: если "Пароль" и "Повтор пароля" совпадают, то осуществляется редирект на определённую страницу(вход на сайт), если же нет, то редирект осуществляется на страницу формы регистрации, но без указания ошибок.Как сделать чтобы ошибки при регистрации писались на сайте ?Если подскажите, то буду очень благодарен.В принципе я сам могу "потыкаться", но с вами я сэкономлю время. | |
|
|
|
|
|
|
|
для: xin
(21.04.2010 в 18:23)
| | при редиректе одним из GET-параметров целевой странице можно передать код сообщения об ошибке. И на этой странице его вывести.
>В принципе я сам могу "потыкаться", но с вами я сэкономлю время.
Знаете, это не аргумент ни разу. Не только и не столько потому, что при этом Вы автоматически наченаете тратить время других людей.
Но и потому, что экономя время на учебе, Вы многократно теряете его при практическом приложении усилий. | |
|
|
|
|
|
|
|
для: Trianon
(21.04.2010 в 18:47)
| | А как добиться того , чтобы сообщение об ошибке выводилось в определённом месте страницы?(в этом вопросе я "Дуб") | |
|
|
|
|
|
|
|
для: xin
(21.04.2010 в 01:53)
| | ... $password = md5(md5 ...
а вот это разве нормально? | |
|
|
|
|
|
|
|
для: psychomc
(21.04.2010 в 18:57)
| | >... $password = md5(md5 ...
>
>а вот это разве нормально?
Для меня - да! | |
|
|
|
|
|
|
|
для: xin
(21.04.2010 в 19:02)
| | А чем md5(md5(md5(md5(md5...) хуже вашего md5(md5, почему не используете его? | |
|
|
|
|
|
|
|
для: neadekvat
(21.04.2010 в 19:08)
| | Можно и ваш вариант записать...А смысл? | |
|
|
|
|
|
|
|
для: xin
(21.04.2010 в 19:22)
| | а смысл в нагрузке, что даёт мд5 | |
|
|
|
|
|
|
|
для: xin
(21.04.2010 в 19:22)
| | Вот, а какой смысл в md5(md5, когда можно md5 и усе? =) | |
|
|
|
|
|
|
|
для: neadekvat
(21.04.2010 в 19:32)
| | двойной md5 труднее отбрутофорсить | |
|
|
|
|
|
|
|
для: Valick
(21.04.2010 в 19:55)
| | А не надо давать возможность брутить пароли пользователей =)
Не вижу смысла хранить в базе данных хэш-сумму от хэш-суммы =) | |
|
|
|
|
|
|
|
для: neadekvat
(21.04.2010 в 20:02)
| | не надо давать возможность брутить пароли пользователей
это каким образом?
смысл есть. вряд ли обычный пользователь будет придумывать пароль длиннее 32 символов, в основном брут проходит по "словарю", двойной md5 увеличивает этот словарь в два раза, а вот если еще чуть "подсолить".... | |
|
|
|
|
|
|
|
для: Valick
(21.04.2010 в 20:11)
| | Так, стопэ..
> это каким образом?
Вы хотите, что у вас все доступы к базе открыты?
> вряд ли обычный пользователь будет придумывать пароль длиннее 32 символов
Какая разница, какая длина пароля?
> двойной md5 увеличивает этот словарь в два раза, а вот если еще чуть "подсолить"....
Двойной md5, соль и бла-бла
О чем вы? Если вас будут брутить через сайт - то какая нафиг разница, сколько раз там md5 и какая соль, ведь вы же сами своим скриптом за взломщика все проделаете.
А если доступ к базе получат.. Пора менять руки. | |
|
|
|
|
|
|
|
для: neadekvat
(21.04.2010 в 20:26)
| | 1) закрыто, и что? Если б шаловливые ручки хацкеров не лезли туда где закрыто, то и хеш не нужен вовсе
2) длинна пароля прямопропорциональна времени подбора
3) брутить через форму на сайте? жестко... а вот про кривизну рук вспоминают обычно люди которые сами не могут похвастаться прямизной | |
|
|
|
|
|
|
|
для: Valick
(21.04.2010 в 21:52)
| | 1. Вы считаете, что пароли хэшурются, чтобы зоркий взгляд взломщика не увидел в чистом виде в тот момент, когда он зашел в бд, используя ваш логин и пароль?
2. А как же качество пароля? Я поставлю NDfe но запаритесь подбирать. Сомневаюсь, что такой набор букв встречается в словарях. Кроме того, существуют рекомендации по созданию паролей, а на некоторых сайтах даже запрещают ставить пароли типа 123456 и qwery.
3. Нужели вы полагаете, что так не делают? Жестоко - это то, как вы ошибаетесь в этом вопросе. Тот же веблансер только недавно ввел ограниченное кол-во попыток на час времени для входа в аккаунт, ибо их запарили брутить через стандартную форму входа.
> а вот про кривизну рук вспоминают обычно люди которые сами не могут похвастаться прямизной
Не ищите скрытого смысла там, где его нет. Я не сказал "делайте как я, пряморукий суперпупер программист", я сказал, что если человек допустил утечку пароля - он криворукий. Под криворукий подходит и "невнимательный", "навиные", "глупый" и т.д. | |
|
|
|
|
|
|
|
для: Valick
(21.04.2010 в 21:52)
| | по нету ходят базы паролей с чистым md5, но по идее так же легко сделать из них md5md5md5 и подобрать. | |
|
|
|