Вот собственно сам скрипт:
Свернутый текст
<?php
//подключение файла конфигурации
include'./config.inc.php';
if($_POST)
{
//проверка данных
$login = htmlspecialchars(stripslashes($_POST['login']));
$pass = htmlspecialchars(stripslashes($_POST['pass']));
define('SALT','b$Rh^1');
if (empty($login))
{
echo "Не заполенно поле логин!";
exit();
}
else {
if(!preg_match('/^[a-z][a-z0-9]+$/i', $login)) {
echo "Введены недопустимые символы в поле логин!";
exit();
}
}
if(empty($pass))
{
echo "Не заполнено поле пароль!";
exit();
}
else {
if(!preg_match('/[a-z0-9!@$%^&*]/i', $pass)) {
echo "Введены недопустимые символы в поле пароль";
exit();
}
}
//соединение с сервером базы данных
if(!$link = mysql_connect($db_server_name, $user_name, $user_password))
{
echo "Не могу соединиться с сервером базы данных";
exit();
}
//выбираем базу данных
if(!mysql_select_db($db_name, $link))
{
echo "Не могу выбрать базу данных";
exit();
}
//строка запроса
$res = "SELECT COUNT(*)
FROM `users`
WHERE `user_name` = '".mysql_real_escape_string($login) ."'
";
$sql=mysql_query($res);
if(mysql_result($sql,0)>0)
{
echo "Пользователь с таким логином уже существует!";
exit();
}
$str_sql_string = "INSERT INTO `users`
SET `user_name` = '".mysql_real_escape_string($login) ."',
`password` = '". md5($pass . SALT) ."'
";
if(!mysql_query($str_sql_string, $link))
{
echo "Не могу выполнить запрос";
exit();
}
echo "Вы успешно зарегестрированы на сайте!";
//закрытие соединения с сервером базы данных
mysql_close($link);
}
?>
Не обращайте особого внимания на регулярные выражения, просто они еще не совсем доработаны до конца, а также на то, что полей так мало(ну придумаю потом, что еще запросить у юзеров )
Вот файл конфигурации:
Свернутый текст
<?php
//Данные для работы с MySQL
$db_server_name = "localhost";
//Пользователь и пароль
$user_name = "root";
$user_password = "";
//База данных
$db_name = "test_db";
?>
Следующая жертва-авторизация!
Спустя 7 часов, 8 минут, 49 секунд (11.02.2010 - 02:06) inpost написал(а):
echo "Введены недопустимые символы в поле пароль"; exit();
Тоесть ты что-то не так сделал, и тебе на чисто белом экране пишут, ты не прав? )) Сделай оформление для таких сообщений!
Тоесть ты что-то не так сделал, и тебе на чисто белом экране пишут, ты не прав? )) Сделай оформление для таких сообщений!
Спустя 3 часа, 10 минут, 17 секунд (11.02.2010 - 05:17) NewBePhp написал(а):
учится учится и еще раз учится писать скрипты... оптимизировать и таХ далее... есть лишние моменты...
Спустя 48 минут, 56 секунд (11.02.2010 - 06:05) qpayct написал(а):
Цитата (inpost @ 11.02.2010 - 01:06) |
echo "Введены недопустимые символы в поле пароль"; exit(); Тоесть ты что-то не так сделал, и тебе на чисто белом экране пишут, ты не прав? )) |
Во первых правильно так
exit("Введены недопустимые символы в поле пароль");и действительно зачем так делать тоже не вижу смысла.
Во вторых нету капчи, а значит автоматическую регистрацию сделать, как 2 пальца об асфальт
Спустя 5 часов, 16 минут, 53 секунды (11.02.2010 - 11:22) Dimaz написал(а):
Есть лишние моменты, это мне ни о чем не говорит. На счет оформления, так это само собой, я не буду на чистый экран выводить сообщение, это уже потом когда дизайн буду делать. А на счет капчи спасибо, совсем про нее забыл. И еще я не понял зачем круглые скобки после оператора echo, что они изменят? Вот еще что хочу спросить, я правильно делаю, что после каждой ошибки вставляю оператор exit? Насколько я знаю он завершает работу скрипта когда его..
Спустя 2 минуты, 49 секунд (11.02.2010 - 11:25) Dimaz написал(а):
когда его продолжение бессмысленно. А в моем случаи продолжение действительно бессмысленно. Извините что написал во втором сообщении, просто в первое не влезло. С мобильника я.
Спустя 10 минут, 3 секунды (11.02.2010 - 11:35) qpayct написал(а):
ещё кстати htmlspecialchars надо использовать с ENT_QUOTES иначе одинарная ковычка не будет фильтроваться
$var=stripslashes(htmlentities($var, ENT_QUOTES));
Спустя 1 минута, 12 секунд (11.02.2010 - 11:36) DedMorozzz написал(а):
А что значит "бессмысленно"? Пользователь должен видеть все ошибки! А не заполняя форму из 20и полей каждый раз узнавая о след ошибке, тока тогда когда я уже отправил все данные. После 3й попытки я с сайта уже уйду. Отображай все ошибки!
Спустя 5 минут, 53 секунды (11.02.2010 - 11:42) Dimaz написал(а):
То есть exit убрать нужно, чтобы все ошибки выводил?
Спустя 5 минут, 15 секунд (11.02.2010 - 11:48) DedMorozzz написал(а):
как вариант в случае ошибки в переменную добавлять запись об этой ошибке. После отработки скрипта - проверять пуская ли эта переменая. Если да - всё норм, иначе - вывод этой переменой в которой храняться все ошибки, буть там 1 иль 100 сразу. Можно создать неск переменых, что бы красивее оформить. Решений куча. Есть ещё и AJAX - на лету отображать возможность регистрации. А не подбирать ник надеясь, что такого нету. Конечно, по поводу АЯКСА - для системы где будет от силы 1000 человек - такового мона не делать - не актуально, а в ином случае - посмотри как при регистрации мыла у яндекса, гугла сделано.
Спустя 30 минут, 57 секунд (11.02.2010 - 12:19) Dimaz написал(а):
DedMorozzz, как насчет библиотеки jQuery? Там просто сделать проверку на лету. Только все хотел узнать, эта библиотека загружается в браузер или на сервере все обрабатывает?
Спустя 4 минуты, 50 секунд (11.02.2010 - 12:23) DedMorozzz написал(а):
Аякс - загружает. Да и то, для регистрации - нагрузка смешная. Её (авторизацию) будет делать 1-2 человека одновременно и единаразово. А джекваери - на стороне клиента. Т.е. проверка будет происходить до отправки, что явно лучше, чем отправить и получить отказ. У некоторых после такого случаются психические расстройства. Мы веть этого не хотим, верно? Поэтому проверка до отправки - весьма позитивно. Но учти, что ява скрипт может быть отключён.
Спустя 10 минут, 49 секунд (11.02.2010 - 12:34) Dimaz написал(а):
Библиотека весит 55 килобайт, это получается, что она каждый раз в браузер будет загружаться.
Спустя 5 минут, 24 секунды (11.02.2010 - 12:40) DedMorozzz написал(а):
Нет, ты что! Только по четвергам!
Спустя 3 минуты, 31 секунда (11.02.2010 - 12:43) Dimaz написал(а):
Цитата (DedMorozzz @ 11.02.2010 - 09:40) |
Нет, ты что! Только по четвергам! |
Это вообще не будет или только при первой загрузке сайта?
Спустя 15 минут, 2 секунды (11.02.2010 - 12:58) DedMorozzz написал(а):
Ну если это выполняется на стороне клиента. Ему необходимо передать инструкции что и как делать. Значит - да, передаются. И поверь, не тока по четвергам (выходные тоже считаются).
З.Ы.: и день железно дорожника
З.Ы.: и день железно дорожника
Спустя 6 минут, 23 секунды (11.02.2010 - 13:04) Mizka написал(а):
вообще-то не хорошо держать подключение к базе данных в скрипте регистрации, нету обработки поля подтверждения пароля. Нету возможности выводить ошибки в том месте, где тебе надо, да и после вывода ошибки останавливать скрипт через exit() как-то не красиво.
Спустя 26 минут, 49 секунд (11.02.2010 - 13:31) Dimaz написал(а):
Цитата (Mizka @ 11.02.2010 - 10:04) |
вообще-то не хорошо держать подключение к базе данных в скрипте регистрации, нету обработки поля подтверждения пароля. Нету возможности выводить ошибки в том месте, где тебе надо, да и после вывода ошибки останавливать скрипт через exit() как-то не красиво. |
А где же тогда держать подключение к БД? И почему через exit() не красиво, а как иначе то?
Спустя 17 минут, 44 секунды (11.02.2010 - 13:49) Gabriel написал(а):
$login = htmlspecialchars(stripslashes($_POST['login']));
это че за жуть такая? зачем на входе пихать данные в htmlspacialchars? да еще и пароль О_о
Спустя 1 час, 4 минуты, 34 секунды (11.02.2010 - 14:54) Mizka написал(а):
Цитата |
А где же тогда держать подключение к БД |
подключение к базе данных не имеет никакого отношения к модулю регистрации на сайте...
Цитата |
И почему через exit() не красиво |
потому что функция exit() заканчивает выполнение скрипта. а это не всегда корректно
Цитата |
а как иначе то? |
ну к примеру можно добавлять ошибки в переменную/массив и проверять если ли они перед добавлением пользователя в БД. если есть - показывать их пользователю, если нету - добавлять его в базу и говорить, что все прошло успешно...
Спустя 18 часов, 18 минут, 56 секунд (12.02.2010 - 09:13) samstepan написал(а):
=)
Спустя 3 минуты, 30 секунд (12.02.2010 - 09:16) qpayct написал(а):
Цитата (Gabriel @ 11.02.2010 - 12:49) |
$login = htmlspecialchars(stripslashes($_POST['login'])); это че за жуть такая? зачем на входе пихать данные в htmlspacialchars? да еще и пароль О_о |
на всякий случай. мало ли.
это я под вчерашним воздействием написал, а сегодня я уже умный
Спустя 4 часа, 32 минуты, 49 секунд (12.02.2010 - 13:49) Dimaz написал(а):
Цитата (Gabriel @ 11.02.2010 - 10:49) |
$login = htmlspecialchars(stripslashes($_POST['login'])); это че за жуть такая? зачем на входе пихать данные в htmlspacialchars? да еще и пароль О_о |
А чем на входе обрабатывать подскажи пожалуйста
Спустя 6 минут, 59 секунд (12.02.2010 - 13:56) Gabriel написал(а):
Dimaz
три муллиарда тем на форуме.... на входе все стринги mysql_real_escape_string(), целые числа intval() и тд , и тп.
три муллиарда тем на форуме.... на входе все стринги mysql_real_escape_string(), целые числа intval() и тд , и тп.