Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php for循环基于复选框设置变量_Php_Variables_Post_Loops - Fatal编程技术网

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;
}