Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Удалить пробелы в поиске
 
 автор: rider76   (13.07.2011 в 07:54)   письмо автору
 
 

Добрый день!!! Подскажите как удалить пробелы в поисковом запросе при вводе вначале и в конце строки. Поиск ведется по числам игнорируя все символы и пробелы, но при случайном вводе пробела вначале строки или в конце или при вводе двойного пробела поиск не работает (выводится все). Вот кусок кода, который используется:

$number = preg_replace('/\D/', '', $keyword);
            if (strlen($number) > 2) {
                $sql .= " OR p.model LIKE '" . $number . "%')";
            } else {
                $sql .= " OR p.model LIKE '%" . $this->db->escape($keyword) . "%')";
            }

здесь идет запрос по номеру если цифр больше 2-х, если нет, то по наименованию. Здесь все работает, но вот с пробелами никак не решу. Причем одинарные пробелы в середине строки успешно игнорируются, а в начале и в конце или двойные пробелы нет.

  Ответить  
 
 автор: elenaki   (13.07.2011 в 09:35)   письмо автору
 
   для: rider76   (13.07.2011 в 07:54)
 

trim()

  Ответить  
 
 автор: Гавриленко Дмитрий   (13.07.2011 в 10:10)   письмо автору
 
   для: elenaki   (13.07.2011 в 09:35)
 

chop()

Функции лучше запомнилась))

  Ответить  
 
 автор: rider76   (13.07.2011 в 15:16)   письмо автору
 
   для: Гавриленко Дмитрий   (13.07.2011 в 10:10)
 

Не подскажете как применить к моему примеру?

  Ответить  
 
 автор: rider76   (13.07.2011 в 15:14)   письмо автору
 
   для: elenaki   (13.07.2011 в 09:35)
 

trim пробовал, не работает. Я вот в таком виде его вставлял, подскажите может неправильно ? С PHP не очень дружу:
$number = trim(preg_replace('/\D/', '', $keyword)); 

еще пробовал вот в таком виде, тоже никакого результата
$number = preg_replace('/\D|\s/', '', $keyword);

  Ответить  
 
 автор: rider76   (14.07.2011 в 13:45)   письмо автору
 
   для: elenaki   (13.07.2011 в 09:35)
 

Добрый день!!! Не подскажете как переделать эту функцию путем перечисления символов, которые надо проигнорировать( точки тире пробелы)

  Ответить  
 
 автор: cheops   (14.07.2011 в 14:01)   письмо автору
 
   для: rider76   (14.07.2011 в 13:45)
 

Добавьте их во второй параметр функции.

  Ответить  
 
 автор: rider76   (14.07.2011 в 20:12)   письмо автору
 
   для: cheops   (14.07.2011 в 14:01)
 

Прошу прощения. Подскажите что вы называете вторым параметром функции
эта строка ?
 if (strlen($number) > 2)

  Ответить  
 
 автор: cheops   (14.07.2011 в 20:15)   письмо автору
 
   для: rider76   (14.07.2011 в 20:12)
 

Дело в том, что ваш пост был ответом на пост elenaki, которая предложила удалить пробелы, при помощи функции trim(), эта функция удаляет пробелы из начала и конца строки, чтобы она удаляла какие-то другие символы, их нужно перечислить во втором параметре
trim($str, " .-");

  Ответить  
 
 автор: rider76   (14.07.2011 в 20:27)   письмо автору
 
   для: cheops   (14.07.2011 в 20:15)
 

Понял спасибо, буду пробовать

  Ответить  
 
 автор: rider76   (14.07.2011 в 23:43)   письмо автору
 
   для: cheops   (14.07.2011 в 20:15)
 

не работает у меня trim почему-то, уже все варианты перебрал

  Ответить  
 
 автор: cheops   (14.07.2011 в 23:45)   письмо автору
 
   для: rider76   (14.07.2011 в 23:43)
 

Следующий скрипт у вас какую строку выводит (посмотрите через просмотр HTML-кода, чтобы и пробелы не пропали)?
<?php
  $str 
" Hello .-";
  
$str trim($str" .-");
  echo 
$str;
?>

  Ответить  
 
 автор: rider76   (15.07.2011 в 00:33)   письмо автору
 
   для: cheops   (14.07.2011 в 23:45)
 

Hello выводит и вот код:
<html>

<head>
  <title></title>
</head>

<body>
  Hello 
</body>

</html>

  Ответить  
 
 автор: rider76   (15.07.2011 в 00:54)   письмо автору
 
   для: cheops   (14.07.2011 в 23:45)
 

