Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Неправильный поиск по цифрам
Форумы портала PHP.SU » » Вопросы новичков » Неправильный поиск по цифрам

Страниц (2): [1] 2 »
 

1. andrweb - 02 Августа, 2012 - 16:16:07 - перейти к сообщению
Рабят, кто сталкивался с такой проблемой:

Есть запрос:
PHP:
скопировать код в буфер обмена
  1. $search_string = $_POST['$search_string'];
  2. $product_query = mysql_query("SELECT product.header, product.url, category.header AS category_header, category.url AS category_url FROM `product` JOIN `category` WHERE product.category=category.id AND product.visible='1' AND product.header LIKE '%".$search_string[$i]."%' ORDER BY product.category ASC limit 15");


- Кодировка поля таблицы cp1251_general_ci
- Тип данных char(255)

Все уже сделано и работает на этом сайте: eurogrant[dot]ru

Делаем запрос:
$search_string = "612";
Выводит пять результатов.

Делаем запрос 2:
$search_string = "61210";
Ничего не выводит... Хотя такой товар в базе есть!

Поиск по словам ищет без проблем, но вот по числам (а это гораздо предпочтительней в данном случае) - работает очень странно.

Я не-пойму в чем может быть проблема?
2. KingStar - 02 Августа, 2012 - 16:23:34 - перейти к сообщению
$_POST['$search_string'] в trim заключить попробуй
3. Stierus - 02 Августа, 2012 - 16:29:46 - перейти к сообщению
1 что есть $search_string[$i] ? откуда берется i ... вы ищете по одной букве?
4. KingStar - 02 Августа, 2012 - 16:41:14 - перейти к сообщению
Stierus пишет:
1 что есть $search_string[$i] ? откуда берется i ... вы ищете по одной букве?


да, не заметил сразу
5. Stierus - 02 Августа, 2012 - 16:45:57 - перейти к сообщению
Вы про sql-инъекции что-нибудь слышали?
6. andrweb - 02 Августа, 2012 - 17:37:56 - перейти к сообщению
Stierus пишет:
1 что есть $search_string[$i] ? откуда берется i ... вы ищете по одной букве?

Прошу прощения, забыл убрать... Если использовать $search_string - тоже самое.

Массив нужен для поиска по нескольким словвам
Вот полный код:
PHP:
скопировать код в буфер обмена
  1.  
  2. $search_string = split(" ", $search_string);// разбиваем слова в массив
  3.  
  4. //LEFT JOIN category ON product.category=category.cat_id
  5. for ($i=0; $i<=count($search_string); $i++)
  6. {
  7.         //$d=intval($d);
  8.  
  9.         $d.=" AND product.header LIKE '%".$search_string[$i]."%' ";
  10.        
  11. }
  12. $product_query = mysql_query("SELECT product.header, product.url, category.header AS category_header, category.url AS category_url FROM `product` JOIN `category` WHERE product.category=category.id AND product.visible='1' ".$d." ORDER BY product.category ASC limit 16");
  13.  
  14.  


Stierus пишет:
Вы про sql-инъекции что-нибудь слышали?

Слышал, но на этот счет должна помочь строчка:
PHP:
скопировать код в буфер обмена
  1. $search_string = preg_replace("/[^\w\x7F-\xFF\s]/"," ", $search_string);

Или нет?

Если не так, подскажите пожайлуста...
7. Stierus - 02 Августа, 2012 - 17:45:34 - перейти к сообщению
Цитата:
61210 Ничего не выводит... Хотя такой товар в базе есть!


и у него product.visible = 1 и в product.header есть 61210 ? скинь строку с этим товаром сюда
8. andrweb - 02 Августа, 2012 - 17:52:19 - перейти к сообщению
Stierus пишет:
Цитата:
61210 Ничего не выводит... Хотя такой товар в базе есть!


и у него product.visible = 1 и в product.header есть 61210 ? скинь строку с этим товаром сюда

