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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Неправильный поиск по цифрам

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
andrweb
Отправлено: 02 Августа, 2012 - 16:16:07
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: РОССИЯ Ростов-на-Дону


Помог: 0 раз(а)




Рабят, кто сталкивался с такой проблемой:

Есть запрос:
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";
Ничего не выводит... Хотя такой товар в базе есть!

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

Я не-пойму в чем может быть проблема?


-----
Горбатого могила исправит.
 
 Top
KingStar
Отправлено: 02 Августа, 2012 - 16:23:34
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




$_POST['$search_string'] в trim заключить попробуй


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Stierus Супермодератор
Отправлено: 02 Августа, 2012 - 16:29:46
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




1 что есть $search_string[$i] ? откуда берется i ... вы ищете по одной букве?
 
My status
 Top
KingStar
Отправлено: 02 Августа, 2012 - 16:41:14
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




Stierus пишет:
1 что есть $search_string[$i] ? откуда берется i ... вы ищете по одной букве?


да, не заметил сразу


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Stierus Супермодератор
Отправлено: 02 Августа, 2012 - 16:45:57
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Вы про sql-инъекции что-нибудь слышали?
 
My status
 Top
andrweb
Отправлено: 02 Августа, 2012 - 17:37:56
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: РОССИЯ Ростов-на-Дону


Помог: 0 раз(а)




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);

Или нет?

Если не так, подскажите пожайлуста...

(Отредактировано автором: 02 Августа, 2012 - 17:43:44)



-----
Горбатого могила исправит.
 
 Top
Stierus Супермодератор
Отправлено: 02 Августа, 2012 - 17:45:34
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Цитата:
61210 Ничего не выводит... Хотя такой товар в базе есть!


и у него product.visible = 1 и в product.header есть 61210 ? скинь строку с этим товаром сюда
 
My status
 Top
andrweb
Отправлено: 02 Августа, 2012 - 17:52:19
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: РОССИЯ Ростов-на-Дону


Помог: 0 раз(а)




Stierus пишет:
Цитата:
61210 Ничего не выводит... Хотя такой товар в базе есть!


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

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

Если забить "61" выводит несколько товаров в том числе и "Пресс гидравлический AE&T T61210"
Если забить "61210", или даже "6121" - не находит!
И это касается каждого товара.
Можно попробовать на сайте в поиске - не находит ничего...

(Отредактировано автором: 02 Августа, 2012 - 18:04:48)



-----
Горбатого могила исправит.
 
 Top
KingStar
Отправлено: 02 Августа, 2012 - 18:18:10
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




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

(Отредактировано автором: 02 Августа, 2012 - 18:34:19)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
andrweb
Отправлено: 02 Августа, 2012 - 19:03:00
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: РОССИЯ Ростов-на-Дону


Помог: 0 раз(а)




KingStar пишет:

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

KingStar пишет:

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

Спасибо, но AND в данном случае предпочтительней.


-----
Горбатого могила исправит.
 
 Top
KingStar
Отправлено: 02 Августа, 2012 - 19:21:17
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




в чем предпочтительней???

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

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

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

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

(Отредактировано автором: 02 Августа, 2012 - 19:26:49)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
andrweb
Отправлено: 02 Августа, 2012 - 20:03:31
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: РОССИЯ Ростов-на-Дону


Помог: 0 раз(а)




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."


-----
Горбатого могила исправит.
 
 Top
KingStar
Отправлено: 02 Августа, 2012 - 20:25:19
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




какая разница какой запрос, в у тебя в цикле конкатенация, и выборка делается одним запросом
(Добавление)
andrweb пишет:
product.category=category.id AND product.visible='1'[/PHP]


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


-----
То что программа работает, не означает что она написана правильно!
 
 Top
andrweb
Отправлено: 02 Августа, 2012 - 20:32:58
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: РОССИЯ Ростов-на-Дону


Помог: 0 раз(а)




KingStar пишет:
какая разница какой запрос, в у тебя в цикле конкатенация, и выборка делается одним запросом
(Добавление)
andrweb пишет:
product.category=category.id AND product.visible='1'[/PHP]


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


Спасибо, сейчас попробую...


-----
Горбатого могила исправит.
 
 Top
tuareg
Отправлено: 02 Августа, 2012 - 20:44:10
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




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

(Отредактировано автором: 02 Августа, 2012 - 20:50:57)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB