Setence if не работает
Привет люди у меня есть этот код if:
$DifineUser = "admin";
$DifinePass = "admin";
$DifineUserSis = "sistemas";
$DifinePassSis = "sistemas";
if ($user === $DifineUser && $pass === $DifinePass) {
session_start();
$_SESSION["user"] = $user;
header("Location: home.php");
} else{
header("Location: entraragain.php");
$error = "El usuario o la contraseña son incorrectos";
}
а затем вниз другой if
if ($user === $DifineUserSis && $pass === $DifinePassSis) {
session_start();
$_SESSION["user"] = $user;
header("Location: /rrhh/sistemas/home.php");
} else{
header("Location: entraragain.php");
$error = "El usuario o la contraseña son incorrectos";
}
оказывается, что один if остается, он выводит меня на страницу, но если я оставляю два if, он берет меня только последний if.
я не знаю, где будет проблема, теоретически я должен был бы соответствовать if, являются ли они разными переменными или нет?
уточняя, что pass и user admin, admin только в качестве теста.
3 answers
Привет вы можете сделать что-то более чистое, определив другую переменную, где вы указываете тип пользователя, и в зависимости от типа пользователя вы перенаправляете его что-то вроде
if($user != $DifineUser && $pass != $DifinePass){
header("Location: entraragain.php");
$error = "El usuario o la contraseña son incorrectos";
}
$url_redirect = $type_user == 'Default' ? '/rrhh/sistemas/home.php' : 'home.php;
header("Location: " . $url_redirect);
В этом я помещаю один if, где я проверяю, что пароль и password и в тройном if я проверяю тип пользователя в зависимости от типа пользователя я перенаправляю туда, где он должен if. Только если вам не хватает, чтобы определить, какой тип пользователя вы будете использовать.
Проблема связана с тем, что при вызове функции header
он не останавливает процесс выполнения, а просто устанавливает заголовок ответа.
При выполнении вашего кода процесс входит в некоторые условия "первого блока" , но! он не останавливается, процесс продолжается, обрабатывается "второй блок", что приводит к перезаписи ранее отправленного заголовка.
Решение:
Всякий раз, когда вы делаете перенаправление с помощью header
Вы должны затем завершить процесс выполнения, используя, например, exit
Пример:
if ($user === $DifineUser && $pass === $DifinePass) {
session_start();
$_SESSION["user"] = $user;
header("Location: home.php");
exit;
} else{
header("Location: entraragain.php");
$error = "El usuario o la contraseña son incorrectos";
exit;
}
// ... resto del código
Проблема в том, что вы назначаете условие переменной $user
Прежде чем перейти к следующему блоку кода, Вы можете проверить его следующим образом в том же блоке, используя elseif
следующим образом
session_start();
$DifineUser = "admin";
$DifinePass = "admin";
$DifineUserSis = "sistemas";
$DifinePassSis = "sistemas";
if ($user === $DifineUser && $pass === $DifinePass) {
$_SESSION["user"] = $user;
header("Location: home.php");
} elseif ($user === $DifineUser && $pass === $DifinePass) {
$_SESSION["user"] = $user;
header("Location: /rrhh/sistemas/home.php");
} else{
header("Location: entraragain.php");
$error = "El usuario o la contraseña son incorrectos";
}