Код, выполняющий операторы if и 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>";
    }
}

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

Вы должны завершить свой код после перенаправления, поэтому поставьте exit(); после header( ... ). Подробнее здесь: stackoverflow.com/questions/3553698/…

Vincent Decaux 29.05.2019 11:49

Я бы не стал использовать текстовый файл для хранения учетных данных пользователя — использование чего-то вроде базы данных дает вам гораздо больше гибкости. Кроме того, хеширование паролей также является хорошей идеей.

user10976392 29.05.2019 11:49

В дополнение к комментарию @VincentDecaux вам необходимо удалить выходные данные, чтобы выполнить перенаправление заголовка (например, эхо и print_r).

Jonnix 29.05.2019 11:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Ответ принят как подходящий
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, и вне цикла, который вы можете перенаправить на другую страницу.

Другие вопросы по теме