Код выполняется, чтобы сопоставить имя пользователя с паролем, и если оба корректно перенаправляют на другую страницу, но выполняются операторы else и else

Код:

if (isset($_POST['Login'])) {
    $IncorrectDetails = 0;
    $Username=$_REQUEST['Username'];
    $Password=$_REQUEST['Password'];

    echo "<p> $Username  $Password</p>";

    $myfile = fopen("bin\Account Details.txt", "r") or die("Unable to open file!");
    //reads raw file
    $string = fread($myfile,filesize("bin\Account Details.txt"));
    //turns the string to array
    $a = explode(',', $string);

    foreach ($a as $result) {
        $b = explode('. ', $result);
        $AccountDetails[trim($b[0])] = trim($b[1]);
    }

    //closes file
    fclose($myfile);
    print_r($AccountDetails);

    foreach ($AccountDetails as $StoredUsername => $StoredPassword) {
        if ($StoredUsername == $Username){
            if ($StoredPassword == $Password) {
                header('Location: Main.php');
            }
            else {
                $IncorrectDetails = 1;
            }
        }
        else {
            $IncorrectDetails = 1;
        }
    }

    if ($IncorrectDetails == 1){
        echo "<script type='text/javascript'>alert('Incorrect login details');</script>";
    }
}

Ожидается, что всплывающее окно при неправильном отображении и перенаправление при правильном

0
c.hum 29 Май 2019 в 12:44

2 ответа

Лучший ответ
if (isset($_POST['Login'])) {
    $IncorrectDetails = 0;
    $Username=$_REQUEST['Username'];
    $Password=$_REQUEST['Password'];

    echo "<p> $Username  $Password</p>";

    $myfile = fopen("bin\Account Details.txt", "r") or die("Unable to open file!");
    //reads raw file
    $string = fread($myfile,filesize("bin\Account Details.txt"));
    //turns the string to array
    $a = explode(',', $string);

    foreach ($a as $result) {
        $b = explode('. ', $result);
        $AccountDetails[trim($b[0])] = trim($b[1]);
    }

    //closes file
    fclose($myfile);


    foreach ($AccountDetails as $StoredUsername => $StoredPassword) {
        if ($StoredUsername == $Username && $StoredPassword == $Password){
           $CorrectDetails = 1;
        } else {
            $IncorrectDetails = 1;
        }
    }
  if(isset($CorrectDetails) && $CorrectDetails == 1){
   header('Location: Main.php');  
  }else ($IncorrectDetails == 1){
        echo "<script type='text/javascript'>alert('Incorrect login details');</script>";
    }
}

Вы перенаправляете на другую страницу, это неправильный способ, вместо этого вы можете использовать переменную так же, как вы использовали в else, и вне цикла вы можете перенаправить на другую страницу.

0
ajinkya 29 Май 2019 в 10:37

Это потому, что редирект не мгновенный, код php все еще обрабатывается. Итак, сразу после header('Location: Main.php'); сделайте exit;, чтобы остановить все ваши сценарии в этой точке и позволить перенаправлению работать.

header('Location: Main.php');
exit;

Кроме того, вы не должны ничего печатать до инструкции header () (удалите print_r ()).

0
José Carlos PHP 29 Май 2019 в 10:06