Как отделить домашнюю страницу для пользователя и администратора после входа / входа?

#php #html

#php #HTML

Вопрос:

У меня проблема, когда при входе в систему в качестве пользователя или администратора он переходит на ту же страницу, которая home.php . Итак, решение, которое я хочу, — я хочу иметь пользователя и администратора home.php из их собственных. Вот мой код для login.php:

 <?php
    session_start();
    include("functions.php");
?>
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">


    <title>Signin Template for Bootstrap</title>

    <!-- Bootstrap core CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA 058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">


  </head>

  <body class="text-center">
      <?php
      
        if(isset($_POST['signin'])){
            $password = $_POST['password'];
            $email = $_POST['email'];
            $query = "SELECT * from `accounts`;";
            if(count(fetchAll($query)) > 0){ //this is to catch unknown error.
                  foreach(fetchAll($query) as $row){
                    if($row['email']==$emailamp;amp;$row['password']==$password){
                        $_SESSION['login'] = true;
                        $_SESSION['type'] = $row['type'];
                        header('location:home.php'); //Here is the problem
                    }else{
                        echo "<script>alert('Wrong login details.')</script>";
                    }
                }
            }else{
                echo "<script>alert('Error.')</script>";
            }

        }
      
      ?>
      <div class="container">
            <form method="post" class="form-signin">
              <img class="mb-4" src="https://getbootstrap.com/assets/brand/bootstrap-solid.svg" alt="" width="72" height="72">
              <h1 class="h3 mb-3 font-weight-normal">Please sign in</h1>
                
                
              <label for="inputEmail" class="sr-only">Email address</label>
              <input name="email" type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
              <label for="inputPassword" class="sr-only">Password</label>
              <input name="password" type="password" id="inputPassword" class="form-control" placeholder="Password" required>
             
              <button name="signin" class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
              <a href="signup.php" class="mt-5 mb-3 text-muted">Create an account</a>
            </form>
          </div>
      
      <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5 76PVCmYl" crossorigin="anonymous"></script>
  </body>
</html>
 

…………………………………………………………………………………………….

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

1. Никогда не храните простые текстовые пароли. Вместо этого используйте password_hash() и password_verify() .

2. Также обратите внимание, что вы выбираете каждую строку из базы данных, а затем перебираете их в своем коде в поисках нужного пользователя. Вместо этого добавьте WHERE предложение в свой SQL, чтобы выбрать только одну строку для пользователя, пытающегося войти в систему.

3. Чтобы перенаправить на другую страницу, вам понадобится какой-то механизм, позволяющий отличить обычного пользователя от администратора. У вас это есть? Какой-то флаг или поле, указывающее, что пользователь является администратором?

4. Это только назначение, поэтому пароли с простым текстом предназначены для облегчения просмотра лектором деталей в базе данных

5. Не могли бы вы подсказать, какую строку следует выбрать?

Ответ №1:

Проверьте тип и затем перенаправьте соответствующим образом:

 $_SESSION['type'] = $row['type'];
if ($_SESSION['type'] == 'admin') {
  header('location:admin-home.php'); 
}
else {
  header('location:home.php'); 
}
 

Ответ №2:

Я понятия не имею, как структурирована ваша папка / файл, но вот указатель

Проверьте if ($row['type'] == 'admin') , затем перенаправьте на путь администратора, как вам нравится header('location:admin.php'); else if ($row['type'] == 'user') , а затем перенаправьте на путь пользователя header('location:user.php');

Затем вы можете использовать «else» для перенаправления на страницу и ошибку, если тип пользователя не является ни тем, ни другим

Ответ №3:

используйте лучший запрос

 $query = "SELECT * from `accounts` WHERE email='$email' AND password='$password' LIMIT 1;";
 

и используйте это для перенаправления на их собственную домашнюю страницу.

 if(isset($_SESSION['login'])){
    $type = $_SESSION['type'];
    if($type = "admin"){
        header('location: home-admin.php');
    }else{
        header('location: home-user.php');
    }
    exit();
}