Я сделал форму с вводом, где вы должны ввести, в следующем порядке: 3 2 1 0
и проверить, правильно ли это с переменной сеанса. Но похоже, что когда я пытаюсь ввести число 2
, эта переменная сеанса сбрасывается.
Я поместил session_start()
в оба файла (index.php
и test.php
)
index.php
<!DOCTYPE html>
<html>
<head>
<title>Countdown</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
<p>
<label for="count">Chiffre : </label>
<input type="text" id="count" for="count" name="count" required />
</p>
<input type="submit" value="Envoyer" />
</form>
<?php
session_start();
include_once 'test.php';
$test = new Test();
$test->validateInput($_POST);
echo "<h1>".$test->getMessage()."</h1>";
?>
</body>
</html>
test.php
<?php
session_start();
class Test {
private $message;
private $regex = '/^[0-3]{1}$/';
public function getMessage()
{
return $this->message;
}
public function setMessage($message)
{
$this->message = $message;
}
public function getRegex()
{
return $this->regex;
}
public function setRegex($regex)
{
$this->regex = $regex;
}
public function validateInput($input) {
//Vérification saisie existante
echo "Post : ";
print_r($_POST);
echo "<br>enter function - ";
if(!isset($input)) {
echo "input not set ";
$this->setMessage("Vous n'avez rien saisi.");
return false;
} else {
//Vérification variable de session créée
echo "input set - ";
if(!isset($_SESSION['count'])) {
//Vérification chiffre comppris entre 0 et 3 et si saisie = 3
echo "session not set - ";
if(preg_match($this->getRegex(), $input['count'])) {
echo "regex ok";
if($input['count'] == 3) {
$this->setMessage("Plus que ".$input['count']);
$_SESSION['count'] = $input['count'];
echo "<br>Session : ";
print_r($_SESSION);
return true;
} else {
$this->setMessage("Vous devez commencer par le chiffre 3");
echo "<br>Session : ";
print_r($_SESSION);
return false;
}
} else {
echo "regex not ok";
$this->setMessage("Saisie incorrecte, vous avez saisi '".$input['count']."' alors qu'un chiffre compris entre 0 et 3 était demandé.");
echo "<br>Session : ";
print_r($_SESSION);
return false;
}
} else {
echo "session set - ";
if(preg_match($this->getRegex(), $input['count'])) {
//Vérification ancienne valeur-1 = valeur actuelle saisie
echo "regex ok";
echo "Session value - 1 : ".($_SESSION['count']-1)." ; Post value : ".$input['count'];
if(($_SESSION['count']-1) == $input['count'] && $input['count'] > 0) {
$this->setMessage("Plus que ".$input['count']);
$_SESSION['count'] = $input['count'];
echo "<br>Session : ";
print_r($_SESSION);
return true;
//Vérification si valeur saisie = 0
} else if(($_SESSION['count']-1) == $input['count'] && $input['count'] == 0) {
$this->setMessage("Fini !");
echo "<br>Session : ";
print_r($_SESSION);
return true;
} else {
$this->setMessage("La valeur saisi ne correspond pas à l'ordre du compte à rebours (3 2 1 0)");
echo "<br>Session : ";
print_r($_SESSION);
return false;
}
} else {
echo "regex not ok";
$this->setMessage("Saisie incorrecte, vous avez saisi '".$input['count']."' alors qu'un chiffre compris entre 0 et 3 était demandé.");
echo "<br>Session : ";
print_r($_SESSION);
return false;
}
}
}
}
}
?>
Я получаю хорошую вещь с первой попытки или, если она плохая, напр. : 'a'
(регулярному выражению не соответствует число с цифрами /^[0-3]{1}$/
), но вторая попытка идет так, как если бы она была первой.