从复选框列表

时间:2015-11-11 18:23:47

标签: php mysql

我试图为我的家庭编写一个简单的购物清单网络应用程序,用户可以检查他们想要添加到列表中的项目,然后将其添加到表中以供将来检索。但是在尝试将数组和用户名插入MySQL数据库时遇到了麻烦。我已经四处寻找答案,但找不到满足以下条件的答案:

  1. 插入数组和非数组。
  2. 不使用已弃用的mysql_函数。
  3. 理想情况下,我很乐意使用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警告:非法字符串偏移&#39; groceryListItem&#39;
    2. PHP警告:PDOStatement :: execute()最多需要1个参数,2个给定
    3. 虽然传递的所有值都来自数据库并且没有用户输入,但是如果你们认为防止注入仍然是好的,那么在这种情况下我也不会考虑一些建议。 。

      非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

一些事情。

您的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,但是您尝试将用户名作为参数传递。将?替换为PDO::execute

INSERT INTO `grocerylist` (`username`,`food`) VALUES (?,?); 期望一个参数是一个传递给查询的参数数组。 Read me 因此将$ username和greoceryitem组合成一个数组以传递给执行。

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

{{1}}