@storm-coder

Как перезапросить форму отправки?

Здравствуйте! Как в данном случае перезапросить форму отправки, чтобы при обновлении страницы не было сообщения "Подтвердите повторную отправку формы".
mywebforyou.webutu.com
<?php
session_start();

if (!isset($_SESSION['test']) and !isset($_POST['q'])) {
	$q = 0; // номер текущего вопроса
	$title = 'Testing';
} else {
	// Создаем сессионную переменную test, содержащую массив ответов
	if ($_POST['q'] != '1') { // если номер вопроса не один (если пришел не первый раз)
		$_SESSION['test'][] = $_POST['answer']; // сессионная переменная 'test' - это массив, в который прилетают ответы пользователя
	}
	$q = $_POST['q']; // в переменную прилетает номер вопроса (<input type="hidden" name="q" ...>)
	$title = $_POST['title']; // имя поля ввода в форме (<input type="hidden" name="title"...>)
}

?>

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>English checker</title>
	<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
	<section class="clearfix">
		<h1>English checker‎</h1>
		<h2><?=$title?></h2>
		<?php
		switch ($q) {
			case '0': include 'start.php'; break;
			case '1': include 'questions/q1.php'; break;
			case '2': include 'questions/q2.php'; break;
			case '3': include 'questions/q3.php'; break;
			case '4': include 'questions/q4.php'; break;
			case '5': include 'questions/q5.php'; break;
			case '6': include 'questions/q6.php'; break;
			case '7': include 'questions/q7.php'; break;
			case '8': include 'questions/q8.php'; break;
			case '9': include 'questions/q9.php'; break;
			case '10': include 'questions/q10.php'; break;
			case '11': include 'questions/q11.php'; break;
			case '12': include 'questions/q12.php'; break;
			case '13': include 'questions/q13.php'; break;
			case '14': include 'questions/q14.php'; break;
			case '15': include 'questions/q15.php'; break;
			case '16': include 'questions/q16.php'; break;
			case '17': include 'questions/q17.php'; break;
			case '18': include 'questions/q18.php'; break;
			case '19': include 'questions/q19.php'; break;
			case '20': include 'questions/q20.php'; break;
								
			default:
				include 'result.php';
		}
		?>
		<footer><p class="mp"><a href="index.php">Restart the test</a></p></footer>
	</section>
</body>
</html>
  • Вопрос задан
  • 273 просмотра
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Берем двойной листок в клеточку, пишем фамилию, число, месяц, ниже - "работа над ошибками".
1) Читаем почему нельзя хранить данные о состоянии в инпутах(в том числе хидден).
2) Нет листинга start.php и остальных, если там есть какая-то обработка этого куска - $q = 0; // номер текущего вопроса то еще нормально (хотя как правильное решение все равно не подходит), иначе думаем как будет работать при $q = 0;
3) что будет если $_POST['q'] = -2? И как такое возможно?
4) Учим пхп: header()
Остальные вопросы на дом в качестве самостоятельной работы.
Ответ написан
XXXXPro
@XXXXPro
Fullstack Web developer
Очень просто: обрабатываем форму, после обработки ничего не выводим, а делаем редирект со статусом 303 на ту же страницу, с которой пришли. После этого эта страница запрашивается методом GET, а если сделать «Обновить», то форма заново не отправляется (и запрос не появляется).
Т.е. код примерно такой:
header($_SERVER['SERVER_PROTOCOL'].' 303 See other');
header('Location: '.($_SERVER['HTTPS'] ? 'https://' : 'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы