Собираем поисковый механизм на PHPMySQL PHP


Оглавление (нажмите, чтобы открыть):

Уроки PHP и MySQL. Урок 5. Формы и базы данных в web

Урок посвящен языку PHP и базе данных MySQL. Рассматривается взаимодействие PHP и MySQL, способы занесения данных из формы в базу данных и вывод данных из базы на web-страницу.

В данном уроке PHP и MySQL Вам предстоит решить следующие задачи:

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

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

3. Создать web-страницу, позволяющую просматривать информацию из базы данных. Данные в таблицы базы данных будут вноситься из объявлений, размещенных посетителями на сайте.

Задание № 1. Создание базы данных

Наши уроки PHP и MySQL начнем с создания базы данных.

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

Название поля
Имя поля Тип поля Описание
идентификационный номер породы id Числовой
название породы name_por Символьный
характеристика породы describe_por Символьный В поле хранится имя файла, который содержит описание породы и фотографию.

Сведения о потерявшихся кошках

Название поля
Имя поля Тип поля Описание
идентификационный номер кошки id Числовой
порода por Символьный
дата нахождения кошки:
день
месяц
год
day
month
year
Символьный
Символьный
Символьный
место нахождения кошки place Символьный
пол кошки pol Символьный
возраст кошки age Символьный Если возможно указать примерный возраст
описание кошки outline Символьный Окрас, состояние здоровья и т. д.
координаты нашедшего contact Символьный Любая контактная информация: телефон, e-mail, адрес
дополнительная информация dop_info Символьный Например, кошка больна, есть клеймо, кормящая и пр.

В наших уроках PHP и MySQL рассмотрим два способа создания таблицы базы данных.

1. С помощью клиента MySQL.

2. Средствами PHP.

Способ 1. Создание базы данных с помощью клиента MySQL

С помощью клиентской программы MySQL — «phpMyAdmin» создадим таблицу Справочник пород (таблица 1).

1. Запустите Denwer ярлыком Start Denwer.

2. Запустите браузер и перейдите по ссылке https://localhost/. На открывшейся странице в разделе Утилиты запустите: phpMyAdmin — администрирование СУБД MySQL. Запустится программа phpMyAdmin (рис. 1).

3. Создайте новую базу данных. Для этого впишите в поле Создать базу данных имя базы catsdb, кодировку установите utf8_general_ci и нажмите кнопку Создать (рис. 2).

4. Если все было выполнено верно, то будет выведено сообщение об удачном создании базы.

5. Перейдите в базу данных catsdb, нажав соответствующую строку в левой панели (рис. 3).

6. Добавьте в базу данных таблицу Справочник пород, назовите ее: spravpor (структура таблицы и назначение полей приведены в таблице 1 Справочник пород). Для этого:

a. Внесите данные в поле Имя (имя таблицы — spravpor) и Количество столбцов (3), после чего нажмите кнопку ОК (рис. 4).

b. В открывшемся окне заполните данные по структуре таблицы (рис. 5).

c. После заполнения всех полей нажмите Сохранить. Перейдите в таблицу spravpor, нажав соответствующую строку в левой панели (рис. 6).

d. Откроется сама таблица (рис. 7).

Способ 2. Создание базы данных средствами PHP

В данном уроке PHP и MySQL создадим таблицу с помощью сценария PHP, но при этом база данных должна уже быть создана! В листинге 1 приведена программа создания таблицы под именем species средствами PHP. Структура таблицы species аналогична структуре таблицы spravpor.

1. Проанализируйте приведенные в листинге 1 PHP-сценарий и комментарии к нему в файле species.php.

2. Реализуйте код из листинга 1. Для этого:

  • скопируйте его в Notepad++
  • преобразуйте кодировку файла в utf-8 командой Кодировка – Преобразовать в UTF-8
  • сохраните в папку localhost/www под именем species.php
  • запустите файл, набрав в адресной строке localhost/species.php
  • появится сообщение, что таблица успешно создана (рис. 8).

3. После выполнения сценария убедитесь, что таблица species создана в базе данных catsdb (рис. 9, 10).

Листинг 1. Создание таблицы с помощью сценария PHP (файл species.php)


Комментарии к листингу 1:

1. Здесь адрес сервера MySQL — localhost (такой адрес указывается в случае если работа с базой данных ведется на локальном компьютере или компьютере где располагаются файлы с php-сценариями).

2. Программа на языке PHP обычно вставляется в HTML-текст. Поэтому предусмотрены специальные теги для отделения PHP-текста от HTML .

3. Если PHP-сценарий представляет собой самостоятельный модуль (как в листинге 1), он также должен начинаться с конструкции .

4. Любой файл, содержащий PHP-сценарий, имеет расширение php, независимо от того, встроен сценарий в HTML-текст или полностью написан на PHP.

5. Многострочные комментарии должны начинаться с символов /* и завершаться символами*/. Однострочные комментарии предваряются символами //. Закрывать их не нужно.

6. В языке PHP имя переменной начинается со знака доллара ($), за которым следует собственно имя переменной. В именах переменных различаются верхний и нижний регистры. Имя переменной должно начинаться с буквы или символа подчеркивания, за которыми могут следовать буквы, цифры или знаки подчеркивания. Буквы должны быть из диапазона A—Z.

7. В конце каждого оператора php обязательно ставится точка с запятой.

8. Функции для работы с MySQL имеют префикс mysql_ (см. приложение 2).

В нашем уроке PHP и MySQL, используя программу из листинга 1 в качестве образца, напишите сценарий PHP для создания таблицы сведений о потерявшихся кошках (см. таблицу 2). Таблицу назовите catspotery, а файл сценария catspotery.php. Результат на рис. 11, 12

Добавление записи в базу данных

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

Примерный вид формы представлен на рис. 13.

При выполнениии данного урока PHP и MySQL создайте web-страницу с формой, как на рис. 13. Сохраните под именем forma_cats.html. В качестве файл-обработчика укажите poter_dobavl.php. Не забывайте о корреляции полей формы и полей соответствующей таблицы в базе данных и кодировка файла должна быть в utf-8 (Кодировка – Преобразовать в UTF-8).

Данные, введенные посетителем, заносятся в соответствующую таблицу базы данных. Имя PHP-сценария, отвечающего за эту операцию, указывается в атрибуте action тега . В листинге 2 приведен код PHP-сценария, осуществляющего подключение к серверу MySQL, выбор базы данных, запрос к базе данных. В данном случае это запрос INSERT, который вставляет данные из формы в базу данных.

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

2. Проверьте работоспособность формы. В базу данных (рис. 14) должна сохраняться информация, введенная в форму (рис. 13).

3. Наполните базу 5-ю записями.

Листинг 2. Занесение данных формы в базу данных (файл poter_dobavl.php)

Извлечение записей из базы данных

В нашем уроке PHP и MySQL Вы реализовали технологию заполнения базы данных.

Теперь необходимо реализовать задачу вывода информации из базы данных. Т.е. необходимо представить на сайте информацию из базы данных в следующем виде:

Код сценария, представленный в листинге 3, выводит информацию из базы данных на web-страницу, в соответствии с рисунком 15.

Листинг 3. Вывод информации из базы данных на Web-страницу. Передача параметров (файл vivod_poter.php)

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

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

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

2. Используя запросы SQL (рис. 16), заполните базу 3-мя записями про породы кошек (длинношерстные, полудлинношерстные, короткошерстные) (рис. 17). Все необходимые материалы находятся в папке cats.

3. Реализуйте web-страницу, на которую выводятся данные из справочника пород. У каждой породы должна быть фотография.

4. Если скрипт обрезает описание породы, увеличьте длину поля describe_por, чтобы можно было вводить длинные описания.

Создание собственной поисковой системы с помощью PHP

Sphinx индексирует контент, быстро находит текст и выдает полезные результаты поиска

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

  • RSS — это ваша «служба доставки пиццы», которая приносит свежеиспеченные данные прямо к вашей двери.
  • Блог — это ближайший ресторанчик с китайской кухней на вынос, предлагающий ваши любимые острые блюда.
  • Форум — это ресторанчик по соседству (если быть более точным, лучше вспомнить сцену битвы едой из фильма «Зверинец»).
  • А поиск похож на «съешь, сколько можешь» ночью в местном кафетерии: Просто поставьте на поднос все, чего душа желает, снова и снова, пока это вынесет ваш желудок — и ваш стул.

К счастью, разработчики PHP могут найти множество программного обеспечения для RSS, блогов и форумов, чтобы создать или дополнить свой сайт. И если Google и ему подобные знают практически всё и переваривают огромный трафик, эти поисковые системы не обязательно хорошо подходят ко всем сайтам.

Например, если ваш сайт предлагает сотни тысяч новых и восстановленных запчастей для Porsche, Google может помочь в широких запросах, например, «Carrera parts» («запчасти для Carrera»), но он будет не очень полезен для более точных запросов, например, «used 1991 Porsche 911 Targa headlight bezel» («обрамление подфарника для Porsche 911 Targa 1991 года, б/у»).

Если контент вашего сайта очень специфичен или посетителям вашего сайта нужен поиск, адаптированный к процессам работы самого сайта, лучше всего будет дополнить глобальные поисковые системы локальной, специально созданной для вашего сайта. (Другие примеры специализированного поиска приведены в главе «Иголка в миллиарде стогов сена».)

Узнайте, как добавить на сайт PHP быструю и бесплатную поисковую систему с широкими возможностями и открытым исходным кодом. Здесь разрабатывается лишь малая видимая часть Web-сайта. Основное же внимание уделяется компонентам, необходимым для эффективного поиска: базе данных, индексу, поисковой системе и API-интерфейсу PHP.

Посещение Великого сфинкса

Чтобы реализовать на сайте собственную функцию поиска, нужен источник данных и возможность выполнять поиск по нему. В Web-приложениях источником данных, как правило, выступает реляционная база данных, имеющая некоторые встроенные возможности поиска. Равенство представляет собой простейший поисковый оператор, так же как SQL-оператор LIKE .) Однако некоторые виды поиска могут быть слишком специализированными для базы данных; также поиск может быть настолько сложным, что связанные с ним SQL-операторы JOIN будут просто выполняться слишком медленно.

Иголка в миллиарде стогов сена

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

Вот несколько типичных сценариев, в которых может потребоваться собственная поисковая система:

  • Найти все статьи о Кубке Стэнли, написанные Джо Хоки.
  • Найти последнюю версию драйверов для многофункционального принтера HP LaserJet 3015.
  • Найти запись Dinosaur Jr., показанную в «Последнем сеансе с Дэвидом Леттерманом».

Для ускорения поиска вам может потребоваться изменить структуру таблиц, чтобы упростить запросы. (Оптимизация таблиц и SQL-запросов сильно зависит от схемы и системы управления базой данных. В Интернете можно найти множество книг и статей по оптимизации производительности баз данных.) Альтернативный путь – применение специализированной поисковой системы. Какую поисковую систему применять — зависит от вида (и количества) данных, а также от вашего бюджета. Существует множество вариантов. Вы можете подключить к своей сети устройство Google, купить Endeca или другой коммерческий поисковый продукт для крупных предприятий, или попробовать Lucene. Однако во многих случаях коммерческие продукты не оправдывают рекламы или тяжелым грузом ложатся на бюджет, а Lucene, на момент написания этой статьи в июле 2007 года, не предлагал PHP API.

В качестве альтернативы можно рассмотреть Sphinx, бесплатную поисковую систему с открытым исходным кодом, предназначенную для исключительно быстрого поиска текста. Например, в реальной базе данных, состоящей примерно из 300 000 строк и пяти индексированных столбцов, где каждый столбец содержит около 15 слов, Sphinx может выдать результат по поиску «любое из этих слов» за одну сотую долю секунды (на сервере с процессором AMD Opteron с частотой 2 ГГц и 1 ГБ памяти, работающем под управлением Debian Linux® Sarge).

