Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2011, 20:40   #1
max400
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 16
По умолчанию Обработка данных для регистрации

Посмотрите код что не так или как лучше сделать?
PHP код:
<?php
require('model.php'); // подключаем базу данных
// заносим глабальные переменны в переменные
if(isset($_POST['firstname'])) {$firstname $_POST['firstname'];}
else {return 
0; }

if(isset(
$_POST['lastname'])) {$lastname $_POST['lastname'];}
else {return 
0; }

if(isset(
$_POST['email'])) {$email $_POST['email'];}
else {return 
0; }

if(isset(
$_POST['password1'])) {$password1 $_POST['password1'];}
else {return 
0; }

if(isset(
$_POST['password2'])) {$password2 $_POST['password2'];}
else {return 
0; }

if(isset(
$_POST['ip'])) {$ip $_POST['ip'];}
else {return 
0; }

if(isset(
$_POST['date'])) {$date $_POST['date'];}
else {return 
0; }

if(isset(
$_POST['submit'])) {$submit $_POST['submit'];}
else {return 
0; }


if(isset(
$submit)) // если нажата кнопака то...
{
    if(empty(
$lastname) || empty($firstname) || empty($email) || empty($password1) || empty($password2)) // проверяем не пустые ли поля
    
{
        echo 
'Вы заполнили не все поля вернитесь и заполните их...';
        exit();
        }
    else{
    
strip_tags(stripslashes(trim($firstname))); // удаляем слеши, пробелы, html теги
    
strip_tags(stripslashes(trim($lastname)));
    
strip_tags(stripslashes(trim($email)));
    
strip_tags(stripslashes(trim($password1)));
    
strip_tags(stripslashes(trim($password2)));
    }
    if(
$password1 === $password2 && strlen($password1)>5)  // сверяем набронный пароль и проверяем длину пароля
    
{
        
         
$password $password1;    // если пароли верны то за носим пароль в переменную
    
}
    else
    {
        echo 
'Пароли не совпадают или они меньше 6 символов';
        exit();
    }
    
    
$query "INSERT INTO `reg`(`firstname`,`lastname`,`email`,`password`,`ip`,`date`) VALUES ('$firstname','$lastname','$email','$password','$ip','$date')"// далее делаем запрос к БД на внос пользователя в БД
    
    
$result mysql_query($query,$db) or die('Вы не дабавлены в базу данных');  
    
    if(
$result)  // если резульатат равен true то в сесию заносим 1 иначе выводим код ошибки и саму ошибку
    
{
        
$_SESSION['auth'] = 1;
        
header("Location: http://php.ru");
        }
    else
    {
        echo 
'Регистрация не удалась. Код ошибки 'mysql_error(). '</br>' mysql_errno();
        exit();
        }
}

?>
max400 вне форума Ответить с цитированием
Старый 22.09.2011, 21:08   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

1. Вместо isset() здесь нужно использовать empty()
2. Выбросить все эти "return 0" - в чём их смысл?(см. п.5)
3. Email(да и логин-пароль желательно) нужно проверять на валидность(соответствие опред. шаблону).
4. С каких это пор IP - это $_POST['ip']? Кто-то при регистрации будет реально руками вбивать свой IP...???
5. Если так критично наличие именно всех данных - то exit() нужно вешать на проверку каждого параметра, т.к. смысл проверять все остальные, если какого-то из первых нет?
6. $password = $password1; - это такая тавтология программистская? Что мешает в запрос влепить сразу $password1 ? И длину пароля проверить сразу при получении.
7. В MySQL-запросах возможна SQL-injection - используйте mysql_real_escape_string();
8. Для поля DATE в MySQL есть функция удобная CURDATE() - я б не доверял тому, что там юзер вам нацарапает в поле "Дата" (это где у вас $_POST['date']).

Вобщем - переписывать надо всё.
А так ничё....

PS: ещё совет - в случае незаполнения/ошибок желательно возвращать пользователя обратно на страницу с формой(я уж не говорю о её заполнении введенными ранее значениями) - а не выбрасывать его в вакуум всеми этими exit()-ами и die()-ми...

Последний раз редактировалось Andkorol; 22.09.2011 в 21:14. Причина: PS
Andkorol вне форума Ответить с цитированием
Старый 24.09.2011, 11:40   #3
max400
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 16
По умолчанию

Ну вот исправил посмотри всё ли так!


PHP код:
<?php
require('model.php'); // подключаем базу данных
require('error.class.php'); // подключаем класс для вывода ошибок
require('preg.class.php'); // поключаем класс с проверками

$error = new Reg_Error(); // создаём объект с ошибками
$preg = new Reg_preg();  // создаём объект с регулярками
// заносим глабальные переменны в переменные
if(empty($_POST['firstname'])) {$error->error_date();}  
else {
$firstname mysql_real_escape_string($_POST['firstname']);}
// защищаемся от sql инъекций
if(empty($_POST['lastname'])) {$error->error_date();}
else {
$lastname mysql_real_escape_string($_POST['lastname']);}

if(empty(
$_POST['email'])) {$error->error_date();}
else {
$email mysql_real_escape_string($_POST['email']);}

if(empty(
$_POST['password1'])) {$error->error_date();}
else {
$password1 mysql_real_escape_string($_POST['password1']);}

if(empty(
$_POST['password2'])) {$error->error_date();}
else {
$password2 mysql_real_escape_string($_POST['password2']);}

if(empty(
$_POST['date'])) {$error->error_date();}
else {
$date mysql_real_escape_string($_POST['date']);}

if(empty(
$_POST['submit'])) {$error->error_date();}
else {
$submit mysql_real_escape_string($_POST['submit']);}


