Моя функция входа не может соответствовать имени пользователя и паролю, хранящимся в базе данных - PullRequest
0 голосов
/ 13 сентября 2018

Этот код всегда возвращает неправильное имя пользователя и пароль, хотя его правильная и та же функция работает для моей системы входа администратора.Это сработало некоторое время назад, а теперь не будет.

function login($user,$pass,$accountType){
require('connection.php');

$result=mysqli_query($con,"select * From $accountType");
    $regex="/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/";
    if(preg_match($regex, $user)){
        if(mysqli_num_rows($result)>0){
            while($row=mysqli_fetch_assoc($result)){
                $username=$row['username'];
                $password=$row['password'];
                if($user==$username){   
                        if (password_verify($pass,$password)){                               
                            if($accountType=='student'){
                                $_SESSION['student']='$user';
                                header('Location:studentprofile.php');

                                exit();
                            }
                            elseif($accountType=='teacher'){
                                $_SESSION['student']='$user';
                                header('Location:teacherprofile.php');
                                exit();
                                }
                            elseif($accountType=='admin'){
                                header('Location:admin.html');
                                exit();
                            }
                        }
                        else
                        {
                            $_SESSION['error']="wrong password"."<br>";
                        }
                }
                else{
                    $_SESSION['error']="Wrong username "."<br>";
                }   
            }

        }
        else{
            $_SESSION['error']="No data found";
        }
    }
    else{
        $_SESSION['error']="not a valid email,";
    }

}

1 Ответ

0 голосов
/ 13 сентября 2018

Из комментариев "я указал varchar (20) для хранения пароля в базе данных"

Поле пароля должно быть большим. password_hash() может генерировать очень длинный текст ( текущее значение по умолчанию - 60 символов ), поэтому увеличение поля, например varchar(254) или text, позволит получить необходимую длину. Команда PHP добавляет в алгоритм больше алгоритмов, что означает, что хэш может и будет расти. Мы также не хотим ограничивать возможности нашего пользователя использовать пароль или пароль по своему выбору. Лучше всего оставить место для изменения

...