Автоматический подбор ключевых слов для текста на php. Сервисы для поиска ключевых слов Какие мужчины нравятся search php keywords

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

Нужно ли заполнять keywords

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

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

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

Вскоре, Веб-мастера стали злоупотреблять использованием ключевых слов в данном meta-теге. И со временем, значимость keywords понизили. Сегодня, в достаточном количестве, появились новые факторы ранжирования, более качественные .

Да, в документации Яндекса для Веб-мастера , вы прочитаете, что keywords поможет ПС лучше понять содержимое страницы. Но заполнение, не даст вам преимущества перед конкурентами. Так как полезность контента от этого не меняется и «весомым и значимым» тегом keywords считаться не может .

Как я уже говорил, работа над сайтом, это ряд действий, которые работают в комплексе. Заполнение тега keywords может стать лишь «маленьким плюсом» в общей работе большой системы.

Частые ошибки использования keywords

И если вы все же решили использовать meta-теги, давайте делать это правильно. Рассмотрим основные ошибки, которые допускают оптимизаторы или Веб-мастера (исполнители). Все варианты, реальные примеры, которые попадались мне при работе с сайтами клиентов.

1. Повторение ключевых слов на всех страницах

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

Правило №1: каждая страница вашего ресурса уникальна поэтому keywords должен быть так же уникальным.

2. Спам ключей на одной странице

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

Правило №2: большое число ключевых слов в keywords, может привести только к санкциям от поисковых систем, но никак не сделает ваш сайт лучше. Достаточно использовать 2-3 ключевика.

3. Знаки препинания

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

Правило №3: ключевое слово, это не обязательно одно слово, чаще это фраза из нескольких слов, которая разделяется запятой.

4. Ключи общего характера

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

Правило №4: дайте ключевым словам больше конкретики, используя фразы.

5. Использование keywords на служебных страницах

Исполнитель использует ключевые слова, на таких страницах, как:

  • контакты;
  • обратная связь;
  • о себе;
  • галерея;
  • и ряд других страниц, у которых нет цели привлечь посетителя.

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

6. Целевое действие на странице

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

Правило №6: на определенной странице вашего сайта, человек совершает действие: что-то узнает, скачивает, покупает, заказывает, смотрит (фото и видео) и так далее. Используйте ключевые слова по назначению и действию, которое должен совершить пользователь.

7. Ключевые слова с использованием региона

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

Правило №7: нет необходимости указывать регион в keywords, для этого поисковые системы берут данные из других источников, например, Яндекс.Справочник.

Как правильно заполнять

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

Подводя итог, если вы сомневаетесь и не знаете, как правильно заполнить keywords, лучше оставьте данный meta-тег пустым.

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

Если есть что добавить, или у вас свое мнение по данной теме, давайте обсудим в комментариях.

By Ibrahim Diallo

Published Jul 2 2014 ~ 16 minutes read

Search is an important feature on a website. When my few readers want to look for a particular passage on my blog, they use the search box. It used to be powered by Google Search, but I have since then changed it to my own home-brewed version not because I can do better but because it was an interesting challenge.

If you are in a hurry and just want your site to be searchable, well do what I did before, use Google.

// In search.php file $term = isset($_GET["query"])?$_GET["query"]: ""; $term = urlencode($term); $website = urlencode("www.yourwebsite.com"); $redirect = "https://www.google.com/search?q=site%3A{$website}+{$term}"; header("Location: $redirect"); exit;

What it does is pretty simple. Get the term passed by the user, and forward it to Google search page. Limit the search result to our current domain using the site: keyword in the search query. All your pages that are indexed by Google will be available through search now. If you do want to handle your search in house however, then keep reading.

Homemade Search Solution

Before we go any further, try using the search box on this blog. It uses the same process that I will describe below. If you feel that this is what you want then please continue reading.

This solution is catered to small websites. I make use of LIKE with wild cards on both ends, meaning your search cannot be indexed. This means the solution will work fine for your blog or personal website that doesn"t contain tons of data. Port it to a bigger website and it might become very slow. MySQL offers Full Text Search which is not what we are doing here.

