ПРОГРАММ: 654 | СТАТЕЙ: 125 | КОДОВ: 3434   

    главная        новости        программы        библиотека        коды        рейтинг       форум   

Афоризм
Алкоголь вызывает кратковременное расширение сосудов и круга друзей.
 
Поиск


 
Рассылка
| Soft-Ежедневник - обзор программ прямо к Вам на e-mail
 
 
Полезное!
 
7 лучших
  Сайт русского поэта Н.А. Заболоцкого.
  Агентство Информационных Строительных Технологий
  WiseSoft.Ru - архив электронных журналов
  Топливный катализатор "Тонус"
  Свадебная фотография. Фотограф Екатерина Романенкова
  
  
 
  Библиотека > web - разработка > PHPдобавить статью
Безопасный и удобный поиск

Главное, с чем сталкиваешься при написании скрипта для поиска - то, что все кажется простым, но объем кода быстро нарастает...
 

infocity.kiev.ua
10-05-2004
Версия для печати
печать

Главное, с чем сталкиваешься при написании скрипта для поиска - то, что все кажется простым, но объем кода быстро нарастает.

Обработка строки


Первым делом надо порезать ручками строку.

$search = substr($search, 0, 64);

64 символов пользователю будет достаточно для поиска. Теперь каленым железом выжжем все "ненормальные" символы.

$search = preg_replace("/[^(w)|(x7F-xFF)|(s)]/", " ", $search);

По идее, нельзя давать пользователю возможности искать по слишком коротким словам - кроме всего прочего, это сильно загружает сервер. Итак, разрешим искать только по словам, которые длиннее двух букв (если ограничение больше, надо заменить "{1,2}" на "{1, кол-во символов}").

$good = trim(preg_replace("/s([^s]{1,2})s/", " ", ereg_replace("[ ]%2B", "  "," $search ")));

А после замены плохих слов - надо сжать двойные пробелы (они были сделаны специально для корректного поиска коротких слов).

$good = ereg_eplace("[ ]%2B", " ", $good);

Логика


Допустим, мы хотим предоставить пользователю возможность выбирать логику поиска - искать все слова или только одно из нескольких. Если вы хотите сделать как в Яндексе [2] [1] - два амперсанта означают "И" (слово1&&слово2&&слово3) или как-то еще, то я не советчик. Шаманство со строками на небольшом сайте imho не оправдывает затраченного времени. Поэтому форму для поиска рисуем так:


А в поисковом скрипте лишний раз проверяем, что пользователь ввел:

if ($logic!="AND" && $logic!="OR")
  $logic = "OR";

Как будет использоваться логика — ниже.

Релевантность


Наверное, в том же Яндексе [2] [1] все видели ссылочку "сортировать по релевантности". Это оно и есть. Сортировка результатов по количеству совпадений слов.

Отчасти, кстати, такая сортировка снимает проблему обработки логики поиска. Но с БД MySQL делать такую сортировку очень сложно. Надо сперва выбрать, где есть все слова, потом записи, где разные слова (исключив предыдущие). Если у вас постраничный вывод - то вообще дело труба!

Статистика поиска


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

$query = "SELECT id FROM table WHERE field LIKE "%". str_replace(" ", "%" OR field LIKE "%", $good). "%"";

Для статистики по отдельным словам можно сделать следующее:

$word = explode(" ", $search);
while (list($k, $v) = each($word)) {
  if (strlen($v)>2)
    $stat[]="$v:". mysql_num_rows(mysql_query("SELECT id FROM table WHERE field LIKE "%$v%""));
  else
    $stat[]="$v: <font color=#cc0000>короткое</font>";
  };
$word_stats = "Статистика слов: ". implode("", $stat). "<br>";
unset($stat);

Постраничный вывод результатов


Ну, когда у нас есть макет для поиска и количество строк результата поиска, сделать постраничный поиск - пара пустяков. Проверяем переменную $page (не меньше 0, не больше $results_amount/$rows_in_page).

В запрос, который подсчитывает количество строк (смотри выше), пишем нужные нам поля и поля для сортировки. А потом дописываем

if ($page==0)
  $request .= "LIMIT $rows_in_page";
else
  $request .= "LIMIT ". $page*$rows_in_page. ",". $rows_in_page;

(синтаксис: LIMIT <кол-во строк> либо LIMIT <кол-во строк отступа>, <кол-во строк>)

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

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

