Как сделать алгоритм поиска по нескольким словам на PHP из БД. Как сделать алгоритм поиска по нескольким словам на PHP из БД Любовное мужчине search php author id

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

Имеется таблица «news» , которая содержит следующие поля: id , title и content :

Требуется осуществить поиск по полю content в нашей базе данных, которая состоит из следующих столбцов, пример смотрите на картинке выше. Приступим к реализации. Для начала создадим страницу для тестирования работы. Она будет содержать форму с полем ввода ключевых слов и кнопку «найти»:

Листинг html кода:

Поиск в базе данных

В атрибутах формы прописываем путь к обработчику, содержащему алгоритм, и метод передачи post.

Для передачи массива отобранных элементов мы используем сессию.

Для этого мы запускаем ее в самом начале страницы.

Для вывода будем использовать функцию print_r() .

Для того чтобы после перезагрузки страницы результат не отобразился второй раз, с помощью unset мы убиваем сессию.

Создадим обработчик search.php . Для начала запускаем сессию и подключаемся к базе данных:

Подробнее о подключении к базе данных через PDO смотрите в этой статье.

Работа алгоритма представлена на схеме:

Разберем выборку по первому слову, в качестве примера будем использовать поисковый запрос «как сделать сайт»:

Сначала в переменую $str получаем строку из формы методом POST . Разбиваем эту строку на слова через пробел с помощью функции expode и подсчитываем количество слов. Осуществляем запрос, в котором проверяем наличие первого слова в столбце content . Создаем пустой массив и записываем в него значения, полученные в результате выборки по запросу. Записываем в $id_count количество полученных элементов.

Эта часть алгоритма работает по принципу «отсеивания». Допустим в базе данных имеется десять статей. После выборки по первому слову мы получаем id статей в которых есть слово «как», таких статей оказалось шесть. Далее мы производим поиск второго слова среди этих шести статей, тем самым сузив круг поиска. В результате этой итерации остается четыре статьи, которые включают в себя оба слова «как» и «сделать». На последней итерации среди оставшихся четырех статей мы ищем слово «сайт». После этого прохода получаем id одной единственной статьи, которая включает в себя все ключевые слова.

Количество итераций равно количеству слов в поисковом запросе. Конечное количество полученных id может быть любым, в зависимости от запроса и содержимого таблицы базы данных.

Если в результате выполнения запроса в цикле мы получаем id (переменная temp ), равное одному из id предыдущей выборки (id_mass ), то этот id мы оставляем неизменным. В противном случаем мы присваиваем элементу id_mass[ j ] значение -1, тем самым исключив его из обработки.

После окончания работы циклов мы получаем массив из id , в которых найдены ключевые слова и -1. Чтобы передать пользователю только требуемые id , мы используем цикл, в котором идет проверка, в результате которой отбрасываются все элементы равные -1. Остальные же элементы мы передаем в массив сессии:

Функция header служит для перенаправления клиента на страницу поиска.

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

Смотрите также дополнительные статьи про MVC

28.02.2012 Ромчик

Доброго времени суток. Мы с Вами продолжаем изучать теги для шаблонов WordPress. В прошлом материале мы рассмотрели основные теги для шаблонов WordPress. Сегодня мы остановимся на тегах для работы с автором(авторами) постов в WordPress. Теги для работы с автором постов WordPress позволяют нам: выводит автора поста, выводит ссылку на ресурс автора, выводить дополнительную информацию об авторе и многое другое.

the_author ()
Данный тег выводит автора поста. Тег должен использоваться внутри механизма The Loop . Если необходимо получить данные для дальнейшей обработки, то необходимо использовать тег . Может принимать параметр $post-id — id поста.
Пример:

This post was written by

get_the_author()
Данный тег возвращает автора поста для дальнейшей обработки. Необходимо использовать в механизме The Loop .
Пример:

the_author_link()
Этот тег выводит ссылку на сайт автора сообщения. Данный адрес устанавливается в админке WordPress. Используется в механизме The Loop . Если Вам необходимо получить ссылку на сайт автора для дальнейшей обработки, то используйте функцию get_the_author_link();
Пример:

