[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обработка данных
DeeKeiD
Код :
Свернутый текст

PHP
include ('locale/'.$userlang.'/register.php');
# Функция регистрации
if($_POST['action']=="register") {
# Получение данных из формы
    
$username = (trim(eregi_replace(" +"" "$_POST['username'])));
    
$email = (trim(eregi_replace(" +"""$_POST['email'])));
    
$password1 = (trim(eregi_replace(" +"""$_POST['password1'])));
# Проверки
    
if ($username == "" || $password1 == "" || $email == "") {
        
$error .= $locale['402']."<br />\n";
    }
    
    if (!
preg_match("/^[-0-9A-Z_@\s]+$/i"$username)) {
        
$error .= $locale['403']."<br />\n";
    }
    
    if (
preg_match("/^[0-9A-Z@]{6,20}$/i"$password1)) {
        if (
$password1 != $_POST['password2']) $error .= $locale['404']."<br />\n";
    } else {
        
$error .= $locale['405']."<br />\n";
    }
 
    if (!
preg_match("/^[-0-9A-Z_\.]{1,50}@([-0-9A-Z_\.]+\.){1,50}([0-9A-Z]){2,4}$/i"$email)) {
        
$error .= $locale['406']."<br />\n";
    }
    
    
$result mysql_query("SELECT * FROM `users` WHERE login='$username'");
    if (
mysql_num_rows($result) != 0) { $error $locale['407']."<br />\n"; }
    
    
$result mysql_query("SELECT * FROM `users` WHERE email='$email'");
    if (
mysql_num_rows($result) != 0) { $error $locale['408']."<br />\n"; }
}




Спустя 38 минут, 25 секунд (23.09.2009 - 13:54) glock18 написал(а):
Ответить честно или сдержанно и четко по вопросу?

Спустя 6 минут, 5 секунд (23.09.2009 - 14:01) DeeKeiD написал(а):
Хотелось бы узнать:
1. чего нехватает в проверках
2. что лишнее
3. что можно дополнить

Спустя 59 минут, 34 секунды (23.09.2009 - 15:00) glock18 написал(а):
Хорошо. По пунктам:
1. защиты от sql инъекций. сколько про них здесь сказано уже было...

2.

PHP
$username = (trim(eregi_replace(" +"" "$_POST['username'])));
    
$email = (trim(eregi_replace(" +"""$_POST['email'])));
    
$password1 = (trim(eregi_replace(" +"""$_POST['password1'])));


не знаю зачем оно здесь, но регулярки тут точно ни к чему.

$password1 != $_POST['password2']
из вышеописанного.

если я введу

1 - '123 +'
2 - '123'
пароли будут равно, о чудо.

3. человекопонятности ошибкам. 402, 403. у меня они ассоциируются с ошибка протокола http, а не ошибками при наборе формы.

зы: это я кратко. а вообще недостатки еще есть. не касающиеся перечисленныхх пунктов.

Спустя 3 дня, 19 часов, 47 секунд (27.09.2009 - 10:01) DeeKeiD написал(а):
Кое что подправил... просьба : приводите проблемный участок кода и вместе с ним как нужно сделать
Свернутый текст

PHP
<?php
# Подключение файла языка
include ('locale/'.$userlang.'/register.php');
# Функция регистрации
if($_POST['action']=="register") {
# Получение данных из формы
    $username    = isset($_POST['reg_login'])?$_POST['reg_login']:NULL;
    $password1    = isset($_POST['reg_password1'])?$_POST['reg_password1']:NULL;
    $password2    = isset($_POST['reg_password2'])?$_POST['reg_password2']:NULL;
    $email        = isset($_POST['reg_email'])?$_POST['reg_email']:NULL;
    $country    = isset($_POST['reg_country'])?$_POST['reg_country']:NULL;
    $userip        = isset($_POST['reg_ip'])?$_POST['reg_ip']:NULL;
# Фильтрация переменных (HTML)
    $h_username    =    htmlspecialchars($username);
    $h_pass1    =    htmlspecialchars($password1);
    $h_pass2    =    htmlspecialchars($password2);
    $h_email    =    htmlspecialchars($email);
# Проверка (Заполнение полей)
    if(empty($h_username) || empty($h_password1) || empty($h_password2) || empty($h_email)) {
        echo $locale['reg_err_empty_fields'].'<br />';
    }
# Проверка (Совпадение паролей)
    if($h_pass1 != $h_pass2) {
        echo $locale['reg_err_passw_mismatch'].'<br />';
    }
# Проверка (Существование пользователя)
    $u_check_query    =    mysql_query("SELECT `login` FROM `users` WHERE `login` = '". mysql_real_escape_string($h_username) ."'");
    $u_check_result    =    mysql_num_rows($u_check_query);
    if($u_check_result > 0) {
        echo $locale['reg_err_login_exists'].'<br />';
    }
# Проверка (Существования IP)
    $ip_check_query    =    mysql_query("SELECT `userip` FROM `users` WHERE `userip` = '". mysql_real_escape_string($userip) ."'");
    $ip_check_res    =    mysql_num_rows($ip_check_query);
    if($ip_check_res > 0) {
        echo $locale['reg_err_ip_exists'].'<br />';
    }
    else {
# Фильтрация переменных (real_string)
    $s_username    =    mysql_real_escape_string($h_username);
    $s_pass1    =    mysql_real_escape_string($h_pass1);
    $s_email    =    mysql_real_escape_string($h_email);
# Шифровка пароля
    $s_passw    =    md5($s_pass1);
# Запись в базу
    mysql_query("INSERT INTO `users`
                    (`login`, `password`, `email`, `country`, `userip`)
                        VALUES
                    ('"
. $s_username ."','". $s_passw ."','". $s_email ."','". $country ."','". $userip ."')
                "
) or die(mysql_error());
    echo $locale['reg_success'].'<br />';
    }
}



_____________
Бесполезно просить пощады у цезаря
Фатальная ошибка : Звонок в неопределенную функцию ©
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.