Почему POST устанавливается при перезагрузке?

Мое приложение – простая страница входа. Когда он терпит неудачу, я печатаю сообщение об ошибке. Мой вопрос: почему, когда я перезагружаю страницу, сообщение снова печатается? Как я могу это исправить? Код работает нормально, я сделал еще один php-файл, выполняющий проверку и подключение базы данных.

<?php require_once("include/database.php"); if(isset($_POST['submit'])) { connect_bookstore(); // custom function $spassword = sha1($_POST['password']); $username = $_POST['username']; if ( checkpassword($username,$spassword) ) { //custom function header('Location:insert.php'); exit; } else { $message = "Login failed!"; } } ?> 

Внутри тела html.

 <?php if (isset($message)) { echo $message; } ?> 

Solutions Collecting From Web of "Почему POST устанавливается при перезагрузке?"

 <?php session_start(); require_once("include/database.php"); if(isset($_POST['submit'])) { connect_bookstore(); // custom function $spassword = sha1($_POST['password']); $username = $_POST['username']; if ( checkpassword($username,$spassword) ) { //custom function header('Location:insert.php'); exit; } else { $_SESSION['message'] = "Login failed!"; header('location: /yourfile.php'); exit; } } if(isset($_SESSION['message'])) { echo $_SESSION['message']; unset($_SESSION['message']); } ?> в <?php session_start(); require_once("include/database.php"); if(isset($_POST['submit'])) { connect_bookstore(); // custom function $spassword = sha1($_POST['password']); $username = $_POST['username']; if ( checkpassword($username,$spassword) ) { //custom function header('Location:insert.php'); exit; } else { $_SESSION['message'] = "Login failed!"; header('location: /yourfile.php'); exit; } } if(isset($_SESSION['message'])) { echo $_SESSION['message']; unset($_SESSION['message']); } ?> с <?php session_start(); require_once("include/database.php"); if(isset($_POST['submit'])) { connect_bookstore(); // custom function $spassword = sha1($_POST['password']); $username = $_POST['username']; if ( checkpassword($username,$spassword) ) { //custom function header('Location:insert.php'); exit; } else { $_SESSION['message'] = "Login failed!"; header('location: /yourfile.php'); exit; } } if(isset($_SESSION['message'])) { echo $_SESSION['message']; unset($_SESSION['message']); } ?> 

По сути, да, пост / перенаправление / получить … но иногда простое объяснение лучше.

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

Это потому, что вы повторно отправляете одни и те же данные POST при обновлении, если вы выполняете запрос GET, который вы увидите в URL-адресе, ваши параметры, которые вы передаете, есть, поэтому, если вы обновите эти параметры, они снова будут отправлены. То же самое с POST.

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

Вы хотите POST-Redirect-GET .