#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();
}