#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, вероятно, не знает, что он там делает, когда запрос должен возвращать не более одной записи для начала и т.д.