В Sphinx реализовано множество функций, в том числе:

  • Он может индексировать любые данные, представимые в виде строк.
  • Он может индексировать одни и те же данные различными способами. Создав несколько индексов, каждый из которых настроен на решение определенной задачи, вы можете выбрать наиболее подходящий для оптимизации результатов поиска.
  • Он может связывать атрибуты с каждым элементом индексированных данных. Впоследствии вы можете использовать один или несколько атрибутов для фильтрации результатов поиска.
  • Он поддерживает морфологические вариации слов, поэтому поиск по слову «cats» также выдаст результат по первичной словоформе «cat».
  • Индекс Sphinx можно распределить по нескольким машинам, обеспечив отказоустойчивую работу.
  • Он может создавать индексы префиксов слов произвольной длины и индексы инфиксов различной длины. Например, номер детали может состоять из 10 символов. Индекс префикса будет содержать все возможные подстроки, начинающиеся с начала строки. Индекс инфикса будет содержать подстроки, содержащиеся в любом месте строки.
  • Sphinx можно запустить в качестве системы хранения в рамках MySQL V5, что исключает необходимость запуска еще одного демона, который зачастую рассматривается как дополнительная точка сбоя.

Полный перечень функций можно найти в Интернете и в файле README, распространяемом с исходным кодом Sphinx. На Web-сайте Sphinx также перечислено несколько проектов, в которых используется Sphinx.

Sphinx написан на C++, скомпилирован с помощью GNU, поддерживает 64-разрядные вычисления на соответствующих платформах, и работает под управлением Linux, UNIX®, Microsoft® Windows® и Mac OS X. Собрать Sphinx очень просто: Загрузите и распакуйте код, после чего запустите команду ./configure && make && make install .

По умолчанию утилиты Sphinx устанавливаются в папку /usr/local/bin/, а файл конфигурации для всех компонентов Sphinx — в папку /usr/local/etc/sphinx.conf.

Sphinx состоит из трех компонентов: генератор индекса, поисковая система и поисковая утилита, работающая в командной строке:

  • Генератор индекса называется индексатором (indexer). Он выполняет запросы к базе данных, индексирует каждую колонку в каждой строке результата и привязывает каждую запись индекса к первичному ключу строки.
  • Поисковая система представляет собой демон, который называется searchd. Демон получает критерии поиска и другие параметры, проходит по одному или нескольким индексам и возвращает результат. Если соответствие находится, searchd возвращает массив первичных ключей. Используя эти ключи, приложение может выполнить запрос по соответствующей базе данных и найти полные записи, удовлетворяющие критериям поиска. Searchd взаимодействует с приложением через сокет на порту 3312.
  • Удобная утилита search позволяет выполнять поиск из командной строки без написания кода. Если searchd возвращает результат, поисковая система формирует запрос к базе данных и выводит строки, содержащиеся в результирующем множестве. Утилита search полезна для отладки конфигурации Sphinx и выполнения импровизированных поисковых запросов.

Кроме того, автор Sphinx Андрей Аксёнов и другие участники проекта реализовали интерфейсы для PHP, Perl, C/C++ и других языков программирования.

Поиск деталей кузова

Предположим, сайт Body-Parts.com продает детали кузовов — крылья, бамперы, хромированные детали и т.п. — для редких и коллекционных автомобилей. Как и в реальном мире, посетитель сайта Body Parts, вероятно, захочет искать детали по производителю (скажем, Porsche или производитель эквивалентных деталей), номеру изделия, марке, модели, году выпуска, состоянию (новая, восстановленная, бывшая в использовании), по описанию или по сочетанию этих характеристик.

Чтобы реализовать функцию поиска сайта Body Parts, мы будем использовать в качестве источника данных MySQL V5.0 и поисковый демон Sphinx, который будет выполнять быстрый и точный текстовый поиск. База данных MySQL V5.0 обладает очень широкими возможностями, однако функция полнотекстового поиска — не самая сильная ее черта. Фактически она ограничена таблицами MyISAM — форматом таблиц, который не поддерживает внешние ключи, и, следовательно, имеет ограниченную применимость.

В листингах с 1 по 4 показаны элементы схемы Body Parts, относящиеся к этому примеру. Вы можете увидеть таблицы Model (листинг 1), Assembly (листинг 2), Inventory (листинг 3) и Schematic (листинг 4) соответственно.

Таблица Model

Таблица Model, представленная в листинге 1, очень проста: Столбец метки указывает название модели («Corvette»); описание действует как описание автомобиля в дружественной форме («Two-door roadster; first year of introduction» — «Двухдверный родстер, первый год выпуска модели»); а begin_production и end_production обозначают, когда соответственно началось и завершилось производство этой версии. Поскольку значения упомянутых выше столбцов колонок не уникальны, каждой четверке значений столбцов (label, description, begin_production, end_production) сопоставлен отдельный идентификатор, который является внешним ключом других таблиц.

Листинг 1. Таблица Model для Body Parts

Ниже приведено несколько примеров данных для таблицы Model:

Таблица Assembly

Узел (assembly) это подсистема автомобиля, например, трансмиссия или полный набор стекол. Чтобы найти нужную запчасть, владельцы сверяются со сборочными чертежами и прилагающимися к ним спецификациями. Таблица Assembly, показанная в листинге 2, также не содержит ничего сложного: Она сопоставляет названию и описанию узла уникальный идентификатор.

Листинг 2. Таблица Assembly

Несколько примеров данных для таблицы Assembly приведены ниже:

Таблица Inventory

Таблица Inventory представляет собой канонический список деталей автомобилей. Деталь — например, болт или лампа — может присутствовать в разных автомобилях и в различных сборках, но в таблице Inventory каждая деталь упоминается только один раз. Каждая строка таблицы Inventory содержит:

  • Уникальный 32-разрядный целочисленный серийный номер serialno, используемый для идентификации строки.
  • Буквенно-цифровой номер детали. (Этот номер уникален и мог бы служить первичным ключом. Однако, поскольку он может содержать не только цифры, но и буквы, он не подходит для использования в Sphinx, который требует, чтобы у каждой индексируемой записи был уникальный 32-разрядный целочисленный ключ.)
  • Текстовое описание.
  • Цена.

Спецификация таблицы Inventory показана в листинге 3.

Листинг 3. Таблица Inventory

Фрагмент перечня деталей может выглядеть следующим образом

Таблица Schematic

Таблица Schematic связывает детали с узлами и моделями. Например, таблицу Schematic можно использовать для поиска всех деталей, составляющих двигатель кабриолета J Class 1979 года. В каждой строке таблицы Schematic содержится уникальный ID, внешний ключ к строке таблицы Inventory, внешний ключ, который идентифицирует узел, и еще один ключ, указывающий на определенную модель и модификацию из таблицы Model. Строки показаны в листинге 4.

Листинг 4. Таблица Schematic

Чтобы понять цель таблицы, посмотрите на небольшой список строк из Schematic:

Поиск по таблицам

При такой структуре таблиц можно легко ответить на множество поисковых запросов:

  • Вывести все модификации определенной модели
  • Показать все узлы, необходимые для сборки определенной модели и модификации
  • Показать все детали, входящие в конкретный узел определенной модели и модификации

Однако некоторые типы запросов будут особенно затратны по времени:

  • Найти все вхождения деталей в любой модели и модификации, номера которых начинаются с «WIN»
  • Найти детали, в описании которых указано «lacquer» (покрыто лаком) или «paint» (окрашено)
  • Найти все детали, в описании которых указано «black leather» (черная кожа)
  • Найти все детали J Series 2002 года со словом «paint» (окрашено) в описании

Чтобы выполнить поиск такого вида, нужно делать громоздкие запросы с множеством JOIN или с ресурсоемкими операторами LIKE , особенно в случаях, когда таблицы Inventory и Schematic очень большие. Более того, сложный текстовый поиск вообще лежит за пределами возможностей MySQL. Если нужен поиск в больших объемах текстовых данных, стоит подумать о создании и использовании индекса Sphinx.

Интеграция программного обеспечения Sphinx

Чтобы решить проблему с помощью Sphinx, нужно определить один или несколько источников данных и один или несколько индексов.

Источник (source) определяет базу данных, которую нужно индексировать, предоставляет информацию для аутентификации и указывает запросы, которые нужно использовать для формирования каждой из строк. При желании источник может определять один или несколько столбцов как фильтры, или, как это называется в Sphinx, группы (group). Группы используются для фильтрации результатов. Например, по слову «paint» может выдаваться 900 совпадений. Если вас интересуют совпадения только для определенной модели, вы можете отфильтровать результат по группе model.

Для индекса (index) необходимо, чтобы был определен источник (то есть множество строк) и способ классификации данных, извлеченных из этого источника.

Источник(и) и индекс(ы) определяются в файле sphinx.conf. Источником для сайта Body Parts является база данных MySQL. В листинге 5 показана часть определения источника под названием catalog — фрагмент показывает, к какой базе данных подключаться и как выполнять соединение (сервер, сокет, пользователь и пароль).

Листинг 5. Настройки доступа к базе данных MySQL

Теперь необходимо создать запрос, который будет возвращать строки, подлежащие индексации. Обычно, чтобы получить строку, вы создаете запрос SELECT , возможно, соединяя множество таблиц с помощью JOIN . Здесь, однако, имеется проблема: Для поиска модели и года выпуска необходимо использовать таблицу Assembly, а номер детали и ее описание можно найти только в таблице Inventory. Для выполнения своих функций Sphinx необходима возможность связать результат с 32-разрядным целочисленным первичным ключом.

Для получения данных в нужной форме создадим представление (view)— — новую конструкцию, реализованную в MySQL V5, которая собирает колонки из различных таблиц в единую сборную виртуальную таблицу. При работе с представлениями все данные, необходимые для любого вида поиска, находятся в одном месте, даже в том случае, если фактические данные располагаются в других таблицах. В листинге 6 показан SQL-запрос, определяющий представление Catalog.

Листинг 6. Представление Catalog собирает данные в виртуальную таблицу

Если вы создали базу данных body_parts с показанными ранее таблицами и данными, представление Catalog будет иметь примерно следующий вид:

Поле id представления указывает на запись детали в таблице Inventory. Столбцы partno и description содержат собственно текст для поиска, а столбцы assembly и model служат группами для дальнейшей фильтрации результатов. При наличии такого представления поисковые запросы создаются моментально. В листинге 7 показана оставшаяся часть определения источника данных catalog.

Листинг 7. Запрос на создание строк для индексации

В запрос sql_query должен входить первичный ключ, который вы хотите использовать в последующем для поиска, а также все поля, которые вы желаете индексировать и использовать в качестве групп. Две записи sql_group_column объявляют, что для фильтрации результатов могут использоваться поля Assembly и Model. Для поиска нужных записей в поисковой утилите используется sql_query_info . В запросе $id заменяется каждым первичным ключом, возвращенным searchd.

Последним действием по настройке является построение индекса. В листинге 8 показан индекс для источника данных catalog.

Листинг 8. Описание одного из возможных индексов для источника catalog

В строке 1 дается ссылка на именованный источник данных в файле sphinx.conf. Во второй строке определяется, где хранить индексированные данные; по умолчанию индексы Sphinx хранятся в /var/data/sphinx. В строке 3 указывается на необходимость использования английского морфологического словаря. Строки 5-7 говорят индексатору о том, что необходимо индексировать только слова, состоящие из трех символов и более, и включать в индекс инфиксов все подстроки, содержащие три символов и более. (Для простоты в листинге 9 показан весь файл sphinx.conf для сайта Body Parts.)

Листинг 9. Пример sphinx.conf для Body Parts

В расположенном в конце файла разделе searchd выполняется настройка демона searchd. Записи этого раздела говорят сами за себя. Особенно полезен параметр query.log (журнал запросов): В него заносятся все запущенные поисковые запросы, а также результаты их выполнения, например, количество документов, по которым производился поиск, и количество совпадений.

