Как обнулить массив POST, если форма не отправлена, но страница перезагружена
У меня есть такая страница. При загрузке генерируется число картинками и пользователь должен ввести число с картинки. Если правильно ввёл - то идёт на страницу calculator.php.
При отправке формы страница перезагружается и проверяется - если рандомное число, сохранённое в сессии равняется тому, что написали в форме, то происходит переход на страницу
Проблема в том, что если обновлять страницу просто так, то если написать неправильно значение, у нас в массив $_POST запишется введённое число, а потом обновлять страницу, и оно перейдёт на страницу, когда радномное значение в сессии, попадёт под значение из массива $_POST.
Можно ли сделать так, если ты обновляешь страницу и не отправляешь форму, то массив $_POST будет пустым
JavaScript нельзя использовать
<?php
session_start();
$err = 1;
if ($_SESSION['rand_nb'] == $_POST['capcha_nb'] && $_SESSION['rand_nb'] != null) {
$err = 0;
$_SESSION['rand_nb'] = null;
header('Location: calculator.php');
exit();
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
* {
font-size: 18px;
}
</style>
<body>
<div class="numbers">
<?php
function printImgNmb($nbr) {
global $arrPic;
$nbr = strval($nbr);
$len = strlen($nbr);
for ($i = 0; $i < $len; $i++) {
$ost = $nbr[$i];
echo '<img height="150px;" src=' . $arrPic[$ost] . '>';
}
}
function randomNbr($len) {
$rndmLength = random_int(1, $len);
$rndm = random_int(0, pow(10, $rndmLength) - 1);
return $rndm;
}
$arrPic = glob("numbers/*.jpg");
$rndm = randomNbr(1);
$_SESSION['rand_nb'] = $rndm;
printImgNmb($rndm);
?>
<form method="post">
<p>
<label>
Введите число с картинки
<input type="text" name="capcha_nb" placeholder="Введите ваш ответ">
</label>
</p>
<?php
if ($err == 1 && !empty($_POST)) {
echo '<p style="color: red">Вы ввели неправильное число</p>';
}
?>
<input type="submit" name="submit_capcha">
<input type="reset" name="reset_capcha">
</form>
</div>
</body>
</html>
Ответы (1 шт):
Вынести скрипт генерации числа и страницы в один скрипт, а проверку и редиректы - в другой.
Примерно так:
captcha.php
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
* {
font-size: 18px;
}
</style>
<body>
<div class="numbers">
<?php
function printImgNmb($nbr) {
global $arrPic;
$nbr = strval($nbr);
$len = strlen($nbr);
for ($i = 0; $i < $len; $i++) {
$ost = $nbr[$i];
echo '<img height="150px;" src=' . $arrPic[$ost] . '>';
}
}
function randomNbr($len) {
$rndmLength = random_int(1, $len);
$rndm = random_int(0, pow(10, $rndmLength) - 1);
return $rndm;
}
$arrPic = glob("numbers/*.jpg");
$rndm = randomNbr(1);
$_SESSION['rand_nb'] = $rndm;
printImgNmb($rndm);
?>
<form method="post" action="redirect.php">
<p>
<label>
Введите число с картинки
<input type="text" name="capcha_nb" placeholder="Введите ваш ответ">
</label>
</p>
<?php
if ($err == 1 && !empty($_POST)) {
echo '<p style="color: red">Вы ввели неправильное число</p>';
}
?>
<input type="submit" name="submit_capcha">
<input type="reset" name="reset_capcha">
</form>
</div>
</body>
</html>
redirect.php
<?php
session_start();
$err = 1;
if ($_SESSION['rand_nb'] == $_POST['capcha_nb'] && $_SESSION['rand_nb'] != null) {
$err = 0;
$_SESSION['rand_nb'] = null;
header('Location: calculator.php');
exit();
}else{
header('Location: captcha.php');
}