Note: If you have 5000 blog posts you are still fine. .

We will take the structure of this blog as a reference. Each blog post has:

  • A title p_title
  • A url p_url
  • A summary p_summary
  • A post content p_content
  • And catergories category.tagname

For every field that matches with our search term, we will give it a score. The score will be based on the importance of the match:

// the exact term matches is found in the title $scoreFullTitle = 6; // match the title in part $scoreTitleKeyword = 5; // the exact term matches is found in the summary $scoreFullSummary = 5; // match the summary in part $scoreSummaryKeyword = 4; // the exact term matches is found in the content $scoreFullDocument = 4; // match the document in part $scoreDocumentKeyword = 3; // matches a category $scoreCategoryKeyword = 2; // matches the url $scoreUrlKeyword = 1;

Before we get started, there are a few words that do not contribute much to a search that should be removed. Example "in","it","a","the","of" ... . We will filter those out and feel free to add any word you think is irrelevant. Another thing is, we want to limit the length of our query. We don"t want a user to write a novel in the search field and crash our MySQL server.

// Remove unnecessary words from the search term and return them as an array function filterSearchKeys($query){ $query = trim(preg_replace("/(\s+)+/", " ", $query)); $words = array(); // expand this list with your words. $list = array("in","it","a","the","of","or","I","you","he","me","us","they","she","to","but","that","this","those","then"); $c = 0; foreach(explode(" ", $query) as $key){ if (in_array($key, $list)){ continue; } $words = $key; if ($c >= 15){ break; } $c++; } return $words; } // limit words number of characters function limitChars($query, $limit = 200){ return substr($query, 0,$limit); }

Our helper functions can now limit character count and filter useless words. The way we will implement our algorithm is by giving a score every time we find a match. We will match words using the if statement and accumulate points as we match more words. At the end we can use that score to sort our results

Note: I will not be showing how to connect to MySQL database. If you are having problems to efficiently connect to the database I recommend reading this .

Let"s give our function a structure first. Note I left placeholders so we can implement sections separately.

