刷新页面时如何巩固分数?

时间:2016-01-13 06:25:28

标签: php html

我有这个页面用于将我的答案作为表单提交到另一个PHP文件名processGame.php

String command = input.nextLine();

在提交时,我转到此processGame.php,我有这样的代码:

<?php
$factor1 = rand(2, 12);
$factor2 = rand(2, 12);
$answer = $factor1 * $factor2;
$score = 0;
?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div id="imageContainer1">
            <?php echo $factor1; ?>
        </div>
        <div id="imageContainer2">
            <?php echo $factor2; ?>
        </div>       

        <div id="form">
            <form method="post" action="processGame.php">
                <textarea type="text" name="userInput" maxlength="3" style="width: 150px; height: 95px; position: absolute; top: 250px; left: 20px; font-size: 80px;"></textarea>
                <input type="hidden" name="answer" value="<?php echo $answer; ?>">
                <input type="submit" name="enter" value="Enter" style="width: 120px; height: 100px; font-size: 40px; position: relative; top: 250px; left: 180px;">
            </form>
        </div>
    </body>
</html>

然而,分数无法合并,并且在循环5轮后不会打印出分数。请帮帮我! :(

2 个答案:

答案 0 :(得分:0)

您没有将$score发送到其他页面。在重定向时发送分数:

header("location:game.php?score=$score");

您可以使用game.php

$score=$_GET['score'];中获得此分数

答案 1 :(得分:0)

发生了什么事?

您的代码存在一些问题。让我们快速浏览一下:

首先,这是您的代码将执行的操作:

  • 创建并显示输入表单(game.php
  • 在提交时重定向到processGame.php并在那里:
    • 输入循环
    • 检查input是否等于answer
    • 如果是这样,请将本地变量$score增加1和
    • 重定向game.php

所以这就是出了什么问题:

  • 您未显示任何分数的原因是$score只能在$processGame.php内访问。
  • 到达header()后,将留下processGame.php,不再执行任何代码。这就是为什么你永远不会比第一次迭代更进一步。
  • 你的循环不会有任何影响。每次提交game.php表单时,processGame.php都会被处理,就像之前从未打开过一样。所以你的循环总是从0开始(顺便说一下也会运行6次! - 使用<5代替<=5)。
  • 输入错误的答案时,您也会看到问题。你的循环将运行6次然后停止,留下一个空白页面。

嗯,你能做什么呢?

有一个很多可供使用,因为我希望解释可理解。我可以而且不会在这里提供完整的代码,因为这基本上意味着重写您提供的所有内容。但我建议阅读以下主题并重新思考您的代码:

一些建议:

  • 请勿使用GET参数将分数传回给用户。他们可以很容易地被操纵(他们只是欺骗自己,不管他们吗?)。
  • 使用Ajax调用和JavaScript调用处理页面,不要让用户每轮重新加载整个游戏。

关于代码的最终想法

无论如何你重写游戏,这里有一个最后的提示:将你的答案存储在<input type="hidden">字段中。玩家可以通过查看源代码轻松阅读答案。相反,将输入因子发送到服务器上的处理代码,然后让他完成工作。 :)

开始使用

根据您的初始代码,这是一个非常基本,可行的解决方案。请记住,这不是最终解决方案的样子,但它旨在为您提供一个起点。 确保您完全理解,否则很快就会遇到麻烦!

game.php

<?php
$factor1 = rand(2, 12);
$factor2 = rand(2, 12);
$score = isset($_GET["s"]) ? $_GET["s"] : 0;
$round = isset($_GET["r"]) ? $_GET["r"] : 0;
?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Game</title>
    </head>
    <body>
        <div id="stats">
            <p>Your current score is: <?php echo $score; ?></p>
            <?php if( isset($_GET["l"]) ): ?>
            <p>Wrong answer! The correct solution would have been: <?php echo $_GET["l"]; ?>
            <?php endif; ?>
            <?php if( 5 == $round ): ?>
            <p>Game over! You scored <?php echo $score; ?> points.
            <?php endif; ?>
        </div>
        <div id="form">
            <form method="post" action="processGame.php">
                <?php echo "$factor1 * $factor2 ="; ?>
                <input type="text" name="userInput" maxlength="3" />
                <input type="submit" name="solve" value="Solve">
                <!-- Meta information, used to compute game progress: -->
                <input type="hidden" name="f1" value="<?php echo $factor1; ?>">
                <input type="hidden" name="f2" value="<?php echo $factor2; ?>">
                <input type="hidden" name="s" value="<?php echo $score; ?>">
                <input type="hidden" name="r" value="<?php echo $round; ?>">
            </form>
        </div>
    </body>
</html>

processGame.php

<?php
//retrieve postet information
$userInput = isset($_POST["userInput"]) ? intval($_POST["userInput"]) : 0;
$factor1   = isset($_POST["f1"])        ? intval($_POST["f1"]) : 0;
$factor2   = isset($_POST["f2"])        ? intval($_POST["f2"]) : 0;
$score     = isset($_POST["s"])         ? intval($_POST["s"]) : 0;
$round     = isset($_POST["r"])         ? intval($_POST["r"]) : 0;
// calculate correct result
$solution  = $factor1 * $factor2;

//this is the url that will be returned to. Notice the use of GET parameters
$url = "game.php?r=".($round+1);

//check with user input
if( $userInput == $solution)
{
    $score += 1;
    $url.="&s=$score";
}
else
{
    $url.="&s=$score&l=$solution";
}
//return to interface
header("Location:$url");