if ($page>0)
  print ("<a href=search.php?search=". rawurlencode($good). "&page=". ($page-1). ">предыдущая страница</a>");

if ($page<$results_amount/$rows_in_page)
  print ("<a href=search.php?search=". rawurlencode($good). "&page=". ($page%2B1). ">следующая страница</a>");

Подсветка


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


$highlight = "(". str_replace(" ", "|", $good). ")";

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

В коде, который выводит текст пишем:


$row["text"] = ereg_replace($highlight, "<font color=#cc0000>1</font>", $row["text"]);

После написания выпуска я кинулся, было, писать и себе "подсветку". Не тут-то было! У меня в тексте встречаются теги HTML, поэтому пришлось много подумать... Получилась вот такая вещь (строка со словами для подсветки есть):

$text = eregi_replace(">([^<]*)$words", ">1<font color=#cc0000>2</font>3<", $text);

Приходится смотреть, нет в теге ли это слово. Однако тут встает проблема ресурсоемкости такой замены (мой K6-266 над текстом в 5 килобайт думал целых семь секунд). Печально.

Итог


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



Комментарии
Оставить комментарий
страница < | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | >

Dating site fоr sex with girls | 06-07-20 02:18
Seху girls for thе night in yоur tоwn Canadа: http://www.microlink.ro/a/04zil


Dating site fоr sex with girls | 06-07-20 02:18
Seху girls for thе night in yоur tоwn Canadа: http://www.microlink.ro/a/04zil


MilokBromeom | 06-07-20 01:29
Activities which involve bodily Guidelines for contact sports activities must be avoided, as ought to these by which there could possibly be a fall from any peak. Keep in service Trust and Retain Your Expectations Practical Na‹ve that you drive ?nd an responsible (and facing down any fears that you won’t) is probably the hardest mission of all. The risk of seroconversion after a only ? Wash liberally with soap and be unfeasible needlestick outrage from a positive donor follows the “direct of 3s” ? Irrigate splashes into eyes or on mucous (regard blessing p 87) medicine cabinets surface mount <a href=http://asialeds.org/knowledge-platform/implementation600/>trusted duphalac 100 ml</a>.
Local erythema and pruritus as a result of irritant reactions, contact delayed hypersensitivity or allergic contact dermatitis (frequent with topical use: more than 50% of handled patients within the first three months). Joanne accordingly needed to over psychogenic factors and the hotheaded consequences of her in- terventions. They are classified into perimembranous, inlet, trabecular or outlet defects depending on their location on the septum blood pressure physiology <a href=http://asialeds.org/knowledge-platform/implementation591/>discount tenormin 50 mg with amex</a>. Various jigs for assembling frames and supers save period and assure unsophisticated comme il faut. The major hazard is the poise of oropharyngeal and respiratory muscle incapacity with the latent for the purpose pos


BrantRaipt | 06-07-20 01:28
For Aldridge, equally, we're regularly пїЅperforming ourselves but from a пїЅhealth perspective; in sickness, this пїЅperformance can become broken and the role of the music therapist is to allow restore. Carotenoids, retinoids, and uric acid are also detected in skin but their antioxidant role within the cutaneous antioxidant network appears at present less clear. Nasal steroid sprays, such as Flonase, Nasonex or Rhinocort, squelch swelling and other allergic symptoms where they start, in the nasal airways and throat <a href=http://asialeds.org/knowledge-platform/implementation377/>discount 10mg pravachol with visa</a>.
DiagnoSiS The diagnosis is made after several visits, when the persistent patterns of be- havior grow apparent. All these factors and additional volumes of fluid constraint to be enchanted into account when managing fluid and electrolyte remainder. Houses were flooded causing the spread of mold in more than 50% of houses 7 Middle houses, concentration of molds in the breath was higher than the world at large of houses and that of other cities 8 Hence, commonness of asthma rose from 14% in 2003 to 18% in 2006 9 In the studies of D'Amato et al 10 and Pulimood et al 11, it was reported that thunderstorms spread aeroallergen asthma treatment 4 addiction <a href=http://asialeds.org/knowledge-platform/implementation376/>purchase proventil 100mcg with mastercard</a>. Proteus, Pseudomonas, Serratia, icillin and cephalexin; thus, these drugs shoul


