PHP эхо и заголовки - эхо не выводится - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть раздел, в котором, если имя пользователя переменной Session отсутствует, приложение должно вывести сообщение об ошибке, в котором говорится, что требуются учетные данные, а затем перенаправить пользователя на страницу входа.Проблема в том, что происходит только последнее, и «сообщение об ошибке» не выводится.

<?php if (!isset($_SESSION['username'])){  
    ob_start();
    echo "<script type='text/javascript'>alert('Not logged in. Please input required credentials.');</script>";
    header('location: /se7en/login.php');
    ob_end_flush();

}
?>

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

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

Обычно я справляюсь с этой необходимостью, имея страницу, на которую перенаправляю сообщение. Одним из способов было бы это:

<?php if (!isset($_SESSION['username'])){  
    ob_start();
    header('location: /se7en/login.php?message=Not logged in. Please input required credentials.');
    ob_end_flush();

}
?>

Тогда на вашем login.php у вас будет

if ( ! empty( $_GET['message'] ) ) {
    $message = htmlspecialchars( $_GET['message'] );
    echo "<script type='text/javascript'>alert('$message');</script>";
}

Вы также можете просто передать номер сообщения (message=1) и затем поместить все возможные сообщения в массив в файле login.php:

$messages = array(
    1 => "Not logged.....",
    2 => "something else...",
    //...
);
if( ! empty( $_GET['message'] ) && ! empty( $messages[ $_GET['message'] ] ) {
    echo "<script type='text/javascript'>alert('{$messages[ $_GET['message'] ]}');</script>";
}
0 голосов
/ 25 апреля 2019

Я согласен с @ khartnett.

Поскольку вы выполняете перенаправление заголовка, он перенаправит страницу до того, как у вас появится возможность показать окно предупреждения.

Если вы сделаете:

<?php if (!isset($_SESSION['username'])){  
ob_start();
echo "<script type='text/javascript'>" .
          "alert('Not logged in. Please input required credentials.');" .
          "window.location.href = '/se7en/login.php';" .
     "</script>";
header('location: /se7en/login.php');
ob_end_flush();
}
?>

Затем отобразится окно с предупреждением, которое блокирует дальнейшее выполнение скрипта до нажатия OK, а затем продолжает перенаправление с помощью window.location.href.

...