【问题标题】:Validating user input while timer is running in PHP/Javascript在 PHP/Javascript 中运行计时器时验证用户输入
【发布时间】:2014-11-29 23:21:28
【问题描述】:

我正在制作一个带有游戏的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");
    }  
}

?>

【问题讨论】:

  • 在你使用 $_SESSION 之前我错过了一个 session_start()
  • 我只复制了第二部分代码,但确实调用了session_start()。

标签: php html forms validation


【解决方案1】:
<form action ="" method="post">

而不是

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

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

【讨论】:

    【解决方案2】:

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

    jquery的post方法的更多信息可以在这里找到jQuery.post()

    【讨论】:

    • 感谢您的回答!看起来很有希望,但是我如何从那个 php 文件中返回一个字符串??
    • 通常我会构造一个 json 对象字符串(在 php 中相对简单)返回并在 jquery 中解析它。如果你用谷歌搜索这些术语,将会有大量的指南。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-16
      • 2014-11-13
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      相关资源
      最近更新 更多