Written by:

get_the_author_link()
Данная функция возвращает ссылку на сайт автора для дальнейшего использования.

the_author_meta()
Отображает мета данные автора. Принимает два параметра $field, $userID, где $field может принимать следующие значения:

  • user_login
  • user_pass
  • user_nicename
  • user_email
  • user_url
  • user_registered
  • user_activation_key
  • user_status
  • display_name
  • nickname
  • first_name
  • last_name
  • description
  • jabber
  • user_level
  • user_firstname
  • user_lastname
  • user_description
  • rich_editing
  • comment_shortcuts
  • admin_color
  • plugins_per_page
  • plugins_last_view

и $userID — id пользователя. Если данная функция используется в механизме The Loop, то указывать $userID ненадо.
Пример:

The email address for user id 25 is

the_author_posts()
Показывает общее количество сообщений, написанных данным автором. Используется внутри механизма The Loop .
Пример:

has blogged posts

the_author_posts_link()
Выводит ссылку на все сообщения автора. Должен использоваться в механизме The Loop .
Пример:

Other posts by

wp_dropdown_users()
Создает выпадающий список авторов данного ресурса. Принимает в качестве параметра массив $args, следующего вида:

  • show_option_all — вызывает html выпадающего списка для того, чтобы выбрать всех пользователей
  • show_option_none — вызывает html выпадающего списка для того, чтобы не выбирать ни одного пользователя
  • hide_if_only_one_author — скрывать, если только один пользователь
  • orderby — сортировка по полю, принимает следующие значения: ID, user_nicename, display_name — по умолчанию
  • order — порядок сортировки, может прнимать следующие значения: ‘ASC’ — по умолчанию, ‘DESC’
  • include — перечисляются через запятую индентификаторы пользователей, которые будут включены в список. По умолчанию все включены.
  • exclude — перечисляются через запятую индентификаторы пользователей, которы не будут включены в выпадающий список. По умолчанию исключенных нет.
  • multi — пропускать атрибут ID в выбранном элементе, по умолчанию: false.
  • show — какое поле показывать в списке, принимает следующее значение: ‘ID’, ‘user_login’, ‘display_name’ — по умолчанию
  • echo — показывать пользователей(true) или вернуть результат (false) для дальнейшей обработки.
  • selected — id пользователя, который будет выбран. По умолчанию: пусто.
  • include_selected — всегда включает выбранный индентификатор пользователя. По умолчанию: false.
  • name — имя пользователя, которое будет выбрано в выпадающем списке. По умолчанию: user.
  • id — атрибута выбранного элемента.
  • class — class выбранного элемента.
  • blog_id — id блога (только для мультисайта). По умолчанию: текущий.
  • who — каких пользователей запрашивать, в настоящее время поддерживает только авторов.

wp_list_authors()
Отображает список авторов сайта ввиде ссылки на посты. Опционально этот тег выводит сообщенея каждого автора и ссылку на RSS. В качестве параметра может принимать массив вида:

  • orderby — поле, которое используется для сортировки результатов, может принимать следующие значения: name — по умолчанию, email, url, registered, id, user_login, post_count
  • order — порядок сортировки, принимает следующие значения: ASC — по умолчанию, DESC
  • number — максимальное количество отображаемых пользователей, по умолчанию: ограничений нет
  • optioncount — отображать или нет количество опубликованных сообщений пользователя, принимает: 1(true) — по умолчанию или 0(false)
  • exclude_admin — исключить администратора из списка, принимает 1(true) — по умолчанию или 0 (false)
  • show_fullname — отображать полное имя автора (имя и фамилию), может принимать два значения 1(true) и 0(false) — по умолчанию
  • hide_empty — отображать или не отображать список авторов, если он пуст. Принимает два значения 1(true) — по умолчанию и 0(false)
  • echo — отобоажать или возвращать для дальнейшей обработки результат, может принимать два значения 1(true) — по умолчанию и 0(false)
  • feed — текст ссылки на RSS поток для каждого автора
  • feed_image — путь/файл картинки
  • feed_type — тип потока. Может принимать следующие значения: — по умолчанию, rss2, atom, rss, rdf
  • style — стиль в котором будет отображаться список авторов, может принимать следующие значения: list — по умолчанию, none
  • html — как перечислять элементы как html или как список. Мржет принимать два значения 1(true) — по умолчанию,как html или 0(false) как текст

