Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регистрация пользователей php5 
:(
    Опции темы
systemIV
Дата 8.6.2011, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 28.3.2011

Репутация: -1
Всего: -1



Написал для своего будующего сайта регистрацию. Вот такой вопрос, как можно вести контроль ошибок через обработчик исключений try/catch. Вот код:
Код

<?php
    //Класс регистрации пользователей
    class registration{
    
    //Инициализируем переменные данные пользователем
        $reg_form_login = "";
        $reg_form_passwd = "";
        $reg_form_icq = "";
        
    //Инициализируем переменные для проверки на корректность данных пользователя
        $reg_regv_login = "/^[a-z0-9_-]{3,16}$/";
        $reg_regv_passwd = "/^[0-9A-z]{6,8}$/";
        $reg_regv_icq = "/^[0-9]{5,9}$/";
        
    //Инициализируем переменные необходимые для работы скрипта
        $reg_result = false;
        
    //Присвиваем переменным, переменные полученые методом POST
        function __construct(){
            $this->reg_form_login = $_POST['$form_login'];
            $this->reg_form_passwd = $_POST['$form_passwd'];
            $this->reg_form_icq = $_POST['$form_icq'];
        }
        
    //Проверяем логин на корректность
    //Логин должен состоять из цифр, латинских букв и символов дефиза и нижнего подчёркивания
    //Логин не должен в интервале от 3 до 16 символов
        private function correctLogin(){
            if(!preg_match($this->reg_regv_login, $this->reg_form_login)){
                echo "Логин не соответствует требованиям.";
                exit;
            }
            
            if(mysql::setQuery("select * from users where user_login = '."strtolower($this->reg_form_login)."'")){
                echo "Пользователь с таким именем уже существует в базе данных.";
                exit;
            }
        }
        
    //Пароль состоит из латинских букв и цифр. Не меньше 6 и не больше 8 символов.
        private function correctPasswd(){
            if(!preg_match($this->reg_regv_passwd, $this->reg_form_passwd)){
                echo "Пароль не соответствует требованиям.";
                exit;
            }
        }
        
    //ICQ состоит только из цифр, не более 9 и не менее 5 символов
        private function correctIcq(){
            if(!preg_match($this->reg_regv_icq, $this->reg_form_icq)){
                echo "ICQ не соответствует требованиям.";
                exit;
            }
        }
        
    //После всех проверок, добавляем пользователя в базу данных
        public function insertUserInTable(){
            $this->correctLogin();
            $this->correctPasswd();
            $this->correctIcq();
            
            $this->reg_result = mysql::setQuery("insert into `users` (`".$this->reg_form_login."`, `".md5($this->reg_form_passwd)."`, `".$this->reg_form_icq."`)");
            
            if(!$this->reg_result){
                echo "Ошибка при добавлении пользователя.";
            }else{
                echo "Пользователь успешно добавлен.";
            }
        }
    }
    
    //
?>


Добавлено через 3 минуты и 22 секунды
И как в случае ошибки прервать ход работы скрипта?
exit; вроде уже не моден)
PM ICQ Skype   Вверх
SneG0K
Дата 9.6.2011, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



throw Exception();
PM WWW Skype   Вверх
systemIV
Дата 9.6.2011, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 28.3.2011

Репутация: -1
Всего: -1



Подскажите, а как сделать что бы все ошибки показывались? 
Потому что сейчас у меня они выводятся только когда я преднамеренно уберу какую ни будь скобочку=)
А когда скрипт просто запускаю, в БД он не добавляет и ошибок не выводит.
В php.ini:
display_errors = On
error_reporting = E_ALL & ~E_NOTICE

ОС: linux ubuntu 11.04
PM ICQ Skype   Вверх
MoLeX
Дата 9.6.2011, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Код

mysql::setQuery("select * from users where user_login = '."strtolower($this->reg_form_login)."'"


Добавлено через 9 секунд
не смущает?


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
systemIV
Дата 9.6.2011, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 28.3.2011

Репутация: -1
Всего: -1



эт я уже вчера ещё поправил=)
Код