Мастер Йода рекомендует:  Настраиваем столбцы в панели администрирования WordPress

Создание и проверка индекса

Теперь мы готовы сформировать индекс для приложения Body Parts. Для этого:

  1. Создадим иерархию каталогов /var/data/sphinx, выполнив: $ sudo mkdir -p /var/data/sphinx
  2. Предполагая, что MySQL работает, запустите индексатор, выполнив приведенный ниже код.

Листинг 10. Создание индексов
Листинг 11. Проверка индекса с помощью search

Первая команда, /usr/local/bin/search —config /usr/local/etc/sphinx.conf ENG , находит два упоминания ENG в номерах деталей. Вторая команда, /usr/local/bin/search —config /usr/local/etc/sphinx.conf wind , находит подстроку wind в двух описаниях деталей. А третья команда ограничивает результат только теми записями, в которых model равно 3 .


Написание кода

Теперь, наконец, вы можете приступать к написанию кода PHP для вызова поисковой системы Sphinx. API-интерфейс Sphinx для PHP невелик и очень прост в освоении. В листинге 12 показано небольшое приложение PHP, которое вызывает searchd и извлекает те же результаты, что и последняя команда, показанная выше («найти все детали, в названии которых есть слово ‘cylinder’, принадлежащие модели 3»).

Листинг 12. Вызов поисковой системы из PHP

Для проверки кода создайте директорию log для Sphinx, запустите searchd, после чего запустите приложение PHP, как показано ниже.

Листинг 13. Приложение PHP

Результатом будет 9: правильный первичный ключ единственной строки, удовлетворяющей запросу. Если Sphinx находит совпадение, в ассоциативный массив $result записывается элемент results . Посмотрите на результат работы print_r() и посмотрите, что ещё выводится.

Одно замечание: total_found это общее количество совпадений, найденных в индексе, а found это количество выведенных результатов. Эти две величины могут различаться, поскольку вы можете изменять число результатов, выводимых при каждом запуске, а также то, какие результаты возвращать, что удобно для постраничного вывода длинных списков результатов. Обратите внимание на вызов API SetLimits() . Одним из способов организации постраничного вывода является вызов поисковой системы со следующими параметрами: $cl->SetLimits( ( $page — 1 ) * SPAN, SPAN ) для выдачи первой, второй, третьей (и т.д.) группы результатов SPAN , в зависимости от того, какую страницу вы хотите вывести.

Исследуйте тайны Сфинкса

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

Внимательно ознакомьтесь с примером файла конфигурации Sphinx, /usr/local/etc/sphinx.conf.dist, который входит в комплект поставки. Комментарии, приведенные в этом файле, объясняют, что делает тот или иной параметр Sphinx; показывают, как создать распределенную конфигурацию с резервированием; а также объясняют, как наследовать параметры базы данных, чтобы избежать повторения в источниках и индексах. Файл README Sphinx также является великолепным источником информации, в том числе о том, как встраивать Sphinx непосредственно в MySQL V5 — без демонов.

В следующий раз мы попробуем найти лучшее решение для отладки кода PHP, чем echo() и print_r() .

Ресурсы для скачивания

Похожие темы

  • Оригинал статьи Build a custom search engine with PHP (EN).
  • Sphinx (EN) это бесплатная поисковая система с открытым исходным кодом, предназначенная для выполнения исключительно быстрого текстового поиска.
  • Познакомьтесь с Endeca и другими крупными коммерческими поисковыми продуктами, или попробуйте Lucene.(EN)
  • PHP.net является центральным ресурсом для PHP-разработчиков.(EN)
  • Познакомьтесь с «Рекомендованным списком литературы по PHP (EN).»
  • Расширьте ваши навыки в PHP, ознакомившись с ресурсами проекта PHP IBM developerWorks.(EN)
  • Прослушать интересные интервью и беседы разработчиков программного обеспечения можно в подкастах developerWorks.(EN)
  • Работаете с базами данных на PHP? Познакомьтесь с Zend Core for IBM, готовой, прозрачной и простой в установке среде разработки и внедрения PHP, которая поддерживает IBM DB2 V9.(EN)
  • Ищете базу данных для работы с вашим приложением PHP? Загрузите IBM DB2 Express-C 9, бесплатную версию сервера данных DB2 Express V9.(EN)
  • Посетите Раздел Open Source сайта developerWorks и найдите множество инструкций, инструментов, а также новостей проектов, которые помогут вам разрабатывать приложения с открытым исходным кодом и использовать их вместе с продуктами IBM.
  • Дополните ваш следующий проект разработки программного обеспечения с открытым исходным кодом ознакомительными версиями программного обеспечения IBM, которые можно скачать из Интернета или заказать на DVD.(EN)
  • Загрузите ознакомительные версии продуктов IBM и поработайте с инструментами для разработки приложений и системным программным обеспечением DB2®, Lotus®, Rational®, Tivoli® и WebSphere®.(EN)

Комментарии

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

Строим свою CMS на PHP и MySQL. Часть 1

Задача построения системы управления содержанием (CMS) может привести в замешательство новичка разработчика PHP. Но не так страшен черт, как его малюют! В данной серии уроков мы построим простую, но полностью работоспособную систему с нуля.

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

Вы можете посмотреть работу готового приложения на странице демонстрации (с целью безопасности включен режим «только чтение», так что добавлять, изменять и удалять статьи не получится). Также можно скачать полный код PHP нашей меленькой CMS с переведенными комментариями.

Примечание: для изучения материалов уроков потребуется веб сервер Apache с установленным модулем PHP и сервер MySQL. Для работы на локальном компьютере можно воспользоваться одним из инструментов веб разработчика: XAMPP (на английском языке), Denwer, Open server или другим.

Функционал нашей CMS

Первым делом надо точно определиться, что будет делать наша CMS. Итак, вот список функций:

  • Главная страница, на которой выводиться список последних 5 статей
  • Страница со списком всех статей
  • Страница просмотра отдельной статьи
  • Вход/выход для администратора
  • Список всех статей
  • Добавление новой статьи
  • Редактирование существующей статьи
  • Удаление существующей статьи

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

Планирование работ

Для создания нашей CMS нужно сделать следующие шаги

  1. Создать базу данных
  2. Создать таблицу articles
  3. Сделать файл конфигурации
  4. Построить класс Article
  5. Написать скрипт клиентской части index.php
  6. Написать скрипт серверной части admin.php
  7. Создать шаблон клиентской части
  8. Создать шаблон серверной части
  9. Создать таблицу стилей и логотип системы

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

Шаг 1. Создаем базу данных

На первом шаге нужно создать базу данных MySQL для хранения содержания. Можно сделать так:

Запускаем программу клиент mysql Открываем окно терминала и набираем команду

mysql -u username -p

После запроса введите пароль для доступа к MySQL.

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

Создаем базу данных После метки mysql> вводим:

create database cms;

И нажимаем Enter.

Выходим из программы клиента mysql После метки mysql> вводим:

И нажимаем Enter.

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

Для решения такой задачи также можно воспользоваться инструментами для администрирования баз данных, таким как phpMyAdmin, cPanel или Plesk (если они установлены на вашем сервере). В некоторых случаях использование подобных инструментов является единственным доступным для пользователя инструментом для работы с базами данных (ситуация зависит от правил, установленных на вашем хостинге).

Шаг 2. Создаем таблицу articles

Наша простая CMS имеет единственную таблицу в базе данных: articles . В ней содержатся все статьи в нашей системе.

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

Создаем текстовой файл tables.sql на жестком диске и добавляем в него следующий код:

Выше приведенный код определяет схему таблицы articles . Он написан на SQL, языке для создания и манипулирования базами данных в MySQL (и во многих других системах).

Разберем выше приведенный код

  1. Создаем таблицу articles Выражение DROP TABLE IF EXISTS articles удаляет любую существующую таблицу articles (вместе с данным — осторожно!). Мы выполняем данную операцию чтобы в базе не было двух таблиц с одинаковыми именами. Выражение CREATE TABLE articles ( ) создает новую таблицу articles . Код, размещенный в скобках, определяет структуру данных в таблице.
  2. Определяем для каждой статьи уникальный ID Теперь можно определять структуру таблицы. Таблица состоит из набора полей (также их называют столбцами). Каждое поле содержит опредленный тип информации о статье. Сначала мы создаем поле id . Оно имеет тип smallint unsigned (без знаковое маленькое целое), то есть число от 0 до 65,535. Таким образом, наша CMS может содержать до 65,535 статей. Также для него определяется атрибут NOT NULL , который означает, что поле не может быть пустым (null). Данное свойство существенно облегчает труд разработчика. Добавляем атрибут auto_increment , который указывает MySQL назначать новое, уникальное значение для поля id при создании записи. Итак, первая статья будет иметь id 1, вторая — id 2, и так далее. Мы будем использовать уникальные значения как указатели на статью при выводе и редактировании в CMS.
  3. Добавляем поле publicationDate Следующая строка создает поле publicationDate , которое хранит дату публикации каждой статьи. Данное поле имеет тип date , соответствующий значениям дат.
  4. Добавляем поле title Теперь создаем поле title , в котором размещается заголовок. Оно имеет тип varchar(255) , то есть может хранить строку длиной до 255 символов.
  5. Добавляем поля summary и content Последние два поля 2, summary и content , содержат резюме статьи (краткое описание материала) и HTML содержание соответственно. Резюме имеет тип text (то есть, может состоять из 65,535). А поле content имеет тип mediumtext (то есть может содержать до 16,777,215).
  6. Добавляем основной ключ Последняя строка в выражении CREATE TABLE определяет ключ для таблицы. Ключ также называют индексом, и он служит для быстрого поиска данных в таблице за счет некоторого увеличения требующегося пространства для хранения. Мы определяем поле id как PRIMARY KEY . Каждая таблица может содержать единственный PRIMARY KEY , так как данный ключ уникально определяет каждую запись в таблице. Кроме того, с помощью данного ключа MySQL очень быстро находит нужную запись.

Теперь у нас есть схема таблицы и ее нужно загрузить в MySQL для создания структуры. Самый простой способ — открыть окно терминала, перейти к папке с файлом tables.sql и запустить следующую команду:

mysql -u username -p cms

. где username — имя пользователя MySQL, а cms — имя базы данных, которую мы создали на шаге 1.

Вводите пароль пользователя после запроса, и MySQL загрузит и выполнит код из файла tables.sql , создав таблицу articles в базе данных cms .

Также можно воспользоваться инструментами для администрирования баз данных, таким как phpMyAdmin, cPanel или Plesk (если они установлены на вашем сервере).

Шаг 3. Создаем файл конфигурации

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

Первым делом создаем папку cms в папке веб сервера. Она будет содержать все файлы нашей CMS.

В папке cms создаем файл config.php и копируем в него следующий код:

