0

我正在尝试构建一个系统,该系统会给用户一个随机问题,然后通过 POST 将用户的答案和正确答案发送到下一页,而不会向用户显示正确答案是什么。FileB.php加载时,var_dump($_POST);读取

array(1) {
  ["response"]=>
  string(32) "Whatever the user's response was"
}

为什么我下面的东西不起作用?为什么anspost请求没有通过?

文件A.php

<?PHP
function post($data) // from http://stackoverflow.com/questions/5647461/how-do-i-send-a-post-request-with-php
{
    $options = array(
        'http' => array(
              'header'  => "Content-type: application/x-www-form-urlencoded\r\n"
            , 'method'  => 'POST'
            , 'content' => http_build_query($data)
        ),
    );
    $context  = stream_context_create($options);
}

post(array("ans" => "Correct Answer"));
?>
<HTML>
<HEAD>
<TITLE>Form</TITLE>
</HEAD>
<BODY>
<FORM METHOD="post" ACTION="FileB.php">
    <LABEL>What is the correct answer? <INPUT TYPE="text" NAME="response"/></LABEL>
</FORM>

文件B.php

<HTML>
<HEAD>
<TITLE>Results</TITLE>
</HEAD>
<BODY>
<?PHP
if ($_POST["ans"] == $_POST["response"])
{
    echo "You are correct!";
}
else
{
    echo "You're wrong!";
}
?>
</BODY>
</HTML>
4

4 回答 4

1

在您得到 Strat 的建议后,改进可能是将正确答案存储在会话变量中,而不是在 HTML 源代码中显示它。那么你就不需要隐藏字段了。例子:

文件A.php

session_start();
$_SESSION['answer'] = "....";

文件B.php

session_start();
if ($_POST['response'] == $_SESSION['answer'])
{
    echo "You're right.";
}
...
于 2013-06-26T17:39:32.800 回答
0

为什么没有提交按钮或类似“JavaScript+Ajax”之类的东西来捕获用户输入?如果这不是您的问题,请说明您的脚本到底是什么不工作?即使响应正确或根本没有任何输出,您是否会得到“你错了”?也可能是因为您在接受输入之前调用了 post()。

于 2013-06-26T17:24:46.560 回答
0

尝试这样的事情:

文件A.php

<HTML>
  <HEAD>
    <TITLE>Form</TITLE>
  </HEAD>
  <BODY>
    <FORM METHOD="post" ACTION="FileB.php">
      <LABEL>What is the correct answer? <INPUT TYPE="text" NAME="response"/></LABEL>
      <INPUT TYPE="hidden" NAME="answer" VALUE="Correct Answer" />
    </FORM>
  </BODY>
 </HTML>

文件B.php

<HTML>
  <HEAD>
    <TITLE>Results</TITLE>
  </HEAD>
  <BODY>
    <?PHP
      if ($_POST["answer"] == $_POST["response"]){
        echo "You are correct!";
      }else{
        echo "You're wrong!";
      }
    ?>
  </BODY>
</HTML>

显然将答案输入的值更改为您的答案应该是什么。如果您需要 100% 隐藏答案,这不是最好的解决方案,但可能是最容易让它工作的解决方案。

于 2013-06-26T17:30:03.827 回答
0

根据我从您的问题中了解到的情况,您必须传递两个变量:随机问题及其对 的答案FileA.php,但您还希望隐藏您的答案。然后,您使用POST将答案发送到FileB.php.

您可以按照@Strat 的建议进行操作,方法是设置一个隐藏字段。例如:

<?php
    $random_question = '.....';
    $random_answer = '.....';
?>

<?php echo $random_question; ?>
<form action='fileB.php' methid='POST'>
     <input type='text' name='response' />
     <input type='hidden' name='ans' value='<?php echo $random_answer; ?>' />
</form>

缺点是隐藏字段仅阻止浏览器显示答案,但他们可以轻松检查元素并获得正确答案。您可以通过以下方式防止它

<input type='hidden' name='ans' value='<?php echo md5($random_answer); ?>' />

if ($_POST["ans"] == md5($_POST["response"]))

我建议的解决方案不是最好的。如果您提供更多上下文,例如脚本后面是否有随机问题的数据库,可能会有更好的方法来做到这一点。

于 2013-06-26T17:33:57.140 回答