PHP SQL
PHP SQL .ru
  Советы  Уроки  CSS  Книги  Форум  
 Функции


  На главную

  Назад  Вперед

  Печать

Поиск по сайту

Каждому Web-мастеру нужно знать, как искать, модифицировать и удалять слова. Некоторые из описанных в этой главе функций очень просты, но мы рассмотрим их на тот случай, если вы с ними не знакомы. Наиболее сложные функции используют регулярные выражения - мощную часть РНР, которую должен знать каждый Web-мастер. Но сначала давайте рассмотрим некоторые элементарные операции со строками.

Особенности написания правильного поиска по сайту. Извлечение части строки

Я занимаюсь продажей коллекционных карт (подумайте о них как о бейсбольных картах). Я заметил, что при поиске карт пользователи часто указывают множественную форму, например Shivan Dragons вместо Shivan Dragon. Но тут возникает проблема - если ввести Shivan Dragons, то мы ничего не найдем в базе данных. Аналогично с русскими окончаниями: будем искать диск, но не найдем диски.

Для решения этой проблемы можно использовать функции, которые проверяют конец строки и удаляют букву s, если она там будет замечена. Давайте рассмотрим эти функции.

Функция substr () возвращает подстроку заданной строки. Например, если последний символ строки s, вы можете удалить его и повторить поиск заново, если по первоначальному запросу не было ничего найдено.

Синтаксис substr () следующий:

substr{str, begin, end)

Здесь str - это исходная* строка, begin - начальный индекс подстроки и end - количество символов, которые нужно удалить. Начало строки - это символ с индексом 0. Например, следующий код выведет cde, три символа, начиная с позиции 2:

echo substr(“abcdef”, 2, 3) ;

Примечание.
Конец строки можно определить так: strlen (str).

Если вы забудете указать аргумент end, функция substr () вернет все символы, начиная с символа begin. Следующий код вернет все символы строки, начиная с 2:

echo substr(“abcdef”, 2); // cdef

Также, если вы укажете отрицательное значение для begin, substr () (и много других строковых функций) начнут отсчет с конца строки.

Рас-смотрим следующий пример: echo substr(“abcdef”, -3, 2); // de

Как только вы найдете интересующую вас подстроку, вот что вы можете сделать с исходной строкой:

• Переназначить определенную часть строки, используя substr () для удаления всех лишних символов. Например, $string = substr ($string, 0, 10); оставляет в строке $ string только 10 ее первоначальных символов.

• Удалить последние N символов, используя функ-ции substr () и strlen(). Например, $string substr($string, 0, strlen($string) - 3); уда-ляет 3 последних символа.

• Заменить символы строки, используя функцию substr_ replace (). Пример: substr_replace(1abcdef1, 1 bbb1, 1, 2) возвращает abbbdef.

Чтобы вы увидели, как можно использовать подстроки в ежедневном программировании, давайте вернемся к примеру с Shivan Dragons. Напомню, что пользователи могут искать строку Shivan Dragons, но не могут найти Shivan Dragon. Следующий фрагмент кода показывает один из способов решения этой проблемы:

$sql = "SELECT * FROM product_table WHERE product_name = “$user_input"; $result = @mysql_query($sql, $connection);
if (mysql_num_rows($result) == 0)  {
if (substr($user_input, -1) == “s”)  {
// Последний символ в строке "s".
$user_input = substr_replace($user_input,  -1);
// Удаляем последний символ в строке (букву s).
// Делаем новый SQL-запрос с обновленной строкой $user_input.
$sql = "SELECT * FROM product_table WHERE product_name = “$user_input
$result = @mysql_query($sql, $connection);
}
}
Данный алгоритм сначала пытается найти строку, введенную пользователем ($user_input). Если совпадений не найдено и последний символ $user_input - символ s, мы пытаемся произвести поиск без этой буквы. После выполнения алгоритма результат запроса сохраняется в $ result.

Совершенствуем сценарий Одна из проблем, связанная с использованием этого сценария, может возникнуть, когда в нашем магазине есть обе позиции - Shivan Dragons и Shivan Dragon. Сценарий возвращает результаты поиска только для одной позиции, поэтому результаты поиска будут неполными.

Например, если у нас есть одна позиция Shivan Dragons и две Shivan Dragon, вы получите только первую, но если первой позиции не будет в базе данных, вы получите оставшиеся две.

Вы можете добавить эту функциональность, используя substr () для проверки вашего SQL-запроса вместо его модификации. Вот пример:

$sql = "SELECT * FROM product_table WHERE product_name = “$user_input"; if (substr($user_input, -1) == “s”)  {
// Последний символ в строке "s".
// Add another possibility to the WHERE clause.
$sql .= " OR product_name =       . substr_replace($user_input,  “”, -1)  .
}
$result = @mysql_query($sql, $connection);
Это немного другой подход, поскольку он предполагает использование единственного SQL-запроса, необходимого для выполнения всей работы. Идея заключается в том, что мы добавляем оператор OR к первому запросу, если пользователь в запросе вводит строку, заканчивающуюся на s.

 
Предыдущая   На главную   Следующая          

Ваш комментарий:

'

Реклама на сайте | Обмен ссылками | Ссылки | Контакты
Добавить статью | Добавить исходник
2010 © phpsql.ru