Php 提交前修改$\u POST变量
我正在制作一个测验生成器,我有一个带有单选答案单选按钮的HTML表单。现在,当我提交表单时,$\u POST变量的内容在我提交表单时如下所示:Php 提交前修改$\u POST变量,php,html,Php,Html,我正在制作一个测验生成器,我有一个带有单选答案单选按钮的HTML表单。现在,当我提交表单时,$\u POST变量的内容在我提交表单时如下所示: Array ( [a1] => Bob [a2] => Bobby ) (鲍勃和鲍比是我选择的单选按钮) 我使用一个PHP函数生成这个表单,它除了返回HTML表单外,还返回一个答案数组。有没有办法修改$\u POST变量,使其具有“answer”字段(用于检查我的答案),如下所示: Array( [a1] => Bob [a2] =
Array ( [a1] => Bob [a2] => Bobby )
(鲍勃和鲍比是我选择的单选按钮)
我使用一个PHP函数生成这个表单,它除了返回HTML表单外,还返回一个答案数组。有没有办法修改$\u POST变量,使其具有“answer”字段(用于检查我的答案),如下所示:
Array( [a1] => Bob [a2] => Bobby [answers] => Array( [0] => Bob [1] => Bilbo ))
$answers = array('a1'=>'Robert', 'a2'=>'Hobo');
foreach($_POST as $key => $value)
{
if (!array_key_exists($key, $answers))
{
continue;
}
if (trim($value) == $answers[$key])
{
// correct
}
else
{
// incorrect
}
}
上面是我想到的用$\u POST数组检查应答数组的一种方法
编辑:有关我目前拥有的内容的更多信息:
- 我有一个PHP函数getTest(),它响应HTML表单,并返回一个包含正确答案的数组李>
- getTest()随机生成每个问题,因此正确答案是随机的
- 主要问题是我有两个单独的PHP文件,questions.PHP和verify.PHP。
- php使用getTest()响应表单,并具有答案数组
- verify.php只包含$\u POST的内容,但不包含正确答案的数组
一般来说,有没有更好的方法来检查表单提交的结果?谢谢 做测验的最好方法是有一个答案数组和一个用户输入数组。通过一个循环并使用相同的增量与另一个进行比较 您可以获取所有post变量并创建一个数组print\r($\u post);然后,循环这个
$inputArray = //the post data into an array
$answerArray = array('a','b','a');
$numCorrect = 0;
for($a = 0; $a < count($inputArray); $a++)
{
if($inputArray[$a] == $answerArray[$a])
{
$numCorrect++;
}
}
$inputArray=//将数据发布到数组中
$answerArray=array('a','b','a');
$numCorrect=0;
对于($a=0;$a<计数($inputArray);$a++)
{
如果($inputArray[$a]==$answerArray[$a])
{
$numCorrect++;
}
}
进行测验的最佳方法是使用答案数组和用户输入数组。通过一个循环并使用相同的增量与另一个进行比较
您可以获取所有post变量并创建一个数组print\r($\u post);然后,循环这个
$inputArray = //the post data into an array
$answerArray = array('a','b','a');
$numCorrect = 0;
for($a = 0; $a < count($inputArray); $a++)
{
if($inputArray[$a] == $answerArray[$a])
{
$numCorrect++;
}
}
$inputArray=//将数据发布到数组中
$answerArray=array('a','b','a');
$numCorrect=0;
对于($a=0;$a<计数($inputArray);$a++)
{
如果($inputArray[$a]==$answerArray[$a])
{
$numCorrect++;
}
}
如果希望$\u POST包含数组,只需在表单的名称字段中使用括号数组符号即可
例如:
<fieldset class="Question1">
<input type="radio" name="answers[]" value="Question1Answer1">Question1Answer1<br>
<input type="radio" name="answers[]" value="Question1Answer2">Question1Answer2<br>
<input type="radio" name="answers[]" value="Question1Answer3">Question1Answer3<br>
</fieldset>
<fieldset class="Question2">
<input type="radio" name="answers[]" value="Question2Answer1">Question2Answer1<br>
<input type="radio" name="answers[]" value="Question2Answer2">Question2Answer2<br>
<input type="radio" name="answers[]" value="Question2Answer3">Question2Answer3<br>
</fieldset>
<fieldset class="Question3">
<input type="radio" name="answers[]" value="Question3Answer1">Question1Answer1<br>
<input type="radio" name="answers[]" value="Question3Answer2">Question1Answer2<br>
<input type="radio" name="answers[]" value="Question3Answer3">Question1Answer3<br>
</fieldset>
如果希望$\u POST包含数组,只需在表单的名称字段中使用括号数组表示法即可 例如:
<fieldset class="Question1">
<input type="radio" name="answers[]" value="Question1Answer1">Question1Answer1<br>
<input type="radio" name="answers[]" value="Question1Answer2">Question1Answer2<br>
<input type="radio" name="answers[]" value="Question1Answer3">Question1Answer3<br>
</fieldset>
<fieldset class="Question2">
<input type="radio" name="answers[]" value="Question2Answer1">Question2Answer1<br>
<input type="radio" name="answers[]" value="Question2Answer2">Question2Answer2<br>
<input type="radio" name="answers[]" value="Question2Answer3">Question2Answer3<br>
</fieldset>
<fieldset class="Question3">
<input type="radio" name="answers[]" value="Question3Answer1">Question1Answer1<br>
<input type="radio" name="answers[]" value="Question3Answer2">Question1Answer2<br>
<input type="radio" name="answers[]" value="Question3Answer3">Question1Answer3<br>
</fieldset>
如果您想在提交表单时发送答案,可以使用隐藏类型(如)的输入,这些输入在页面上不可见。但是,用户只需检查页面的源HTML即可看到这些答案,因此这可能不适合您的使用。希望这对您有所帮助如果您想在提交表单时发送答案,您可以使用隐藏类型(如)的输入,这些输入在页面上是不可见的。但是,用户只需检查页面的源HTML即可看到这些答案,因此这可能不适合您的使用。希望这能有所帮助我想你需要做的是看一下会议
- 这样,在questions.php上,您可以将答案保存到会话变量
- 然后在verify.php上,您可以从会话变量中读取答案,并将它们与$\u POST变量提供的答案进行比较
- 这样,在questions.php上,您可以将答案保存到会话变量
- 然后在verify.php上,您可以从会话变量中读取答案,并将它们与$\u POST变量提供的答案进行比较
Array( [a1] => Bob [a2] => Bobby [answers] => Array( [0] => Bob [1] => Bilbo ))
$answers = array('a1'=>'Robert', 'a2'=>'Hobo');
foreach($_POST as $key => $value)
{
if (!array_key_exists($key, $answers))
{
continue;
}
if (trim($value) == $answers[$key])
{
// correct
}
else
{
// incorrect
}
}
如果您真的想,您可以在表单中使用一个隐藏字段来提交答案数组。但是,任何人都可以更改您的来源并修改正确答案 最好的方法是在处理脚本中有一个具有相同键(a1、a2)但具有正确答案的数组 您的处理脚本如下所示:
Array( [a1] => Bob [a2] => Bobby [answers] => Array( [0] => Bob [1] => Bilbo ))
$answers = array('a1'=>'Robert', 'a2'=>'Hobo');
foreach($_POST as $key => $value)
{
if (!array_key_exists($key, $answers))
{
continue;
}
if (trim($value) == $answers[$key])
{
// correct
}
else
{
// incorrect
}
}
不确定,但看起来您要求的是解决方案Y,而您的问题是X() XY的问题是当你需要做X,你认为你可以用Y 要做X,你就要问如何做Y,什么时候你才是真正应该做的 说明你的X问题是什么。可能有一个Z解是 甚至比Y更好,但如果X从未被提及,没有人能提出它 通常不建议修改$u POST数组,也不建议将带有问题的答案发送到客户端。相反,这种方法应该是这样的,因为
questions.php
不需要答案,但是verify.php
需要答案,所以只有verify.php
可以访问答案
例如,在考试时,答案清单永远不会与试卷一起送到考场
我已经冒昧地修改了你的代码结构。如果你仍然想使用你自己的代码,请发布它,然后你可以得到你想要的答案
尝试使用以下方法:
question.php:
<form action="verify.php" method="POST">
<fieldset class="Question1"> Complete this: ___<b>bar</b>
<input type="radio" name="answers[]" value="foo">Foo<br>
<input type="radio" name="answers[]" value="too">Too<br>
<input type="radio" name="answers[]" value="cho">Cho<br>
</fieldset>
<fieldset class="Question2"> Complete this: ___<b>overflow</b>
<input type="radio" name="answers[]" value="stack">Stack<br>
<input type="radio" name="answers[]" value="stock">Stock<br>
<input type="radio" name="answers[]" value="stick">Stick<br>
</fieldset>
</form>
//correct answers
$answers = array("foo", "stock");
include("answers.php");
$user_answers = $_POST["answers"];
$user_answers_count = count($user_answers);
$error = "";
for($i=0;$i<$user_answers_count;$i++)
if($user_answers[$i] !== $answers[$i]) //verify
$error[] = "Answer for Question ".($i+1)." is wrong!";
if(empty($error))
//Notify that user has passed the Quiz
else
//Notify that user has NOT passed the Quiz
//print the $error array
verify.php:
<form action="verify.php" method="POST">
<fieldset class="Question1"> Complete this: ___<b>bar</b>
<input type="radio" name="answers[]" value="foo">Foo<br>
<input type="radio" name="answers[]" value="too">Too<br>
<input type="radio" name="answers[]" value="cho">Cho<br>
</fieldset>
<fieldset class="Question2"> Complete this: ___<b>overflow</b>
<input type="radio" name="answers[]" value="stack">Stack<br>
<input type="radio" name="answers[]" value="stock">Stock<br>
<input type="radio" name="answers[]" value="stick">Stick<br>
</fieldset>
</form>
//correct answers
$answers = array("foo", "stock");
include("answers.php");
$user_answers = $_POST["answers"];
$user_answers_count = count($user_answers);
$error = "";
for($i=0;$i<$user_answers_count;$i++)
if($user_answers[$i] !== $answers[$i]) //verify
$error[] = "Answer for Question ".($i+1)." is wrong!";
if(empty($error))
//Notify that user has passed the Quiz
else
//Notify that user has NOT passed the Quiz
//print the $error array
include(“answers.php”);
$user\u answers=$\u POST[“answers”];
$user\u answers\u count=计数($user\u answers);
$error=“”;
对于($i=0;$i不确定,但看起来您在寻求解决方案Y,而您的问题是X()
XY的问题是当你需要做X,你认为你可以用Y
做X,所以你问如何做Y,当你做了什么