Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Help PHP Warning: Invalid argument supplied for foreach


Recommended Posts

Добрый вечер, обнаружил ошибку в логе 
 PHP Warning:  Invalid argument supplied for foreach() in /home/stefan00/dim-mody.com.ua/www/admin/controller/extension/module/oct_product_tab.php on line 189 
как ее исправить?
вот код из контроллера:
 

Спойлер

 foreach ($products as $product_id) {      (это именно 189 строка)



а вот кусок кода(строка 189-198)
 

Спойлер

foreach ($products as $product_id) {
            $product_info = $this->model_catalog_product->getProduct($product_id);
            
            if ($product_info) {
                $data['products'][] = array(
                    'product_id' => $product_info['product_id'],
                    'name' => $product_info['name']
                );
            }
        }

 

Надіслати
Поділитися на інших сайтах

В $products должен быть массив, но его там нет и поэтому ошибка. или проверку надо делать или смотреть что там прилетает в $products. код контройлера покажите

Надіслати
Поділитися на інших сайтах

3 минуты назад, Venter сказал:

В $products должен быть массив, но его там нет и поэтому ошибка. или проверку надо делать или смотреть что там прилетает в $products. код контройлера покажите

 

oct_product_tab.php

Надіслати
Поділитися на інших сайтах

15 минут назад, Venter сказал:

код контройлера покажите

буду благодарен если хоть примерно направите что нужно делать

Надіслати
Поділитися на інших сайтах

попробуйте заменить вот это

        foreach ($products as $product_id) {
            $product_info = $this->model_catalog_product->getProduct($product_id);
            
            if ($product_info) {
                $data['products'][] = array(
                    'product_id' => $product_info['product_id'],
                    'name' => $product_info['name']
                );
            }
        }

на вот это

    if( is_array($products) ) {
        foreach ($products as $product_id) {
            $product_info = $this->model_catalog_product->getProduct($product_id);
            
            if ($product_info) {
                $data['products'][] = array(
                    'product_id' => $product_info['product_id'],
                    'name' => $product_info['name']
                );
            }
        }
    }

вообще непонятно что там в $products прилетает, вроде если если пост нету и в бд данных нет значит пустой массив и ошибки быть не должно,но в $products должен прилететь массив а прилетает не массив вот в чем ошибка. замена кода выше должна помочь

Надіслати
Поділитися на інших сайтах

Зайдите в этот модуль да добавьте какие-то товары. Видимо там пусто... И не массив еще..

Змінено користувачем Prooksius
Надіслати
Поділитися на інших сайтах

1 минуту назад, Prooksius сказал:

Зайдите в этот модуль да добавьте какие-то товары. Видимо там пусто... И не массив еще..

проблема в том что я не могу в этот модуль зайти

Надіслати
Поділитися на інших сайтах

5 минут назад, Venter сказал:

на вот это


    if( is_array($products) ) {
        foreach ($products as $product_id) {
            $product_info = $this->model_catalog_product->getProduct($product_id);
            
            if ($product_info) {
                $data['products'][] = array(
                    'product_id' => $product_info['product_id'],
                    'name' => $product_info['name']
                );
            }
        }
    }

как же я Вам благодарен))

в модуль теперь могу зайти и ошибка ушла 
еще раз огромнейшее спасибо спасибо 

Надіслати
Поділитися на інших сайтах

8 минут назад, Prooksius сказал:

Зайдите в этот модуль да добавьте какие-то товары. Видимо там пусто... И не массив еще..

там прописано условие

        if (isset($this->request->post['product'])) {
            $products = $this->request->post['product'];
        } elseif (!empty($module_info)) {
            $products = $module_info['product'];
        } else {
            $products = array();
        }

еслиб ничего не было то $products пустой массив и ошибки не было бы, по ходу в $module_info['product'] прилетает не массив. нужно смотреть что там приходит в $products 

Надіслати
Поділитися на інших сайтах

ну тогда бы можно так

} elseif (!empty($module_info)) {
	$products = is_array($module_info['product']) ? $module_info['product'] : array();

тогда уж вне зависимости от того ,что там сохранилось, хоть null, в $products будет массив

Надіслати
Поділитися на інших сайтах

3 минуты назад, Venter сказал:

там прописано условие


        if (isset($this->request->post['product'])) {
            $products = $this->request->post['product'];
        } elseif (!empty($module_info)) {
            $products = $module_info['product'];
        } else {
            $products = array();
        }

еслиб ничего не было то $products пустой массив и ошибки не было бы, по ходу в $module_info['product'] прилетает не массив. нужно смотреть что там приходит в $products 

то-есть ещё что то нужно шаманить в коде?

Надіслати
Поділитися на інших сайтах

модуль открывается(до этого была просто белая страница)

и логи тоже посмотрел и ошибок никаких нет 
еще раз всем ОГРОМНОЕ СПАСИБО

Надіслати
Поділитися на інших сайтах

7 минут назад, Prooksius сказал:

ну тогда бы можно так


} elseif (!empty($module_info)) {
	$products = is_array($module_info['product']) ? $module_info['product'] : array();

тогда уж вне зависимости от того ,что там сохранилось, хоть null, в $products будет массив

ну мы точно не знаем в какую часть что прилетает, так что думаю лучше сразу на массив проверить. Ну а так по сути это не костыль, это как раз то что должно быть,валидация данных

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.