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. Только если вам не хватает, чтобы определить, какой тип пользователя вы будете использовать.

  1
Author: Alberto Victoria Lopez, 2021-08-27 04:17:00

Проблема связана с тем, что при вызове функции 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
  1
Author: Marcos, 2021-08-26 17:15:43

Проблема в том, что вы назначаете условие переменной $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";
}
  0
Author: Ruben, 2021-08-27 00:06:07