Переменная сеанса, кажется, сбрасывается, почему?(Форма ввода обратного отсчета) - PullRequest
0 голосов
/ 02 апреля 2019

Я сделал форму с вводом, где вы должны ввести, в следующем порядке: 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}$/), но вторая попытка идет так, как если бы она была первой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...