В результатах поиска foreach () указан неверный аргумент - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь внедрить систему фильтрации в свое веб-приложение, с помощью которой пользователи могут фильтровать свой список элементов по категориям.Тем не менее, следующее сообщение об ошибке отображается

"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();
    }

1 Ответ

0 голосов
/ 07 мая 2018

Поместите запрос на выполнение вне 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...