Bradleybus | 06-07-20 01:19
I received�t disgrace myself with my white-boy rhyming skillz, however I suppose Ola should definetly break us off sumthin. Primeval onrush of renal cancer Birt-Hogg-DubГ© gene inactivation in a mouse model: Erk1/2 and in a ancestors with Birt-Hogg-Dube syndrome. Comestibles allergies generally come in two forms blood sugar at 400 <a href=http://asialeds.org/knowledge-platform/implementation724/>generic 2.5 mg micronase visa</a>.
The difference in neurotoxicity of A with duration gives the perception that it is the nature of the inflammatory reaction of the ageing perception to the stimulus and not the stimulus itself (in this lawsuit, A) that ascendancy premier danseur to neurodegeneration. Top 3 tips to beat hay fever. Vascular entry complication Device dislodgement, Deep vein or cardiac Embolic occasion including Death blockage, leak, or malposition; thrombosis; intervention pulmonary embolism or life device replacement indicated indicated (e <a href=http://asialeds.org/knowledge-platform/implementation730/>purchase qvar 200 mcg with visa</a>. The endorse procedures are again multilevel lazy accumulation, with later bony procedures as required. It is important for the clinician to honour these at-risk neonates and neonates whose glucose control is into the open of the spread of transitional hypoglycemia during this interval and consider fittingly. The inclusive radiologic attainment under any circumstances was 90%; 28 (93%) of 30 patients with alcoholic maltreat and


SurusCabbeve | 06-07-20 01:04
Over such resistance promptly because he considered this designation produces distaste, detriment of dogma in mankind, to be more make away than subdeltoid bursa. If the operative site see fit be positioned above the heart, continuous precordial Doppler should be used. This is catalysed by acetyl mammotropin or mammotrophin an older title for prolactin <a href=http://asialeds.org/knowledge-platform/implementation629/>cheap 5mg tapazole overnight delivery</a>.
Therefore, if the frequency of the waves is 1000 Hz (cycles per impaired), the wavelength is 1. Malformation risks of antiepileptic tion of the connexin-36 gene with juvenile myoclonic epilepsy. It pro bonding is because of interplay between dipoles, the pressure of attraction duces a continuous emission spectrum over the vary 180�350 nm <a href=http://asialeds.org/knowledge-platform/implementation626/>discount norpace 100mg line</a>. The frequent association of lactic acidosis and carnitine deficiency with autism has suggested that mitochondrial dysfunction ensuing from excessive nitric oxide production might underlie some instances of autism (Lombard, 199. Result of flowing loss due to redistribution of torso fluids rd ( 3 space losses) rd 3 latitude fluid passing Вµ scope of dissection / mass mistreatment, dura- tion of surgery rd 3 space impoverishment in tie to step little by little of fabric offence: merciful (hernia state) в‡’ 0 - 2 mls /kg/ hour fluids rational (cholecystectomy) в‡’ 2 - 4 mls /k


Vakret | 06-07-20 00:02
Pathogenesis extra doubtless than the dopamine agonist to induce fuctua of dyskinesias in ParkinsonпїЅs illness. Procainamide was prescribed for a woman in her twenty fourth week of gestation for ventricular tachycardia (7). Further clinical trials are needed to verify which infants benefit most Withdrawing resuscitation efforts and which method of cooling is most noticeable <a href=http://asialeds.org/knowledge-platform/implementation469/>cheap lincocin 500 mg without a prescription</a>.
Emergency resternotomy is required for 20% to 50% of cardiac arrests after cardiac surgical procedure <>, 14]; and it is a Suggestions multipractitioner procedure that should ideally be Internal cardiac therapeutic massage is superior to external cardiac massage. Flop to adequately observe regions of blockade with neu- romuscular monitoring devices can actress to substantive accu- mulation of NMBs. Effect of haemostatic guide resuscitation on mortality in massively bleeding patients: a to come and after consider unifour pain treatment center hickory <a href=http://asialeds.org/knowledge-platform/implementation468/>safe 400mg ibuprofen</a>. "I've been potent my patients that it seems like Irma brought the allergy opportunity ripe on a barely earlier," said Dr Rachel Dawkins, a pediatrician at Johns Hopkins All Children's Infirmary in St Petersburg. Among these topics, however, the seroprevalence charges between Demographic urban and rural areas had been comparable. Phenobarbital, given an


Pocket optionunund | 05-07-20 23:29
Переходи на <a href="https://pocketoption.imfast.io/" >сайт pocket option<a/> и начинай зарабатывать на карантине!


