Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为foreach()搜索结果提供的参数无效_Php_Html_Mysql_Pdo - Fatal编程技术网

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

Php 为foreach()搜索结果提供的参数无效,php,html,mysql,pdo,Php,Html,Mysql,Pdo,我正在尝试在我的web应用程序中实现一个过滤系统,用户可以根据类别过滤他们的项目列表。但是,将显示以下错误消息 "Invalid argument supplied for foreach() in foreach ($item as $key => $val)" 我也不完全确定为什么。我尝试了各种方法来解决这个问题,例如尝试将$items设置为数组,但仍然没有成功。在未实现搜索系统的情况下,特定用户的项目将正确显示,但是,只要我实现了过滤器,就会显示上面的错误消息。如有任何建议,将不

我正在尝试在我的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>

将执行查询置于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();
if(isset($search)){
$search='%'。$search'%';
$query=“从项中选择i.*、c.cat\u名称、c.cat\u id作为i.cat\u id=c.cat\u id上的c内部连接类别,其中userid=:userid和c.cat\u name类似:search”;
$pdo=$this->db->prepare($query);
$pdo->bindParam(':userid',$userid);
$pdo->bindParam(':search',$search);
}否则{
$query=“从项中选择i.*,c.cat\u名称,c.cat\u id作为i.cat\u id=c.cat\u id上的c内部连接类别,其中userid=:userid”;
$pdo=$this->db->prepare($query);
$pdo->bindParam(':userid',$userid);
}
$pdo->execute();//fetchAll();

检查您的$item数组是否为空或未使用print\r($item);模具();可能重复您的
items.classes.php
中存在打字错误。像这样做,
$query=“从项中选择i.*,c.cat\u name,c.cat\u id作为i.cat\u id=c.cat\u id上的c内部连接类别,其中userid=:userid”
在$query=“SELECT i.*,c.cat\u name,c.cat\u id FROM items AS i internal JOIN categories AS c on i.cat\u id=c.cat\u id,其中userid=:userid;这消除了错误,但是不再显示该表?可能是因为您没有任何结果。我已经重新安排了查询的结构,但是结果没有被过滤,我不完全确定原因。有什么建议吗?如果您从查询中删除过滤器(只需从表中选择*),它会返回任何结果吗?我现在已经对其进行了排序,但感谢您的帮助!另外,如果我想在不刷新页面的情况下清除搜索,我该如何做呢?
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();