从复选框列表中插入数组和非数组变量


Insert Array and Non-Array Variables from Checkbox List

我正试图为我的家人编写一个简单的杂货清单web应用程序,让用户在其中检查他们想添加到清单中的商品,然后将其添加到表中以备将来检索。但是我在试图将数组和用户名一起插入MySQL数据库时遇到了麻烦。我四处寻找答案,但找不到满足以下条件的答案:

  1. 插入数组和非数组
  2. 不使用不推荐使用的mysql_函数

理想情况下,我希望使用PDO,因为我还有一些其他使用PDO的查询。我知道数组正在被传递,因为我在要执行查询的页面上成功地打印了它。以下是我到目前为止所拥有的。

HTML表单(复选框值从另一个MySQL表中填充):

<div class="ui-body">
<? while($row = $resultRedMeat->fetch(PDO::FETCH_ASSOC)){
echo '<label><input type="checkbox" id="groceryListItem[]" name="groceryListItem[]" value="'.$row['food'].'">'.$row['food'].'</label>';
}?>
</div>

插入的PHP代码

$groceryListItems = $_POST['groceryListItem'];    
$q = $db->prepare("INSERT INTO `grocerylist` 
                         SET `username` = $username, `food` = ?");
foreach((array)$groceryListItems as $groceryListItem){
            $q ->execute($username, array($groceryListItem['groceryListItem']));
            }

我在错误日志中得到的错误是:

  1. PHP警告:非法的字符串偏移量"groceryListItem"
  2. PHP警告:PDOStatement::execute()最多需要1个参数,给定2个

虽然传递的所有值都来自数据库,并且没有用户输入,但如果你们认为防止注入仍然很好,在这种情况下,我也不介意对此提出一些建议。

非常感谢你的帮助!

有几件事。

你的$groceryListItems不是按照你的想法构建的。使用print_r($groceryListItems)查看数组,并确定如何访问所需的元素。

关于。您的评论:

print_r($grocery_list_items);
Array ( [0] => Ground Beef (Extra Lean),
        [1] => Flank Steak,
        [2] => Roast )

如果你循环通过这个数组;

$foreach( $grocery_list_items as $key=>$value ){
    //$key will be 0 then 1 the 2
    //$value will be Ground Beef (Extra Lean) then Flank Steak then Roast
}

在您的查询中,您有SET username = $username,但让您尝试将username作为参数传递。用? 替换$username

PDO::execute期望传递给查询的一个参数数组。阅读我因此,将$username和greoceyitem组合到一个数组中以传递执行。

此外,您的查询混合了UPDATE和INSERT语法。如果您正在尝试运行INSERT查询,那么它应该是;

INSERT INTO `grocerylist` (`username`,`food`) VALUES (?,?);