В том то и дело, что есть. product.visible = 1. product.header = "Пресс гидравлический AE&T T61210"

Если забить "61" выводит несколько товаров в том числе и "Пресс гидравлический AE&T T61210"
Если забить "61210", или даже "6121" - не находит!
И это касается каждого товара.
Можно попробовать на сайте в поиске - не находит ничего...
9. KingStar - 02 Августа, 2012 - 18:18:10 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $search_string = explode(" ", $search_string);
  3. $d = '';
  4.  
  5. foreach ($search_string as $value)
  6. {
  7.         $d .= " AND product.header LIKE '%".trim($value)."%' ";  
  8. }
  9.  


(Добавление)
и мне кажется, что выборку делать нужно не через AND, а через OR
10. andrweb - 02 Августа, 2012 - 19:03:00 - перейти к сообщению
KingStar пишет:

Не помогает...

KingStar пишет:

и мне кажется, что выборку делать нужно не через AND, а через OR

Спасибо, но AND в данном случае предпочтительней.
11. KingStar - 02 Августа, 2012 - 19:21:17 - перейти к сообщению
в чем предпочтительней???

например ты задаешь строку поиска "Насос гидравлический", в БД у тебя "Пресс гидравлический"

итого ты ищешь совпадения и на "Насос" и на "гидравлический", что в строке "Пресс гидравлический" не совпадает с "Насос", результат - 0

поэтому я и говорю, что нужно искать в строке "Пресс гидравлический" слово "Насос" OR "гидравлический"

надеюсь понятно объяснил Хорошо
12. andrweb - 02 Августа, 2012 - 20:03:31 - перейти к сообщению
KingStar пишет:
в чем предпочтительней???

например ты задаешь строку поиска "Насос гидравлический", в БД у тебя "Пресс гидравлический"

итого ты ищешь совпадения и на "Насос" и на "гидравлический", что в строке "Пресс гидравлический" не совпадает с "Насос", результат - 0

поэтому я и говорю, что нужно искать в строке "Пресс гидравлический" слово "Насос" OR "гидравлический"

надеюсь понятно объяснил Хорошо

Все понятно, вот только у меня ajax поиск и результат в количестве 15 шт.
И даже если я сделаю:
PHP:
скопировать код в буфер обмена
  1. $d.=" OR product.header LIKE '%".trim($search_string[$i])."%' ";

Выдавать будет все результаты, исходя из условия
PHP:
скопировать код в буфер обмена
  1. WHERE product.category=category.id AND product.visible='1' ".$d."
13. KingStar - 02 Августа, 2012 - 20:25:19 - перейти к сообщению
какая разница какой запрос, в у тебя в цикле конкатенация, и выборка делается одним запросом
(Добавление)
andrweb пишет:
product.category=category.id AND product.visible='1'[/PHP]


сожалею, это условие тебе также нужно вставлять в каждый OR
14. andrweb - 02 Августа, 2012 - 20:32:58 - перейти к сообщению
KingStar пишет:
какая разница какой запрос, в у тебя в цикле конкатенация, и выборка делается одним запросом
(Добавление)
andrweb пишет:
product.category=category.id AND product.visible='1'[/PHP]


сожалею, это условие тебе также нужно вставлять в каждый OR


Спасибо, сейчас попробую...
15. tuareg - 02 Августа, 2012 - 20:44:10 - перейти к сообщению
Я дико извиняюсь, но сайт _http://eurogrant.ru/ ? Если так, попробуйте ввести "пр" без кавычек, я что-то не могу понять что он вообще находит Не понял
Каюсь, сейчас вроде нормально, находит, с цифрами непонятка
Вот так сделайте
CODE (SQL):
скопировать код в буфер обмена
  1.  product.category=category.id AND product.visible='1' AND ($d OR)
  2.  

 

Powered by ExBB FM 1.0 RC1