mysql::setQuery("select * from users where user_login = '$this->reg_form_login'"){


Добавлено @ 06:47
Вот, если не сильно затруднит, глянь.
http://codepaste.net/uh941o
Должна же идти ошибка, то что логин не соответствует формату

Добавлено @ 06:48
класс БД работает 100%

Это сообщение отредактировал(а) systemIV - 9.6.2011, 06:50
PM ICQ Skype   Вверх
MoLeX
Дата 9.6.2011, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Код

    //Присвиваем переменным, переменные полученые методом POST
        function __construct(){
            $this->reg_form_login = $_POST['$form_login'];
            $this->reg_form_passwd = $_POST['$form_passwd'];
            $this->reg_form_icq = $_POST['$form_icq'];
        }


идем учить как передаются данные методом POST и GET

Добавлено @ 06:57
mysql_real_escape_string() не забываем

Добавлено @ 07:00
Код

$this->reg_result = mysql::setQuery("insert into users (user_login, user_passwd, user_icq) 
values ('{$this->reg_form_login}', '".md5($this->reg_form_passwd)."', '{$this->reg_form_icq}')");


и вывод ошибок сделай mysql_error()

Это сообщение отредактировал(а) MoLeX - 9.6.2011, 07:01


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
systemIV
Дата 9.6.2011, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 28.3.2011

Репутация: -1
Всего: -1



когда я прописываю  or die mysql_error(); лезет ошибка 
Parse error: syntax error, unexpected T_STRING in /var/www/registration.class.php on line 64
PM ICQ Skype   Вверх
MoLeX
Дата 9.6.2011, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Код

or die(mysql_error());


die пишется со скобками - die()

Добавлено через 6 минут и 33 секунды
если посмотреть на этот код, то он однотипен
Код

    //Проверяем логин на корректность
    //Логин должен состоять из цифр, латинских букв и символов дефиза и нижнего подчёркивания
    //Логин не должен в интервале от 3 до 16 символов
        private function correctLogin(){
            if(!preg_match($this->reg_regv_login, $this->reg_form_login)){
                echo "Логин не соответствует требованиям.";
                exit;
            }
            
            if(mysql::setQuery("select * from users where user_login = '."strtolower($this->reg_form_login)."'")){
                echo "Пользователь с таким именем уже существует в базе данных.";
                exit;
            }
        }
        
    //Пароль состоит из латинских букв и цифр. Не меньше 6 и не больше 8 символов.
        private function correctPasswd(){
            if(!preg_match($this->reg_regv_passwd, $this->reg_form_passwd)){
                echo "Пароль не соответствует требованиям.";
                exit;
            }
        }
        
    //ICQ состоит только из цифр, не более 9 и не менее 5 символов
        private function correctIcq(){
            if(!preg_match($this->reg_regv_icq, $this->reg_form_icq)){
                echo "ICQ не соответствует требованиям.";
                exit;
            }
        }


можно же упростить, зачем столько функций делающих одно и то же - проверку по шаблону

Добавлено через 10 минут и 51 секунду
и мой совет тебе - используй стиль phpdocumentor
вместо
Код

    //Проверяем логин на корректность
    //Логин должен состоять из цифр, латинских букв и символов дефиза и нижнего подчёркивания
    //Логин не должен в интервале от 3 до 16 символов
        private function correctLogin(){
            if(!preg_match($this->reg_regv_login, $this->reg_form_login)){
                echo "Логин не соответствует требованиям.";
                exit;
            }


пиши так
Код

/**
 * Проверяем логин на корректность
 * Логин должен состоять из цифр, латинских букв и символов дефиза и нижнего подчёркивания
 * Логин не должен в интервале от 3 до 16 символов
 * @return void
 */ 
private function correctLogin()
{
    if(!preg_match($this->reg_regv_login, $this->reg_form_login))
    {
        echo "Логин не соответствует требованиям.";
        exit;
    }
}

/**
 * Test
 * @param integer $int - число
 * @param string  $str - строка
 * @return bool 
 */
private function test($int, $str)
{
    return true;
}



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.