Изображение для мегаменю

Идея в том, чтобы в меню для каждой главной категории, если там есть товар, вывести изображение первого товара, который там содержится. Если товар там есть оно выводится, но если при следующей итерации, следующей главной категории товара нет, то выводится изображение предыдущей, а должна быть заглушка. Подскажите, в чём проблема?

введите сюда описание изображения

//определение категорий
            $sql = "SELECT name,id FROM category WHERE parrent =''";
            if($result = $conn->query($sql)){ 
                foreach($result as $row){ 

                    echo "<div class=\"uk-card uk-flex uk-flex-center uk-flex-middle\">";
                    echo "<div class=\"menu_items\"><div>";

                    $menu_category_name = $row["name"]; 
                    $menu_category_id = $row["id"];

                        //определение картинки главной категории
                        $sql = "SELECT id FROM products WHERE category='$menu_category_id' LIMIT 1";
                        if($result = $conn->query($sql)){
                            foreach($result as $row){

                            $firstproduct_id = $row["id"];

                            if ($firstproduct_id != '') { 

                                $sql = "SELECT image FROM images WHERE product_id ='$firstproduct_id' LIMIT 1";
                                if($result = $conn->query($sql)){ 
                                foreach($result as $row){ 

                                    $categoryimage = $row["image"];

                                }} else { echo "Ошибка: " . $conn->error;}

                            } else {

                                    $categoryimage = "../ui/img/noimage.jpg";
                                    
                            }
    

                            }} else { echo "Ошибка: " . $conn->error;} 

       
                    echo "<ul class=\"uk-nav-default\" uk-nav style=\"padding-left:14px;\"><li><a href=\"category.php?id=$menu_category_id\"><b>$menu_category_name</b></a></li></ul>";

                    //определение максимального количества субкатегорий
                    $sql = "SELECT name,id FROM category WHERE parrent ='$menu_category_id'";
                    if($result = $conn->query($sql)){
                    $rowsCount = $result->num_rows; // количество полученных строк
                    }

                    //определение субкатегорий
                    $sql = "SELECT name,id FROM category WHERE parrent ='$menu_category_id' LIMIT 4";
                    if($result = $conn->query($sql)){ 
                    foreach($result as $row){  

                        $menu_category_name_sub = $row["name"]; 
                        $menu_category_id_sub = $row["id"];

                        echo "<ul class=\"uk-nav-sub\"><li><a href=\"category.php?id=$menu_category_id_sub\"> - $menu_category_name_sub</a></li></ul>";
                        
                    } } else { echo "Ошибка: " . $conn->error;}


                    if ($rowsCount>=5){
                        echo "<ul class=\"uk-nav-sub\"><li><a href=\"category.php?id=$menu_category_id\"> - Смотреть все</a></li></ul>";
                    } 


                    echo "</div><div><img style=\"max-width:150px; object-fit: cover;\" src=\"$categoryimage\"></div></div>";
                    echo "</div>";
     
            } } else { echo "Ошибка: " . $conn->error;}

Ответы (1 шт):

Автор решения: splash58

вы не попадаете в цикл, если пришел пустой результат. сделайте if по количеству строк результата

Или можно, мне кажется, вот так упростить код

$row = $result->fetch_array(MYSQLI_NUM);
$categoryimage = is_array($row) ? $row[0] : "../ui/img/noimage.jpg";
→ Ссылка