Php for循环基于复选框设置变量
我有一个系统,允许用户创建一个问题,其中每个可能的答案都有一个复选框。如果勾选了,那么答案是正确的。我在数据库中保存Php for循环基于复选框设置变量,php,variables,post,loops,Php,Variables,Post,Loops,我有一个系统,允许用户创建一个问题,其中每个可能的答案都有一个复选框。如果勾选了,那么答案是正确的。我在数据库中保存answer\u id,以及一个正确或错误的值,以判断它是否正确。然而,我正在努力将错误答案设置为FALSE,因为未设置的复选框似乎没有进入帖子 $count = count($_POST['answer']); $answers = array(); for($i = 0; $i < $count; $i ++) { if(isset($_POST['correct
answer\u id
,以及一个正确或错误的值,以判断它是否正确。然而,我正在努力将错误答案设置为FALSE,因为未设置的复选框似乎没有进入帖子
$count = count($_POST['answer']);
$answers = array();
for($i = 0; $i < $count; $i ++) {
if(isset($_POST['correct'][$i])) {
$correct = "true";
} else {
$correct = "false";
}
$answers[] = array(
'answer' => $_POST['answer'][$i],
'correct' => $correct
);
}
$count=count($_POST['answer']);
$answers=array();
对于($i=0;$i<$count;$i++){
如果(isset($_POST['correct'][$i])){
$correct=“true”;
}否则{
$correct=“false”;
}
$answers[]=数组(
'answer'=>$\u POST['answer'][$i],
“正确”=>$correct
);
}
我做错了什么吗?您可以将表单中的问题总数也传递给POST,然后对照问题总数和复选框集的数量进行检查。浏览器不将未检查的框传输到服务器是完全正常的。这就是为什么在PHP中没有这些值 您需要为每个复选框指定一个唯一的名称,以使其可识别。然后可以检查是否传输了每个唯一名称的值。只有经过检查的人才可以转学 因此,您的问题是,在创建数据库之前,您首先需要找出哪些复选框已选中,哪些未选中 一个简单的解决方案是对字段进行编号,例如从
answer\u 1
到answer\u n
(其中n
是最大的数字,例如5
)
如果答案的计数是动态的,请查找可能的最大数量和/或将答案的数量转移到另一个隐藏表单字段中。注意对输入进行消毒
<form method="post">
<input type="hidden" name="answer_count" value="3" />
...
</form>
...
隐藏表单字段的HTML示例
$name='answer';
$count=isset($\u POST[“$name\u count”])?最大值(0,$\u POST[“$name\u count”]):0;
$answers=array();
对于($i=0;$i++<$count;)
{
$answer=isset($\u POST[“$name\u$i”])?$\u POST[“$name\u$i”]:NULL;
$correct=/*我不知道怎么做,就这么做吧;)*/;
$answers[]=compact('answer','correct');
}
在一组可能的集合表单字段上迭代的PHP示例
希望这有帮助。以@hakre的例子为基础构建解决方案。 HTML代码(每个复选框名称包含问题索引=>“answer0”、“answer1”、…、“answerN”):
$name = 'answer';
$count = isset($_POST["$name_count"]) ? max(0, $_POST["$name_count"]) : 0;
$answers = array();
for ($i = 0; $i++ < $count;)
{
$answer = isset($_POST["$name_$i"]) ? $_POST["$name_$i"] : NULL;
$correct = /* don't know how you do that, just do it ;) */;
$answers[] = compact('answer', 'correct');
}
<form method="post">
<input type="checkbox" name="answer0" value="1" /> 2+0=2?
<input type="checkbox" name="answer1" value="1" /> 2+1=8?
<input type="checkbox" name="answer2" value="1" /> 2+2=7?
<input type="checkbox" name="answer3" value="1" /> 2+3=5?
<button>submit</button>
</form>
$name = 'answer';
$correct_answers = (true, false, false, true);
$answers_count = sizeof($correct_answers);
$correct_answers_count = 0;
for ($i = 0; $i++; $i < $answers_count)
{
$correct_answers_count += (isset($_POST[$name.(string)$i]) && $correct_answers[$i]) || (!isset($_POST[$name.(string)$i]) && !$correct_answers[$i]) ? 1 : 0;
}