<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>508.com.ua &#187; field like508.com.ua</title>
	<atom:link href="https://508.com.ua/field-like/feed/" rel="self" type="application/rss+xml" />
	<link>https://508.com.ua</link>
	<description>508.com.ua</description>
	<lastBuildDate>Tue, 01 Jul 2025 17:00:27 +0000</lastBuildDate>
	<language>ru-RU</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.25</generator>
	<item>
		<title>Создаем поиск для сайта</title>
		<link>https://508.com.ua/sozdaem-poisk-dlja-sajta/</link>
		<comments>https://508.com.ua/sozdaem-poisk-dlja-sajta/#comments</comments>
		<pubDate>Mon, 14 May 2012 11:22:20 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Веб Уроки]]></category>
		<category><![CDATA[color cc0000]]></category>
		<category><![CDATA[field like]]></category>
		<category><![CDATA[font color]]></category>
		<category><![CDATA[font color cc0000]]></category>

		<guid isPermaLink="false">http://wordpress.work/sozdaem-poisk-dlja-sajta/</guid>
		<description><![CDATA[Неотъемлемой частью сайта, является поиск. В этом уроке мы научимся с Вами оздавать поиск для сайта. Мы попытаемся сделать скрипт не очень большим и сложным. ОБРАБОТКА СТРОКИ ПОИСКА Первое, что мы делаем с запросом &#8211; это обрезаем строку поиска функцией substr: $search = substr($search, 0, 64); 64 символа вполне хватит пользователю для поиска по сайту. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p> Неотъемлемой частью сайта, является поиск. В этом уроке мы научимся с Вами оздавать поиск для сайта. Мы попытаемся сделать скрипт не очень большим и сложным.</p>
<p> ОБРАБОТКА СТРОКИ ПОИСКА</p>
<p> Первое, что мы делаем с запросом &ndash; это обрезаем строку поиска функцией substr:</p>
<p> $search = substr($search, 0, 64);
<p> 64 символа вполне хватит пользователю для поиска по сайту.</p>
<p><span id="more-12622"></span>
<p> Теперь наступает очеред вырезать все опасные и не нужные нам символы из строки:</p>
<p> $search = preg_replace(&quot;/[^(w)|(x7f-xff)|(s)]/&quot;, &quot; &quot;, $search);
<p> По идее, разрешать пользователям искать по сайту небольшими запросами из 1-2 символом нельзя &ndash; при большой посещаемости это может стать причиной большой нагрузки на сервер, поэтому ограничим поиск поисковыми фразами только больше 2 символов.</p>
<p> Итак, разрешим искать только по словам, которые длиннее двух букв (если ограничение больше, надо заменить &quot;{1,2}&quot; на &quot;{1, кол-во символов}&quot;):</p>
<p> $good = trim(preg_replace(&quot;/s([^s]{1,2})s/&quot;, &quot; &quot;, ereg_replace(&quot;[ ]+&quot;, &quot; &quot;,&quot; $search&quot;)));
<p> Затем после замены ненужных символов неплохо было бы убрать двойные пробелы из нашего запроса (они были сделаны специально для корректного поиска коротких слов):</p>
<p> $good = ereg_eplace(&quot;[ ]+&quot;, &quot; &quot;, $good);
<p> ЛОГИКА ПОИСКОВОГО ЗАПРОСА</p>
<p> Допустим, мы хотим предоставить пользователю возможность выбирать логику поиска &#8212; искать все слова или только одно из нескольких. Если вы хотите сделать как в Яндексе &#8212; два амперсанта означают &quot;И&quot; (слово1&amp;&amp;слово2&amp;&amp;слово3) или как-то еще, то я не советчик. Шаманство со строками на небольшом сайте imho не оправдывает затраченного времени. Поэтому форму для поиска рисуем так: искать любое из слов или искать все слова</p>
<p> А в поисковом скрипте лишний раз проверяем, что пользователь ввел:</p>
<p> if ($logic!=&quot;and&quot; &amp;&amp; $logic!=&quot;or&quot;) $logic = &quot;or&quot;;
<p> РЕЛЕВАНТНОСТЬ ПОИСКА </p>
<p> Наверное, в том же Яндексе все видели ссылочку &quot;сортировать по релевантности&quot;. Это оно и есть. Сортировка результатов по количеству совпадений слов.</p>
<p> Отчасти, кстати, такая сортировка снимает проблему обработки логики поиска. Но с БД mysql делать такую сортировку очень сложно. Надо сперва выбрать, где есть все слова, потом записи, где разные слова (исключив предыдущие). Если у вас постраничный вывод &#8212; то вообще дело труба!</p>
<p> СТАТИСТИКА ПОИСКА </p>
<p> Неплохо будет сразу информировать пользователя, сколько он нашел строк таблицы. Для этого делается дополнительный запрос в базу:</p>
<p> $query = &quot;select id from table where field like &#8216;%&quot;. str_replace(&quot; &quot;, &quot;%&#8217; or field like &#8216;%&quot;, $good). &quot;%&#8217;&quot;;
<p> Для статистики по отдельным словам можно сделать следующее:</p>
<p> $word = explode(&quot; &quot;, $search); while (list($k, $v) = each($word)) { if (strlen($v)&gt;2) $stat[]=&quot;$v:&quot;. mysql_num_rows(mysql_query(&quot;select id from table where field like &#8216;%$v%&#8217;&quot;)); else $stat[]=&quot;$v: &lt;font color=#cc0000&gt;короткое&lt;/font&gt;&quot;; }; $word_stats =&quot;Статистика слов: &quot;. implode(&quot;&quot;, $stat). &quot;&lt;br /&gt;&quot;; unset($stat);
<p> ПОСТРАНИЧНЫЙ ВЫВОД РЕЗУЛЬТАТОВ </p>
<p> Ну, когда у нас есть макет для поиска и количество строк результата поиска, сделать постраничный поиск &#8212; пара пустяков. Проверяем переменную $page (не меньше 0, не больше $results_amount/$rows_in_page).</p>
<p> В запрос, который подсчитывает количество строк (смотри выше), пишем нужные нам поля и поля для сортировки. А потом дописываем</p>
<p> if ($page==0) $request .= &quot;limit $rows_in_page&quot;; else $request .= &quot;limit &quot;.$page*$rows_in_page. &quot;,&quot;. $rows_in_page; (синтаксис: limit &lt;кол-во строк&gt; либо limit &lt;кол-во строк отступа&gt;, &lt;кол-во строк&gt;)
<p> В результате выполнения подобного запроса мы получим именно те самые строки, которые надо выводить на странице.</p>
<p> Для навигации можно либо рисовать ссылки на следующую и предыдущую страницы, либо, что сложнее, делать панель навигации на несколько страниц.</p>
<p> if ($page&gt;0) print (&quot;&lt;a href=search.php?search=&quot;. rawurlencode($good). &quot;&amp;page=&quot;. ($page-1). &quot;&gt;предыдущая страница&lt;/a&gt;&quot;); if ($page&lt;$results_amount/$rows_in_page) print (&quot;&lt;a href=search.php?search=&quot;. rawurlencode($good). &quot;&amp;page=&quot;. ($page+1). &quot;&gt;следующая страница&lt;/a&gt;&quot;);<br />
<blockquote> ПОДСВЕТКА ПОИСКОВЫХ ФРАЗ </p></blockquote>
<p> Для того, что бы подсветить поисковые запросы жирным шрифтом (а может быть определённым цветом, кому как больше нравиться), необходимо сделать всего лишь следующее:</p>
<p> $highlight = &quot;(&quot;. str_replace(&quot; &quot;, &quot;|&quot;, $good). &quot;)&quot;;
<p> Пробелы (а они у нас между словами стоят поодиночке, и нигде двойной пробел не встречается, к тому же с концов строки мы их тоже вырезали) достаточно заменить на вертикальную черту &ndash; разделитель вариантов в регулярных выражениях. &quot;Плохие&quot; слова мы не подсвечиваем, потому что в базе их не ищем :).</p>
<p> В коде, который выводит текст пишем:</p>
<p> $row[&quot;text&quot;] = ereg_replace($highlight, &quot;&lt;font color=#cc0000&gt;1&lt;/font&gt;&quot;,$row[&quot;text&quot;]);
<p> Если же у вас в тексте встречаются html теги, то следует поступить вот так:</p>
<p> $text = eregi_replace(&quot;&gt;([^&lt;]*)$words&quot;, &quot;&gt;1&lt;font color=#cc0000&gt;2&lt;/font&gt;3&lt;&quot;, $text);
<p> И в завершении я бы посоветовал сделать отдельную функцию, которая бы вырезала не только из поиска, но и вообще из всех полей ввода слова: INSERT, SELECT, DELETE и другие SQL команды, которые могут вызвать неприятности.</p>
<p> ПОДВОДИМ ИТОГ </p>
<p> Применяя все эти приёмы в совокупности (а именно так я и советую), можно добиться вполне неплохого поиска на собственном сайте, а вместе с этим сделать его безопасным для сайта и не дать пользователю, который хотел бы навредить сайту:<br /> а) узнать программную структуру сайта;<br /> б) вызвать перегрузку сервера бессмысленными запросами к базе данным;<br /> в) пользовать не увидит ошибки, если в запрос попал запрещённый символ&hellip;</p>
<p> А ещё мы помогли пользователю скорее сориентироваться, сделав подсветку поисковых фраз и разделив найденный текст по страницам.</p>
]]></content:encoded>
			<wfw:commentRss>https://508.com.ua/sozdaem-poisk-dlja-sajta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