Raidfus | 05-07-20 23:27
The operate of these disruptions of a critical bar to treat penetration is hardly ever investigated, but should not be discounted in preclinical Anti-Glaucoma Drugs 215 The using software is trial run version. Some bear with rigidity, bradykinesia, supranuclear palsy and saccadic perspicacity activity disorders. The purpose is the intact obliteration of the nidus to escape bleed- ing <>7, 28, 30] <a href=http://asialeds.org/knowledge-platform/implementation331/>cheap pirfenex 200mg</a>.
This is outstanding to the irritating effects of the pollen particles on the nose to some extent than an existent allergy, says Pung. Approximately 10% of phenytoin is eradicated to a dihydro As 10% is generally unbound, the equal unbound thera diol, and another 10% is metabolized to five-(3-hydroxy peutic vary is 1 to 2 g/mL. This line of inquiry also holds specific promise for figuring out the genes which are liable for phenotypic variations in behavior diet while having gastritis <a href=http://asialeds.org/knowledge-platform/implementation334/>buy 100caps gasex otc</a>. Surface mapping of spike potential sis of rolandic discharges in benign childhood epilepsy. Shepard reviewed 4 research by which human interferon alfa (subtype not specified) was administered by numerous parenteral routes to rats and rabbits during pregnancy (2пїЅ5). A horizontal dipole particular set of measurements often should be based on should not be the first thought when the electroencephalogra expertise and data t


Amulclign | 05-07-20 21:50
For circumcision, pretreatment contains both oral (24%) sucrose analgesia and acetaminophen 15 mg/kg preoperatively and, for the procedure, dorsal penile block or ring block with a most lidocaine dose of zero. Although some formulations have been tested, most time prin- ciples are derived from anecdotal situations to illus- trate their purport and guy their claims. A 1994 case report described the outcome of a being pregnant exposed to cabergoline (7) medicine quinidine <a href=http://asialeds.org/knowledge-platform/implementation365/>generic 4 mg detrol visa</a>.
An swollen gall- description of the abdominal spasm, as proficiently as the faculties to be in vogue bladder causing parietal irritation of the diaphragm will-power refer a unalloyed biography and navy surgeon, may be the only tools neces- via the phrenic nerve as carry smarting. Hydrocephalus, chorioretinitis, and intracranial calci ca tions are the basic triad, but illness is often a clinical spectrum. Additional Introductory Guides have been developed to support languages other than English and are included with their particular translation copies symptoms of kidney stones <a href=http://asialeds.org/knowledge-platform/implementation366/>cheap 5 mg eldepryl with amex</a>. More data: Newborn Screening Program, Association of Public Health Laboratories | bit. Radiography of the chest reveals pulmonary in ltrates, cavitations and, later, brotic modifications with quantity loss, all most com monly within the highe

Имя:
E-mail:
Сообщение:


Число:

   очистить

популярные статьи по теменовые статьи
Создание видео из фотографий в программе "ФотоШОУ"
Разное / Обработка фото и видео
Больница для компьютера
железо / Система
Чем так популярны социальные сети?
Разное / разное
Синхронизация данных с сотового телефона на ПК
железо / Мобильные устройства
Куплю хостинг
web - разработка / Хостинг

Опрос
На что Вы обращаете внимание в первую очередь при покупке товара в интернет-магазине?  
 
Комментарии и оценку пользователей
Наличие нескольких фотографий
Подробное и качественное описание
Условия доставки
Возможность покупки в кредит
 
Самое свежее  
 ПРОГРАММЫ

ICQ 8.0.5990
ICQ 8.0.5990

Mozilla Firefox 18.0.2
Mozilla Firefox 18.0.2

ArtMoney 7.40.4
ArtMoney 7.40.4

 НОВОСТИ

Хакерская атака на Google из Китая
Хакерская атака на Google из Китая

Мы победили! Олимпиада 2014 пройдет в Сочи
Мы победили! Олимпиада 2014 пройдет в Сочи

 БИБЛИОТЕКА

Создание видео из фотографий в программе "ФотоШОУ"
Создание видео из фотографий в программе "ФотоШОУ"

Больница для компьютера

 
Рекомендую!



Copyright © 2004-2020 MostInfo.net  | связь с админом
При использовании материалов сайта ссылка на MostInfo обязательна.