我正在尝试构建一个系统,它会给用户一个随机问题,然后通过POST将用户的答案和正确答案发送到下一页,而不会向用户显示正确的答案。加载FileB.php
时,var_dump($_POST);
会读取
array(1) {
["response"]=>
string(32) "Whatever the user's response was"
}
为什么我的工作不起作用?为什么ans
帖子请求没有通过?
<?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>
<HTML>
<HEAD>
<TITLE>Results</TITLE>
</HEAD>
<BODY>
<?PHP
if ($_POST["ans"] == $_POST["response"])
{
echo "You are correct!";
}
else
{
echo "You're wrong!";
}
?>
</BODY>
</HTML>
答案 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"]))
我建议的解决方案不是最好的。如果您提供更多上下文,可能有更好的方法,例如脚本背后是否有随机问题的数据库。