【发布时间】:2018-10-17 05:24:20
【问题描述】:
我正在尝试在我的 Web 应用程序中实现一个过滤系统,用户可以通过该系统按类别过滤他们的项目列表。但是,正在显示以下错误消息
"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();
}
【问题讨论】:
-
检查您的 $item 数组是否为空或未使用 print_r($item);die();
-
您的
items.classes.php中有一个 TYPO 错误。像这样,$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"; -
你错过了行尾的 (") $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;