Разберем код подробно:

  1. Выводим ошибки в браузере Строка ini_set() устанавливает режим вывода сообщений об ошибках в браузере. Отличная опция для отладки кода, но на готовом проекте данную опцию надо отключить ( установить значение false ) для безопасности ресурса.
  2. Устанавливаем временную зону Так как наша CMS будет использовать функцию PHP date() , нужно указать временную зону сервера для PHP (иначе PHP будет генерировать предупреждение). В примере установлена зона «Australia/Sydney» — поменяйте на свою.
  3. Устанавливаем детали доступа к базе данных Затем определяем константу DB_DSN , которая указывает PHP, где искать базу данных MySQL. Параметр dbname должен соответствовать имени базы данных нашей CMS ( cms ). Также мы будем хранить имя пользователя MySQL и пароль, которые используются для доступа к базе данных CMS в константах DB_USERNAME и DB_PASSWORD . Установите правильные значения в данных константах, которые соответствуют вашим настройкам.
  4. Устанавливаем пути Мы устанавливаем 2 пути в нашем файле конфигураций: CLASS_PATH , который указывает на место хранения файлов классов, и TEMPLATE_PATH , который указывает на место хранения шаблонов HTML. Оба пути указываются относительно верхнего каталога cms .
  5. Устанавливаем количество статей, выводимых на главной странице HOMEPAGE_NUM_ARTICLES управляет максимальным количеством заголовков статей, которые выводятся на главной странице. Мы установили 5, но можно легко увеличить или уменьшить значение.
  6. Устанавливаем имя и пароль администратора Константы ADMIN_USERNAME и ADMIN_PASSWORD содержат данные регистрации для администратора нашей CMS.
  7. Включаем класс Article Так как файл класса Article (мы его создадим позже) требуется во всех скриптах нашего приложения, добавим его здесь.
  8. Создаем обработчик исключительных ситуаций В завершение определяем handleException() — простую функцию для обработки исключений PHP, которые могут генерироваться при выполнении кода. Данная функция выводит общее сообщение об ошибке и записывает данные об ошибке в журнал веб сервера. Такая функция способствует улучшению безопасности системы за счет обработки исключений PDO, которые могут выводить имя пользователя и пароль на странице. После определения функции handleException() , мы устанавливаем ее как обработчик исключений PHP, вызывая функцию set_exception_handler() .

Такой обработчик исключений сделан для упрощения материалов урока. «Правильный» способ для обработки исключений для перехвата всех вызовов PDO в Article.php заключается в использовании блоков try . catch .

Замечание о безопасности

В реальных проектах лучше помещать config.php где-нибудь за пределами корневого каталога веб сайта, так как в файле содержатся имена и пароли. Обычно код PHP невозможно просмотреть в браузере, но иногда из-за неправильной конфигурации веб сервера код становится доступным. Вы можете использовать функцию hash() для хэширования паролей и хранить в config.php хэши, вместо текстовых паролей. Затем при регистрации пользователя можно опять воспользоваться функцией hash() для кодирования введенного пароля и сравнения результата с сохраненным в config.php хэшем.

В следующем уроке мы построим основной класс нашего приложения — Article.

Поиск по MySQL и вывод ссыльно на php

