循环访问MySQL查询和一系列复选框

时间:2011-06-15 19:21:58

标签: php mysql sql

好的,所以我通过$ _GET请求传递了由其ID表示的已检查项目数组。例如,假设以下形式:

Question 1
[ ] Answer 1 [31]
[ ] Answer 2 [32]
[ ] Answer 3 [33]
[ ] Answer 4 [34]

假设用户选择了Answer 2Answer 4,因此传递的数组分别包含3234,在数据库中表示其ID。现在,我想循环查看此问题的所有答案的数据库查询并打印回复选框。但是,如果答案是他们选择的答案,我希望已经选中了复选框,因此,根据我的示例,输出将是:

Question 1
[ ] Answer 1 [31]
[x] Answer 2 [32]
[ ] Answer 3 [33]
[x] Answer 4 [34]

我想我的循环结构有点偏差......但这就是我的开始:

// The array that gets passed
$curr_answer_id = $_GET['answer'];

$length = count($curr_answer_id);

while($row = mysql_fetch_assoc($fetch2)){
    for($j = 0; $j < $length; $j++){
        if($row['answer_id'] == $curr_answer_id[$j]){
            echo "<input type='checkbox' value='$curr_answer_id[$j]' checked>".$row['answer']."</input>";
        } else {
            echo "<input type='checkbox' value='$curr_answer_id[$j]'>".$row['answer']."</input>";
        }
    }
        echo "<br \>";
}

然而,这个重复的结果是检查了很多答案。然而,除了重复之外,它运行良好。与前一个示例一样,输出为:

Question 1
[ ] Answer 1 [31]
[ ] Answer 1 [31]
[x] Answer 2 [32]
[ ] Answer 2 [32]
[ ] Answer 3 [33]
[ ] Answer 3 [33]
[ ] Answer 4 [34]
[x] Answer 4 [34]

我如何使用我所拥有的东西解决这个问题?如果有人也可以借给我一种更有效的方式来循环遍历所有可能很好的数据。

感谢。

2 个答案:

答案 0 :(得分:2)

也许这对你来说是正确的解决方案?

$curr_answer_id = $_GET['answer'];

while($row = mysql_fetch_assoc($fetch2))
{
    echo "<input type='checkbox' value='".$row['answer_id']."' ".(in_array($row['answer_id'], $curr_answer_id) ? " checked" : "").">".$row['answer']."</input>";
    echo "<br \>";
}

未经测试。

更新:将输入值替换为$row['answer_id']而不是$curr_answer_id[$j]

答案 1 :(得分:2)

双输出是显而易见的,因为对于查询的每个结果集,您运行FOR循环的次数等于用户的响应数。

while($row = mysql_fetch_assoc($fetch2)){
    for($j = 0; $j < $length; $j++){

WHILE循环遍历每一行(31,32,33,34),然后FOR循环循环两次。如果你在GET请求中发送3个答案,你会看到每个复选框出现3次。

解决方案可能是在WHILE循环内,您可以使用in_array()来检查$ _GET ['answer']中是否存在$ row ['answer']。并据此决定是否选中或取消选中复选框。

希望有所帮助。

相关问题