Сравнение Логина и пароля с полями в Бд.

новобранец

Новичок
Доброго времени суток.Я учусь на формах и благодаря помощи форума пришел, вот к такому результату:
forma.php
HTML:
<?php require('reg_log_content.php');?>
<form method="post" action="forma.php">
    <p><b> Account:</b></p> <?php echo $err;?> <?php echo $error;?>
    <p><B>Login:</B></p>
        <input type="text" name="login" size="40" />
        <p><B>Password:</B></p>
    <input type="password" name="password" size="50"/>
        <br/><br/>
    <input type ="submit" name="submit" value="Enter"/>
</form>
function.php
PHP:
function clean($rows=""){

    $rows = preg_replace('/<[^>]*>/',' ',$rows); // заменяем запрещенные символы на пустой символ
    $rows=htmlspecialchars($rows,ENT_QUOTES); // преобразовать в Html сущности
    $rows=trim($rows);//Очистить начало и конеч строки от пробелов
    $rows=strip_tags($rows);// Удалить html и  php теги
    return $rows;
}
function check_lenght($rows,$min,$max){
    $rows = (mb_strlen($rows) < $min || mb_strlen($rows) > $max);
    return !$rows;
}
reg_log_content.php
PHP:
require('function.php');
require('db.php');
//Проверка формы входа.
if(isset ($_POST['submit'])){
    $error=''; // переменная ошибок.
    $check=true;
    $login = clean($_POST['login']);
    $password=clean($_POST['password']);
  
//Если не пустые проверяем длину.  
if(!empty ($login) && !empty ($password)){
    $login=check_lenght($login,3,15);
    $password=check_lenght($password,4,30);
    if(!$login){
        $error.="*Login incorect lenght min 3 max 15 <br/>";
        $check=false;
    }
    if(!$password){
        $error.="*Password incorect lenght min 4 max 30<br/>";
        $check=false;
    }
}
else{  // Если хоть одно поле пустое  выводим сообщение.
    $check= false;
    $error.="*Please write empty fields";
}

//Если все правильно и без ошибок  проверяем с записями в БД.
if($check){
    $q_sql=mysqli_query($connection,"SELECT * FROM `users` WHERE `login` = '{$login}'");
    $result_sql=mysqli_fetch_array($q_sql);  
    if(!$result_sql){
    $error.="*Bad login!";
  
    }
        else{
            if($result_sql['passowrd']==$password){
                echo"слава богу!!!";
      
            }
                else{
                    $error.='*Bad password';
                }
      
        }

}      
}

//Если данные отправляются не методом Пост передаем пустое значение.
else{
    $_POST['name']=$_POST['password']=''";
}
Но никак не получается сравнить Логин и пароль с полями в Бд.Подскажите пожалуйста!
P.S Буду очень признателен вашему вниманию и советами по поводу улучшения кода.
 

Фанат

oncle terrible
Команда форума
Надеюсь, ты не при помощи этого форума пришел к такому адовому результату.

функцию clean выкинуть на помойку
вместо этого этого научиться использовать подготовленные выражения

если все равно не будет получаться - попробовать внятно описать, в чем заключается это "не получается"
 

новобранец

Новичок
вместо этого этого научиться использовать подготовленные выражения
Вы имели в виду что то в роде этого ?
PHP:
if(!preg_match("/^[a-zA-Z0-9_-]+$/i",$login,$matches)){$chek=false; $err['login']="*Incorect login Example:asd123";}
Может вопрос банален ,с вашей точки зрения чем плоха функция clean?
А проблема в том ,что даже при правильном вводе Логина и пароля ,все равно выдает ошибку *bad login!
P.S думаю лучше хоть чему-то научиться ,пусть даже коряво,чем вообще без пользы использовать форум.
 

Фанат

oncle terrible
Команда форума

hell0w0rd

Продвинутый новичок
новобранец, лучше ничему не учиться, чем учиться не правильно.
Ты должен проверить что данные соответствуют разрешенным, но не фильтровать их. Например на пароль не должно быть вообще никаких ограничений, кроме, возможно, длины.
Единственное, где можно фильтровать - поле для ввода html.
 

новобранец

Новичок
Спасибо за ваше потраченное время и советы.Постараюсь не допускать подобных ошибок.
 

Фанат

oncle terrible
Команда форума
На самом деле ты допустишь их еще мильён.
Я, например, допускаю по 20 раз в день.
Главное не "не допускать", а научиться анализировать, выявлять причины и исправлять.

В частности, в случае пароля надо просто вывести и тот и другой на экран.
Это же совсем несложно. Если у тебя вилка не втыкается в розетку - ты ведь не будешь просто сидеть и тыкать одну в другую? Ты возьмешь и посмотришь, одинаковой ли они системы? Так и тут. Взять, и просто глазами сравнить.
Просто вывести пароль из базы и под ним - тот который передается в запрос. И посмотреть. Глазами.

Какой смысл сидеть и гадать, если ты за две секунды можешь получить ответ самостоятельно?
 
Сверху