Punerea în aplicare de căutare pe site prin php

Sunteți aici: Pagina principală - PHP - Bazele PHP - Implementarea site de căutare cu PHP

Punerea în aplicare de căutare pe site prin php

Am cerut în mod repetat, pentru a scrie un articol despre cum să pună în aplicare de căutare pe site-ul prin intermediul PHP. Sarcina nu este ușor, eu chiar aș spune - o foarte dificilă, deoarece există o cantitate mare de nuanțe și obstacole. În acest articol, voi căuta algoritm pe site.

Să presupunem că site-ul nostru are o varietate de materiale (articole, știri, note și alte lucruri). Toate aceste lucruri se află în baza de date. Iar sarcina noastră - pentru a realiza căutarea pe site. Cel mai simplu algoritm este după cum urmează:

Mulți dintre voi vor spune că nu este nimic complex aici. Și acolo va fi parțial dreptate, cu toate acestea, vă permite să continuați cu un exemplu de căutare: „în căutarea textului.“ Se pune întrebarea: „Ce, de fapt, caută?“. Fie că caută o apariție exactă a textului „acest text caută.“ Sau, poate, textul este căutat, în cazul în care există trei cuvinte, dar care ar putea urma nu este una după alta. Sau, poate, textul este căutat, în cazul în care există cel puțin unul dintre aceste cuvinte.

Și aici este locul unde problema este mult mai complicată. Puteți face o sintaxă sistem complex (cum ar fi motoarele de căutare), de exemplu, este căutat pentru intrarea exactă, în cazul în care cererea este dată în ghilimele. Și vă pot oferi utilizatorilor posibilitatea de a alege de modul în care doresc să efectueze o căutare (folosind butoane radio). Deci, nu am pe site-ul. De aceea, în exemplul anterior, se adaugă încă un punct: compoziția SQL-interogare. Aici este un exemplu SQL-interogare atunci când aveți nevoie pentru a scoate toate materialele în care există cel puțin un cuvânt de interogare „în căutarea pentru textul“:

SELECT * FROM articole WHERE ( `text_article` cum ar fi "% în căutarea% "text_article` OR` cum ar fi "% în acest%" sau să` text_article` cum ar fi" % de text%")

Prin urmare, script-ul de căutare, trebuie să genereze interogări de tip SQL. trimite la o bază de date, pentru a primi un răspuns, și afișa. Acest lucru este încă și mai complexă atunci când afișați înregistrările de relevanță, deoarece este dificil de spus dintr-o dată că ar trebui să fie relevante: 3 interogare evenimente exactă sau 10 apariții ale răspunsului. Preferința Site-ul meu este întotdeauna dat vhozhdeniyai exactă, dar de data aceasta deja destul de controversat. Desigur, este dificil, iar dacă faci prima dată, numărul de ore pe care le petrec exact. Sper că punerea în aplicare meu algoritm de căutare pe site-ul prin intermediul PHP vă va ajuta.

Michael, când am introduce o cerere în limba engleză toate lucrările de îndată ce am introduce orice cod de română apare o eroare fatală de eroare: Apel la o fetch_assoc functie membru () pe un non-obiect în X: \ acasă \ greatsoftware.ru \ www \ fsearch.php pe linia 21, am încercat să „SET NUME cp1251“ nu funcționează, vă rugăm să-mi spui ce pot să fac.

Re-encode toate datele de intrare în codul corect, poate UTF-8 în loc de CP1251.

Michael, Buna ziua! Am o întrebare pentru tine. De exemplu, acesta este textul în baza de date (pe care doriți să text). $ Text = 'bine'; SELECT * FROM articole WHERE text_article LIKE „% $% Text“ Această interogare ne va reveni la o serie de toate articolele în care textul include o „bine“. Și cum să facă o interogare potrivire exactă. Adică faptul că cererea va fi de nimic înapoi.

Scoateți meta caracterele %% din cererea, atunci acesta va fi o potrivire exactă.

așa că nu găsește nimic. Vreau să spun că ar fi găsit cuvântul este complet. De exemplu, în baza de date există un text (acest text pe care doriți să) atunci când introduceți un „bine“ nu a găsit nimic, și dacă va aduce „dreapta“ este găsit.

