【问题标题】:Looping Through Checkboxes while Inside Another Loop在另一个循环中循环通过复选框
【发布时间】:2014-06-29 22:50:06
【问题描述】:

我在解决嵌套循环时遇到了一些问题。我有一个将一系列数据发送到 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++;
}

【问题讨论】:

  • 感谢您提供以上信息!不过,我确实有一个问题:您的 $checkbox 变量在哪里设置?此外,对于未来,您可能希望在 SQL 查询中使用名为“prepared statements”的东西(至少出于安全原因。)
  • $checkbox 来自表单,其中有 4 个选项,由 $_POST["checkbox"]; 给出。这是你问的吗?顺便说一句,我会看一下并考虑你对准备好的陈述的建议。非常感谢。
  • 没问题!感谢您提供额外信息;我只是想查明为什么结果看起来不像你想要的那样。另一个问题:$lance 变量代表什么? (或者换句话说,如果复选框选项只有四个选项,那么单个表单提交的这些值怎么可能不同?)
  • 当然,我使用粘贴代码使其更容易。复选框的真实名称是medida_metiga。我在这里进行了更改,以便每个人都更容易阅读。我从表格中发布了一些代码。链接是paste.ideaslabs.com/show/yUhMStlnZ1
  • 是的,第一行是公共信息,下面是渔船旅行期间发生的 3 个事件。 “medida_metiga”是复选框中的变量。当我单击按钮添加一个新事件时,这个 var 在前面添加一个 id,以区别于其他事件。所以它的事件 1,“medida_metiga”,事件 2,“medida_metiga0”,事件 3,“medida_metiga1”等等。我认为这就是问题所在。但我还没有弄清楚。 paste.ideaslabs.com/show/mdpDmTbR5b

标签: php mysql loops checkbox


【解决方案1】:

关于复选框

根据您的问题、cmets 和 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 注入。 This other answer 可能会给你一些准备好的语句入门的提示。


关于循环

虽然 while 循环在技术上可以满足您的目的,但在这种情况下使用 for 或 foreach 循环可能是值得的,因为这些循环可以帮助保持代码干净并提高代码的可读性。可能值得一看 this other answer 以获取有关为不同应用程序选择循环的提示。


关于变量命名

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

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

// ...

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

【讨论】:

  • 我什至不知道如何感谢你。这很有帮助。我在想类似的东西,但我不知道如何实现。我会努力改变并让它发挥作用。我一定会好好看看你的建议,并认真考虑改进我的工作。再次感谢您抽出宝贵时间帮助我。当我得到它的工作时,我会在这里发布解决方案。最好的问候。
  • @aoceano 很高兴能够提供帮助! :)
猜你喜欢
  • 2016-04-10
  • 1970-01-01
  • 2020-02-20
  • 2020-12-02
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
相关资源
最近更新 更多