在另一个循环内部通过复选框循环

时间:2014-05-12 14:10:43

标签: php mysql loops checkbox

我在解决嵌套循环时遇到了一些麻烦。我有一个表单,将一系列数据发送到mysql数据库。我使用while函数,它可以正常工作。但现在我对每个条目都有一个checkbox选项,这就是我的问题。

该复选框应该发送到另一个表,其中包含id,系列ID和每行checkbox。 但我所能做的就是让第一个系列的答案重复其他系列。

这就是我想要的:

Lance 1
 Checkbox 1
 checkbox 3
 checkbox 4
Lance 2
 checkbox 2
 checkbox 3
Lance 3
 checkbox 1
 checkbox 2
 checkbox 3

This is what I get
Lance 1
 Checkbox 1
 checkbox 3
 checkbox 4
Lance 2
 Checkbox 1
 checkbox 3
 checkbox 4
Lance 3
 Checkbox 1
 checkbox 3
 checkbox 4

到目前为止我的循环代码:

$i=0;
$elements = count($lance);
while ($i < $elementss) {
$query = "INSERT INTO 
    mapa_bordo_lance 
        (id_mb, lance, data_lance, lat, lon, anzol, isca, hora_lan, hora_rec, ave_capt, mm_uso)
    VALUES 
        ('$id_mb', '$lance[$i]', '$data_lance[$i]', '$lat[$i]', '$lon[$i]', '$anzol[$i]', '$isca[$i]', '$hora_lan[$i]', '$hora_rec[$i]',
        '$ave_capt[$i]', '$mm_uso[$i]')";
$result = mysql_query($query, $link);

$y = 0;
$elementss2 = count($checkbox);
while ( $y < $elements2) {
    $query = "INSERT INTO mapa_bordo_mm (id_mb, lance, mm)
            VALUES ('$id_mb', '$lance[$y]', '$medida_metiga[$y]')";
    $result = mysql_query($query, $link);

$y++;
}
$i++;
}

1 个答案:

答案 0 :(得分:0)

关于复选框

根据您的问题,评论以及pasted snippets中提供的信息,我感觉您为每个Lance获得了相同的Checkbox值,因为在此代码中:

$y = 0;
$elementss2 = count($checkbox);
    while ( $y < $elements2) {
    $query = "INSERT INTO mapa_bordo_mm (id_mb, lance, mm)
              VALUES ('$id_mb', '$lance[$y]', '$medida_metiga[$y]')";
    $result = mysql_query($query, $link);
    $y++;
}

似乎$medida_metiga[$y]部分只调用相同的$medida_metiga (及其数组项......),而不是调用下一个$medida_metiga0和示例数组中的$medida_metiga1个部分(在this link中给出。)

您可能需要找到一种方法 连接 您的$medida_metiga数组/键的数字(如0,1,......等)有点像这样:$medida_metiga[$y.$some_number_here]以便找到匹配的复选框。 您可能还想重新考虑$medida_metiga$medida_metiga0$medida_metiga1方法的命名。

例如,而不是:

$medida_metiga

如果您从以下开始怎么办?

$medida_metiga0

这样您就可以更轻松地遍历数组/键,而无需检查此项目的末尾是否有数字。


关于SQL

如果有机会,最好在PHP中查看如何使用 prepared statements ,除非阻止SQL注入< / em>的。 This other answer 可能会为您提供有关准备好的陈述的一些提示。


关于循环

虽然 while循环在技术上可以用于您的目的,但在这种情况下使用forforeach循环可能是值得的,因为那些类型的循环可以帮助保持代码清洁并提高代码可读性。有关为不同应用程序选择循环的提示,可能值得查看 this other answer


关于变量命名

您可能已经看过这个,但请确保您的变量名称($elements$elementss?)匹配:

$elements = count($lance);
while ($i < $elementss) { ... }

// ...

$elementss2 = count($checkbox);
while ( $y < $elements2) {