Apoi, uita-te la expresii regulate. Încercați această cerere una, ar trebui să caute un anumit cuvânt „cuvânt“: SELECT * FROM tabel WHERE cuvinte regexp „[[:<:]]word[[:>:]] '

Bună ziua, promptă, vă rugăm, și cum să se întoarcă la rezultatele căutării? De exemplu, utilizatorul a avansat de căutare de 5 parametri, care au fost transmise prin poștă. Apoi, au fost obținute mai multe rezultate. Utilizatorul, de exemplu, unul dintre ei a deschis, citit, și apoi a vrut să se întoarcă la restul de primire. Se pare că este necesar să se transmită încă o dată aceste 5 parametri pentru a căuta sau au un fel de fire truc viclean în PHP mai ușor? Vă mulțumim!

Da, nu este foarte convenabil de a lucra. Dar dacă treci prin GET, utilizatorul va reveni la aceleași rezultate, fără nici o problemă.

Bună ziua, Michael! Te rog spune-mi cum să pună în aplicare o căutare pe mai multe tabele din baza de date. Vă mulțumim anticipat)

Bună ziua, Michael! Te rog spune-mi cum să pună în aplicare o căutare pe teme cu comutare în lista verticală. Site-ul este construit pe motorul de lecții dumneavoastră. De exemplu, există o secțiune 1 și 2 note secțiunea versuri, toate datele stocate în baza de date în 2 tabele. Se întâmplă că, în primul și în al doilea tabel este unul și același cântec, doar un singur text la celelalte note. În căutarea convențională atunci când tastați numele cântecului și în rezultatele căutării afișate în primele mele versuri, și apoi re-afișează textul, iar apoi este rezultatul de note. Dacă într-un tabel de bază de date cu note pentru a schimba numele cântecului la altul, atunci rezultatul căutării este excelent. De aceea, gândit pentru a căuta prin secțiune, pur și simplu nu știu cum. Vă rugăm să ajute sau spune-mi cum.

Instalați selectare, în cazul în care utilizatorul va alege un consiliu pentru a căuta. Pe baza selecției sale eșantionului ar trebui să se facă în tabelul corespunzător.

Poate vă rugăm să scrie o interogare SQL care va ieșire din baza de date pe baza selecției de secțiunea de căutare a utilizatorilor? În main.tpl am făcut un astfel de lucru

Doar nu știu cum de a lega această alegere la baza de date, newbie rău =)

Trebuie să scrie exact aceeași interogare ca și în articol, dar tabelul din care eșantionul este selectat prin intermediul If.

ceva ce nu a mers! Și dacă nu puteți codul de greu (un eșantion din baza de date pe care le-ați introdus și afișează rezultatele pe ecran)?

Mikhail. Vă mulțumesc foarte mult pentru articol. Sunt foarte, foarte atent că prochol.I am fost în stare să încerce să # 14))) Desigur petrecut 3 zile la asta. Pe de altă parte, căutarea sa dovedit mare. Vă mulțumesc foarte mult pentru un astfel de articol unic de.

Am o problemă există o listă de directoare, care sunt marcate în câmpul de baze de date, separate prin virgulă, și trebuie să eliminați aceste înregistrări în cazul în care vine Notația cuvântul Katale, toate directoarele va fi prescris o cerere get, separate prin virgulă, cum ar fi PHP indică faptul că un astfel de test și site-ul de testare director separate prin virgula sunt două cuvinte diferite, iar apoi căutarea caută ori de câte ori este indicat de testul de cuvânt. Iată codul sursă: Funcție de căutare ($ cuvinte) <$words = htmlspecialchars($words); if($words === "") return false; $query_search = ""; $array_words = explode(",",$words); foreach($array_words as $key=>$ Valoarea) $ Query = "SELECT * FROM WHERE system_position $ query_search"; $ Rezultat = mysql_query ($ query); $ I = 0; în timp ce ($ row = mysql_fetch_array ($ rezultat)) <$results[$i] = $row; $i++;> întoarce rezultate $;> $ = rezultate de căutare ($ _ GET [# 'tip #']); pentru ($ i = 0; $ i„>

Pentru această cercetare, care este descris în exemplul este setat la formatul bazei de date: MyISAM sau InnoDB?