php - 为 foreach() 搜索结果提供的参数无效

标签 php html mysql pdo

我正在尝试在我的网络应用程序中实现一个过滤系统,用户可以通过类别过滤他们的项目列表。但是,显示以下错误消息

"Invalid argument supplied for foreach() in foreach ($item as $key => $val)" 

我不太确定为什么。我尝试了各种方法来解决这个问题,例如尝试将 $items 设置为数组,但仍然不成功。在不实现搜索系统的情况下,特定用户的项目会正确显示,但是一旦我实现过滤器,就会显示上面的错误消息。任何建议将不胜感激。

items.php

<div class="card">
    <div class="card-header">Items</div>
        <form action="" method="post">
            <div class="form-group">
                <label for="name">Search for Items</label>
                    <input type="text" class="form-control" id="search" name="search">
            </div>
            <button type="submit">Search</button>
        </form>
        <div class="card-body items">
           <table class = "items">

           <?php
           $itemsObject = new items($database); 
           $item = $itemsObject->getItemsForUser($_SESSION['userData']['userid'], $_POST['search']); 
           foreach ($item as $key => $val) { 
              echo '<tr><td>'.$val['cat_name'].'</td><td>'.$val['amount'].'</td></tr>';   
      }
?>
           </table>
       </div>
   </div>
</div>

items.classes.php

   public function getItemsForUser($userid, $search = null){
      if(!isset($search)){
        $query = "SELECT i.*, c.cat_name, c.cat_id FROM items AS i INNER JOIN categories AS c ON i.cat_id = c.cat_id WHERE userid = :userid";
        $pdo = $this->db->prepare($query);
        $pdo->bindParam(':userid', $userid);
        } else {
                $query = "SELECT i.*, c.cat_name, c.cat_id FROM items AS i INNER JOIN categories AS c ON i.cat_id = c.cat_id WHERE userid = :userid AND c.cat_name LIKE :search";
            $pdo = $this->db->prepare($query);
            $pdo->bindParam(':userid', $userid);
            $pdo->bindParam(':search', $search);
        }
       $pdo->execute();
       return $pdo->fetchAll();
    }

最佳答案

将执行查询放在 if/else 之外

if(isset($search)){
    $search = '%'.$search.'%';
    $query = "SELECT i.*, c.cat_name, c.cat_id FROM items AS i INNER JOIN categories AS c ON i.cat_id = c.cat_id WHERE userid = :userid AND c.cat_name LIKE :search";
    $pdo = $this->db->prepare($query);
    $pdo->bindParam(':userid', $userid);
    $pdo->bindParam(':search', $search);
} else {
        $query = "SELECT i.*, c.cat_name, c.cat_id FROM items AS i INNER JOIN categories AS c ON i.cat_id = c.cat_id WHERE userid = :userid";
        $pdo = $this->db->prepare($query);
        $pdo->bindParam(':userid', $userid);
}

$pdo->execute(); // <---- HERE
return $pdo->fetchAll();

关于php - 为 foreach() 搜索结果提供的参数无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50213618/

相关文章:

php - 让 php 读取通过 javascript 创建的表单?

php - 通过使用php将mysql数据库记录分成N个数组来分组

php - 通过 CSV 将客户数据库导入 RDS (MySQL)

php - 网站未将投票存入数据库

javascript - 如何强制元素在中间?

javascript - 使页眉和页脚文件包含在多个 html 页面中

MySQL IF ELSE 真假

php - 使用自定义表单 symfony 进行 Stripe 结帐

javascript - 使用通过链接传递的数据来个性化页面内容

mysql - 离开加入Mysql?