【问题标题】:How can I loop through a checkbox array and insert into MySQL?如何遍历复选框数组并插入 MySQL?
【发布时间】:2013-11-20 14:23:51
【问题描述】:

更新: 复选框数组起作用并填充适当的数据。现在我需要将复选框数组中的数据插入 MySQL。这段代码出了点问题:

if(!empty($_POST['check1'])) {
foreach($_POST['check1'] as $check) { 
    $exclude_arr[] = $check;
    for ($j = 0; $j < count($exclude_arr); $j++){
        $exclude = $exclude_arr[$j];
        $sql = 'INSERT INTO exclude (name) VALUES ('.$exclude.')';
        $dbhc->query($sql);
    }
  }
}

上一页:我有一个 HTML 表格,最后一列中有一组复选框。我想获取所有选中的复选框并将它们的值插入到 MySQL 表中。复选框的值是从不同的 MySQL 表中提取的名称。我在遍历复选框数组时遇到问题。

<?php
$dbhc = new mysqli('localhost','user','password','database') or die(mysql_error());
echo "<form action=\"file.php\" method=\"post\">
<table border='0'>
    <tr>
        <th>strategygame</th>
        <th width='130px'>approachpath</th>
        <th width='130px'>universe</th>
        <th width='130px'>strategylevel</th>
        <th width='130px'>capacity</th>
        <th width='130px'>exclude</th>
    </tr>";
while($row = mysqli_fetch_array($result)){
    $localcounter = $localcounter + 1;
    echo "<tr>";
    echo "<td>" . $row['strategygame'] . "</td>";
    echo "<td align='center'>" . $row['approachpath'] . "</td>";
    echo "<td align='center'>" . $row['universe'] . "</td>";
    echo "<td align='center'>" . number_format($row['strategylevel'], 0, '.', ',') . "</td>";
    echo "<td align='center'>" . number_format($row['capacity'], 0, '.', ',') . "</td>";
    echo "<td align='center'><input type=\"checkbox\" name=\"check1[{$row['id']}]\" value=\"{$row['strategygame']}\"/></td>";
    echo "</tr>";
}
echo "</table>
<input type=\"submit\" value=\"Save Selection\"/> 
</form>";
if(!empty($_POST['check1'])) {
    foreach($_POST['check1'] as $check) { 
        $exclude_arr[] = $check;
        for ($j = 0; $j < count($exclude_arr); $j++){
            $exclude = $exclude_arr[$j];
            $sql = 'INSERT INTO exclude (name) VALUES ('.$exclude.')';
            $dbhc->query($sql);
        }
    }
}
?>

【问题讨论】:

  • 在您的 PHP 错误日志中是否出现错误,foreach 的参数无效?
  • @AliExalter:我的 PHP 错误日志中出现此错误:[20-Nov-2013 09:01:20] PHP Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/user/public_html/website/folder/file.php on line 21
  • 这不是这个文件。如您上面的代码中,您的表单操作是 file.php 并且循环不在 file.php 中,它在具有表单的页面上。另外我注意到你的INSERT QUERY 有$name,这是从哪里来的。
  • @AliExalter:$name 已更改为 $exclude。如何协调表单和循环?
  • 如果循环和表单在同一页面上,那么您的表单应该在循环所在的同一页面上提交(表单操作)。第一次加载页面时,它没有获取 POST 数据。它仅在表单提交时获取。您的表单正在向 file.php 发送 POST 数据。这段代码来自 file.php 吗?

标签: php mysql checkbox


【解决方案1】:

只看 html,你会遇到一个问题,就是只有选中的复选框被发送到服务器,所以你永远不知道哪个框代表数据库中的哪一行,对于两个以表单发送的,例如 @ 987654321@ 代表不同的东西。

我要更改的第一件事是确保您的复选框易于识别,例如使用以下内容:

<input type=\"checkbox\" name=\"check1[{$row['id']}]\" value=\"{$row['strategygame']}\"/>
                                                               ^^^^^^^^^^^^^^^^^^^^^^ don't use echo here, you are already echoing
                                       ^^^^^^^^^^^^ add an identifier to the checkbox

正如您在上面看到的,我还删除了 echo 声明,因为您已经在回应了。

另外,我不知道$name在你的sql语句中来自哪里,但你可能有sql注入问题。

【讨论】:

  • 您应该添加一个事实,即 OP 没有定义要插入数据库的 $name 变量的值。
  • @fletch 好笑,我就是这么做的 :)
  • 干得好。 :) 我不想仅仅为了提及这一点而发布新答案。我想我可以补充一点,OP 也有一个似乎是冗余的循环,它允许 exclude 表中的重复行。
  • @fletch 说实话,带有 sql 的双循环对我来说没有任何意义,但这将是下一个问题,现在甚至没有一个明智的形式来处理......
  • 将 $name 变量切换为 $exclude 并更新了上面的代码。目标是 MySQL Insert 中的 name 列等于所有复选框的“strategygame”值。目前没有收到任何错误,但也没有插入 MySQL。
猜你喜欢
  • 2013-04-19
  • 2015-12-23
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 2016-08-20
  • 1970-01-01
相关资源
最近更新 更多