Пробелы удаляются, нашел еще вот такой скрипт для теста

<?
   $str 
"   Hello, world!   ";
   
$str1 trim("   Hello, world!   ");
   
$str_len strlen($str);
   
$str1_len strlen($str1);
   echo(
" размер исходной строки '$str' = $str_len, <br>
   размер строки после удаления пробелов = 
$str1_len");    
?>

  Ответить  
 
 автор: rider76   (18.07.2011 в 13:49)   письмо автору
 
   для: cheops   (14.07.2011 в 20:15)
 

Сам trim у меня вообще не работает в моем коде, дело в том что идет запрос на поиск в $keyword только номеров, когда запрос прошел уже поздно удалять пробелы, надо как то использовать trim перед запросом $keyword в только что введенном тексте

  Ответить  
 
 автор: cheops   (18.07.2011 в 14:02)   письмо автору
 
   для: rider76   (18.07.2011 в 13:49)
 

Хм... ну вы вероятно разбиваете запрос на отдельные слова, к которым нужно применить trim()? Если не сложно опишите проблему подробнее, желательно, с примером.

  Ответить  
 
 автор: rider76   (18.07.2011 в 16:58)   письмо автору
 
   для: cheops   (18.07.2011 в 14:02)
 

Заранее спасибо за участие. Прежде всего скажу , что это CMS opencart (интернет магазин). Там модуль поиска организован по названию и по модели (артикулу), но ищет только точно так как записано в адмике. Я для себя решил артикул заводить без всяких знаков препинания и пробелов, а с помощью регулярных выражений можно игнорировать эти все знаки. Но вот проблема, игнорировать можно только внутри самого слова. Так как здесь запрос SQL идет в $keyword (поиск), схема работы trim

$str= "   что то написано  ";
$str=trim( "   что то написано  ");

не действует, сам trim как я понимаю работает, но так как в базе SQL нет пробелов , то ему соответственно нечего и удалять. Получается такая штука; строка $str запрашивает в $keyword, а строка $str=trim удаляет пробелы в строке $str , в которой к этому моменту уже просто ничего нет. Кусок кода с запросом приведен выше, полностью файл прикреплю вечером, сейчас нет под рукой. Извините если намудрил с описанием, старался как мог. Надо попытаться как-то написать код так, что-бы исправлялось все еще до SQL запроса. Посетитель набрал номер артикула в поиск, и при нажатии кнопки сначала исправлялась его запись, а потом уже шел запрос в $keyword (по базе данных).

Пробовал так делать, не получилось

$number = preg_replace('/\D/', '', $keyword);
$number=trim($number);

  Ответить  
 
 автор: cheops   (18.07.2011 в 17:46)   письмо автору
 
   для: rider76   (18.07.2011 в 16:58)
 

У нас есть в строке, три слова "что", "то" и "написано", если вы их получите в виде массива, это вам поможет? Или в базе данных тоже строка из нескольких строк? Если да, то можно увидеть что примерно в базе данных?
$str= trim("   что то написано  ");
// Разбиваем строку на отдельные слова
$arr = preg_split("|[\s]+|", $str);

  Ответить  
 
 автор: rider76   (18.07.2011 в 20:49)   письмо автору
30.3 Кб
 
   для: cheops   (18.07.2011 в 17:46)
 

В базе данных строка в виде массива "чтотонаписано", именно эта строка должна находиться. Артиклы в виде буквенно-цифровых обозначений. В начале делал поиск только по цифрам, но буквы тоже нужны. По поводу пробелов мне вот что подсказали, что там только что написанный пользователем текст получен из $_GET, поэтому там вместо пробела %20 - не представляю что это такое. Попробовал подставить на удаление "%20", удаляет именно текст %20, но не пробелы. Просветите в каком направлении двигаться? Файл с поиском прикрепил. Я меняю строку 188 и 259. Сейчас правда они вот так выглядят

$model = str_replace(array('_', '-', '—', '.', ',', ' ', '+', '/'), '', $keyword);

  Ответить  
 
 автор: rider76   (20.07.2011 в 12:14)   письмо автору
 
   для: rider76   (18.07.2011 в 20:49)
 

Все спасибо за участие. Разобрался. Проблема была не в регулярных выражениях ( trim работает как ему и положено). Проблема была в самом скрипте поиска. Поиск кроме названия описания и артикла ищет еще и по тегам, а так как они пустые везде скрипт и выводил все товары при наличии пробела в конце и начале. Еще раз всем спасибо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования