在PHP / Javascript中运行计时器时验证用户输入

时间:2014-11-29 15:12:10

标签: php html forms validation

我正在创建一个PHP网站,其中用户必须在表单中输入一些文字,然后我需要检查该文本是否与$_SESSION["ptext"]中存储的数据相匹配。

如果匹配不正确,那么用户将失去生命($_SESSION["lives"]),并且只要$_SESSION["lives"] > 0,游戏就会继续,给用户另一次机会。因此,在检查时,我不希望将用户重定向到另一个页面。

此外,我尝试使用$_SERVER["PHP_SELF"]作为表单的action,但重新加载页面并重新启动计时器,这是我不想要的。代码位于名为level1_1.php的文件中,如下所示:

<h5>Type answer here: </h5>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<textarea rows="10" cols="50" name="userinput"></textarea>
<span> <?php echo $msg;?></span>
<br>
<input type="submit" name="Submit">
</form>

<?php
// validate user input
$userinput = "";

// if form submitted
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    // reduce user input to only letters and numbers
    $userinput = preg_replace('/\s+/', '', $_POST["userinput"]);

    // if incorrect, lose life
    if (strcasecmp($userinput, $_SESSION["ptext"]) != 0)
    {
        $_SESSION["lives"]--;

        // inform user
        $msg = "Sorry, that is incorrect. Please try again.";

        // if no more lives, game over!
        if ($_SESSION["lives"] == 0)
        {
            redirect("gameover.php");
        }

    }

    // otherwise, move on to next level
    else
    {
        $msg = "Great job! Get ready for the next level!";
        redirect("game.php");
    }  
}

?>

3 个答案:

答案 0 :(得分:0)

<form action ="" method="post">

而不是

if ($_SERVER["REQUEST_METHOD"] == "POST")
{

if(isset($_POST['Submit'])){

答案 1 :(得分:0)

您可能希望使用JS和AJAX提交表单。您可以使用jquery使这更容易。为了做到这一点,你需要将回答问题的逻辑放入一个单独的php文件中,该文件不负责显示任何内容,而是返回一组字符串中的一个,例如正确,不正确,没有生命等...... AJAX提交的表格将发布到这个新页面,响应将由java脚本处理,如果合适的话,迫使用户进入最终场景。

有关jquery的post方法的更多信息,请访问jQuery.post()

答案 2 :(得分:0)

PHP是服务器端,因此始终会重定向用户。 使用像JS这样的客户端(加上它有帮助的jQuery)。 检查文档: http://api.jquery.com/jquery.post/ http://api.jquery.com/jquery.ajax/

发送ajax请求并检查响应。 Ajax请求需要有一些身份验证令牌来识别用户,而后期操作文件需要访问同一会话,因此session_start。

基本上,您正在搜索ajax请求,在那里查看更多内容。 搜索大量示例。