[Решено] Undefined index. Подправить конструкцию.

Тема в разделе "OpenCart", создана пользователем Jess23, 26 окт 2016.

Статус темы:
Закрыта.
  1. Jess23

    Jess23

    Регистрация:
    21 авг 2015
    Сообщения:
    118
    Симпатии:
    135
    Привет всем, помогите разобраться с одной ошибкой... В логе иногда наблюдаю:

    2016-10-26 14:15:25 - PHP Notice: Undefined index: last_order_id in /home/.../www/vqmod/vqcache/vq2 system_modification_catalog_controller_common_header.php on line 226


    Собственно сама конструкция условия выглядит в common/header.php таким образом:

    Код:
    if ($url_path == 'checkout/success') {
                        // Complete Checkout
                            $query = $this->db->query("SELECT product_id FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$_SESSION['last_order_id'] . "'");
                            $product_count = $query->num_rows;
                            foreach($query->rows as $product) {
                                $cart_products .= '\'' . $product['product_id'] . '\',';
                            }
    Второй раз она появляться в файле catalog/model/checkout/order.php вот в таком виде:
    Код:
    $_SESSION['last_order_id'] = $order_id;
    Собственно вопрос, как правильно передать last_order_id или же можно передавать просто order_id?
    Или может проблема в конфликте vQmod с ocmod?
     
  2. Baco

    Baco Антихронофаг Команда форума

    Регистрация:
    9 окт 2012
    Сообщения:
    803
    Симпатии:
    399
    last_order_id - это значение $order_id, в момент когда заказ "подтверждаеться", тоесть при создании заказа есть 2 этапа:
    0. createOrder - здесь вносяться все данные с базы с методами доставок, оплат, скидки, бонусы, акции, адреса... {промежуточный этап (регистрация, оплата черезе мерчант банка, добавление коментариев...)}
    1. confirm - вот тут то заказ либо подтверждён и поступил в обработку для админки, редиректом пользователя на страницу success, с последующим обнулением переменной $order_id, что вам и рекомендую поставить в самомо начале функции индекс:
    [​IMG]

    или попадает в "пустышку", в админке они как "неудавшиеся" помечены, часто ответ на вопрос, почему нумерация заказов не по порядку, заключена из за этих пустышек, которые фактически не видимы в админке, так как не прошли функцию "подтверждения" соотв. и переменной last_order_id быть не может, но опенкарт так повязан, что страница успешности имеет несколько предпосылок на себя: успешная регистрация, подписка на новости, покупка, контактная форма... все они ведут на страницу "успешности" посему проверку типа if (isset надо ставить однозначно.
     
    Последнее редактирование: 26 окт 2016
    Jess23 нравится это.
  3. Jess23

    Jess23

    Регистрация:
    21 авг 2015
    Сообщения:
    118
    Симпатии:
    135
    Все сделал как Вы подсказали, потестил вроде все работает, самому вызвать данную ошибку не получилось учитывая все вышеописанные манипуляции с заказом.... Внес правки на рабочий проект, понаблюдаю до завтра. Спасибо за детальный и развернутый ответ.
     
  4. Jess23

    Jess23

    Регистрация:
    21 авг 2015
    Сообщения:
    118
    Симпатии:
    135
    Помогите пожалуйста ещё разобрать один нюанс...
    Вот таким образом передается значения которое содержит в себе поисковый запрос:
    PHP:
    $options .= ', search_string: \'' $this->request->get['search'] . '\'';
    и при такой конструкции все работает как нужно (если конечно есть запрос в строке)... но самое интересное то, что когда выполнить поиск без запроса (то есть передать пустую строку, а опенкарт при пустой строке по умолчанию перебрасывает на страницу поиска) я получаю обрыв соединения с сайтом...

    Как побороть данную проблему?

    Да использую переадресацию с стандартных url, отключал та же самая проблема.
     
  5. Baco

    Baco Антихронофаг Команда форума

    Регистрация:
    9 окт 2012
    Сообщения:
    803
    Симпатии:
    399
    я бы добавил проверку на параметр гет, и отдельно выделил переменную под это:
    Код:
    if (isset($this->request->get['search'])) {
       $search_data = $this->request->get['search'];
    } else {
       $search_data = '';
    }
     
    Jess23 нравится это.
Статус темы:
Закрыта.