为什么我的PHP POST请求没有通过?

时间:2013-06-26 17:14:19

标签: php post http-post

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

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

为什么我的工作不起作用?为什么ans帖子请求没有通过?

FileA.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>

FileB.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 个答案:

答案 0 :(得分:1)

在Strat的建议工作之后,改进可能是将正确的答案存储在会话变量中,而不是在HTML源中显示它。那你不需要一个隐藏的领域。例如:

FileA.php

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

FileB.php

session_start();
if ($_POST['response'] == $_SESSION['answer'])
{
    echo "You're right.";
}
...

答案 1 :(得分:0)

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

答案 2 :(得分:0)

尝试这样的事情:

FileA.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>

FileB.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>

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

答案 3 :(得分: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>

缺点是隐藏字段仅阻止broswer显示答案,但他们可以轻松检查元素并获得正确答案。

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

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

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