Есть БД, подключаюсь к ней, делаю запрос по данным введенным в форму поиска, обрабатываю, и печатаю его.
БД: id, Организация,Наименование,Характеристики,Контакты, Цены.
но есть вопросы:
1) как сделать корректное отображение результат по столбцам при выводе информации из БД? (так же, что бы выводился результат, но печатались только три столбца (это:№ п/п,Организация,Наименование техники,Цены)
2) как сделать каждый найденный результат ссылкой ( что бы в дальнейшем при клике на ссылку, открывалась отдельная страница в которой добавлялись к выводу остальные столбцы такие как: описание(характеристики, контакты +фото)

Код намучал вот такой: (дальше запутался, и не знаю как писать)

05.01.2012, 16:33

PHP и MySQL. Поиск
Есть страница на которой пользователь может задать свои собственные параметры поиска (мин.цена.

PHP поиск в MySQL
У меня вот такой код поиска по БД MySQL.Русские названи отображает вот так. Как.

Как разработать PHP скрипт поиска для своего сайта

Дата публикации: 2020-09-14

От автора: PHP скрипт поиска является неотъемлемой частью современного ресурса. Но для начинающих разработчиков его реализация может стать «краеугольным камнем». Сегодня я постараюсь объяснить построение такого модуля как можно проще, чтобы его код не испугал вас своей чрезмерной сложностью.

Ищем на PHP

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

Чаще всего для написания скрипта поиска по сайту на PHP используется связка данного программного языка с MySQL. Для реализации интерактивной поисковой системы применяется технология AJAX. Но сегодня мы не будем «петлять» в таких дебрях, и остановимся на классическом варианте.

Я приведу самый простой пример поиска. В нем не будет проверок наличия соединения с СУБД, проверки результатов возвращаемой выборки и т.д. Все эти тонкости вы сможете добавить самостоятельно. Цель материала – дать общее представление о построении внутренней системы поиска на современном интернет-ресурсе. Поехали!

Для начала приведу код формы для ввода поискового запроса. Это простая разметка, даже без малейших стилевых «изысков».

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Поиск на сайте своими руками

Наверное, многие когда-нибудь задумывались, как сделать поиск на сайте? Безусловно, для крупных сайтов с большим количеством контента поиск является просто незаменимой вещью. В большинстве случаев пользователь, впервые посетив Ваш сайт в поисках чего-либо важного, не станет разбираться в навигационных панелях, выпадающих меню и прочих элементах навигации, а в спешке попытается найти что-нибудь похожее на поисковую строку. И если такой роскоши на сайте не окажется, либо он не справится с поисковым запросом, то посетитель просто закроет вкладку. Но статья не о значении поиска для сайта и не о психологии посетителей. Я расскажу, как реализовать небольшой алгоритм полнотекстового поиска, который, надеюсь, избавит начинающих разработчиков от головной боли.

У читателя может возникнуть вопрос: зачем писать все с нуля, если все уже давно написано? Да, у крупных поисковиков есть API, есть такие клевые проекты, как Sphinx и Apache Solr. Но у каждого из этих решений есть свои преимущества и недостатки. Пользуясь услугами поисковиков, типа Google и Яндекс, Вы получите множество плюшек, таких как мощный морфологический анализ, исправление опечаток и ошибок в запросе, распознавание неверной раскладки клавиатуры, однако без ложки дегтя тут не обойдется. Во первых, такой поиск не интегрируется в структуру сайта — он внешний, и Вы не сможете указать ему, какие данные наиболее важны, а какие не очень. Во вторых, содержимое сайта индексируется только с определенным интервалом, который зависит от выбранного поисковика, так что если на сайте что-нибудь обновится, придется дожидаться момента, когда эти изменения попадут в индекс и станут доступными в поиске. У Sphinx и Apache Solr дела с интеграцией и индексированием гораздо лучше, но не каждый хостинг позволит из запустить.

Ничто не мешает написать поисковый механизм самостоятельно. Предполагается, что сайт работает на PHP в связке с каким-нибудь сервером баз данных, например MySQL. Давайте сначала определимся, что требуется от поиска на сайте?

  • Поиск с учетом языковой морфологии. Не зависимо от падежа, окончания и
    других прелестей великого и могучего языка поиск должен находить то, что нужно
    пользователю. Другими словами, «яблок», «яблока», «яблоки» — это формы одного и того
    же слова «яблоко», что нужно учитывать в поисковом алгоритме. Одним из способов
    достижения данной цели является приведение каждого слова поискового запроса и слов
    содержимого сайта к базовой форме.
  • Возможность указать контекст поиска. То есть, возможность самостоятельно выбрать
    контент сайта, в пределах которого будет работать поисковый алгоритм, а также определить
    значимость для каждого из пределов. Например, рассмотрим интернет-магазин. Предполагается,
    что поисковый запрос чаще всего будет содержать название искомой продукции, поэтому поиск по
    названиям товара будет иметь наивысший приоритет. В качестве следующего приоритета можно
    выбрать поиск по свойствам товаров, затем поиск по описанию.
  • Индексирование содержимого сайта. Представьте ситуацию: одновременно около 30 человек
    выполняют поисковые запросы. Сервер принимает каждое соединение, управление потоком
    передается интерпретатору PHP. При каждом запросе заново инициализируется поисковый
    движок, заново перерывается содержимое сайта… Сложно сказать, сколько времени и
    ресурсов потребуется, чтобы обработать все эти запросы. Именно для того, чтобы не
    делать одну и ту же работу по сто раз, была придумана технология индексирования.
    Индексирование выполняется только при изменении или добавлении содержимого сайта,
    а поиск выполняется уже по индексу, а не по содержимому.
  • Механизм ранжирования. Ранжирование результатов поиска — это сортировка результатов поиска, выполняемая на основе оценки значимости найденных данных. Например, в каком-нибудь блоге выполняется поисковый запрос «космос». Данное слово содержится в двух статьях: в первой 16 раз, во второй — 5 раз. Вероятнее всего, первая статья будет иметь большее значение для инициатора поиска. Также каждой разновидности содержимого сайта при индексировании задается определенный коэффициент, который будет влиять на его позиции в поисковой выдаче.

Теперь пару слов о том, что нам предстоит реализовать:

  • морфологический анализатор,
  • алгоритм ранжирования,
  • алгоритм индексирования,
  • алгоритм поиска.

В конце статьи будет показан пример реализации поиска на примере простого интернет-магазина. Тем, кому лень все это изучать и просто нужен готовый поисковик, можно смело забирать движок из репозитория GitHub FireWind.

Принцип работы

Со стороны бэкенда поиск работает так:

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

Подготовка

Задача поставлена, теперь можно перейти к делу. Я использую Linux в качестве рабочей ОС, однако постараюсь не использовать ее экзотических возможностей, чтобы любители Windows смогли «собрать» поисковый движок по аналогии. Все, что Вам нужно — это знание основ PHP и умение обращаться с MySQL. Поехали!

Наш проект будет состоять из ядра, где будут собраны все жизненно необходимые функции, а также модуля морфологического анализа и обработки текста. Для начала создадим корневую папку проекта firewind, а в ней создадим файл core.php — он и будет ядром.

Теперь вооружаемся своим любимым текстовым редактором и подготавливаем каркас:

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

Морфологический анализатор

Русский язык — довольно сложная штука, которая радует своим разнообразием и шокирует иностранцев конструкциями, типа «да нет, наверное». Научить машину понимать его, да и любой другой язык, — довольно непростая задача. Наиболее успешны в этом плане поисковые компании, типа Google и Яндекс, которые постоянно улучшают свои алгоритмы и держат их в секрете. Придется нам сделать что-то свое, попроще. К счастью, колесо изобретать не придется — все уже сделано за нас. Встречайте, phpMorphy — морфологический анализатор, поддерживающий русский, английский и немецкий языки. Более подробную информацию можно получить тут, однако нас интересуют только две его возможности: лемматизация, то есть получение базовой формы слова, и получение грамматической информации о слове (род, число, падеж, часть речи и т.д.).

Нужна библиотека и словарь для нее. Все это добро можно найти тут. Библиотека находится в одноименной папке «phpmorphy», словари расположены в «phpmorphy-dictionaries». Скачиваем последние версии в корневую папку проекта и распаковываем:

Отлично! Библиотека готова к использованию. Пришло время написать «оболочку», которая абстрагирует работу с phpMorphy. Для этого создадим еще один файл morphyus.php в корневой директории:

Пока реализовано только два метода. get_words разбивает текст на массив слов, фильтруя при этом HTML-теги и сущности типа » «. Метод lemmatize возвращает массив лемм слова, либо false, если таковых не нашлось.

Механизм ранжирования на уровне морфологии

Давайте остановимся на такой единице языка, как предложение. Наиболее важной частью предложения является основа в виде подлежащего и/или сказуемого. Чаще всего подлежащее выражается существительным, а сказуемое глаголом. Второстепенные члены в основном употребляются для уточнения смысла основы. В разных предложениях одни и те же части речи порой имеют совершенно разное значение, и наиболее точно оценить это значение в контексте текста сегодня может только человек. Однако программно оценить значение какого-либо слова все-таки можно, хоть и не так точно. При этом алгоритм ранжирования должен опираться на так называемый профиль текста, который определяется его автором. Профиль представляет из себя ассоциативный массив, ключами которого являются части речи, а значениями соответственно ранг (или вес) каждой из них. Пример профиля я покажу в заключении, а пока попробуем перевести эти размышления на язык PHP, добавив еще один метод к классу morphyus:

Индексирование содержимого сайта

Как уже говорилось выше, индексирование заметно ускоряет выполнение поискового запроса, так как поисковому движку не нужно обрабатывать контент каждый раз заново — поиск выполняется по индексу. Но что же все-таки происходит при индексировании? Если по порядку, то:

  • Сначала из текста формируется массив слов, и делается это с помощью метода get_words.
  • Согласно профилю, из текста отбрасываются незначимые части речи.
  • Значимые оцениваются по пятибальной шкале, с помощью метода weigh.
  • Для каждого сова выполняется поиск лемм, иначе говоря базовых форм.
  • Рассчитывается количество повторений каждого слова и суммарный ранг.
  • Все данные записываются в объект и в виде JSON записываются в базу данных.

В результате получается объект следующего формата:

Пишем инициализатор и первый метод ядра поискового движка:

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

Хранение индексированных данных

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

Нерешенным остался лишь вопрос формата индексированного содержимого, ведь make_index возвращает объект, и так просто в базу данных или файл его не запишешь. Можно использовать JSON и хранить его в полях типа LONGTEXT, можно BSON или CBOR, используя тип данных LONGBLOB. Два последних формата позволяют представлять данные в более компактном виде, чем первый.

Как говорится, «хозяин — барин», так-что решать, где и как все будет храниться, Вам.

Benchmark

Давайте проверим, что у нас получилось. Я взял текст своей любимой статьи «Темная материя интернета», а именно содержимое узла #content html_format и сохранил его в отдельный файл.

На моей машине с конфигурацией:
CPU: Intel Core i7-4510U @ 2.00GHz, 4M Cache
RAM: 2×4096 Mb
OS: Ubuntu 14.04.1 LTS, x64
PHP: 5.5.9-1ubuntu4.5

Индексирование заняло около секунды:

Думаю, вполне неплохой результат.

Реализация поиска

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

Все! Поисковый движок готов к использованию. Но есть одно но… На самом деле это не джин-волшебник, и просто закинув его на свой сайт Вы не получите ничего. Его нужно интегрировать, причем этот процесс во многом зависит от архитектуры Вашего сайта. Рассмотрим этот процесс на примере небольшого интернет магазина.

Реализация поиска на примере интернет-магазина

Допустим, информация о продаваемой продукции хранится в таблице production:

А описание в таблице description:

Поле production.keywords будет содержать индекс ключевых слов продукта, description.index будет содержать индексированное описание. И все это будут храниться в формате JSON.

Вот пример функции добавления нового продукта:

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

Данный сценарий принимает поисковый запрос в виде GET-параметра query и выполняет поиск. В результате выводятся найденные продукты магазина.

Заключение


В статье был описан один из вариантов реализации поиска для сайта. Это самая первая его версия, поэтому буду только рад узнать Ваши замечания, мнения и пожелания. Присоединяйтесь к моему проекту на Github: https://github.com/axilirator/firewind. В планах добавить туда еще кучу всяких возможностей, вроде кэширования поисковых запросов, подсказок при вводе поискового запроса и алгоритма побуквенного сравнения, который поможет бороться с опечатками.

Всем спасибо за внимание, ну и с днем информационной безопасности!

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Хотите научиться создавать профессиональные движки на PHP и MySQL с применением ООП и паттерна MVC?

Здравствуйте! Меня зовут Михаил Русаков. Я уже много лет занимаюсь программированием, а последние несколько лет созданием сайтов. Я создаю самостоятельно и все свои сайты, и ещё делаю сайты на заказ. И последние несколько лет занимаюсь разработкой движков, причём для каждого сайта создаю отдельный движок.

Когда-то давно я создавал сайты на Joomla, но достаточно быстро разочаровался в этой системе по следующим причинам:

1-я причина

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

2-я причина

Безопасность . «Стандартный движок взламывается стандартно» — запомните эту фразу. Причина постоянных взломов – не криворукость программистов, а открытость исходного кода и популярность. Чем популярнее движок, тем больше инструкций в Интернете по его взлому. Причём инструкции эти настолько просты, что по ним сможет взломать Ваш сайт любой школьник. Как следствие, будут постоянные взломы, а Вы будете регулярно восстанавливать сайт из бэкапа и ждать новых обновлений. Когда несколько лет назад мой сайт был на Joomla, его взламывали стабильно раз в неделю и загружали вирусы. При этом его посещаемость тогда была от силы 100-150 человек в сутки. Более того, мои коллеги мне рассказывали, что даже сайты с нулевой посещаемостью так же взламывают. Скорее всего, это уже роботы, которые лазят по Интернету, находят сайты на готовых движках, взламывают их и загружают свои вирусы на них. То есть даже не люди уже взламывают сайты, а готовые программы. Поэтому если Вы попали в поисковую систему, значит, Ваш сайт уже под угрозой, и не важно, какая у него посещаемость.

3-я причина

Поисковая оптимизация . Менее значимый фактор, но он тоже имеет место быть. Сейчас создаются ежедневно тысячи сайтов, и это только в Рунете. В этой огромной конкуренции крайне трудно поисковикам выделить качественные сайты. Поэтому существуют сотни факторов, влияющих на выдачу. И огромное количество факторов отвечает за внутреннюю оптимизацию: насколько чистый код HTML+CSS, насколько много там «скрытых» элементов, насколько много вообще кода и насколько быстро грузится страница. Но также у поисковиков одно из лидирующих мест занимает движок, на котором сделан сайт. Почему это так важно для них?

Всё очень просто. Допустим, перед Вами поставили задачу: есть 2 водителя и нужно определить, кто из них с большей вероятностью разобьёт свою машину. Один водитель копил на неё 10 лет, усердно и долго работал, а другому подарили на 18 лет. Я думаю, что каждый из Вас предположит, что тот, кто долго копил и вложил много труда с большей ответственностью будет относиться к своему автомобилю, чем тот, кому она досталась нахаляву. Отсюда и вероятность того, что человек, копивший на автомобиль 10 лет, с меньшей вероятностью её разобьёт, чем тот, кто её получил сразу и без труда. Безусловно, это не является обязательным, но это вероятность. Если взять не двух водителей, а 100 000 хотя бы, то статистика уже будет явной.

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

А теперь пройдёмся по тем же моментам и поймём, чем же лучше сайт на своём собственном движке?

1-я причина

Функционал сайта зависит только от Вас . Вам ни что не мешает создать что-то новое на сайте или изменить что-то старое.

2-я причина

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

3-я причина

Улучшенная поисковая оптимизация . Помимо того, что тут Ваш движок, а это уже плюс, Вы ещё не будете создавать лишний функционал, который всегда имеет место на готовых движках. Поскольку не будет прокруток «лишнего кода», Ваш сайт будет грузиться заметно быстрее, что крайне положительно скажется всё на той же поисковой оптимизации. Так как до сих пор скорость загрузки страниц является одним из важнейших факторов, особенно в регионах с плохим Интернетом. Когда мой сайт был на Joomla, движок выводил страницу примерно в 7 раз медленнее, чем сейчас с моим движком.

Но если сайт на собственном движке лучше, чем на готовом, то почему же так много сайтов на готовых движках?

Самая главная причина: создавать свой движок – задача не из лёгких. Пожалуй, это единственная причина. И многие, взвешивая все за и против, выбирают готовый движок. Многие не знают, что движок – это плохая идея. Многие просто не понимают, зачем создавать что-то своё, если уже есть готовое? И лишь немногие могут трезво оценивать плюсы и минусы, и они, в большинстве случаев, создают сайт на своём движке (либо самостоятельно, либо на заказ).

Неужели готовые движки – это такое зло?

Нет, конечно. Простой пример: Вам нужно сделать какой-нибудь сайт для школы или института (за зачёт, например). Зачем тратить кучу времени и сил, когда можно просто использовать готовый движок.

Или, например, Вы хотите просто вести свой блог. Вам не нужна какая-то мега-посещаемость из поисковых систем, никакой чудо-функционал Вам так же не потребуется, а для безопаности Вы будете регулярно обновлять движок. Так зачем создавать что-то своё? Гораздо разумнее в данном случае будет взять тот же WordPress.

И это не единственные примеры, когда готовые движки – оптимальный выбор.

А когда стоит использовать свой движок?

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

Для любых коммерческих сайтов. Во-первых, это связано с посещаемостью из поисковых систем, где каждый посетитель на вес золота. Во-вторых, требуется сложная функциональность по аналитике. Причём для разных бизнесов, даже из одной отрасли, может требоваться особая аналитика, которая будет нужна только Вам и никому другому. Например, на сайте 2 кнопки «Заказать». И Вам потребовалось узнать, по какой из них кликают чаще, и чтобы эти данные записывались в базу данных или хотя бы в файл. Попробуйте, найдите такой готовый скрипт и подключить. Даже если он вдруг и найдётся, то, скорее всего, подключить его будет – целая история. А самому написать его – дело 1-го часа. И это только аналитика, а ведь есть ещё и масса других задач, которые так же уникальны для каждого бизнеса, поэтому найти готовый вариант – не получится.

Если Вам процесс программирования интересен. В этом случае, даже там, где можно было бы создавать сайт на готовом движке, лучше сделать на своём. Так как знания, в любом случае, напрасными не будут. Ведь если Вы будете знать PHP и MySQL, и уметь создавать свои движки, то Вам не составит труда создать какое-нибудь расширение для той же Joomla. А это очень часто просят сделать заказчики, и мало, кто это умеет делать.

Хорошо, сайт на своём движке лучше, но как его создать?

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

  1. Бесконечно сильно устаревший код, который при запуске выдаст кучу ошибок.
  2. Процедурный стиль программирования, который для сложных систем – абсолютно не разумен.
  3. Какие-то абстрактные простейшие примеры, не имеющие ничего общего с тем сложным, что должно быть.
  4. Откровенно убогий код. Где использовались миллионы echo, тогда как в реальности оно должно быть использовано только 1 раз. Данный код подходит для небольших скриптов и сайтов, но совершенно не приемлем для более-менее сложных проектов.
  5. Использование готовых фреймворков. Использование фреймворка – это что-то по типу готового движка, но только в мире программирования. По сути с теми же минусами, но только в значительно меньшей степени, поэтому, в целом, их использование я одобряю. Однако, в идеале – их лучше не использовать. Но вернёмся к этому типу источника. Стоит отметить, что он достаточно бесполезен, поскольку разработка на фреймворке заметно отличается от разработки движка без него. Но многие идеи я как раз почерпнул из этих источников.

Собственно, всё. Больше я так ничего полезного и не нашёл. Дальше я стал сам думать, анализировать те же готовые движки, и, главное, создавать всё новые и новые движки для самых разных сайтов. Каждый раз улучшая свой подход к созданию движка. И не так давно я достиг некого финала, когда уже каждый последующий движок я создаю по единому алгоритму, практически ничего не меняя. Это позволило мне сделать вывод, что я достиг определённого уровня, когда уже настолько всё хорошо, что менять особо и нечего. Я решил, что надо поделиться этими знаниями с другими, ведь не каждый сможет, как я, искать решение много лет.

Какие особенности у хорошего движка?

Чёткая структура самого движка, где каждый объект отвечает сам за себя. Это крайне важно, иначе путаницы не избежать.

Использование паттернов (шаблонов проектирования). Фактически, это готовые решения красивого кода, поэтому их обязательно надо использовать при разработке крупного проекта.

Лёгкая изменяемость. То есть чтобы добавить новый функционал, не нужно лезть в десятки файлов и везде что-то исправлять.

Переносимость. Некая часть, так называемое «ядро», которое переносится от одного сайта к другому без единого изменения.

Безопасность. Она должна быть на достаточно высоком уровне, чтобы хотя бы хакеры средней руки ничего не могли сделать.

Быстродействие. Очень важный момент, который зачастую противоречит лёгкой изменяемости и переносимости. И очень важно соблюдать баланс.

Так где научиться создавать такие движки?

ПРЕДСТАВЛЯЮ ВАШЕМУ ВНИМАНИЮ СВОЙ НОВЫЙ ВИДЕОКУРС
« СОЗДАНИЕ ДВИЖКА НА PHP И MySQL 2.0 »

Часть 1. ТЕОРИЯ

Первая часть данного курса теоретическая.

Она бесконечно важна, поскольку прежде чем создавать, нужно чётко представлять, что будет в итоге создаваться. В этом разделе Вы всё увидите. Разберём подробнее каждый урок из этого раздела.

1-й урок. Как проходить курс. Здесь Вы узнаете, как наиболее эффективно проходить данный курс.

2-й урок. Общая структура движка. Важнейший урок, из которого Вы узнаете общую структуру движка, который мы будем создавать в курсе.

3-й урок. Разбор ядра. В данном уроке мы с Вами подробно разберём ядро и классы, которые будут созданы в практической части курса. Из этого видео Вы узнаете, какой класс для чего нужен и за что отвечает.

4-й урок. Разбор адаптеров. Из этого урока Вы узнаете, для чего нужны адаптеры и где они используются. А также какие адаптеры будем создавать уже мы в курсе.

5-й урок. Разбор работы с базой данных. Очень важный урок, который расскажет о новом принципе работы с базой данных. Речь здесь идёт не о классе для отправки запросов, а о гораздо большем и более сложном, но крайне важном классе. Это одна из тех, как я считаю, гениальных мыслей, которую я взял из одной англоязычной книги.

6-й урок. Разбор валидаторов. Урок, в котором будет разобран механизм проверки данных перед их отправкой в базу данных. Все нюансы Вы узнаете уже из этого урока.

7-й урок. Разбор маршрутизатора. Здесь Вы узнаете о механизме генерации страниц по запросу пользователя с использованием различных контроллеров. Что это за контроллеры, как они выглядят – всё это Вы узнаете из этого видео.

8-й урок. Разбор модульной структуры. Одна из ключевых частей моего подхода к созданию движка – это модульность. То есть каждый некий самостоятельный блок – это отдельная самодостаточная единица, имеющие свои свойства и TPL-файл для представления. Об этом подробно Вы узнаете из этого последнего урока теоретической части.

Часть 2. ПРАКТИКА (Создание MyRusakov.ru)

Особенностью практической части является создание движка для моего сайта — MyRusakov.ru. На входе у нас будет готовая вёрстка для сайта, а на выходе данной части курса мы должны получить уже полноценный сайт. Теперь перейдём к разделам данной части.

Раздел 1. ЯДРО

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

1-й урок. Создание базы данных. Здесь мы создадим все таблицы, которые нам будут нужны для создания сайта. Это не относится напрямую к ядру, но это первое, что нужно делать.

2-й урок. Создание структуры движка. Здесь Вы узнаете, какая должна быть структура файлов и папок, какие важнейшие файлы нужно создать, чтобы максимально обезопасить свой сайт.

3-й урок. Создание конфигурационного файла. В этом видео мы с Вами создадим файл настроек нашего сайта. Здесь также есть несколько рекомендаций, о которых знают немногие, но их крайне желательно соблюдать. Это так же касается безопасности и грамотности самого кода. Обо всём об этом я здесь рассказываю.

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

5-й урок. Создание класса Select. Данный класс отвечает за работу с SELECT-запросами. Эту идею я взял из Zend Framework, и она идеально подошла к моему подходу создания движка.

6-й урок. Создание класса для работы с объектами. Под объектами здесь подразумевается запись из определённой таблицы, то есть для каждой таблицы свой класс. Но в этом уроке разбирается особый принцип создания этих классов. Он резко отличается от того, что я делал ранее. И именно эту идею я взял из той англоязычной книги. Всё это Вы узнаете из этого урока.

7-й урок. Создание класса для работы с запросами. В данном видео будет создан класс для работы с POST и GET запросами. Вы узнаете важные моменты по безопасности этих запросов, которые будут учтены при разработке этого класса.

8-й урок. Создание класса для работы с URL. Важный урок по созданию класса для работы с URL-адресами. Из него Вы узнаете, что должен делать данный класс. Безусловно, всё это мы реализуем в этом видео.

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

10-й урок. Создание класса ValidatorException. При некорректности входящих данных будет выбрасываться исключение, и этот класс исключения мы сделаем в этом видео.

11-й урок. Создание шаблонизатора. В этом видео Вы увидите, как будет реализована часть по выводу данных на страницу в браузере пользователя.

12-й урок. Создание маршрутизатора. Маршрутизатор — это механизм, который будет анализировать запрос пользователя и вызывать соответствующий объект для генерации определённой страницы. Такой механизм и будет создан в данном видео.

13-й урок. Создание контроллера. Контроллеров, вообще говоря, будет много. Но в данном видео мы создадим абстрактный класс – родительский для всех остальных. Как обычно, всё с детальным разбором: что, где и зачем нужно.

14-й урок. Создание класса для модулей. В данном видеоуроке Вы увидите процесс создания абстрактного класса для модулей сайта. Если не понять, как он работает, то Вы не сможете использовать ядро для других сайтов. Поэтому данный урок очень и очень важный.

15-й урок. Создание класса FormProccessor. Этот класс отвечает за обработку данных, пришедших из форм. Если Вы уже знаете PHP, то должны были обратить внимание, что формы обрабатываются однотипно. Я максимально возможно выделил всю общую часть и вытащил в этот класс. Таким образом, Вы увидите создание того, что сэкономит в будущем огромное количество времени по обработке форм. А про уменьшение количества кода, переносимость и повышенную защиту от случайных ошибок я вообще молчу.

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

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

Раздел 2. АДАПТЕРЫ

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

1-й урок. Создание адаптера для DataBase. В этом видео будет создан адаптер для класса, отвечающего за работу с базой данных.

2-й урок. Создание адаптера для Select. В этом видео мы разберём создание адаптера для класса, отвечающего за работу с SELECT-запросами.

3-й урок. Создание адаптера для ObjectDB. Здесь будет показано расширение абстрактного класса AbstractObjectDB функционалом, который нам потребуется для MyRusakov.ru.

4-й урок. Создание адаптера для Mail. Данный урок содержит создания класса-адаптера для отправки e-mail.

5-й урок. Создание адаптера для Module. В этом уроке мы напишем адаптер для работы с модулями именно для сайта MyRusakov.ru

Раздел 3. ВАЛИДАТОРЫ

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

1-й урок. Валидатор для хэша. В данном уроке будет создан класс, отвечающий за проверку хэша.

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

3-й урок. Валидатор для даты. В данном уроке Вы увидите, как проверяется дата на корректность ввода. Здесь есть определённые нюансы, о которых Вы и узнаете.

4-й урок. Валидатор для e-mail. В этом видео мы создадим валидатор для проверки e-mail адресов, вводимых пользователями.

5-й урок. Валидатор для ID. Тоже важнейший класс, который так же необходим практически на каждом сайте с базой данных.

6-й урок. Валидатор для изображений. Здесь будет создан класс, отвечающий за проверку имён файлов с изображениями.

7-й урок. Валидатор для IP-адреса. Из этого видео Вы узнаете, как проверять на корректность IP-адреса.

8-й урок. Валидатор для логина. В данном уроке будет реализован механизм проверки логина.

9-й урок. Валидатор для описания. Урок по проверке корректности передаваемого мета-тега description.

10-й урок. Валидатор для ключевых слов. Из данного урока Вы увидите проверку ключевых слов, которые подставляются в мета-тег keywords.

11-й урок. Валидатор для имени. Здесь Вы увидите, как правильно проверять на корректность имена пользователей.

12-й урок. Валидатор для пароля. В этом уроке будет создан валидатор для проверки пароля. В том числе, будет учитываться и его сложность.

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

14-й урок. Валидатор для небольшого текста. Текст статьи и текст комментария – разные вещи. Нельзя позволять пользователям отправлять большие объёмы данных, иначе они начнут этим умышленно злоупотреблять. Поэтому создаётся отдельный валидатор именно для небольшого объёма текста.

15-й урок. Валидатор для заголовков. Различные заголовки тех же статей так же нуждаются в проверке, и в этом видео будет создан валидатор для их проверки.

16-й урок. Валидатор для URI. Данный урок посвящён проверке URI-адресов.

17-й урок. Валидатор для URL. В этом видео Вы увидите создание валидатора для проверки на корректность URL-адресов.

Раздел 4. ОБЪЕКТЫ

В данном разделе Вы увидите, как создаются классы для самых различных объектов из базы данных.

1-й урок. Создание класса для статей. В этом видео будет создан класс для объекта «Статья».

2-й урок. Создание класса для разделов. Здесь Вы увидите создание класса для разделов.

3-й урок. Создание класса для категорий. В этом уроке Вы увидите создание класса для удобной работы с категориями сайта.

4-й урок. Создание класса для комментариев. Отдельный объект для работы с комментариями будет создан в этом видеоуроке.

5-й урок. Создание класса для курсов. На сайте MyRusakov.ru есть блоки, где выводятся различные курсы. Для них будет так же создан отдельный объект.

6-й урок. Создание класса для меню. Каждый пункт меню – это отдельный объект, который, безусловно, нуждается в своих свойствах и методах. Поэтому в данном видео будет создан класс для меню.

7-й урок. Создание классов для опроса. Здесь будет несколько классов, каждый из которых будет отвечать за свой тип: класс для самого опроса, класс для варианта ответа и класс для голоса.

8-й урок. Создание класса для цитат. На сайте MyRusakov.ru есть блок с умными цитатами, которые хранятся в базе данных, и для них так же необходим отдельный класс, который будет нами создан в этом видео.

9-й урок. Создание класса для пользователей. Достаточно сложный класс, но все эти моменты я подробно разберу в этом уроке.

Раздел 5. ДОПОЛНИТЕЛЬНЫЕ КЛАССЫ

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

1-й урок. Создание класса для капчи. Здесь есть много нюансов по выводу читабельной капчи, но в то же время максимально затруднённой для роботов. Подобную капчу мы с Вами здесь и нарисуем, разумеется, оформив её в виде отдельного класса.

2-й урок. Создание класса JSValidator. Бесконечно полезный класс по проверке форм на JavaScript. Фактически, все необходимые проверки подключаются к форме непосредственно ещё в PHP. А в JavaScript мы напишем небольшую библиотеку, которая реализует проверку форм. Таким образом, Вам уже не надо будет создавать каждый раз отдельную функцию для проверки очередной формы. Достаточно будет задать ряд параметров, согласно которым будет осуществляться проверка, а всё остальное сделает код, который в этом уроке мы и напишем.

Раздел 6. МОДУЛИ

В этом разделе Вы увидите создание самых различных модулей для сайта MyRusakov.ru. Будут разобраны все классы со всеми свойствами и методами, а также TPL-файлами, отвечающими за каждый модуль. Итак, вот какие уроки Вас ждут:

1-й урок. Создание модуля для мета-тегов. Достаточно универсальных для самых разных сайтов модуль. И его создание Вы увидите в этом уроке.

2-й урок. Создание модуля для верхнего меню. В этом видео Вы увидите создание модуля для верхнего меню.

3-й урок. Создание модуля для главного меню. Поскольку меню на сайте двухуровневое, то в этом уроке Вы узнаете, как выводить меню, в том числе и многоуровневые. Безусловно, необходима рекурсия, а как это всё объединить вместе с TPL-файлами – это Вы узнаете из этого урока.

4-й урок. Создание модуля для верхней части. В этом видео Вы увидите, как делается модуль для конкретной части страницы. Это совершенно универсальный модуль, и такие модули надо уметь создавать в обязательном порядке.

5-й урок. Создание модуля для опроса. Этот модуль содержит цикл по выводу вариантов ответа для опроса. Как вмещается цикл в TPL-файл, Вы узнаете из этого видеоурока.

6-й урок. Создание модуля для курсов. На моём несколько блоков, относящихся к курсам. Разумеется, создавать отдельные модули для каждого однотипного блока – неразумно. Однако, кое-какие принципиальные отличия у них есть (например, у одного блока есть форма подписки, у другого нет). Как обрабатывается это различие, Вы узнаете из этого видео.

7-й урок. Создание модуля для цитат. В этом уроке Вы увидите создание модуля для вывода цитат.

8-й урок. Создание модуля для раздела. Опять же, достаточно универсальный модуль, ведь модуль, отвечающий за вывод нескольких статей, используется на многих сайтах.

9-й урок. Создание модуля для категории. Здесь мы создадим модуль, отвечающий за вывод центрального содержимого на странице с категорией.

10-й урок. Создание модуля для навигации по страницам. Ещё один универсальный модуль, который пригодится на многих сайтах, ведь странно будет выводить все 1000 записей на одну страницу. Поэтому требуется создание блока с навигацией.

11-й урок. Создание модуля для панели пользователя. В этом уроке будет создан модуль для вывода пунктов меню в панели у зарегистрированных пользователей.

12-й урок. Создание модуля для результатов опроса. Здесь будет разработан модуль, в котором выводятся результаты голосования на сайте.

13-й урок. Создание модуля для хлебных крошек. Тоже очень популярный модуль, который мы с Вами сделаем в этом видеоуроке.

14-й урок. Создание модуля для формы. В этом видео Вы увидите создание универсального модуля, отвечающего за вывод HTML-форм на сайте.

15-й урок. Создание модуля для результатов поиска. Последний модуль, который мы создадим для сайта MyRusakov.ru, и он посвящён небольшим блокам, показывающим часть статьи, которая удовлетворяет запросу в поиске. Причём будет выводиться та часть, где максимальная частота совпадений с поисковым запросом.

Раздел 7. ВЫВОД САЙТА

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

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

2-й урок. Вывод разделов. Здесь будет сделан вывод страницы с разделом.

3-й урок. Вывод категорий. В данном уроке так же будут объединены различные модули из предыдущего раздела. В итоге, будет получена страница с категорией.

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

5-й урок. Вывод комментариев. Сложность данного урока в том, что комментарии древовидные. Но, посмотрев данный урок, для Вас не составит труда повторить достаточно сложный материал, поскольку я всё тщательно разжевал в данном видео.

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

7-й урок. Вывод формы регистрации. Здесь будет создана ещё одна страница, на которой будет находиться форма для регистрации пользователей. Безусловно, там будет капча, которую мы с Вами выведем на страницу.

8-й урок. Регистрация пользователей с активаций по e-mail. Ключевой урок, который покажет Вам, как обрабатывать формы на сайтах.

9-й урок. Авторизация пользователей. Ещё один урок, который так же связан с обработкой формы. Но очень важно ещё знать, как делать авторизацию в сложной системе иерархии объектов. Об этом Вы узнаете из этого урока.

10-й урок. Редактирование профиля. Очень полезный урок, в котором мы с Вами реализуем смену аватарок у пользователей, тем самым, Вы поймёте как реализован механизм работы с файлами в движке, а также реализуем возможность изменения имени и пароля пользователя.


11-й урок. Восстановление пароля. Данный урок покажет механизм восстановления пароля с отправкой секретной ссылки на e-mail и последующей сменой пароля.

12-й урок. Восстановление логина. Ещё один урок, показывающий механизм восстановления логина по e-mail.

13-й урок. Поиск по сайту. Очень важный урок, который не только научит Вас делать поиск по базе данных, но ещё и сортировать результаты по релевантности. Достаточно сложный алгоритм, который Вы увидите в этом видео.

14-й урок. Заключение. Важные напутствия по поводу того, как правильно применять знания из курса.

Вот такой огромный курс Вы получаете!

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

БЕСПЛАТНЫЕ БОНУСЫ

Для достижения максимального эффекта от прохождения курса «Создание движка на PHP и MySQL 2.0» я подготовил ещё несколько Бонусов.

Бонус 1. СОЗДАНИЕ API НА САЙТЕ

Очень полезный Бонус для тех, кто планирует создавать различные сервисы в Интернете. На большинстве из них есть свой API, и как он создаётся, Вы узнаете из этого Бонуса. Причём, даже если у Вас не сервис, то Вам всё равно может потребоваться API для, например, обработки запросов, отправленных через Ajax, как это сделано на MyRusakov.ru. Поэтому уметь создавать API надо обязательно, и этому Вы научитесь в данном Бонусе.

1-й урок. Что такое API и принцип его работы. Прежде чем создавать API на сайте, мы с Вами разберём, что это такое, для чего нужно и как это работает.

2-й урок. Создание класса для API. В этом уроке мы перейдём к практике создания API на сайте MyRusakov.ru.

3-й урок. Пример работы с API. В данном уроке мы разберём, как работать с API и как правильно писать запросы к серверу.

Бонус 2. ДРЕВОВИДНЫЕ КОММЕНТАРИИ НА JQUERY И AJAX

Очень полезный Бонус, в котором мы создадим древовидные комментарии на сайте MyRusakov.ru. Причём добавление, редактирование и удаление комментариев происходит без перезагрузки страницы, а пользователь, на чей комментарий был дан ответ, будет получать e-mail уведомление об этом. Реализацию всего этого Вы увидите в этом Бонусе.

1-й урок. Добавление методов в API. Поскольку комментарии будут добавляться без перезагрузки страницы, мы с Вами будем отправлять через Ajax запросы на сервер. И в этом видео мы добавим методы обработки этих запросов.

2-й урок. Права доступа. В этом уроке мы займёмся правами доступа к комментариям, чтобы каждый пользователь имел доступ исключительно к своим комментариям, а не ко всем. И в то же время, чтобы добавлять могли комментарии только зарегистрированные пользователи. Как всё это делается, Вы узнаете из этого урока.

3-й урок. Редактирование TPL-файла. В этом видео мы добавим ссылки «Редактировать» и «Удалить», причём только у тех комментариев, к которым имеет доступ пользователь.

4-й урок. Добавление комментариев. Здесь мы займёмся работой с jQuery и Ajax: с целью вывода формы при клике по ссылкам «Добавить комментарий» и «Ответить», а также динамический вывод на странице добавленного комментария.

5-й урок. Редактирование комментариев. В этом видеоуроке мы займёмся реализацией редактирования комментария на jQuery и Ajax.

6-й урок. Удаление комментариев. В этом видео Вы увидите, как реализуется удаление комментариев без перезагрузки страницы, разумеется, с помощью jQuery и Ajax.

Бонус 3. СОЗДАНИЕ ЧПУ-ССЫЛОК

ЧПУ-ссылки крайне важны для оптимизации под поисковые системы. В этом Бонусе Вы увидите, как преобразуются адреса вида https://mysite.ru/article? >

1-й урок. Добавление таблицы. Хранение соответствий URI-адресов и псевдонимов страниц будет храниться в отдельной таблице, и её созданием мы и займёмся в данном уроке.

2-й урок. Создание необходимых классов. В этом видео мы создадим дополнительные классы, отвечающие за обработку псевдонимов.

3-й урок. Редактирование маршрутизатора. В этом видео мы запустим механизм ЧПУ-ссылок, отредактировав наш маршрутизатор.

А какие знания нужны для этого курса?

Курс предполагает, что Вы уже знаете HTML и CSS, а также JavaScript. И, безусловно, требуются знания по PHP и MySQL.

Требуемый уровень знаний по HTML и CSS – умение верстать страницы. Для создания и редактирования TPL-файлов нужно обязательно уметь верстать страницы. Да и вообще трудно представить человека, изучающего PHP и не знающего HTML. Если вдруг Вы испытываете затруднения с HTML и CSS, то обязательно пройдите сначала курс «Вёрстка сайта с нуля».

Требуемый уровень знаний по JavaScript – умение писать различные скрипты с использованием так же jQuery и Ajax. В курсе «Создание движка на PHP и MySQL 2.0» эти технологии используются достаточно часто (та же проверка форм, динамическое добавление комментариев, подсветка синтаксиса кода в статьях и ещё масса мелких скриптов). Если вдруг Вы не знаете JavaScript, то обязательно пройдите курс «JavaScript, jQuery и Ajax с Нуля до Гуру».

Также, поскольку сайт MyRusakov.ru написан на HTML5 и CSS3, то желательно знать и их. Для этого был записан курс «HTML5 и CSS3 с Нуля до Гуру». Причём, там же Вы увидите вёрстку сайта MyRusakov.ru, для которого в этом курсе уже делался движок. Вместе с этим курсом у Вас будет полная версия создания сайта MyRusakov.ru. Этот курс надо проходить исключительно после курса «Вёрстка сайта с нуля».

Требуемый уровень знаний по PHP и MySQL – умение писать различные отдельные скрипты: опросы, поиск по сайту, регистрация и авторизация, работа с базой данных и так далее. Все эти скрипты по-отдельности надо уметь делать, а как всё это объединить в движке сайта – вот об этом Вы узнаете уже из курса «Создание движка на PHP и MySQL 2.0». Но если Вы не умеете создавать отдельные скрипты, либо вообще не знаете PHP и MySQL, то пройдите сначала курс «PHP и MySQL с Нуля до Гуру». Внизу есть возможность заказать его вместе с курсом «Создание движка на PHP и MySQL 2.0» с отличной скидкой.

Итак, вот, в каком порядке надо изучать курсы:

Вёрстка сайта с нуля

JavaScript, jQuery и Ajax с Нуля до Гуру

HTML5 и CSS3 с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Создание движка на PHP и MySQL 2.0

Сколько же всё это стоит?

Объём работы по записи курса «Создание движка на PHP и MySQL 2.0» был огромен, но сбор этих знаний занял вообще несколько лет. Сколько стоят несколько лет работы? Это и есть реальная ценность курса.

Но я решил поставить цену, которая будет подъёмна для максимального числа людей, и она составляет 4700 рублей. Это очень низкая цена по сравнению с теми знаниями, которые у Вас будут после прохождения курса. 4700 рублей – это цена половины сайта-визитки (сайт на 5-7 страниц) у фрилансеров. Я уже молчу про Web-студии, где визитка может легко стоить и 60-70 тысяч рублей, а в редких случаях и того больше.

Знаний, дающихся в этих курсах, более чем достаточно для успешной работы по выполнению заказов на создание сайтов. Чем, собственно, занимаюсь и я.

А что если у меня ничего не получится?

Если вдруг по каким-то причинам у Вас не получится получить высокий уровень знаний по теме курсов после их прохождения, то напишите мне в службу поддержки (https://support.myrusakov.ru), и я верну все уплаченные за курсы деньги без лишних вопросов. Я занимаюсь обучением созданию сайтов уже много лет, у меня тысячи довольных учеников, поэтому я дорожу своей репутацией, и Вы можете мне доверять. По моей статистике, примерно 1.5% клиентов пользуются такой возможностью, и ещё никому я в этом не отказал.

Как оформить заказ?

Выберите те курсы, которые Вам нужны, и перейдите по кнопке «Заказать».

Создание движка на PHP и MySQL 2.0

Для тех, кто хочет научиться создавать профессиональные сайты максимально быстро и качественно!

Вёрстка сайта с нуля

Для тех, кто пока не знает HTML и CSS, либо не умеет их применять при вёрстке сайтов.

Выбрать курс

JavaScript, jQuery и Ajax с Нуля до Гуру

Для тех, кто не умеет писать скрипты на JavaScript с использованием библиотеки jQuery и технологии Ajax.

Выбрать курс

HTML5 и CSS3 с Нуля до Гуру

Для тех, кто хочет научиться создавать современные сайты с использованием HTML5 и CSS3. Причём в этом курсе верстался сайт MyRusakov.ru, для которого в новом курсе мы уже создаём движок.

Выбрать курс

PHP и MySQL с Нуля до Гуру

Для тех, кто пока не знает PHP и MySQL, либо не умеет писать скрипты с их использованием.

Выбрать курс

Общая цена выбранных курсов: 4700 рублей

Цена для Вас: 4700 рублей

100% возврат денег в случае неудачи

Выбирайте те курсы, которые Вам нужны, переходите по кнопке «Заказать», выписывайте и оплачивайте счёт, и приступайте к обучению. Чем больше курсов заказываете, тем выше скидка! Обратите внимание, что курсы все последовательные и изучать их надо именно в том порядке, в каком я писал выше.

Желаю Вам удачи!

С Уважением, Михаил Русаков!

ВОПРОСЫ И ОТВЕТЫ

Выдаётся ли сертификат?

Да, на каждый Видеокурс выдаётся отдельный именной сертификат.

Мне какой-то «Вася» предложил купить этот курс за 500 рублей. Это Ваш партнёр?

Нет, это не мой партнёр, а мошенник, пытающийся заработать денег. Ко мне уже обращались люди, которые заплатили им деньги, а потом эти «продавцы» просто пропадали. Так же были случаи, когда они вместо платного курса, подсовывали мои бесплатные курсы и уроки. А даже если Вы и получите полную версию платного курса со всеми уроками и файлами, то никакой поддержки автора, то есть меня, не предусмотрено. Вместе с этим отсутствуют любые гарантии на возврат денег для таких «клиентов». Поэтому остерегайтесь таких «продавцов», легально мои курсы можно приобрести только на этом сайте и больше нигде и ни у кого. И я НЕ несу никакой ответственности за действия 3-их лиц.

Куда Вы заливаете курс?

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

Где я могу почитать отзывы об этом курсе?

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

Можно ли заказать курс с DVD-боксом и дисками?

Да, это возможно. На следующей странице Вам будет предложен такой вариант, но он немного дороже из-за расходов на изготовление и оплату работы менеджерам.

Я не нашёл подходящего способа оплаты, как я могу ещё оплатить?

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

В какие страны Вы отправляете физическую версию диска?

В любую страну мира, где вообще имеется почта, в том числе, островные государства, европейские и другие. Однако, наложенный платёж доступен только для России, Украины и Беларуси. В другие страны курс отправляется только после оплаты.

В какие страны Вы отправляете наложенным платежом?

Наложенным платежом курс может быть отправлен только в Россию, Украину и Беларусь.

Как долго мне ждать физическую версию курса?

Бандероль 1-м классом отправляется в течение суток. Срок доставки колеблется от 4-х до 15-ти дней.

Я смогу рассчитывать на Вашу поддержку после покупки курса?

Да, безусловно, на все вопросы я стараюсь отвечать в течение нескольких часов, чаще в течение часа (но не ночью). Время у меня московское.

Сколько стоит доставка?

Саму доставку оплачиваю я сам. Однако, если Вы заказываете курс наложенным платежом, то Вам придётся доплатить комиссию за почтовый перевод. В разных регионах по-разному, но, как правило, это в районе 4% от стоимости курса. А если Вы делаете предварительную оплату курса (допустим, электронными деньгами или кредитной карточкой), то тогда ничего платить на почте Вам не придётся, а просто заберёте курс.

Это всё вообще работает, или Вы уже закрылись?

Если Вы это прочитали, значит, всё работает и курс доступен для покупки.

Какие знания должны быть у меня для успешного прохождения курса?

Самые элементарные знания компьютера.

А Бонусы бесплатные?

Да, они бесплатные, и уже находятся на самом диске (либо в архиве, если это цифровая версия).

Почему я должен Вам верить?

1. Во-первых, у меня есть персональный аттестат WebMoney: проверить аттестат.
2. У меня есть сайт MyRusakov.ru, на котором я регулярно публикую свои собственные статьи. Вы можете их посмотреть и убедиться в моей компетентности.
3. У меня есть несколько десятков видеоотзывов моих учеников, которые Вы можете посмотреть здесь.
4. Также имеется мой форум, на котором я всегда стараюсь помогать людям.
5. Помимо этого, Вы можете почитать обо мне здесь.
6. Также я веду свой личный блог: Blog.MyRusakov.ru.
8. Мой канал на YouTube.
9. В конце концов, я обычный человек и имею аккаунт ВКонтакте, а также свою группу.

Нужно ли мне знать английский?

Если Вы знаете английский, то это Вам немного поможет программировать (легче будете запоминать названия функций), а вообще знание английского языка совсем необязательно.

У Вас есть бесплатные уроки, чтобы я мог проверить качество?

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

Какие требования к компьютеру для изучения Вашего Видеокурса?

Самые минимальные требования: процессор 800 MHz, оперативная память 512 МБ, звуковая карта (можно встроенную в материнскую плату), видеокарта (можно встроенную в материнскую плату), DVD-дисковод (для физической версии) и операционная система Windows 2000/XP/Vista/7.

У меня ещё остались вопросы, куда мне их написать?

На все вопросы Вы можете получить ответ в моей службе поддержки.

Будет ли работать курс на Mac?

Что касается курса «Создание Интернет-магазина на PHP и MySQL», то он будет прекрасно работать на Mac. А вот у остальных курсов на Mac не будет работать меню, что очень неудобно, поскольку придётся запускать каждый урок вручную. Поэтому я рекомендую для пользователей Mac установить Windows (хотя бы виртуальный): https://www.macvspc.ru/running-windows-on-mac.html

Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

Лекции по веб-программированию

База данных – это инструмент, который позволяет хранить и обрабатывать контент сайта, т.е. все медийные материалы, которые показываются пользователю в браузере. С помощью СУБД осуществляется выборка, добавление, удаление и изменение данных. Также с использованием базы данных с легкостью решаются такие задачи как поиск по сайту, разбиение на страницы, регистрация и авторизация пользователей. Именно поэтому в основные инструменты веб-разработчика включается СУБД.

MySQL — это популярная реляционная клиент-серверная СУБД, используемая в разных приложениях. Стандартным языком управления реляционных баз данных является SQL. SQL означает язык структурированных запросов (Structured Query Language), который MySQL использует для коммуникации с другими программами. Сверх того, MySQL имеет свои собственные расширенные функции SQL для того чтобы обеспечить пользователям дополнительный функционал.

Любая программа на языке PHP, которая собирается работать с MуSQL базой данных, должна состоять из следующих обязательных базовых шагов:
1. Установить связь с MySQL сервером.
2. Выбрать базу данных для работы.
3. Посылать команды MYSQL серверу и получать ответы.
4. Обработать результаты.
5. Закрыть связь с MySQL сервером.

Реализовать эти действия можно несколькими способами:
1. Используя стандартные классические функции обращения к БД MySQL.
2. Используя современные функции из расширения mysqli для версий начиная с PHP 5 и MySQL 4.1.
3. Используя классы и методы из расширения mysqli для версий начиная с PHP 5 и MySQL 4.1.

Рассмотрим на примерах как реализуется доступ к БД MySQL каждым из указанных способов.

Классический доступ к БД MySQL

Современное подключение к БД MySQL

Использование функций из расширения mysqli ускоряет большинство операций доступа к БД, иногда достигая 40-кратного увеличения производительности по сравнению с классическим методом. Также повышена безопасность работы с данными и добавлены новые функции.

Подключение к БД MySQL с использованием классов и методов

Объектно-ориентированный интерфейс предоставляет немного более лаконичный и менее восприимчивый к ошибкам способ подключения к базе данных.

Использование шаблонов запросов при обращении к базе данных

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

Процесс работы с шаблонами таков:

1. Подготовить для сервера MySQL шаблон запроса с параметрами.
2. Привязать переменные PHP к параметрам в заготовке запроса.
3. Дать команду серверу на выполнение запроса.
4. Запросить получение нового ряда данных в указанные переменные.

Собираем поисковый механизм на PHP/MySQL PHP

Основная проблема ЭВМ —
Вводишь мусор, получаешь мусор»
Дик Фейнман

Итак, у вас полностью динамический сайт, на котором находится большое количество различных данных (любого вида — форумы, статьи и т.п.). Преимущественно большие данные хранятся в BLOBах (чего и вам наверное не удалось избежать), следовательно невозможно сделать ничего полезного, используя стандартный вид запроса LIKE %searchword% так как вывод не будет соответствующим (то есть релевантным).

Должен быть другой путь. И он есть .
Шаг один: Редукция «посторонних» слов из blob’а

Первая проблема заключается в том, что данные переполнены посторонними словами (предлогами, междометиями..), такими как «как, где, а, и». Эти слова помогают нам, людям, общаться но не имеют ничего общего с нашей проблемой, когда нужно получить вывод по релевантности.

Ниже, в конце статьи, я приложил мой личный список таких, «посторонних», слов.

Итак, мы сейчас пытаемся сделать — выбрать из данных эти слава, и, — в ново созданной табличке с двумя полями: словом и его указателем (счетчиком). Нам необходимо что-то вроде такого:
+——+—————+
| qid | word |
+——+—————+
| 6 | links |
| 5 | Fire |
| 5 | topics |
| 5 | related |
| 5 | Shakespeare |
| 4 | people |
| 4 | Knowpost |
| 3 | cuba |
| 3 | cigar |
+——+—————+

Так, давайте создадим собственно табличку:
CREATE TABLE search_table(
word VARCHAR(50),
qid INT)

Следующим шагом будет — обработать и переместить данные в нашу таблицу search_table.
$query = «SELECT blob,identifier FROM your_table»;
$result = mysql_query($query);
$number = mysql_numrows($result);
$j = 0;
WHILE ($j

/* Открыть файл с посторонними словами в массив */

$noise_words = file(«noisewords.txt»);
$filtered = $body;

/* Помещаем пробел перед первым словом */
$filtered = ereg_replace(«^»,» «,$filtered);

/* Теперь мы избавились от ненужных слов и
можем поместить то, что осталось — в массив
*/

/* Пробегаем циклом и удаляем неправильные слова */
for ($i=0; $i

Этот скрипт обрабатывает ваши старые данные. Необходимо добавить подобную же обработку на добавление данных в вашу базу данных (когда её вводит пользователь, хозяин — или кто угодно) — так, чтобы база обновлялась в процессе.
Шаг два: Поиск в таблице

Теперь мы имеем таблицу с ключевыми словами и счетчиками. Как собрать запрос?

Во-первых, необходимо переформатировать (нет, не жесткий диск) — слова поиска в строку вида ‘word1′,’word2′,’word3′ и записать её в $querywords.

Далее использовать подобный ниже следующему запрос:
SELECT count(search_table.word) as score, search_table.qid,your_table.blob
FROM search_table,your_table
WHERE your_table.q > IN($querywords)
GROUP BY search_table.qid
ORDER BY score DESC»;

Вывод же может быть, например, таким:

$getresults = mysql_query($search);
$resultsnumber = mysql_numrows($getresults);

IF ($resultsnumber == 0) <

PRINT «Ничего не найдено. »
.»Попробуйте использовать другие ключевые слова.»;

> ELSEIF ($resultsnumber > 0) <

PRINT «Поиск вернул $resultsnumber результатов
»
.»Расположение по релевантности

«;
for($count = 0; $count

$body2print = substr($body, 0, 100);
$cnote = $count+1;
PRINT «$cnote. »
$body2print…
«;
>
>

Итак, у вас есть механизм поиска по ключевым словам в вашей базе данных по релевантности (актуальности запросу).

Конечно, это не Yandex и не Google )).

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

ez code

Просто о сложном.

Делаем простой поиск на PHP, jQuery, MySql

Сегодня мы сделаем поиск, который поможет посетителям вашего сайта найти нужную информацию.

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

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

Мы создадим 2 файла: search.php — он будет содержать HTML форму и javascript, и do_search.php — в этом файле будет алгоритм поиска.

Это обычная html форма, которая будет отправлять запрос файлу do_search.php методом POST. Код файла do_search.php:

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

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

Мастер Йода рекомендует:  Почему будущее серверных систем за Linux
Добавить комментарий