я создаю веб-сайт с несколькими типами пользователей, и у каждого пользователя есть определенная домашняя страница, как я могу определить, какая страница для пользователя с использованием php?

#php

#php

Вопрос:

я создаю веб-сайт с несколькими типами пользователей, и у каждого пользователя есть определенная домашняя страница, как я могу определить, какая страница для пользователя с использованием php? например, для каждого из них есть студенты, супервизор, администратор, есть определенная домашняя страница.

в моей таблице я создаю строку с именем role contain number, в которой указывается тип пользователя, которого я написал в своем коде, но он не переходит на следующую страницу.

это мой код:

 <?php
session_start();
include 'connect-db.php'; 

if(isset($_POST['name'],$_POST['pass']))
{
    $name = $_POST['name']; 
    $pwd = $_POST['pass'];   

    $query = "SELECT * FROM user WHERE name='$name' AND pass='$pwd'";

    $result = mysqli_query($con, $query);

    $user=array();

while($row = mysqli_fetch_assoc($result))
{

$user[$row['id']] = array(
                    'ID' => $row['ID'],
                    'name'=>$row['name'],
                    'role'=>$row['role'],
                    'email'=>$row['e-mail'],
                    'pass' => $row['pass']
                    );

}

    if($result)
    {
        if((mysqli_num_rows($result) == 1))
        {

            header('Location: index.php?status=valid');
            if($user['role']===1){
            header('Location: Student_Home.php?status=valid');
            }
            if ($user['role']===3){
            header('Location: GPC.php?status=valid');
            }
        }
        else
        {
            header('Location: index.php?status=invalid');
        }

    }
}

?>
  

Комментарии:

1. Предупреждение: вы широко открыты для SQL-инъекций и должны действительно использовать параметризованные подготовленные операторы вместо того, чтобы вручную создавать свои запросы подобным образом. Тем более, что вы вообще не избегаете пользовательских вводов!

2.Никогда не храните пароли в виде открытого текста! Предупреждение: храните только хэши паролей. Используйте PHP password_hash() и password_verify() . Если вы используете версию PHP ниже 5.5 (на что я очень надеюсь, что это не так), вы можете использовать библиотеку password_compat, чтобы получить ту же функциональность.

3. if mysqli_num_rows($result) == 1 затем вы перенаправляетесь на index.php?status=valid

4. Кроме того, вы определяете пользовательскую переменную как $user[$row['id']] = array(....) (многомерный массив), но пытаетесь получить доступ к роли, используя $user['role'] . При определении $user -data вместо этого определите его с помощью: $user = array(...); .

5. Вы перенаправляете любого пользователя index.php?status=valid , как только запрос проверки имени пользователя и пароля возвращает ровно один результат. Только после этого вы даже начинаете проверять, что содержит $user[‘role’] . Весь код показывает отсутствие базового логического мышления. Вы проверяете, получили ли вы результат от вашего запроса к базе данных, только после того, как вы уже пытались прочитать данные из него в цикле while, сам цикл while, вероятно, не знает, что он там делает, когда запрос должен возвращать не более одной записи для начала и т.д.