【问题标题】:How to Insert Multiple Checkbox Values into a Database如何将多个复选框值插入数据库
【发布时间】:2013-01-20 12:43:35
【问题描述】:

我在这两天的大部分时间里一直在研究这个并在网上搜索并没有任何结果。费了很多功夫,我可以将一个选中的值插入数据库;但是,如果我选中更多框,它仍然只会插入一个值。

这是我在输入用户页面上使用的代码(不包括表单标签):

  <input type="checkbox" name="skills[]" value="1"> ActionScript<br />
  <input type="checkbox" name="skills[]" value="2"> AppleScript <br />

现在我正在获取两个会话变量,以将所选技能链接到已登录的用户:

  $skills = $_POST['skills'];
  $id = $_SESSION['Ind_ID'];

这里是有一些小错误的代码:

for ($i=0; $i<sizeof($skills);$i++) {
    // echo $skills[$i];
    $query= "INSERT INTO individual_skills(Skills_ID,Ind_ID) VALUES (" .$skills[$i]. ",
            ".$_SESSION['Ind_ID'].")";
 }

使用 echo $skills[$i] 我可以看到我正在循环并且可以在屏幕上显示尽可能多的用户输入;所以,这是个好消息。

问题是我无法在数据库中插入多个值。我一次可以做一个值;但是,不超过一个。

看来我的查询非常接近。如果我选择只选择一个复选框,它就完美了;但是,如果我选择了多个,它只会输入最后一个值(因此,如果我选择了 10 个值,它会将最后一个值插入到数据库中)。

任何帮助,非常感谢。

我正在使用 PHP 和 MySQLi

根据反馈进行更新 这是更新的循环。我在循环之外有查询,现在尝试追加到我的初始查询。错误表示查询的语法有问题。

$query= "INSERT INTO individual_skills(Skills_ID,Ind_ID) VALUES (" .$skills[$i]. ",
                                                        ".$_SESSION['Ind_ID'].")";

  for ($i=0; $i<sizeof($skills);$i++) {
  //echo $skills[$i];
  $query.= " VALUES (" .$skills[$i]. ",".$_SESSION['Ind_ID'].")";
  }

【问题讨论】:

  • 您容易受到 SQL 注入的攻击。使用准备好的语句并绑定技能 ID 变量。
  • 谢谢....将进行这些更改。

标签: php mysql mysqli


【解决方案1】:

想想你的代码在做什么。在每个循环中,您都在重新定义 $query 变量,这样当您到达终点时,$query 的最终值将是您检查的最后一个值。

如果您仍然想使用您编写的相同循环逻辑,这可能不是最有效的方式,那么您必须在每次 in 循环时执行查询,所以你写的每一个查询都会被执行。

更准确地说,混淆似乎源于您尚未完全发现为变量赋值和将变量传递给函数以执行之间的区别。

【讨论】:

  • 太棒了。您已经解释了为什么。关于如何使这段代码更高效的任何想法(通过每个循环听起来根本没有效率)。提前致谢。
  • 在循环$query= "INSERT INTO individual_skills(Skills_ID,Ind_ID)之外开始$query文本,然后在循环中递归地附加到$query变量:$query .= "VALUES (".$skills[$i]. ",".$_SESSION['Ind_ID'].")"。您必须确保使用循环逻辑获得正确的语法。最后,您将拥有单个 $query 变量中的所有值,准备好添加到数据库中。
  • 非常有趣的方法。我现在就试试看。非常感谢您的耐心和帮助。
  • 如果您有时间,能否指出我正确的方向(链接)如何附加到 $query。非常感谢。
  • 一方面,$query 的原始定义不需要添加任何值,因为此时$i 是未定义的。我松散地谈到的另一个问题是,每个VALUES (...) 都需要用逗号分隔,因此由您决定循环语法是否正确
猜你喜欢
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多