Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Регистрация на сайте


Автор: aktuba 22.8.2007, 05:37
Сделал такую регистрацию на сайте:
Код

    $index = true;
        if(count($_POST) == 5 && isset($_POST['login']) && isset($_POST['passwd']) && isset($_POST['passwd2']) && isset($_POST['email']) && isset($_POST['captcha'])) {
            $login = htmlspecialchars($_POST['login']);
            $passwd = htmlspecialchars($_POST['passwd']);
            $passwd2 = htmlspecialchars($_POST['passwd2']);
            $email = htmlspecialchars($_POST['email']);
            $captcha = htmlspecialchars($_POST['captcha']);
            if(strlen($login) < 3 || strlen($login) > 32) {
                $errmsg_login = 'Логин должен быть от 3 до 32 символов';
                $index = false;
            }
            if(empty($errmsg_login) and !empty($login) && !eregi("^([A-Za-z0-9А])", $login)) {
                $errmsg_login = 'Неверный формат логина';
                $index = false;
            }
            if(strlen($passwd) < 3 || strlen($passwd) > 32) {
                $errmsg_passwd = 'Пароль должен быть от 3 до 32 символов';
                $index = false;
            }
            if(empty($errmsg_passwd) && $passwd2 != $passwd) {
                $errmsg_passwd = 'Пароли должны быть одинаковы';
                $passwd2 = '';
                $index = false;
            }
            if(empty($errmsg_passwd) && !eregi("^([A-Za-z0-9А])", $passwd) && !empty($passwd)) {
                $errmsg_passwd = 'Неверный формат пароля';
                $passwd2 = '';
                $index = false;
            }
            if($_SESSION['captcha_keystring'] <> $captcha) {
                $errmsg_captcha = 'Не верный код.';
                $index = false;
            }
            if (!eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$", $email) and $email != "") {
                $errmsg_email = 'неверный формат e-mail';
                $index = false;
            }
            if($index) {
                register_new_user($login, $passwd, $email); // Вызываем функцию регистрации пользователя в базе и перекидываем на главную
                redirect("./index.php");
                exit;
            } else {
                                // Выводим форму регистрации с сообщениями об ошибках
                        }
        }


Нужна оценка, критика и советы, т.к. мне самому не нравится реализация...

Автор: NightmareZ 22.8.2007, 09:30
Чем тебе она не нравится?

Автор: aktuba 22.8.2007, 09:43
Цитата

htmlspecialchars


вот этим. может лучше просто на регулярках сразу проверять или лучше сначала экранировать?

Автор: Severyanin 22.8.2007, 10:17
Лучше экранировать сначала, по-моему.

Автор: GiV 22.8.2007, 10:32
1. Зачем подсчитывать кол-во данных? При последующем изменении скрипта, месяца через 2, 100% будут непонятки почему данные не воспринимаются скриптом.

2. Если данных нет, то не понятно поведение скрипта. По хорошему должна снова выводится форма регистрации, с сообщением о некорректности заполнения формы. Следовательно
Код

            if($index) {
                register_new_user($login, $passwd, $email); // Вызываем функцию регистрации пользователя в базе и перекидываем на главную
                redirect("./index.php");
                exit;
            } else {
                                // Выводим форму регистрации с сообщениями об ошибках
                        }

Стоит вынести из условия.

3. Ошибки лучше собирать в массив. Тогда и флага index не надо будет, сделал count($errors) и понял что дальше делать. Более того, список ошибок будет полнее, нежели чем сейчас, а значит дружелюбнее к пользователю. Пример с логином:
Человек ввел пробел больший 32 символов не соответствующий допустимой маске пароля. В случае этого скрипта, напишется только про 32, а про недопустимость такого пароля он узнает только отправив форму второй раз.

4. Не понятное регулярное выражение A-Za-z0-9А, зачем A два раза.

5. Если пишем в базу то http://php.net/mysql_escape_string

Автор: aktuba 22.8.2007, 11:39
Цитата

1. Зачем подсчитывать кол-во данных? При последующем изменении скрипта, месяца через 2, 100% будут непонятки почему данные не воспринимаются скриптом.


Привычка  smile 

Цитата

2. Если данных нет, то не понятно поведение скрипта.


Я привел только часть скрипта. Если данных нету - будут выведены другие данные.

Цитата

3. Ошибки лучше собирать в массив. Тогда и флага index не надо будет, сделал count($errors) и понял что дальше делать. Более того, список ошибок будет полнее, нежели чем сейчас, а значит дружелюбнее к пользователю. Пример с логином:
Человек ввел пробел больший 32 символов не соответствующий допустимой маске пароля. В случае этого скрипта, напишется только про 32, а про недопустимость такого пароля он узнает только отправив форму второй раз.


Можно пример? В общем виде я представляю, но...

Цитата

4. Не понятное регулярное выражение A-Za-z0-9А, зачем A два раза.


А это 2 дня без сна сказываются  smile 

Цитата

5. Если пишем в базу то http://php.net/mysql_escape_string 


Это чуть позже. Но про mysql_escape_string знаю...

Может еще есть предложения и советы?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)