会话变量似乎被重置,为什么? (倒数表单输入)

时间:2019-04-02 12:59:52

标签: php html forms session

我制作了一个带有输入的表格,您必须按以下顺序输入: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;
                }
            }
        }
    }
}
?>

我在第一次尝试中获得了好东西,或者如果它是坏类型的ex。 :'a'(不是数字dans代表正则表达式/^[0-3]{1}$/),但是第二次尝试就好像是第一个。

0 个答案:

没有答案