如何显示以前分配的变量来自过去的会话

时间:2017-01-18 21:53:22

标签: php html

我是一个新编码器,我正在尝试为一个简单的数学游戏编写一些代码,你必须给出第二个int的值才能得到总和。

我拥有它,所以用户通过表单提交他们的答案,我想拥有它,所以它检查答案,如果它是错误的,它将显示正确的答案。我遇到的问题是,在用户回答问题后,会加载一个新问题并且代码正在检查新问题的答案而不是旧问题的答案,显示新问题的答案。

例如,如果int 1和int 2的总和为30且int 1的值为20,则int 2的值必须为10,这是用户将提交到表单中的值。

我想让它显示“正确”,或者,如果用户弄错了,那么“正确的答案是10”,但事实并非如此,因为在用户回答问题后,它会检查新生成的答案问题并最终显示“正确的答案是20”或无论int 2的新值是什么。我不知道如何评估旧问题的答案,因为变量被新问题覆盖。

<?php
echo "<h2 id='heading'>php program to add two numbers...</h2><br />";
$val1 = rand(1, 100);
$val2 = rand(1, 100);

$sum = $val1 + $val2;   /* Assignment operator */
echo "Result(SUM): $sum";
echo "<img src='math.jpg' alt='math' height='200' width='200'>";
echo "<h2>If val1 : $val1, what is val2</h2>";
echo "<form method = 'post'><input type='text' id='val2' name='val2' onChange='preventDefault();validateForm();'></form>";

if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
     echo ('The Value You Choose Was: ' . $_POST['val2'] . '<br/>');
     $_SESSION['value2'] = $val2;

     if ($_POST['val2'] == $val2 && isset($_POST['val2'])) {
         echo 'You Answered Correctly';
     } elseif(isset($_POST['val2'])) {
         echo ('Wrong the correct answer was: ' . $_SESSION['value2']);
     }
}
?>

2 个答案:

答案 0 :(得分:0)

问题是您在检查其回复之前再次重新生成$val1$val2

让我们说,在第一页加载$val1 = 1$val2 = 2。 屏幕应该说类似于1 + ? = 3

用户(正确)回答2并提交表单。 PHP每次运行脚本时都从正方形开始 - 所以它首先要做的是生成$val1 = 5$val2 = 3。这已经更改答案。它不再正确。

所以基本上你需要在表单中保存$val1$sum(可能是隐藏字段),以便在检查答案时可以引用它们。当REQUEST_METHODPOST时 - 从这些读取而不是生成新的。{/ p>

答案 1 :(得分:0)

正如您可能已经想象的那样,您的程序需要记住两个请求之间随机数的值。要实现此目的,您可以使用会话变量。在多个请求期间可以访问会话变量,直到会话到期。

http://php.net/manual/en/session.examples.basic.php

您已经将游戏结果分配给会话变量:

$_SESSION['value2'] = $val2;

但这还不够:

  1. session_start();
  2. 开始会话
  3. if比较中,使用会话变量(以便与之前请求的值进行比较)而不是新创建的值
  4. if比较后分配会话变量(否则会话变量将具有新的随机nubmer而不是前一个)
  5. 最终代码(未经测试):

    <?php
    session_start();
    echo "<h2 id='heading'>php program to add two numbers...</h2><br />";
              $val1 = rand(1, 100);
              $val2 = rand(1, 100);
    
              $sum = $val1 + $val2;   /* Assignment operator */
              echo "Result(SUM): $sum";
     echo "<img src='math.jpg' alt='math' height='200' width='200'>";
     echo "<h2>If val1 : $val1, what is val2</h2>";
     echo "<form method = 'post'><input type='text' id='val2' name='val2' onChange='preventDefault();validateForm();'></form>";
     if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
     echo ('The Value You Choose Was: ' . $_POST['val2'] . '<br/>');
    
     if (isset($_POST['val2']) && $_POST['val2'] == $_SESSION['value2']) {
         echo 'You Answered Correctly';
     } elseif(isset($_POST['val2'])) {
         echo ('Wrong the correct answer was: ' . $_SESSION['value2']);
     }
    }
    $_SESSION['value2'] = $val2;