+ Ответить в теме
Показано с 1 по 8 из 8
  1. #1
    ViArts Man dav300 за этого человека можно гордится dav300 за этого человека можно гордится dav300 за этого человека можно гордится dav300 за этого человека можно гордится dav300 за этого человека можно гордится dav300 за этого человека можно гордится dav300 за этого человека можно гордится dav300 за этого человека можно гордится
    Регистрация
    18.02.2011
    Адрес
    Москва
    Возраст
    33
    Сообщений
    223
    Сказали 'Спасибо' за это сообщение. :
    6 за это сообщение
    104 Всего
    Загрузки
    8
    Закачек
    0
    Вес репутации
    18

    По умолчанию фильтр товаров + расширенный поиск = совместная работа

    Здравствуйте,
    Столкнулся со следующей проблемой. Если в расширенный поиск вынести какую либо опцию то по результатам поиска можно получить следующее не радующее сообщение :

    PHP код:
    DB ERROR 1064

    We are very sorry
    but an error has occurred while processing your requestPlease try the operation again by either pressing the Refresh button on your browser, or by going back one page using the Back button. If the error persistsplease contact our web development team.

    The details of the error are shown belowPlease quote this in any correspondance regarding this problem.

    Page URLhttp://site_name/eim/products_search.php?pq=0&fq=2&search_string=&s_tit=1&s_cod=1&s_sds=1&s_fds=1&fn_1=%D0%93%D0%BE%D1%80%D0%BE%D0%B4&fv_1=%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0&fn_2=%D0%9D%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8&fv_2=&category_id=&manf=&lprice=&hprice=
    Referrer URLhttp://site_name/search.php
    Database errorInvalid SQLSELECT COUNT(DISTINCT i.item_id) AS total i.manufacturer_id FROM (((((va_items i INNER JOIN va_items_categories ic ON i.item_id=ic.item_id) ) LEFT JOIN va_items_sites AS s ON s.item_id=i.item_idLEFT JOIN va_items_subscriptions AS sb ON sb.item_id=i.item_idLEFT JOIN va_features f_1 ON i.item_id f_1.item_idWHERE i.is_showing=AND i.is_approved=AND ((i.hide_out_of_stock=AND i.stock_level 0) OR i.hide_out_of_stock=OR i.hide_out_of_stock IS NULL) AND (i.language_code IS NULL OR i.language_code='' OR i.language_code='ru') AND (i.sites_all=OR s.site_id=1) AND i.guest_access_level&AND AND f_1.feature_name='Город' AND f_1.feature_value LIKE '%Москва%' GROUP BY i.manufacturer_id
    MySQL Error
    You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near 'AND f_1.feature_name='Город' AND f_1.feature_value LIKE '%Москва%' G' at line 1 
    Как видно из описания ошибки проблема в том что откуда-то и по непонятной причине добавляется второй оператор AND

    PHP код:
    i.guest_access_level&AND AND f_1.feature_name 
    На лицо синтаксическая ошибка.

    Решение :
    В файле blocks/block_filter.php необходимо произвести следующие изменения :

    блок :

    PHP код:
            if ($fq 0) {
                for (
    $fi 1$fi <= $fq$fi++) {
                    
    $feature_name get_param("fn_" $fi);
                    
    $feature_value get_param("fv_" $fi);
                    if (
    strlen($feature_name) && strlen($feature_value)) {
     
                        
    $pr_where .= " AND f_".$fi.".feature_name=" $db->tosql($feature_nameTEXT);
                        
    $pr_where .= " AND f_".$fi.".feature_value LIKE '%" $db->tosql($feature_valueTEXTfalse) . "%' ";
                                            
                        
    $pr_brackets .= "(";
                        
    $pr_join  .= " LEFT JOIN " $table_prefix "features f_".$fi." ON i.item_id = f_".$fi.".item_id) ";
                    }
                }
            } 
    надо заменить на следующий код

    PHP код:
    $flag 0;
            if (
    $fq 0) { 
                for (
    $fi 1$fi <= $fq$fi++) {
                    
    $feature_name get_param("fn_" $fi);
                    
    $feature_value get_param("fv_" $fi);
                    if (
    strlen($feature_name) && strlen($feature_value)) {
                                            
                                            if (
    $flag>=1) {$pr_where .= " AND ";}
                        
    $pr_where .= " f_".$fi.".feature_name=" $db->tosql($feature_nameTEXT);
                        
    $pr_where .= " AND f_".$fi.".feature_value LIKE '%" $db->tosql($feature_valueTEXTfalse) . "%' ";
                                            
    $flag++;
                        
    $pr_brackets .= "(";
                        
    $pr_join  .= " LEFT JOIN " $table_prefix "features f_".$fi." ON i.item_id = f_".$fi.".item_id) ";
                    }
                }
            } 
    По итогам выше описанных манипуляций все прекрасно заработает.

    Я что-то только пока так и не пойму толи это действительно баг в системе толи я где-то в настройках что-то не так сделал !??!

    Есть варианты ?
    Последний раз редактировалось dav300; 20.04.2011 в 21:44.
    Digg this Post!Bookmark Post in Technorati
    Ответить с цитированием Ответить с цитированием
    Спасибо

  2. Сказали спасибо:

    oldmanager (02.03.2012) , nemo (22.04.2011) , samrat (22.04.2011) , DimTai (21.04.2011) , Dio (20.04.2011) , newshop (20.04.2011)

  3. #2
    Сообщество ViArts oldmanager как роза среди колючек oldmanager как роза среди колючек oldmanager как роза среди колючек
    Регистрация
    12.02.2010
    Адрес
    Москва
    Сообщений
    229
    Сказали 'Спасибо' за это сообщение. :
    0 за это сообщение
    25 Всего
    Загрузки
    17
    Закачек
    0
    Вес репутации
    14

    По умолчанию Re: фильтр товаров + расширенный поиск = совместная работа

    Вложение 592
    Цитата Сообщение от dav300 Посмотреть сообщение
    Здравствуйте,
    Столкнулся со следующей проблемой. Если в расширенный поиск вынести какую либо опцию то по результатам поиска можно получить следующее не радующее сообщение :
    DB ERROR 1064
    ....
    На лицо синтаксическая ошибка.

    Решение :
    В файле blocks/block_filter.php необходимо произвести следующие изменения :
    ...
    По итогам выше описанных манипуляций все прекрасно заработает.
    Спасибо, dav300. Я тоже столкнулся с этой ошибкой и Ваш совет помог, но лишь частично.
    В админке, на странице настроек расширенного поиска, я проставил галки в разделах "Поля поиска", "Поиск в опциях товаров", "Поиск в спецификациях товаров" и заполнил "Предустановленные значения (по одному на отдельной строке)".

    В результате расширенный поиск заработал, но только по Производителю и по предустановленным значениям из спецификации. А поиск по опциям, т.е. по размеру и по цене (т.к. опцией является размер с ценой у некоторых товаров) продолжает выдавать ошибку:
    PHP код:
    DB ERROR 1064

    We are very sorry
    but an error has occurred while processing your requestPlease try the operation again by either pressing the Refresh button on your browser, or by going back one page using the Back button. If the error persistsplease contact our web development team.

    The details of the error are shown belowPlease quote this in any correspondance regarding this problem.

    Page URLhttp://example.com/products_search.php?pq=1&fq=7&pn_1=...здесь пять строк фигни...=&manf=&lprice=&hprice=
    Referrer URLhttp://example.com/search.php
    Database errorInvalid SQLSELECT COUNT(DISTINCT i.item_id) AS total i.manufacturer_id FROM ((((va_items i INNER JOIN va_items_categories ic ON i.item_id=ic.item_id) ) LEFT JOIN va_items_properties ip_1 ON i.item_id ip_1.item_idLEFT JOIN va_items_properties_values ipv_1 ON ipv_1.property_idip_1.property_idWHERE i.is_showing=AND i.is_approved=AND ((i.hide_out_of_stock=AND i.stock_level 0) OR i.hide_out_of_stock=OR i.hide_out_of_stock IS NULL) AND (i.language_code IS NULL OR i.language_code='' OR i.language_code='ru') AND i.sites_all=AND i.guest_access_level&AND AND ip_1.property_name='Размер' AND (ip_1.property_description LIKE '%160%' OR ipv_1.property_value LIKE '%160%'GROUP BY i.manufacturer_id
    MySQL Error
    You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near 'AND ip_1.property_name='Размер' AND (ip_1.property_description LIKE '%16' at line 1 
    Может быть есть какое-то решение данной проблемы?

    P.S. И ещё.
    На странице с результатом поиска сверху появляется надпись:
    Найдено 6 товаров, соответствующих запросу ' '
    Мне кажется, что в пустых кавычках должен быть прописан запрос. Как его туда добавить?
    Последний раз редактировалось oldmanager; 02.03.2012 в 17:35.
    Digg this Post!Bookmark Post in Technorati
    Ответить с цитированием Ответить с цитированием
    Спасибо

  4. #3
    Moderator Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима
    Регистрация
    23.11.2010
    Сообщений
    484
    Сказали 'Спасибо' за это сообщение. :
    2 за это сообщение
    357 Всего
    Загрузки
    15
    Закачек
    0
    Вес репутации
    48

    По умолчанию Re: фильтр товаров + расширенный поиск = совместная работа

    Задвоенный AND в запросе:

    Надо искать, откуда он берется.

    Или попробовать с помощью str_replace непосредственно перед выполнением запроса в самом тексте запроса заменить строку:
    Код:
    AND AND
    на:
    Код:
    AND true AND
    Digg this Post!Bookmark Post in Technorati
    Ответить с цитированием Ответить с цитированием
    Спасибо

  5. Сказали спасибо:

    oldmanager (03.03.2012) , Dio (03.03.2012)

  6. #4
    Сообщество ViArts oldmanager как роза среди колючек oldmanager как роза среди колючек oldmanager как роза среди колючек
    Регистрация
    12.02.2010
    Адрес
    Москва
    Сообщений
    229
    Сказали 'Спасибо' за это сообщение. :
    0 за это сообщение
    25 Всего
    Загрузки
    17
    Закачек
    0
    Вес репутации
    14

    По умолчанию Re: фильтр товаров + расширенный поиск = совместная работа

    По аналогии с первым постом я нашёл в файле blocks/block_filter.php кусок кода, где присутствует ip_1.property_name= (параметр после двойного AND; в первом посте был параметр f_1.feature_name=)
    PHP код:
            $pr_where ""$pr_brackets ""$pr_join "";
            if (
    $pq 0) {
                for (
    $pi 1$pi <= $pq$pi++) {
                    
    $property_name get_param("pn_" $pi);
                    
    $property_value get_param("pv_" $pi);
                    if (
    strlen($property_name) && strlen($property_value)) {
                        
    $pr_where .= " AND ip_".$pi.".property_name=" $db->tosql($property_nameTEXT);
                        
    $pr_where .= " AND (ip_".$pi.".property_description  LIKE '%" $db->tosql($property_valueTEXTfalse) . "%' ";
                        
    $pr_where .= " OR ipv_".$pi.".property_value LIKE  '%" $db->tosql($property_valueTEXTfalse) . "%') ";
                        
    $pr_brackets .= "((";
                        
    $pr_join  .= " LEFT JOIN " $table_prefix .  "items_properties ip_".$pi." ON i.item_id = ip_".$pi.".item_id) ";
                        
    $pr_join  .= " LEFT JOIN " $table_prefix .  "items_properties_values ipv_".$pi." ON ipv_".$pi.".property_id=  ip_".$pi.".property_id) ";
                    }
                }
            } 
    и добавил туда $flag = 0; и if ($flag>=1) {$pr_where .= " AND ";}
    т.е. получилось
    PHP код:
            $pr_where ""$pr_brackets ""$pr_join "";
    $flag 0;
            if (
    $pq 0) {
                for (
    $pi 1$pi <= $pq$pi++) {
                    
    $property_name get_param("pn_" $pi);
                    
    $property_value get_param("pv_" $pi);
                    if (
    strlen($property_name) && strlen($property_value)) {
    if (
    $flag>=1) {$pr_where .= " AND ";}
                        
    $pr_where .= " AND ip_".$pi.".property_name=" $db->tosql($property_nameTEXT);
                        
    $pr_where .= " AND (ip_".$pi.".property_description LIKE '%" $db->tosql($property_valueTEXTfalse) . "%' ";
                        
    $pr_where .= " OR ipv_".$pi.".property_value LIKE '%" $db->tosql($property_valueTEXTfalse) . "%') ";
                        
    $pr_brackets .= "((";
                        
    $pr_join  .= " LEFT JOIN " $table_prefix "items_properties ip_".$pi." ON i.item_id = ip_".$pi.".item_id) ";
                        
    $pr_join  .= " LEFT JOIN " $table_prefix "items_properties_values ipv_".$pi." ON ipv_".$pi.".property_id= ip_".$pi.".property_id) ";
                    }
                }
            } 
    Но изменений не произошло, в ошибке по прежнему двойная AND.
    Digg this Post!Bookmark Post in Technorati
    Ответить с цитированием Ответить с цитированием
    Спасибо

  7. #5
    Moderator Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима Aleksey репутация неоспорима
    Регистрация
    23.11.2010
    Сообщений
    484
    Сказали 'Спасибо' за это сообщение. :
    1 за это сообщение
    357 Всего
    Загрузки
    15
    Закачек
    0
    Вес репутации
    48

    По умолчанию Re: фильтр товаров + расширенный поиск = совместная работа

    oldmanager, вы не исправили строку, которая идет после этой:
    PHP код:
    if ($flag>=1) {$pr_where .= " AND ";} 
    Т.е., нужно убрать AND здесь:
    PHP код:
    $pr_where .= " AND ip_".$pi.".property_name=" $db->tosql($property_nameTEXT); 
    И еще забыли вставить этот код:
    PHP код:
    $flag++; 
    PS: А сам AND задваивается, видимо, здесь:
    PHP код:
    if (strlen($sql_where) && strlen($pr_where))
        
    $sql_where .= " AND ";        
    $sql_where .= $pr_where
    Последний раз редактировалось Aleksey; 03.03.2012 в 20:49.
    Digg this Post!Bookmark Post in Technorati
    Ответить с цитированием Ответить с цитированием
    Спасибо

  8. Сказали спасибо:

    oldmanager (03.03.2012)

  9. #6
    Сообщество ViArts oldmanager как роза среди колючек oldmanager как роза среди колючек oldmanager как роза среди колючек
    Регистрация
    12.02.2010
    Адрес
    Москва
    Сообщений
    229
    Сказали 'Спасибо' за это сообщение. :
    0 за это сообщение
    25 Всего
    Загрузки
    17
    Закачек
    0
    Вес репутации
    14

    По умолчанию Re: фильтр товаров + расширенный поиск = совместная работа

    Спасибо, Aleksey.
    Убрал AND из
    $pr_where .= " AND ip_".$pi.".property_name=" . $db->tosql($property_name, TEXT);
    и вроде поиск стал работать корректно, т. е. сколько есть товаров нужного размера, столько и находит. Остальное не менял - посмотрю, будут-ли ошибки.
    Digg this Post!Bookmark Post in Technorati
    Ответить с цитированием Ответить с цитированием
    Спасибо

  10. #7
    Новичок konsta на пути к лучшему
    Регистрация
    19.11.2011
    Возраст
    32
    Сообщений
    10
    Сказали 'Спасибо' за это сообщение. :
    0 за это сообщение
    2 Всего
    Загрузки
    3
    Закачек
    0
    Вес репутации
    0

    По умолчанию Re: фильтр товаров + расширенный поиск = совместная работа

    Это для какой версии актуально?
    Digg this Post!Bookmark Post in Technorati
    Ответить с цитированием Ответить с цитированием
    Спасибо

  11. #8
    Сообщество ViArts oldmanager как роза среди колючек oldmanager как роза среди колючек oldmanager как роза среди колючек
    Регистрация
    12.02.2010
    Адрес
    Москва
    Сообщений
    229
    Сказали 'Спасибо' за это сообщение. :
    1 за это сообщение
    25 Всего
    Загрузки
    17
    Закачек
    0
    Вес репутации
    14

    По умолчанию Re: фильтр товаров + расширенный поиск = совместная работа

    Разговор идёт о версии 3.6, но я думаю, что если в 4-й возникнут такие же проблемы, то искать нужно там же.
    Digg this Post!Bookmark Post in Technorati
    Ответить с цитированием Ответить с цитированием
    Спасибо

  12. Сказали спасибо:

    konsta (04.03.2012)


 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

     

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Back to top