if(isset(
$submit)) // если нажата кнопака то...
{
      
strip_tags(stripslashes(trim($firstname))); // удаляем слеши, пробелы, html теги
    
strip_tags(stripslashes(trim($lastname)));
    
strip_tags(stripslashes(trim($email)));
    
strip_tags(stripslashes(trim($password1)));
    
strip_tags(stripslashes(trim($password2)));

    
// проверяем правельность вводы имя, фамилии, пароля
    
$preg->reg($firstname); 
    
$preg->reg($lastname);
    
$preg->reg_email($email);
    
$preg->reg_password($password1);
    
$preg->reg_password($password2);

    if(
$password1 === $password2 && strlen($password1)>5)  // сверяем набронный пароль и проверяем длину пароля
    
{
        
$query "INSERT INTO `reg`(`firstname`,`lastname`,`email`,`password`,`date`) VALUES ('$firstname','$lastname','$email','$password1','$date')"// далее делаем запрос к БД на внос пользователя в БД
    
$result mysql_query($query,$db) or die('Вы не дабавлены в базу данных');  
    }
    else
    {
        echo 
'Пароли не совпадают или они меньше 6 символов';
        exit();
}
    if(
$result)  // если резульатат равен true то в сесию заносим 1 иначе выводим код ошибки и саму ошибку
    
{
        
$_SESSION['auth'] = 1;
        
header("Location: http://php.ru");
        }
    else
    {
        echo 
'Регистрация не удалась. Код ошибки 'mysql_error(). '</br>' mysql_errno();
        exit();
        }
}
?>
error.class.php

PHP код:
<?php
class Reg_Error{
    
    public function 
error_date()
    {
        exit(
'Вы не заполнили поля. Все поля 
обязательны для заполнения.  '
.'</br> 
<a href=http://php.ru/reg.php>Регистрация</a>'
);
    }
    
}
?>
preg.class.php
PHP код:

<?php



class Reg_preg
{
    public function 
reg($parametr)
    {
      if(!
preg_match("/^[a-zA-Z0-9]+$/",$parametr))
      {
          exit (
'Поля заданы в неправильном формате'); 
      }  
    }
    
    
    public function 
reg_email($parametr)
    {
        if(!
preg_match("/^[a-zA-Z0-9\-\._]+@[-a-zA-Z0-9\-]+\.[-a-zA-Z0-9\-\.]+$/",$parametr))
       {
        exit (
'Email задан в неправильном формате'); 
       }
    
    }
    
    public function 
reg_password($parametr)
    {
        if(!
preg_match("/^[a-zA-Z0-9]+$/",$parametr))
        {
            exit(
'Пароль задан в неправельной форме');
        }
    }
    
}



?>
max400 вне форума Ответить с цитированием
Старый 24.09.2011, 12:47   #4
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

PHP код:
<?php
//require('model.php'); // подключаем базу данных
//require('error.class.php'); // подключаем класс для вывода ошибок
//require('preg.class.php'); // поключаем класс с проверками

class Reg_preg {
static 
$error ''// ошибка
static $reg = array(
    
'normal'=>'/^[a-zA-Z0-9]+$/'// нормальная
    
'email'=>'/^[a-zA-Z0-9\-\._]+@[-a-zA-Z0-9\-]+\.[-a-zA-Z0-9\-\.]+$/'// email
    
'password'=>'/^[a-zA-Z0-9]+$/' // password
    
);
static function 
test($regname,$parametr,$errorText) {
    if(!
preg_match(self::$reg[$regname],$parametr)) {
        
self::$error .= $errorText."\n";
        return 
true;
    } else {
        return 
false;
    }
// end function

static function simple_error($parametr,$errorText) {
    if (
$parametr) { 
         return 
true
    } else {
        
self::$error .= $errorText."\n"; return false;
    }
// end function
// end class



//$error = new Reg_Error(); // создаём объект с ошибками

// заносим глабальные переменны в переменные

function save_post($post) {
global $
$post;
    
// удаляем слеши, пробелы, html теги
    
if (!empty($_POST[$post])) { 
        $
$post=mysql_real_escape_string(strip_tags(trim($_POST[$post])));
        return 
true;
    } else {
        return 
false;
    }
}

if ((
save_post('firstname'))&&
    (
save_post('lastname'))&&
    (
save_post('email'))&&
    (
save_post('password1'))&&
    (
save_post('password2'))&&
    (
save_post('date')) //&&
    //(save_post('submit'))
    
) { // ок данные приняты
    
    
$preg = new Reg_preg();  // создаём объект с регулярками
    
if (
        (
$preg->test('normal',$firstname'Поля заданы в неправильном формате'))&&
        (
$preg->test('normal',$lastname'Поля заданы в неправильном формате'))&&
        (
$preg->test('email',$email'Email задан в неправильном формате'))&&
        (
$preg->test('password',$password1'Пароль задан в неправельной форме'))&&
        (
$preg->test('password',$password2'Пароль задан в неправельной форме'))&&
        (
$preg->simple_error(($password1 == $password2 && strlen($password1)>5),'Пароли не совпадают или они меньше 6 символов'))
        ) { 
// данные верны
        
        
< .. запись в базу .. >
    
    } else { 
// данные - неверный формат
        
        
< .. выводим на печать содержимое $preg->$error .. >
    
    } 
} else { 
// данные не приняты
    
    
< .. сообщение об ошибке непринятых данных.. >
    
}

Последний раз редактировалось Lesha; 24.09.2011 в 12:57.
Lesha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Програма для регистрации NNN32 Помощь студентам 1 06.07.2010 10:33
База данных и форма регистрации reyn90 PHP 3 03.06.2009 16:27
Скрипт для автоматической регистрации в каталогах Anton62 PHP 0 12.05.2009 01:25
Помогите с формой для регистрации Nicky21 Microsoft Office Access 3 21.11.2008 16:04