Function search($query){ $query = trim($query); if (mb_strlen($query)===0){ // no need for empty search right? return false; } $query = limitChars($query); // Weighing scores $scoreFullTitle = 6; $scoreTitleKeyword = 5; $scoreFullSummary = 5; $scoreSummaryKeyword = 4; $scoreFullDocument = 4; $scoreDocumentKeyword = 3; $scoreCategoryKeyword = 2; $scoreUrlKeyword = 1; $keywords = filterSearchKeys($query); $escQuery = DB::escape($query); // see note above to get db object $titleSQL = array(); $sumSQL = array(); $docSQL = array(); $categorySQL = array(); $urlSQL = array(); /** Matching full occurrences PLACE HOLDER **/ /** Matching Keywords PLACE HOLDER **/ $sql = "SELECT p.p_id,p.p_title,p.p_date_published,p.p_url, p.p_summary,p.p_content,p.thumbnail, ((-- Title score ".implode(" + ", $titleSQL).")+ (-- Summary ".implode(" + ", $sumSQL).")+ (-- document ".implode(" + ", $docSQL).")+ (-- tag/category ".implode(" + ", $categorySQL).")+ (-- url ".implode(" + ", $urlSQL).")) as relevance FROM post p WHERE p.status = "published" HAVING relevance >

In the query, all scores will be summed up as the relevance variable and we can use it to sort the results.

Matching full occurrences

We make sure we have some keywords first then add our query.

If (count($keywords) > 1){ $titleSQL = "if (p_title LIKE "%".$escQuery."%",{$scoreFullTitle},0)"; $sumSQL = "if (p_summary LIKE "%".$escQuery."%",{$scoreFullSummary},0)"; $docSQL = "if (p_content LIKE "%".$escQuery."%",{$scoreFullDocument},0)"; }

Those are the matches with higher score. If the search term matches an article that contains these, they will have higher chances of appearing on top.

Matching keywords occurrences

We loop through all keywords and check if they match any of the fields. For the category match, I used a sub-query since a post can have multiple categories.

Foreach($keywords as $key){ $titleSQL = "if (p_title LIKE "%".DB::escape($key)."%",{$scoreTitleKeyword},0)"; $sumSQL = "if (p_summary LIKE "%".DB::escape($key)."%",{$scoreSummaryKeyword},0)"; $docSQL = "if (p_content LIKE "%".DB::escape($key)."%",{$scoreDocumentKeyword},0)"; $urlSQL = "if (p_url LIKE "%".DB::escape($key)."%",{$scoreUrlKeyword},0)"; $categorySQL = "if ((SELECT count(category.tag_id) FROM category JOIN post_category ON post_category.tag_id = category.tag_id WHERE post_category.post_id = p.post_id AND category.name = "".DB::escape($key)."") > 0,{$scoreCategoryKeyword},0)"; }

Also as pointed by a commenter below, we have to make sure that the these variables are not empty arrays or the query will fail.

// Just incase it"s empty, add 0 if (empty($titleSQL)){ $titleSQL = 0; } if (empty($sumSQL)){ $sumSQL = 0; } if (empty($docSQL)){ $docSQL = 0; } if (empty($urlSQL)){ $urlSQL = 0; } if (empty($tagSQL)){ $tagSQL = 0; }

At the end the queries are all concatenated and added together to determine the relevance of the post to the search term.

// Remove unnecessary words from the search term and return them as an array function filterSearchKeys($query){ $query = trim(preg_replace("/(\s+)+/", " ", $query)); $words = array(); // expand this list with your words. $list = array("in","it","a","the","of","or","I","you","he","me","us","they","she","to","but","that","this","those","then"); $c = 0; foreach(explode(" ", $query) as $key){ if (in_array($key, $list)){ continue; } $words = $key; if ($c >= 15){ break; } $c++; } return $words; } // limit words number of characters function limitChars($query, $limit = 200){ return substr($query, 0,$limit); } function search($query){ $query = trim($query); if (mb_strlen($query)===0){ // no need for empty search right? return false; } $query = limitChars($query); // Weighing scores $scoreFullTitle = 6; $scoreTitleKeyword = 5; $scoreFullSummary = 5; $scoreSummaryKeyword = 4; $scoreFullDocument = 4; $scoreDocumentKeyword = 3; $scoreCategoryKeyword = 2; $scoreUrlKeyword = 1; $keywords = filterSearchKeys($query); $escQuery = DB::escape($query); // see note above to get db object $titleSQL = array(); $sumSQL = array(); $docSQL = array(); $categorySQL = array(); $urlSQL = array(); /** Matching full occurences **/ if (count($keywords) > 1){ $titleSQL = "if (p_title LIKE "%".$escQuery."%",{$scoreFullTitle},0)"; $sumSQL = "if (p_summary LIKE "%".$escQuery."%",{$scoreFullSummary},0)"; $docSQL = "if (p_content LIKE "%".$escQuery."%",{$scoreFullDocument},0)"; } /** Matching Keywords **/ foreach($keywords as $key){ $titleSQL = "if (p_title LIKE "%".DB::escape($key)."%",{$scoreTitleKeyword},0)"; $sumSQL = "if (p_summary LIKE "%".DB::escape($key)."%",{$scoreSummaryKeyword},0)"; $docSQL = "if (p_content LIKE "%".DB::escape($key)."%",{$scoreDocumentKeyword},0)"; $urlSQL = "if (p_url LIKE "%".DB::escape($key)."%",{$scoreUrlKeyword},0)"; $categorySQL = "if ((SELECT count(category.tag_id) FROM category JOIN post_category ON post_category.tag_id = category.tag_id WHERE post_category.post_id = p.post_id AND category.name = "".DB::escape($key)."") > 0,{$scoreCategoryKeyword},0)"; } // Just incase it"s empty, add 0 if (empty($titleSQL)){ $titleSQL = 0; } if (empty($sumSQL)){ $sumSQL = 0; } if (empty($docSQL)){ $docSQL = 0; } if (empty($urlSQL)){ $urlSQL = 0; } if (empty($tagSQL)){ $tagSQL = 0; } $sql = "SELECT p.p_id,p.p_title,p.p_date_published,p.p_url, p.p_summary,p.p_content,p.thumbnail, ((-- Title score ".implode(" + ", $titleSQL).")+ (-- Summary ".implode(" + ", $sumSQL).")+ (-- document ".implode(" + ", $docSQL).")+ (-- tag/category ".implode(" + ", $categorySQL).")+ (-- url ".implode(" + ", $urlSQL).")) as relevance FROM post p WHERE p.status = "published" HAVING relevance > 0 ORDER BY relevance DESC,p.page_views DESC LIMIT 25"; $results = DB::query($sql); if (!$results){ return false; } return $results; }

Now your search.php file can look like this:

$term = isset($_GET["query"])?$_GET["query"]: ""; $search_results = search($term); if (!$search_results) { echo "No results"; exit; } // Print page with results here.

We created a simple search algorithm that can handle a fair amount of content. I arbitrarily chose the score for each match, feel free to tweak it to something that works best for you. And there is always room for improvement.

It is a good idea to track the search term coming from your users, this way you can see if most users search for the same thing. If there is a pattern, then you can save them a trip and just cache the results using Memcached .

If you want to see this search algorithm in action, go ahead and try looking for an article on the search box on top of the page. I have added extra features like returning the part where the match was found in the text. Feel free to add features to yours.

Did you like this article? You can subscribe to read more awesome ones. .

On a related note, here are some interesting articles.

It is time to deal with mysql_* functions once and for all. These methods are deprecated and slow. The time to upgrade has long passed yet we still see it everywhere. Since I cannot force every author to update their tutorial and blogs, I decided to write a post to hopefully rank better and provide the essential information to help new comers.

Making your own website shouldn"t be too difficult. Hosting companies like Godaddy or Hostgator make it super easy for anyone to get started; they allow you to create a whole website without ever writing code. For most people, it is plenty to run a WordPress blog. If this is what you are looking for you should head to Godaddy.com right now. We are done here. But on the other hand, if you want to have control and not be limited by the short comings of a shared hosting without busting your wallet, you have come to the right place.

Vim is my favorite text editor on the terminal. After playing for a little while with nano and emacs , I finally settled with vim for its simplicity (bare with me please). Although it can be customized and used like an entire IDE, I use it mostly for editing files on my servers and making small but crucial changes. Let"s not get into Editor war and get started.

Comments(45)

Zaryel Aug 12 2015:

Ian Mustafa Sep 26 2015:

Rob Sep 29 2015:

adeem Feb 11 2016:

Ivan Venediktov Apr 9 2016.

11.1K

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

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

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

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

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

Создаем базу данных

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

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

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

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

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

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

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

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

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

Column ID FirstName LastName Email PhoneNumber
2 Ryan Butler [email protected] 417-854-8547
3 Brent Callahan [email protected] 417-854-6587

Разработка формы

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

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

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

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

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

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

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

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

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

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

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

Введите поисковый запрос

"; } ?>

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

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

Введите поисковый запрос

"; } } } ?>

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

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

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

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

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

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

", "") or die (" Я не могу подключиться к базе данных, так как: " . mysql_error()); else{ echo "

Пожалуйста, введите поисковый запрос

"; } } }?>

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

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

Пожалуйста, введите поисковый запрос

"; } } } ?>

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

Пожалуйста, введите поисковый запрос

"; } } } ?>

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

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

Пожалуйста, введите поисковый запрос

"; } } } ?>

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

n"; echo "

  • " . "
  • n"; echo ""; } } else{ echo "

    Пожалуйста, введите поисковый запрос

    "; } } } ?>

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

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

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

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

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

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

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

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

    A | B | K

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

    }//Окончание скрипта поисковой формы if(isset($_GET["by"])){ $letter=$_GET["by"]; //Подключение к базе данных $db=mysql_connect ("servername", "username", "password") or die ("Я не могу подключиться к базе данных, так как: " . mysql_error()); //-Выберете базу данных $mydb=mysql_select_db("yourDatabase"); //-Запрос к таблице базы $sql="SELECT ID, FirstName, LastName FROM Contacts WHERE FirstName LIKE "%" . $letter . "%" OR LastName LIKE "%" . $letter ."%""; //-Запустить запрос к функции MySQL Query $result=mysql_query($sql); //-Результаты подсчета $numrows=mysql_num_rows($result); echo "

    " .$numrows . " results found for " . $letter . "

    "; //-Запуск цикла и сортировка результатов while($row=mysql_fetch_array($result)){ $FirstName =$row["FirstName"]; $LastName=$row["LastName"]; $ID=$row["ID"]; //-Вывести результат в массиве echo "
      n"; echo "
    • " . "" .$FirstName . " " . $LastName . "
    • n"; echo "
    "; } }

    Здесь мы изменили четыре фрагмента кода скрипта поиска по сайту:

    • Мы используем функцию isset() , и вносим в нее массив $_GET , а затем проверяем значение by ;
    • Создаем переменную $letter и инициализируем ее значение массивом $_GET ;
    • Добавляем переменную letter в SQL-запрос ;
    • Указываем переменную letter внутри выражения, в котором получаем подсчитанное количество строк.

    Сохраните файл search_byletter.php и проверьте результат.

    Поиск определенного сотрудника

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

    }//Окончание скрипта if(isset($_GET["id"])){ $contactid=$_GET["id"]; //Подключение к базе данных $db=mysql_connect ("servername", "username", "password") or die ("Я не могу подключиться к базе данных, так как: " . mysql_error()); //-select the database to use $mydb=mysql_select_db("yourDatabase"); //- Запрос к таблице базы данных $sql="SELECT * FROM Contacts WHERE ID=" . $contactid; //- Запустить запрос к функции mysql_query() $result=mysql_query($sql); //- Запуск цикла и сортировка результатов while($row=mysql_fetch_array($result)){ $FirstName =$row["FirstName"]; $LastName=$row["LastName"]; $PhoneNumber=$row["PhoneNumber"]; $Email=$row["Email"]; //- Вывести результат в массиве echo "

    "; } }

    Здесь мы изменили четыре фрагмента кода:

    • Мы используем функцию isset() , и с ее помощью проверяем значение ID в массиве $_GET ;
    • Создаем переменную $contactid и инициализируем ее массивом $_GET ;
    • В таблице выделяем все, что отмечено звездочкой * . Звездочка – это сокращенное обозначение в SQL , которое означает «дайте мне все столбцы и строки из таблицы» . Чтобы определить, какую информацию выводить, мы упоминаем переменную contactid в конце SQL-выражения ;
    • Выводим дополнительную информацию о каждом представителе персонала.

    Сохраните файл search_byid.php и проверьте результат.

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

    SQL-инъекция

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

    "DROP TABLE

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

    В завершение

    В сегодняшней статье мы рассмотрели, как сделать поиск по сайту, а также:

    • Создавать базы данных и соответствующие таблицы;
    • Использовать инструменты для управления базами данных, создавать столбцы и вводить данные;
    • Разрабатывать формы поиска на основе PHP , которая умеет осуществлять проверку вводимых данных, наличия переменных в запросе, а также соединяться с базой данных и выводить результаты из таблицы;
    • Как защитить приложение и базу данных от SQL-инъекций .

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

    Данная публикация представляет собой перевод статьи «How to Create a Search Feature with PHP and MySQL » , подготовленной дружной командой проекта

    Безусловно, о значении метатегов знает каждый, кто имеет хоть какое-то представление о поисковом продвижении. Все в курсе о важности тегов title, description, h1-h6, alt и других. Никто не отрицает, что они влияют на оптимизацию сайта. Но к одному из тегов поисковые системы относятся неоднозначно - к тегу keywords.

    В последние годы в Сети развернулась жаркая дискуссия, которая не утихает по сей день: стоит ли вообще использовать метатег keywords? К сожалению, точного ответа до сих пор никто дать не может. Рассмотрим различные точки зрения и попробуем разобраться в данном вопросе.

    Что такое keywords?

    Keywords - это ключевые слова (не более 20 для одной страницы сайта), соответствующие содержимому страницы.

    В коде страницы этот метатег выглядит вот так:





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

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

    Что же происходит сейчас?

    Как говорится, из крайности в крайность: в итоге поисковики перестали придавать данному тегу вообще какое-либо значение.

    Яндекс

    Представители Яндекса заявили о keywords следующее: «… может учитываться при определении соответствия страницы поисковым запросам» .

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

    Google

    Система не оставляет никаких сомнений и не дает почвы для размышлений. Тут все лаконично и ясно: «We don’t use keywords meta-tag in a search-ranking», «Google has ignored the keywords meta tag for years and currently we see no need to change that policy» .

    «Мы не используем метатег keywords в поисковом ранжировании», «Google игнорирует метатег keywords в течение многих лет, и в настоящее время нет необходимости менять эту политику» .

    Rambler, Yahoo, Mail.ru

    Разделяют мнение Гугла и считают, что метатег keywords исчерпал себя. Поэтому совсем не учитывается данными поисковиками.

    Но почему многие по-прежнему используют keywords?

    Скорее всего, это связано с неоднозначной формулировкой Яндекса о теге. Логика владельцев сайтов такая: если есть надежда, что все-таки Яндекс учтет тег, а Google, Rambler, Yahoo иMail.ru относятся к метатегу нейтрально, то от его заполнения хуже не станет.

    А если станет?

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

    Точка зрения 1PS

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

    Лучше продвигать сайт за счет правильного контента, тегов , <H>, <alt>и иных способов технической оптимизации . Кстати, большая часть этих приемов учтена в услуге Поисковое Продвижение .</p> <p>P.S. Удачи вам в продвижении своего ресурса.</p> <p>В этой статье мы с Вами разберём последнюю группу <b>мета-тегов в HTML </b>, предназначенных для поисковых систем. Они имеют большую важность, и их надо использовать на каждой странице. Без использования <b>мета-тегов для поисковых систем </b>, оптимизация будет затруднена.</p> <p>Сначала давайте разберём то, <b>как вставляются мета-теги для поисковых систем в HTML </b>. Как и все мета-теги, они вставляются внутри тега <<b>head </b>> следующим образом:</p><p> <meta name = "name_meta" content = "content_meta" /> </p><p>Как видите, процесс вставки абсолютно идентичен процессу вставки <b>мета-тегов для страницы </b>, поэтому здесь всё так же просто. Теперь перечислю основные <b>мета-теги для поисковых систем </b>, которые надо будет использовать:</p> <ul><li><b>description </b> - этот мета-тег содержит описание страницы. Фактически, в данном мета-теге необходимо кратко сформулировать, что на данной странице находится. Вопреки заблуждению большинства, данный мета-тег влияет на выдачу в поисковых системах, поэтому вставляйте его на каждой странице.</li> <li><b>keywords </b> - мета-тег, содержащий ключевые слова для данной страницы. Здесь можно использовать набор различных слов, которые чаще всего у Вас встречаются на данной странице. Так же как и "<b>description </b>", "<b>keywords </b>" должен быть указан на каждой странице.</li> <li><b>robots </b> - этот мета-тег используется, если нужно запретить индексацию страницы поисковыми система. Это бывает очень полезно и очень часто используется. О возможных значениях этого мета-тега мы поговорим чуть ниже.</li> </ul><p>Теперь давайте приведу пример использования <b>мета-тегов для поисковых систем в HTML </b>:</p><p> <head><br> <meta name = "description" content = "Краткое описание этой страницы." /><br> <meta name = "keywords" content = "страница, описание" /><br> <meta name = "robots" content = "index,follow" /><br> </head> </p><p>Здесь всё прозрачно, поэтому остановлюсь только на мета-теге "<b>robots </b>". Здесь существует 4 значения:</p> <ul><li><b>index,follow </b> - это значение означает, что данную страницу нужно проиндексировать, а также пройтись по всем ссылкам на данной странице.</li> <li><b>noindex,follow </b> - это значение сообщает поисковому роботу, что страницу индексировать не надо, а вот пройтись по ссылкам на этой странице стоит.</li> <li><b>index,nofollow </b> - индексировать страницу нужно, но по ссылкам на ней не переходить.</li> <li><b>noindex,nofollow </b> - это значение сообщает роботу, что ни индексировать страницу, ни переходить по ссылкам на этой странице нельзя.</li> </ul><p>Если поисковый робот должен проиндексировать страницу и перейти по всем ссылкам (в большинстве случаев это так), то указывать мета-тег "<b>robots </b>" необязательно. А вот если нужно запретить индексацию, то самый простой способ это сделать - воспользоваться мета-тегом "<b>robots </b>".</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> </div> <div class="col-md-12"> <div class="panel"> <div class="panel-body"> <center> <div class="share-title">Интересно? Поделись!</div> <div class="share"> <a onClick="window.open('https://www.facebook.com/sharer.php?u=https%3A%2F%2Fdmitriadovsky.ru%2Favtomaticheskii-podbor-klyuchevyh-slov-dlya-teksta-na-php-servisy-dlya.html','sharer','toolbar=0,status=0,width=700,height=400');" href="javascript: void(0)" class="facebook"></a> <a onClick="window.open('https://twitter.com/intent/tweet?text=https%3A%2F%2Fdmitriadovsky.ru%2Favtomaticheskii-podbor-klyuchevyh-slov-dlya-teksta-na-php-servisy-dlya.html','sharer','toolbar=0,status=0,width=700,height=400');" href="javascript: void(0)" class="twitter"></a> <a onClick="window.open('https://vkontakte.ru/share.php?url=https%3A%2F%2Fdmitriadovsky.ru%2Favtomaticheskii-podbor-klyuchevyh-slov-dlya-teksta-na-php-servisy-dlya.html','sharer','toolbar=0,status=0,width=700,height=400');" href="javascript: void(0)" class="vkontakte"></a> <a onClick="window.open('http://ok.ru/dk?st.cmd=addShare&st.s=1&st._surl=https%3A%2F%2Fdmitriadovsky.ru%2Favtomaticheskii-podbor-klyuchevyh-slov-dlya-teksta-na-php-servisy-dlya.html','sharer','toolbar=0,status=0,width=700,height=400');" href="javascript: void(0)" class="odnoklassniki"></a> <a onClick="window.open('https://plus.google.com/share?url=https%3A%2F%2Fdmitriadovsky.ru%2Favtomaticheskii-podbor-klyuchevyh-slov-dlya-teksta-na-php-servisy-dlya.html','sharer','toolbar=0,status=0,width=700,height=400');" href="javascript: void(0)" class="google"></a> <a onClick="window.open('https://connect.mail.ru/share?url=https%3A%2F%2Fdmitriadovsky.ru%2Favtomaticheskii-podbor-klyuchevyh-slov-dlya-teksta-na-php-servisy-dlya.html','sharer','toolbar=0,status=0,width=700,height=400');" href="javascript: void(0)" class="mail"></a> </div> </center> </div> </div> </div> <div class="clear"></div> <div class="clear"></div> </div> </span> </div> <div id="sidebar" class="col-md-3"> <div class="well well-sm side-widget widget_text" id="text-14"> <div class="textwidget"> </div> </div><div class="well well-sm side-widget widget_categories" id="categories-3"><div class="widget-title">Рубрики</div> <ul> <li class="cat-item"><a href="/category/ios/" title="IOS">IOS</a> </li> <li class="cat-item"><a href="/category/wifi/" title="WiFi">WiFi</a> </li> <li class="cat-item"><a href="/category/windows/" title="Windows">Windows</a> </li> <li class="cat-item"><a href="/category/vkontakte/" title="Вконтакте">Вконтакте</a> </li> <li class="cat-item"><a href="/category/iron/" title="Железо">Железо</a> </li> <li class="cat-item"><a href="/category/instructions/" title="Инструкции">Инструкции</a> </li> <li class="cat-item"><a href="/category/internet/" title="Интернет">Интернет</a> </li> <li class="cat-item"><a href="/category/computers/" title="Компьютеры">Компьютеры</a> </li> <li class="cat-item"><a href="/category/life-hacks/" title="Лайфхаки">Лайфхаки</a> </li> <li class="cat-item"><a href="/category/reviews/" title="Обзоры">Обзоры</a> </li> </ul> </div><div class="well well-sm side-widget widget_text" id="text-12"> <div class="textwidget"> </div> </div></div> </div> <div id="sidebar-bottom" class="col-md-12"> </div> <div class="col-md-12"> <div id="footer"> <div class="row footer-go well well-sm"> <div class="col-md-12"> <div class="row"> <div class="footer_menu"> <ul id="menu-menyu-2-nizhnee" class="menu"> <li class="menu-item type-post_type object-page "><a href="">О сайте</a></li> <li class="menu-item type-post_type object-page "><a href="/feedback.html">Контакты</a></li> </ul> </div> </div> </div> <div class="col-md-4"> <p class="text-left" itemscope itemtype="http://schema.org/WPFooter"><a href="/">Компьютеры. Железо. Программы. Обзоры. Инструкции</a> © <span itemprop="copyrightYear">2024</span>. Все права защищены.</p> </div> <div class="col-md-4"> </div> <div class="col-md-4"> <p class="text-right"></p> </div> </div> </div> </div> </div> </div> <span class="scrollTop hidden-xs hidden-sm" id="gotop" onclick="top.goTop(); return false;" href="#"><span class="glyphicon glyphicon-eject scroll"></span></span> <script type= "text/javascript">function GoTo(link){ window.open(link.replace("_","http://"));} </script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=4.8.3'></script> <script type='text/javascript' src='/wp-content/themes/mini-max-box/js/bootstrap.min.js?ver=3.2.0'></script> <script type='text/javascript'> var q2w3_sidebar_options = new Array(); q2w3_sidebar_options[0] = { "sidebar" : "sidebar-1", "margin_top" : 50, "margin_bottom" : 400, "stop_id" : "", "screen_max_width" : 0, "screen_max_height" : 0, "width_inherit" : false, "refresh_interval" : 1500, "window_load_hook" : false, "disable_mo_api" : false, "widgets" : ['text-12'] } ; </script> <script type='text/javascript' src='/wp-content/plugins/q2w3-fixed-widget/js/q2w3-fixed-widget.min.js?ver=5.0.4'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.8.3'></script> <script type="text/javascript"> /*<![CDATA[*/ jQuery(document).ready(function($){ $('.link').replaceWith(function(){ var id = ( null != $(this).attr('id') ) ? ' id="' + $(this).attr('id') + '"' : '', target = ( null != $(this).attr('data-target') ) ? ' target="' + $(this).attr('data-target') + '"' : ' target="_blank"', title = ( null != $(this).attr('title') ) ? ' title="' + $(this).attr('title') + '"' : '', style = ( null != $(this).attr('style') ) ? ' style="' + $(this).attr('style') + '"' : '', rel = ( null != $(this).attr('data-rel') ) ? ' rel="' + $(this).attr('data-rel') + '"' : '', cl = ( null != $(this).attr('class') ) ? $(this).attr('class').replace('link','').trim() : ''; cl = ( '' != cl ) ? ' class="' + cl + '"' : ''; return '<a href="' + $(this).attr('data-link') + '" ' + title + id + cl + target + style + rel + ' >' + $(this).html() + '</a>'; } ); } ); /*]]>*/ </script> </body> </html>