get_author_posts_url()
Получает адрес автора по заданному ID автора. Может принимать два параметра $author_id и $author_nicename, где $author_id — ID автора, $author_nicename — ник пользователя.

На этом рассмотрение тегов автора(авторов) постов для темы WordPress мы закончили. А в следующем материале мы рассмотрим теги закладки для шаблонов WordPress. Так, что не пропускайте выхода новых постов, подписавшись на RSS-рассылку данного блога.
А пока все. Всем удачной разработки.

Лучший способ удержать пользователя на сайте, это позволить ему найти, то что он ищет. Если вы делаете для этого удобную систему, то уровень предпочтения вашего сайта будет расти и пользователь обязательно вернётся для того, чтобы найти то, что его интересует.

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

Я создам 2 файла: search.php, который будет содержать HTML и JavaScript. Второй файл, do_search.php будет содержать PHP код. Приступим к созданию первого файла:

PHP, jQuery search demo $(function() { $(".search_button").click(function() { // получаем то, что написал пользователь var searchString = $("#search_box").val(); // формируем строку запроса var data = "search="+ searchString; // если searchString не пустая if(searchString) { // делаем ajax запрос $.ajax({ type: "POST", url: "do_search.php", data: data, beforeSend: function(html) { // запустится до вызова запроса $("#results").html(""); $("#searchresults").show(); $(".word").html(searchString); }, success: function(html){ // запустится после получения результатов $("#results").show(); $("#results").append(html); } }); } return false; }); }); Попробуйте ввести слово ajax
Результаты для

В этом файле мы создали обычную HTML форму, которая посылает POST запрос в бэк энд - файлу do_search.php.

PHP код содержит комментарии, по которым вы с лёгкостью сможете понять работу скрипта. Если в базе данных нашлись совпадения, вы показываете их вашему пользователю, выделяя жирным те слова, которые искал пользователь.

Придадим всему этому немного CSS:

Body{ font-family:Arial, Helvetica, sans-serif; } *{ margin:0;padding:0; } #container { margin: 0 auto; width: 600px; } a { color:#DF3D82; text-decoration:none } a:hover { color:#DF3D82; text-decoration:underline; } ul.update { list-style:none;font-size:1.1em; margin-top:10px } ul.update li{ height:30px; border-bottom:#dedede solid 1px; text-align:left;} ul.update li:first-child{ border-top:#dedede solid 1px; height:30px; text-align:left; } #flash { margin-top:20px; text-align:left; } #searchresults { text-align:left; margin-top:20px; display:none; font-family:Arial, Helvetica, sans-serif; font-size:16px; color:#000; } .word { font-weight:bold; color:#000000; } #search_box { padding:4px; border:solid 1px #666666; width:300px; height:30px; font-size:18px;-moz-border-radius: 6px;-webkit-border-radius: 6px; } .search_button { border:#000000 solid 1px; padding: 6px; color:#000; font-weight:bold; font-size:16px;-moz-border-radius: 6px;-webkit-border-radius: 6px; } .found { font-weight: bold; font-style: italic; color: #ff0000; } h2 { margin-right: 70px; }

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

Одна из самых популярных и необходимых функций на любом сайте – это поиск, реализованный с помощью специальной формы. Этот функционал позволяет посетителям быстро находить на сайте интересующий их контент.

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

Разрабатывать формы поиска при помощи PHP , а также познакомитесь с SQL (Structured Query Language ) – специальным языком для сбора, записи и модификации информации, содержащейся в базах данных. Перед тем как начать, рекомендуем вам скачать файлы проекта .

Что вам понадобится

  • Инструмент для работы с базами данных MySQL .
  • Локальный или удаленный сервер с поддержкой PHP .
  • Текстовый редактор.
Создаем базу данных

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

Самым популярным инструментом для управления MySQL является PHP My Admin , Этого инструмента будет достаточно для нашего сегодняшнего руководства.

Создание таблицы

Наша таблица должна быть создана в следующем формате:

Column Name Data Type Length Null or Not Null Primary key? Auto Increment
ID INT 1 Not Null Yes Yes
FirstName Varchar 50 Not Null No No
LastName Varchar 50 Not Null No No
Email Varchar 50 Not Null No No
PhoneNumber Varchar 15 Not Null No No

Таблица базы данных состоит из столбцов и строк, как в Excel . Первый столбец позволяет идентифицировать данные по имени. Далее идет колонка Data types (тип данных ), которая указывает нам на тип данных, содержащихся в колонке. В поле Length (Длина ) указывается максимальный объем памяти (хранилища ) для столбца таблицы. Мы используем переменные, которые дают больше гибкости. Другими словами, если длина ФИО меньше 50 символов, то будет занята лишь часть отведенного места.

И среди данных персонала не может быть пустых значений (null, empty ). Первая строка выделена желтым цветом, потому что столбец ID – наш основной ключ. Основной ключ в базе данных гарантирует, что каждая запись будет уникальной. К этой колонке также применен автоинкремент, а это значит, что каждой записи в нашей базе данных будет присваиваться уникальный номер автоматически.

Вносим представителей персонала в таблицу

Как только разберетесь с таблицей, начните заполнять ее данными. 6 записей вполне достаточно, чтобы закрепить в уме процедуру. Ниже предлагаю вам собственный пример:

Column ID FirstName LastName Email PhoneNumber
2 Ryan Butler [email protected] 417-854-8547
3 Brent Callahan [email protected] 417-854-6587
Разработка формы

Чтобы создать форму поиска по сайту через Google , откройте любой подходящий текстовый редактор. Я рекомендую воспользоваться бесплатным PSPad . Вы можете использовать любой текстовый редактор, где предусмотрена подсветка синтаксиса. Это в значительной степени облегчит процесс написания и отладки PHP-кода . Создавая страницу для формы поиска, не забудьте сохранить ее в формате .php , иначе PHP-код не будет обрабатываться должным образом. Как только сохраните документ, скопируйте в него следующую разметку:

Поиск контактов:

Детальный поиск контактов

Вы можете искать по имени или фамилии

Если вы знакомы с языком HTML , то тут вам все должно быть понятно как минимум до открывающего тега form . Внутри этого тега находится важнейший элемент всего кода – атрибут action . В качестве действия нашей формы мы указали название нашего файла, а затем применили к нему строку запроса “go ”.

Проверка на соответствие критерию

Когда пользователь вводит имя или фамилию, а затем нажимает кнопку подтверждения, форма передает данные самой себе и добавляет в конце строку запроса “go ”. На данном этапе мы проверяем наличие строки запроса go . Если результат положительный, выводим результаты поиска.

До вывода запрашиваемых результатов нам нужно перепроверить: (1) была ли подтверждена форма, (2) содержит ли строка запроса значение go, (3) был ли поисковой запрос введен в нижнем или верхнем регистре? Если ни одна из проверок не дает положительного результата (true ), то от нас не требуется выполнять какие-либо действия.

Для начала добавим небольшой блок кода PHP поиск по сайту после закрывающего тега :

Сначала мы открываем блок PHP-кода тегом ””.

Любой PHP-код внутри этой пары тегов будет исполняться сервером. Затем мы проверяем, была ли подтверждена форма:

Мы воспользуемся встроенной функцией isset , которая возвращает значение типа bool , и поместим в нее массив $_POST . Логическое выражение в программировании позволяет получить нам либо true , либо false .

Следовательно, если функция возвращает значение true , то форма была подтверждена, и нам нужно продолжить выполнение кода дальше. Если же функция возвращает значение false , то мы выведем сообщение об ошибке. Сохраните весь набранный код в файле search_submit.php .

Мы вкладываем еще одно условное логическое выражение внутрь основного, но только в этот раз мы используем массив $_GET вместе со значением “go ”. Сохраните изменения в файле search_go.php .

Теперь нам нужно убедиться, что посетители могут вводить первую букву в строку запроса только в верхнем или только в нижнем регистре. Нам также нужно предусмотреть способ учета критериев поиска, введенных посетителем. Лучше всего проверять введенные посетителем данные с помощью регулярного выражения:

Мы вкладываем еще одно условное логическое выражение внутрь наших двух. На этот раз мы используем регулярное выражение для проверки ввода. Мы используем встроенную функцию preg_match с двумя параметрами: регулярное выражение, и поле формы, к которому должна применяться проверка.

В нашем случае, это будет поле «Имя » (name ). Чтобы извлечь параметры поиска, указанные посетителем, мы создаем переменную $name, и привязываем к ней значение POST с названием поля из формы, которое будет использоваться в SQL-запросе . Сейчас мы реализовали: (1) отправку данных формы, (2) строка запроса включает значение go и (3) посетитель ввел либо заглавную, либо строчную первую букву. И все эти проверки происходят еще до внесения изменений в базу данных. Сохраните все изменения.

Результаты Connect, Select, Query и Return из таблицы базы данных

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

Мы создаем переменную $db , и привязываем ее к встроенной функции MySQL mysql_connect , которая принимает три параметра: сервер с базой данных (localhost , если вы работаете локально ), логин и пароль.

После этого мы запускаем встроенную PHP-функцию die , которая останавливает дальнейшее выполнение кода, если нет соединения с базой данных. И выводим информацию об ошибке, запуская встроенную функцию MySQL mysql_error , которая вернет причину ошибки. Сохраните файл search_connectdb.php .

Создаем переменную под названием mydb и привязываем ее ко встроенной MySQL-функции mysql_select_db , а затем указываем название базы данных, которую создали ранее. Далее мы опрашиваем таблицу базы данных при помощи SQL-запроса с переменной name, в которой содержатся параметры поиска, введенные посетителем:

При опросе таблицы базы данных мы создаем переменную $sql , и привязываем ее к строке, содержащей SQL-запрос . Мы используем оператор SELECT для извлечения значений из столбцов id , а также имени и фамилии из таблицы contacts . Затем мы используем инструкцию WHERE вместе со значениями имени и фамилии, чтобы сузить поиск.

Вместе с оператором LIKE мы используем знак процента (%) – спецсимвол, который возвращает 0 и более знаков, а также переменную name из строки поиска. В результате LIKE (в сочетании со спецсимволом ) находит любое соответствующее имя в таблице базы данных. Можно описать весь процесс следующим образом: «Мы выбираем имя и фамилию из таблицы contacts , которые соответствуют введенным посетителем ». Сохраните файл search_query.php .

Мы создаем переменную $result , и присваиваем ей значение функции mysql_query () , внося ее в $query. Теперь наш запрос хранится в переменной result . Чтобы вывести результат в PHP , мы создаем цикл, а затем выводим данные в неупорядоченном списке:

Сначала мы создаем цикл while , внутри него создаем переменную под названием row , и инициализируем ее возвращаемым значением функции mysql_fetch_array , которая принимает переменную result , в которой находится наш SQL-запрос . Внутри цикла while мы присваиваем каждому значению столбца значение переменной с идентичным названием. Затем мы выводим значения внутрь неупорядоченного списка.

Здесь важно обратить внимание на два момента: (1) внутри цикла while не нужно присваивать значения переменным массива row , так как значения можно брать напрямую из массива row ; (2) тег anchor , который мы используем в названии нашего файла вместе с id и основным ключом. Причина этого заключается в том, что во многих поисковых элементах изначально ничего не отображается.

Так как мы показываем только имя и фамилию, приписывая ID в конце нашего тега anchor , то мы можем использовать ID для дополнительного запроса, который позволит вывести дополнительную информацию о персонале. Сохраните файл и протестируйте форму PHP поиска по сайту (search_display.php ).

Убираем табуляцию

Результаты выводятся в виде неупорядоченного списка, но суть в том, что нам не нужна табуляция. Чтобы избавиться от нее, добавьте следующее CSS-правило в самое начало вашего файла в head :

ul li{ list-style-type:none; }

Поиск по буквам

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

Добавьте следующую строку кода после закрывающего тега form :

A | B | K