Megvalósítási példa. Élő keresés a Bitrix-en. Megvalósítási példa Férfi keresési elem megkövetelése php i

A mai leckében megnézzük php mysql keresés. Rengeteg keresőszkript létezik, van amelyik adatbázist használ, van aki nélküle is megteszi, vannak speciális keresések pontos rendezéssel. A szokásos egyszerű keresésre koncentrálunk, amely két táblán keres információt az adatbázisból MySQL.

Első lépés. MySQL adatbázis.

Adatbázis létrehozása search_lite, két asztala van hírek- hírek és vakáció- üres álláshelyek.

Állítsa be a jogosultságokat:

Belépés - " gyökér",

Jelszó - "",

Házigazda - " helyi kiszolgáló".

A hírtábla kinyomtatása.

Táblázatszerkezet a "news" táblához -- TÁBLÁZAT LÉTEZÉSE, HA NEM LÉTEZIK "news" ("id" int(2) NOT NULL, "title" varchar(255) NOT NULL, "text" szöveg NOT NULL, ELSŐDLEGES KULCS ("id" `)) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

Dömping asztal vak - üresedés.

Táblaszerkezet a `vac` táblához -- TÁBLÁZAT LÉTEZÉSE, HA NEM LÉTEZ `vac` (`id` int(2) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `text` text NOT NULL, PRIMARY KEY (` id`)) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;

Második lépés. HTML és PHP.

Csatlakozunk az adatbázishoz. Állítson be feltételt egy változóra $search, amelyben a keresési lekérdezés nincs megadva, vagy 4 karakternél rövidebb, valamint ellenőrizze a perjeleket és vágja le a változót. Létrehozunk két lekérdezést, amelyek két táblát keresnek az adatbázisban hírekés vakáció mező keresési feltétele szerint szöveg. (Már kiválaszthatja, hogy hány táblát kell keresnie. Például lesznek táblái leckéket, anyagokat, cikkeket stb. A mező helyett a keresési feltételeket is módosíthatja szöveg, kiválaszthatja a mezőt cím vagy egy másik mező.) Ekkor a változóban történő keresés megjelenítésekor jelezzük, hogy a szöveg hány karakterből áll $szimbólumok. Ha a táblázatokban hírekés vakáció A keresés során nem találtunk semmit, üzenetet jelenítünk meg. Ha talált, akkor két táblázatból adja ki az adatokat hírekés vakáció az adott keresési lekérdezéshez.

Keresési eredmények a lekérdezésre: $search


"; visszhang"
A keresési lekérdezés nincs megadva, vagy 4 karakternél rövidebb!

"; ) else ( echo "
Keresési eredmények a lekérdezésre: $search

"; $search = htmlspecialchars(stripslashes(trim($search))); $sql_news = mysql_query("SELECT id, title, text FROM news WHERE text LIKE "%$search%""); $news = mysql_num_rows($sql_news ); $sql_vac = mysql_query("SELECT id, title, text FROM vac WHERE text LIKE "%$search%""); $vac = mysql_num_rows($sql_vac); $find = $search; $symbolls = "80"; if ($news==0 és $vac==0) echo "
A \"$search\" keresésnek nincs eredménye! Nyújtsa be újabb kérését!

"; else ( /*Hírek/hírek - táblázat*/ for($i=1; $hírek = mysql_fetch_array($sql_news); $i++) ( $keresőszöveg = $hír["szöveg"]; $kereső_szöveg = strip_tags($ search_text, "
"); $search_txt_length = strlen($keresőszöveg); $search_first_enter = strpos(strtolower($keresőszöveg), strtolower($find)); $pad_left = $search_first_enter - $szimbólumok; $pad_jobb = $search_first_enters + $symbolls + $symbolls; if ($pad_jobbra><0) $pad_left = "0"; $search_text = substr($search_text, $pad_left, $pad_right); $search_text = str_replace (strtolower($find), "".strtolower($find)."
$i. $hírek
...$search_text...
találtak a hírekben

"; ) /*Jobs/vac - table*/ for($i=1; $vac = mysql_fetch_array($sql_vac); $i++) ( $search_text = $vac["text"]; $search_text = strip_tags($search_text , "
"); $search_txt_length = strlen($keresőszöveg); $search_first_enter = strpos(strtolower($keresőszöveg), strtolower($find)); $pad_left = $search_first_enter - $szimbólumok; $pad_jobb = $search_first_enters + $symbolls + $symbolls; if ($pad_jobbra>$kereső_txt_hossza) $pad_jobbra = $keres_txt_length if ($pad_left<0) $pad_left = "0"; $search_text = substr($search_text, $pad_left, $pad_right); $search_text = str_replace (strtolower($find), "".strtolower($find)."", strtolower($keresés_szöveg)); visszhang"
$i. $vac
...$search_text...
üres álláshelyeken találhatók

"; } } } } ?>

Harmadik lépés. CSS.

Írjunk néhány stílust, amelyek meghatározzák a keresést.

Keresés_név ( szín: fekete; betűméret: 18 képpont; ) .search_questions ( szín: fekete; betűsúly: félkövér; betűméret: 15 képpont; ) .search_query ( szín: kék; betűstílus: dőlt; ) .search_error ( szín: piros; betűméret: 15 képpont; ) .search_input ( keret: 1px tömör fekete; szélesség: 500px; magasság: 30px; ) .search_word ( szín: kék; ) .search_title ( betűméret: 20px; szín: kék; font-weight: bold; ) .search_text ( font-size: 15px; color: black; ) .search_cat ( font-size: 12px; color: gray; float: right; margin-top: 20px; )

Megfontoltunk veled egy egyszerűt php mysql keresés A, amely információt keres egy adatbázisból. Feltétel szerint két asztal van használatban, bármilyen kényelmes módon testreszabhatja. A következő leckét az egyszerű keresés analógiájának szenteljük, csak speciális funkciókkal.

11,1K

Az egyik legnépszerűbb és legszükségesebb funkció bármely webhelyen a keresés, amelyet egy speciális űrlap segítségével hajtanak végre. Ez a funkció lehetővé teszi a látogatók számára, hogy gyorsan megtalálják az őket érdeklő tartalmat az oldalon.

Ma azt szeretnénk elmondani, hogyan kereshet az oldalon egy speciális űrlap segítségével, amely lekérdezi az adatbázis tábláit, és információkat jelenít meg a webhely aktuális vezetőiről. Megtanulja, hogyan hozhat létre adatbázistáblát, amely információkat tartalmaz az aktuális személyzetről.

Keresési űrlapok fejlesztése PHP-vel, és ismerkedjen az SQL-lel ( Strukturált lekérdezési nyelv) egy speciális nyelv az adatbázisokban található információk gyűjtésére, rögzítésére és módosítására. Mielőtt elkezdené, javasoljuk, hogy projektfájlok letöltése.

Mire lesz szüksége

  • MySQL adatbázis eszköz.
  • Helyi vagy távoli szerver PHP támogatással.
  • Szöveg szerkesztő.

Adatbázis létrehozása

Ha nem teljesen biztos abban, hogy képes kezelni a tárhelyén található adatbázist, akkor forduljon a házigazdához útmutatásért vagy segítségért. Az adatbázis létrehozása után össze kell kötnie, létre kell hoznia egy táblát, és be kell írnia a szükséges adatokat.

A legnépszerűbb MySQL kezelőeszköz a PHP My Admin , amely elég lesz a mai útmutatónkhoz.

Hozzon létre egy táblázatot

A táblázatunkat a következő formátumban kell elkészíteni:

oszlop neve adattípus Hossz Null or Not Null elsődleges kulcs? Automatikus növelés
ID INT 1 Nem nulla Igen Igen
Keresztnév Varchar 50 Nem nulla nem nem
vezetéknév Varchar 50 Nem nulla nem nem
Email Varchar 50 Nem nulla nem nem
Telefonszám Varchar 15 Nem nulla nem nem

Az adatbázistáblázat az Excelhez hasonlóan oszlopokból és sorokból áll. Az első oszlop lehetővé teszi az adatok név szerinti azonosítását. Ezután következik az Adattípusok (adattípus) oszlop, amely jelzi számunkra az oszlopban található adatok típusát. A Length (Length) mezőben a memória (tárhely) maximális mennyiségét jelzi egy táblázat oszlopához. Olyan változókat használunk, amelyek nagyobb rugalmasságot biztosítanak. Más szóval, ha a teljes név hossza kevesebb, mint 50 karakter, akkor a kijelölt helynek csak egy része lesz elfoglalva.

És a személyi adatok között nem lehetnek üres értékek ( null, üres). Az első sor sárga színnel van kiemelve, mert az ID oszlop az elsődleges kulcsunk. Az adatbázisban található elsődleges kulcs garantálja, hogy minden bejegyzés egyedi lesz. Ez az oszlop is automatikusan növekszik, ami azt jelenti, hogy adatbázisunkban minden rekord automatikusan egyedi számot kap.

A táblázatba beírjuk a személyzet képviselőit

Miután megértette a táblázatot, kezdje el feltölteni adatokkal. 6 bejegyzés elegendő ahhoz, hogy az eljárást az elmében rögzítse. Íme a saját példám:

Oszlopazonosító Keresztnév vezetéknév Email Telefonszám
2 Ryan Komornyik [e-mail védett] 417-854-8547
3 Brent Callahan [e-mail védett] 417-854-6587

Formafejlesztés

Webhelykereső űrlap létrehozásához a Google-on keresztül, nyissa meg a megfelelő szövegszerkesztőt. Javaslom az ingyenes PSPad használatát. Bármilyen szövegszerkesztőt használhat, amely rendelkezik szintaktikai kiemeléssel. Ez nagyban megkönnyíti a PHP kód írási és hibakeresési folyamatát. Ha oldalt hoz létre egy keresési űrlaphoz, mindenképpen .php formátumban mentse el, különben a PHP kód nem lesz megfelelően értelmezve. A dokumentum mentése után másolja bele a következő jelölést:

Kapcsolatkeresés:

Részletes kapcsolatkeresés

Kereshet vezeték- vagy keresztnév alapján



Ha ismeri a HTML nyelvet, akkor mindennek világosnak kell lennie legalább a nyitó űrlap címkéjéig. Ebben a címkében található a teljes kód legfontosabb eleme - az action attribútum. Űrlapunk műveleteként megadtuk a fájl nevét, majd alkalmaztuk a lekérdezési karakterláncot " megy”.

Kritériumok ellenőrzése

Amikor a felhasználó beír egy kereszt- vagy vezetéknevet, majd rákattint a küldés gombra, az űrlap elküldi magának az adatokat, és hozzáfűzi a lekérdezési karakterláncot. megy". Ezen a ponton ellenőrizzük a go lekérdezési karakterlánc jelenlétét. Ha az eredmény pozitív, megjelenítjük a keresési eredményeket.

A kért találatok megjelenítése előtt még egyszer ellenőriznünk kell: (1) elküldték-e az űrlapot, (2) a lekérdezési karakterlánc tartalmazta-e a go értéket, (3) a keresett kifejezést kisbetűvel vagy nagybetűvel írták be? Ha egyik ellenőrzés sem ad pozitív eredményt ( igaz), nem kell semmilyen intézkedést tennünk.

Először is adjunk hozzá egy kis PHP-kód blokkot a webhelykereséshez a záró címke után.:



Először megnyitunk egy PHP kód blokkot a "" címkével.

A címkepáron belüli bármely PHP kódot a szerver végrehajtja. Ezután ellenőrizzük, hogy az űrlapot elküldték-e:

Adjon meg egy keresett kifejezést

"; } ?>

Használjuk a beépített isset függvényt, amely bool értéket ad vissza, és belehelyezzük a $_POST tömböt. Egy logikai kifejezés a programozásban lehetővé teszi számunkra, hogy igaz vagy hamis értéket kapjunk.

Ezért ha a függvény true értéket ad vissza, akkor az űrlapot elküldtük, és folytatnunk kell a kód végrehajtását. Ha a függvény false -t ad vissza, akkor hibaüzenetet jelenítünk meg. Mentse el az összes beírt kódot a search_submit.php fájlba.

Adjon meg egy keresett kifejezést

"; } } } ?>

Beágyazunk egy másik feltételes logikai kifejezést a főbe, de ezúttal a $_GET tömböt használjuk a " megy". Mentse el a változtatásokat a search_go.php fájlba.

Most meg kell győződnünk arról, hogy a látogatók a lekérdezési karakterlánc első betűjét csak nagybetűvel vagy csak kisbetűvel írhatják be. Módot kell biztosítanunk a látogató által megadott keresési feltételek figyelembe vételére is. A látogatói bevitel ellenőrzésének legjobb módja egy reguláris kifejezés:

Egy másik feltételes logikai kifejezést beágyazunk a kettőnkbe. Ezúttal reguláris kifejezést használunk a bemenet érvényesítésére. A preg_match beépített függvényt két paraméterrel használjuk: egy reguláris kifejezést és egy űrlapmezőt, amelyre az érvényesítést alkalmazni kell.

Esetünkben ez a " Név" mező lesz ( név). A látogató által megadott keresési paraméterek lekéréséhez létrehozunk egy $name változót, és hozzá kötünk egy POST értéket az SQL lekérdezésben használt űrlap mezőjének nevével. Mostanra megvalósítottuk a következőket: (1) az űrlapadatok elküldése, (2) a lekérdezési karakterlánc tartalmaz egy go értéket, és (3) a látogató nagy vagy kis kezdőbetűt írt be. Mindezek az ellenőrzések még az adatbázis módosítása előtt megtörténnek. Mentse el az összes változtatást.

Csatlakozás, kijelölés, lekérdezés és eredmények visszaadása adatbázistáblából

Ha adatokat szeretne lekérni egy táblázatból, először csatlakoznia kell a szerverhez a webhelykeresési szkriptben. Ehhez a következő kódot használjuk:

", "") or die (" Nem tudok csatlakozni az adatbázishoz, mert: " . mysql_error()); else( echo "

Kérjük, írjon be egy keresési kifejezést

"; } } }?>

Létrehozunk egy $db változót, és hozzákötjük a MySQL beépített mysql_connect függvényéhez, amely három paramétert vesz fel: a szervert az adatbázissal ( helyi kiszolgáló, ha helyben dolgozik), bejelentkezési név és jelszó.

Ezt követően futtatjuk a beépített PHP függvényt die , amely leállítja a további kódfuttatást, ha nincs kapcsolat az adatbázissal. A hibainformációkat pedig a MySQL beépített mysql_error függvényének futtatásával nyomtassa ki, amely visszaadja a hiba okát. Mentse el a search_connectdb.php fájlt.

Kérjük, írjon be egy keresési kifejezést

"; } } } ?>

Hozzon létre egy mydb nevű változót, és kösse össze a beépített modullal MySQL függvények mysql_select_db, majd adja meg a korábban létrehozott adatbázis nevét. Ezt követően lekérdezzük az adatbázistáblát egy SQL lekérdezéssel, amelynek névváltozója tartalmazza a látogató által megadott keresési paramétereket:

Kérjük, írjon be egy keresési kifejezést

"; } } } ?>

Adatbázistábla lekérdezésekor létrehozunk egy $sql változót, és egy SQL lekérdezést tartalmazó karakterlánchoz kötjük. A SELECT utasítással lekérjük az értékeket az id oszlopokból, valamint a kereszt- és vezetékneveket a névjegytáblázatból. Ezután a WHERE záradékot, valamint a vezeték- és utónév értékét használjuk a keresés szűkítésére.

A LIKE operátorral együtt használjuk a százalékjelet (%) - egy speciális karaktert, amely 0 vagy több karaktert ad vissza, valamint a névváltozót a keresési karakterláncból. Ennek eredményeként a LIKE ( különleges karakterrel kombinálva) minden egyező nevet megtalál egy adatbázistáblában. Az egész folyamat a következőképpen írható le: A névjegyzékből kiválasztjuk a látogató által megadott kereszt- és vezetékneveket". Mentse el a search_query.php fájlt.

Kérjük, írjon be egy keresési kifejezést

"; } } } ?>

Létrehozunk egy $result változót, és hozzárendeljük a mysql_query() függvény értékét, a $query-be helyezve. Most a lekérdezésünk az eredményváltozóban kerül tárolásra. Az eredmény PHP-ben történő kiadásához létrehozunk egy hurkot, majd az adatokat egy rendezetlen listában adjuk ki:

n"; visszhang"

  • " . "
  • n"; visszhang""; ) ) else( echo"

    Kérjük, írjon be egy keresési kifejezést

    "; } } } ?>

    Először létrehozunk egy while ciklust, amelyen belül létrehozunk egy row nevű változót, és inicializáljuk a mysql_fetch_array függvény visszatérési értékével, amely az SQL lekérdezésünket tartalmazó eredményváltozót vesz fel. A while cikluson belül minden oszlopértékhez hozzárendeljük egy azonos nevű változó értékét. Ezután az értékeket egy rendezetlen listán belül adjuk ki.

    Itt két fontos dolgot kell megjegyezni: (1) a while cikluson belül nem kell értékeket rendelni a sortömb változóihoz, mivel az értékek közvetlenül a sortömbből vehetők át; (2) a fájlnévben használt horgonycímke az azonosítóval és a fő kulccsal együtt. Ennek az az oka, hogy sok keresési elem kezdetben semmit sem jelenít meg.

    Mivel csak az utó- és vezetéknevet jelenítjük meg, ha a horgonycímkénk végéhez azonosítót adunk, az azonosítót egy további lekérdezéshez is használhatjuk, amely további információkat jelenít meg a személyzetről. Mentse el a fájlt és tesztelje a webhelykereső PHP űrlapot ( search_display.php).

    Távolítsa el a lapokat

    Az eredmények rendezetlen listaként jelennek meg, de a lényeg az, hogy nincs szükségünk tabulátorokra. Megszabadulásához adja hozzá a következő CSS-szabályt a fájl legtetejéhez a fejben:

    Keresés betűk szerint

    Csak néhány extra kódsorra van szükség a helyesírás-keresés végrehajtásához. Adjuk hozzá ezt a kényelmes funkciót a látogatók számára. Ily módon a kereszt- vagy vezetéknévben szereplő betűk alapján meg tudják találni a személyzet képviselőit.

    Adja hozzá a következő kódsort a záró űrlapcímke után:

    A | b | K

    A címkét bekötjük egy lekérdezési karakterlánchoz egy horgony segítségével, és állítsa be egy adott betűre. A helyesírás-kereső funkció megvalósításához a következő kódot kell hozzáadnunk közvetlenül a záró kapcsos zárójel után az eredeti szkriptben, az alábbiak szerint:

    )//A keresési űrlap szkriptjének vége if(isset($_GET["by"]))( $letter=$_GET["by"]; //Csatlakozás az adatbázishoz $db=mysql_connect ("szervernév", " username" , "password") or die ("Nem tudok csatlakozni az adatbázishoz, mert: " . mysql_error()); //-Válassza ki az adatbázist $mydb=mysql_select_db("yourDatabase"); //-Az adatbázis lekérdezése táblázat $sql="SELECT ID, Keresztnév, Vezetéknév FROM Névjegyek WHERE Keresztnév LIKE "%" . $letter . "%" VAGY Vezetéknév LIKE "%" . $letter ."%""; //-Futtasson egy MySQL Query függvény lekérdezést $ result=mysql_query($sql); //-Eredmények számlálása $numrows=mysql_num_rows($result); echo "

    " .$numrows . " találat a következőre: " . $letter ."

    "; //-Indítsa el a ciklust, és rendezze az eredményeket while($row=mysql_fetch_array($result))( $FirstName =$row["FirstName"]; $LastName=$row["LastName"]; $ID=$ row[ "ID"]; //-Az eredmény megjelenítése a tömb echo "
      n"; visszhang"
    • " . "" .$FirstName . " " . $LastName . "
    • n"; visszhang"
    "; } }

    Itt megváltoztattuk a webhelykeresési szkript négy kódrészletét:

    • Használjuk az isset() függvényt, és beletesszük a $_GET tömböt, majd ellenőrizzük a by value-t;
    • Hozzon létre egy $letter változót, és inicializálja az értékét a $_GET tömbbel;
    • Változóbetű hozzáadása az SQL lekérdezéshez;
    • A változó betűjelét adjuk meg a kifejezésben, amelyben megkapjuk a megszámlált sorok számát.

    Mentse el a search_byletter.php fájlt, és ellenőrizze az eredményt.

    Keressen egy adott alkalmazottat

    A személyzet többi tagjával kapcsolatos információk megjelenítéséhez, amelyeket a hivatkozásunkon belüli egyedi azonosítón keresztül továbbítunk, a következő kódot kell hozzáadnunk közvetlenül a záró kapcsos kapcsos zárójel után a betűszkriptben, az alábbiak szerint:

    )//A szkript vége if(isset($_GET["id"]))( $contactid=$_GET["id"]; //Csatlakozás az adatbázishoz $db=mysql_connect ("szervernév", "felhasználónév" , " password") or die ("Nem tudok csatlakozni az adatbázishoz, mert: " . mysql_error()); //-válassza ki a használni kívánt adatbázist $mydb=mysql_select_db("yourDatabase"); //- Az adatbázis lekérdezése táblázat $sql="SELECT * FROM Contacts WHERE ID=" .$contactid; //- Lekérdezés futtatása a mysql_query() függvénybe $result=mysql_query($sql); //- Cikk futtatása és az eredmények rendezése while($row=mysql_fetch_array ($eredmény))( $FirstName =$row["FirstName"]; $LastName=$row["LastName"]; $PhoneNumber=$row["PhoneNumber"]; $Email=$row["Email"]; //- Az eredmény megjelenítése a tömb visszhangjában "

    "; } }

    Itt négy kódrészletet változtattunk meg:

    • Az isset() függvény segítségével ellenőrizzük az azonosító értékét a $_GET tömbben;
    • Hozzon létre egy $contactid változót, és inicializálja a $_GET tömbbel;
    • A táblázatban jelöljön ki mindent, ami csillaggal * van megjelölve. A csillag egy rövidített jelölés az SQL-ben, ami azt jelenti, hogy " add meg nekem a táblázat összes oszlopát és sorát". A megjelenítendő információk meghatározásához megemlítjük a contactid változót az SQL utasítás végén;
    • A személyzet minden képviselőjéről további információkat jelenítünk meg.

    Mentse el a search_byid.php fájlt, és ellenőrizze az eredményt.

    Felhívjuk figyelmét, hogy funkcióink az elvárásoknak megfelelően működnek. Ha beír egy kereszt- vagy vezetéknevet a mezőbe, vagy ha hiperhivatkozásként választ ki egy betűt, csak a személyzet tagjainak neve jelenik meg. Ha a hivatkozásra viszi az egérmutatót, az állapotsorban láthatja az egyedi azonosítót. Ha egy adott személyre kattint, a címsor megváltozik, és további információk jelennek meg az alkalmazottról.

    SQL injekció

    Azért adtunk hozzá reguláris kifejezést a keresőmezőnkhöz, hogy senki ne módosíthassa az SQL lekérdezésünket. A múltban ez a probléma gyakori volt, és a hackereknek sikerült saját SQL-lekérdezéseiket futtatniuk, miközben manipulálták az alkalmazást. Például, ha engedélyeztük az aposztróf használatát a területen, akkor a hacker egyszerűen törölheti az adatbázist a lekérdezéssel:

    "DON TABLE

    Mint már említettük, a reguláris kifejezés biztosítja, hogy a látogató csak kis- vagy nagybetűket írjon be első karakterként.

    Összefoglalva

    A mai cikkben megvizsgáltuk, hogyan lehet webhelyen keresni, valamint:

    • Adatbázisok és kapcsolódó táblák létrehozása;
    • Adatbázis-kezelő eszközök használata, oszlopok létrehozása és adatok bevitele;
    • PHP alapú keresési űrlapok fejlesztése, amelyek ellenőrizhetik a bemeneti adatokat, a változók meglétét a kérésben, valamint csatlakozhatnak az adatbázishoz és megjeleníthetik az eredményeket a táblázatból;
    • Hogyan védheti meg alkalmazását és adatbázisát az SQL injekciótól.

    A cikkből megszerzett ismeretek felhasználásával könnyedén módosíthatja valaki más kódját, valamint szükség esetén bővítheti a keresési űrlap funkcionalitását.

    Ez a kiadvány a "cikk" fordítása Hogyan hozzunk létre keresési funkciót PHP és MySQL segítségével» egy barátságos projektcsapat készítette

    A legjobb módja annak, hogy a felhasználó a webhelyen maradjon, ha hagyja, hogy megtalálja, amit keres. Ha ehhez kényelmes rendszert készít, akkor webhelye preferenciája nőni fog, és a felhasználó biztosan visszatér, hogy megtalálja, ami érdekli.

    Megmutatom, hogyan készíthetsz egy egyszerű, de funkcionálisan hatékony keresési űrlapot, amely az oldalon található cikkek keresésére szolgál. Az eredmények újratöltés nélkül jelennek meg az oldalon, ami kétségtelenül a legjobb módja az információk bemutatásának.

    Létrehozok 2 fájlt: search.php, amely HTML-t és JavaScriptet tartalmaz majd. A második fájl, a do_search.php tartalmazza a PHP kódot. Kezdjük el az első fájl létrehozását:

    PHP, jQuery kereső demo

    Próbáld meg beírni az ajax szót


    eredmények


    Ebben a fájlban egy normál HTML űrlapot hoztunk létre, amely egy POST kérést küld a háttérbe, a do_search.php fájlba.

    select_list($sql); if(count($row)) ( $end_result = ""; foreach($sor mint $r) ( $eredmény = $r["cím"]; $bold = " " . $word.""; $vég_eredmény .= "

  • " .str_ireplace($word, $bold, $eredmény) ."
  • "; ) echo $vég_eredmény; ) else ( echo "
  • Semmi sem található a kérésére
  • "; } } ?>

    A PHP kód megjegyzéseket tartalmaz, amelyek megkönnyítik a szkript működésének megértését. Ha vannak egyezések az adatbázisban, akkor azokat a keresett szavak félkövérre szedésével mutasd meg a felhasználónak.

    Adjunk mindennek egy kis CSS-t:

    Body( font-family:Arial, Helvetica, sans-serif; ) *( margó:0;padding:0; ) #container ( margó: 0 auto; szélesség: 600px; ) a ( szín:#DF3D82; szövegdekoráció: none ) a:hover ( color:#DF3D82; text-decoration:underline; ) ul.update ( list-style:none;font-size:1.1em; margin-top:10px ) ul.update li( height:30px; border-bottom:#dedede solid 1px; text-align:left;) ul.update li:first-child( border-top:#dedede solid 1px; height:30px; text-align:left; ) #flash ( margó- top:20px; text-align:left; ) #searchresults ( text-align:left; margin-top:20px; display:none; font-family:Arial, Helvetica, sans-serif; font-size:16px; color: #000; ) .word ( font-weight:bold; color:#000000; ) #search_box ( padding:4px; border:solid 1px #666666; width:300px; height:30px; font-size:18px;-moz- border-radius: 6px;-webkit-border-radius: 6px; ) .search_button ( border:#000000 solid 1px; padding: 6px; color:#000; font-weight:bold; font-size:16px;-moz- border-radius: 6px;-webkit-border-radius: 6px; ) .found ( font-weight: bold ; betűstílus: dőlt; szín: #ff0000; ) h2 ( jobb margó: 70 képpont; )

    Tehát megtanulta, hogyan hozhat létre egy egyszerű keresési űrlapot, amely az oldal újratöltése nélkül működik. Remélem tetszett a lecke.

    Által Ibrahim Diallo

    Közzétéve 2014. július 2. ~ 16 perc elolvasva

    A keresés fontos funkció a webhelyeken. Amikor néhány olvasóm meg akar keresni egy bizonyos részt a blogomban, a keresőmezőt használja. Korábban a Google Search hajtotta, de azóta nem azért cseréltem le saját, házi főzésű verzióra, mert jobbat tudok csinálni, hanem azért, mert érdekes kihívás volt.

    Ha siet, és csak azt szeretné, hogy webhelye kereshető legyen, tegye meg azt, amit korábban, használja a Google-t.

    // A search.php fájlban $term = isset($_GET["query"])?$_GET["query"]: ""; $term = urlencode($term); $webhely = urlencode("www.webhely.com"); $redirect = "https://www.google.com/search?q=site%3A($website)+($term)"; header("Hely: $átirányítás"); kijárat;

    Amit csinál, az nagyon egyszerű. Kérje le a felhasználó által átadott kifejezést, és továbbítsa a Google keresőoldalára. Korlátozza a keresési eredményt jelenlegi domainünkre a site: kulcsszó használatával a keresési lekérdezésben. A Google által indexelt összes oldala elérhető lesz a kereséssel. Ha azonban otthon szeretné kezelni a keresést, akkor folytassa az olvasást.

    Házi keresési megoldás

    Mielőtt továbbmennénk, próbálja meg használni a keresőmezőt ezen a blogon. Ugyanazt a folyamatot használja, amelyet alább leírok. Ha úgy érzed, hogy ezt szeretnéd, akkor folytasd az olvasást.

    Ez a megoldás kisméretű webhelyek számára készült. A LIKE-ot használom, mindkét végén helyettesítő karakterekkel, ami azt jelenti, hogy a keresés nem indexelhető. Ez azt jelenti, hogy a megoldás jól működik az Ön blogja vagy személyes webhelye esetén, amely nem tartalmaz rengeteg adatot. Portolja át egy nagyobb webhelyre, és nagyon lelassulhat. A MySQL teljes szöveges keresést kínál, amit itt nem csinálunk.

    Jegyzet: Ha 5000 blogbejegyzésed van, akkor is rendben van. .

    A blog szerkezetét referenciaként fogjuk fel. Minden blogbejegyzés tartalmazza:

    • Egy cím p_title
    • Egy url p_url
    • Összefoglaló p_summary
    • Egy bejegyzés tartalom p_content
    • És kategóriák kategória.címkenév

    Minden mezőre, amely megfelel a keresési kifejezésünknek, pontot adunk. A pontozás a mérkőzés fontosságától függ:

    // a kifejezés pontos egyezése a címben található $scoreFullTitle = 6; // egyezik a címmel a következő részben: $scoreTitleKeyword = 5; // a kifejezések pontos egyezése az összefoglalóban található $scoreFullSummary = 5; // egyezik az összegzéssel a $scoreSummaryKeyword = 4 részben; // a kifejezések pontos egyezése a tartalomban található $scoreFullDocument = 4; // a dokumentum egyezése a következő részben: $scoreDocumentKeyword = 3; // kategóriának felel meg: $scoreCategoryKeyword = 2; // egyezik az URL-lel $scoreUrlKeyword = 1;

    Mielőtt elkezdenénk, van néhány szó, amelyek nem járulnak hozzá nagy mértékben a kereséshez, és ezeket el kell távolítani. Példa "in", "it", "a", "the", "of" ... . Kiszűrjük ezeket, és nyugodtan adjunk hozzá minden olyan szót, amelyről úgy gondolja, hogy irreleváns. A másik dolog az, hogy korlátozni akarjuk a lekérdezés hosszát. Nem akarjuk, hogy egy felhasználó regényt írjon a keresőmezőbe, és összeomoljon a MySQL szerverünk.

    // Távolítsa el a felesleges szavakat a keresett kifejezésből, és adja vissza őket tömbfüggvényként filterSearchKeys($query)( $query = trim(preg_replace("/(\s+)+/", " ", $query)); $words = array(); // bővítse ki ezt a listát a szavaival. $list = array("in","it","a","the","of","or","I","you", "ő", "én", "mi", "ők", "ő", "hoz", "de", "az", "ez", "azok", "akkor"); $c = 0; foreach(explode(" ", $query) mint $key)( if (in_array($key, $list))(folytatás; ) $szavak = $kulcs; if ($c >= 15)( break; ) $c++ ; ) return $words; ) // limit szavak karakterek száma függvény limitChars($query, $limit = 200)( return substr($query, 0,$limit); )

    Segítő funkcióink mostantól korlátozhatják a karakterek számát és kiszűrhetik a haszontalan szavakat. Az algoritmus megvalósításának módja az, hogy minden alkalommal pontszámot adunk, amikor egyezést találunk. A szavakat az if utasítással egyeztetjük, és pontokat gyűjtünk, ha több szót egyeztetünk. A végén ezt a pontszámot használhatjuk az eredmények rendezésére

    Jegyzet: Nem fogom megmutatni, hogyan kell csatlakozni a MySQL adatbázishoz. Ha problémái vannak az adatbázishoz való hatékony csatlakozással, azt javaslom, hogy olvassa el ezt.

    Adjunk meg először egy struktúrát a függvényünknek. Megjegyzés Meghagytam a helyőrzőket, hogy a szakaszokat külön tudjuk megvalósítani.

    Függvénykeresés($query)( $query = trim($query); if (mb_strlen($query)===0)( // nincs szükség üres keresésre, igaz? return false; ) $query = limitChars($query) ; // Mérési pontszámok $scoreFullTitle = 6; $scoreTitleKeyword = 5; $scoreFullSummary = 5; $scoreSummaryKeyword = 4; $scoreFullDocument = 4; $scoreDocumentKeyword = 3; $scoreDocumentKeyword = 3; $scoreSkeyword =Searchword =KeyCategory; $scoreU $query); $escQuery = DB::escape($query); // lásd a fenti megjegyzést a db objektum lekéréséhez $titleSQL = array(); $sumSQL = array(); $docSQL = array(); $categorySQL = array (); $urlSQL = array(); /** Egyező teljes előfordulások PLACE HOLDER **/ /** Egyező kulcsszavak PLACE HOLDER **/ $sql = "SELECT p.p_id,p.p_title,p.p_date_publiced,p. p_url, p.p_summary,p.p_content,p.thumbnail, ((-- Cím pontszám ".implode(" + ", $titleSQL).")+ (-- Összefoglalás ".implode(" + ", $sumSQL) .")+ (-- dokumentum ".implode(" + ", $docSQL).")+ (-- címke/kategória ".implode(" + ", $categorySQL).")+ (-- url ". felrobban (" + ", $urlSQL).")) mint relevancia FROM bejegyzés p WHERE p.status = "közzétéve" VÉGRElevanciával >

    A lekérdezésben az összes pontszám összeadásra kerül relevancia változóként, és ennek segítségével rendezhetjük az eredményeket.

    Teljes előfordulások egyezése

    Gondoskodunk arról, hogy legyen néhány kulcsszó, majd hozzáadjuk a lekérdezést.

    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)"; )

    Ezek a meccsek magasabb pontszámmal. Ha a keresett kifejezés egy ezeket tartalmazó cikkre egyezik, nagyobb eséllyel jelennek meg a tetején.

    Egyező kulcsszó-előfordulások

    Végigpörgetjük az összes kulcsszót, és ellenőrizzük, hogy megfelelnek-e valamelyik mezőnek. A kategóriaegyezéshez egy allekérdezést használtam, mivel egy bejegyzésnek több kategóriája is lehet.

    Foreach($keywords mint $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 = "ha ((SELECT count(category.tag_id) FROM kategóriából 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)"; )

    Szintén, amint egy kommentelő alább rámutatott, meg kell győződnünk arról, hogy ezek a változók nem üres tömbök, különben a lekérdezés sikertelen lesz.

    // Csak ha üres, adj hozzá 0-t if (empty($titleSQL))( $titleSQL = 0; ) if (empty($sumSQL))( $sumSQL = 0; ) if (empty($docSQL))( $docSQL = 0; ) if (üres($urlSQL))( $urlSQL = 0; ) if (empty($tagSQL))( $tagSQL = 0; )

    A végén a lekérdezéseket összefűzi, és összeadja, hogy meghatározza a bejegyzés relevanciáját a keresési kifejezés szempontjából.

    // Távolítsa el a felesleges szavakat a keresett kifejezésből, és adja vissza őket tömbfüggvényként filterSearchKeys($query)( $query = trim(preg_replace("/(\s+)+/", " ", $query)); $words = array(); // bővítse ki ezt a listát a szavaival. $list = array("in","it","a","the","of","or","I","you", "ő", "én", "mi", "ők", "ő", "hoz", "de", "az", "ez", "azok", "akkor"); $c = 0; foreach(explode(" ", $query) mint $key)( if (in_array($key, $list))(folytatás; ) $szavak = $kulcs; if ($c >= 15)( break; ) $c++ ; ) return $words; ) // limit szavak karakterek száma function limitChars($query, $limit = 200)( return substr($query, 0,$limit); ) function search($query)( $query = trim ($query); if (mb_strlen($query)===0)( // nincs szükség üres keresésre igaz? return false; ) $query = limitChars($query); // Mérési pontszámok $scoreFullTitle = 6; $ scoreTitleKeyword = 5; $scoreFullSummary = 5; $scoreSummaryKeyword = 4; $scoreFullDocument = 4; $scoreDocumentKeyword = 3; $scoreCategoryKeyword = 2; $scoreUrlKe yword = 1; $kulcsszavak = filterSearchKeys($query); $escQuery = DB::escape($query); // lásd a fenti megjegyzést a db objektum lekéréséhez $titleSQL = array(); $sumSQL = array(); $docSQL = array(); $categorySQL = array(); $urlSQL = array(); /** Egyező teljes előfordulások **/ 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)"; ) /** Egyező kulcsszavak **/ foreach($keywords mint $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 kategóriából 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)"; ) // Ha üres, adjon hozzá 0-t if (empty($titleSQL))( $titleSQL = 0; ) ha (üres($sumSQL))( $sumSQL = 0; ) if (üres($docSQL))( $docSQL = 0; ) if (empty($urlSQL))( $urlSQL = 0; ) if (empty($tagSQL))( $tagSQL = 0; ) $sql = " SELECT p.p_id,p.p_title,p.p_date_publiced,p.p_url, p.p_summary,p.p_content,p.thumbnail, ((-- Cím pontszám ".implode(" + ", $titleSQL). ")+ (-- Összefoglalás ".implode(" + ", $sumSQL).")+ (-- dokumentum ".implode(" + ", $docSQL).")+ (-- címke/kategória ".implode" (" + ", $categorySQL).")+ (-- url ".implode(" + ", $urlSQL).")) mint relevancia FROM bejegyzés p WHERE p.status = "közzétéve" VIZSGÁLATOK > 0 ORDER BY relevancia DESC,p.page_views DESC LIMIT 25"; $eredmények = DB::query($sql); if (!$eredmények)( return false; ) return $results; )

    A search.php fájl most így nézhet ki:

    $term = isset($_GET["lekérdezés"])?$_GET["lekérdezés"]: ""; $keresési_eredmények = keresés($kifejezés); if (!$search_results) ( echo "Nincs eredmény"; kilépés; ) // Oldal nyomtatása az eredményekkel itt.

    Létrehoztunk egy egyszerű keresési algoritmust, amely megfelelő mennyiségű tartalom kezelésére képes. Minden meccshez önkényesen választottam ki a pontszámot, nyugodtan alakítsd át olyasmire, ami a legjobban megfelel neked. És mindig van hova fejlődni.

    Célszerű nyomon követni a felhasználóktól származó keresési kifejezést, így láthatja, hogy a legtöbb felhasználó ugyanazt keresi-e. Ha van minta, akkor mentheti nekik az utazást, és csak gyorsítótárazhatja az eredményeket gyorsítótárban.

    Ha működés közben szeretné látni ezt a keresési algoritmust, próbáljon meg egy cikket keresni az oldal tetején található keresőmezőben. Extra funkciókat adtam hozzá, például visszaadtam azt a részt, ahol az egyezés található a szövegben. Nyugodtan adjon hozzá funkciókat a sajátjához.

    Tetszett ez a cikk? Feliratkozhat, hogy további fantasztikusakat olvashasson. .

    Ehhez kapcsolódóan itt van néhány érdekes cikk.

    Itt az ideje, hogy egyszer és mindenkorra foglalkozz a mysql_* függvényekkel. Ezek a módszerek elavultak és lassúak. A frissítés ideje már rég elmúlt, de még mindig mindenhol látjuk. Mivel nem tudok minden szerzőt arra kényszeríteni, hogy frissítse az oktatóanyagát és a blogjait, úgy döntöttem, írok egy bejegyzést, hogy remélhetőleg jobb legyen a helyezés, és megadjam az alapvető információkat az újonnan érkezőknek.

    A saját webhely elkészítése nem lehet túl nehéz. Az olyan hosting cégek, mint a Godaddy vagy a Hostgator, bárki számára rendkívül egyszerűvé teszik az indulást; lehetővé teszik egy teljes webhely létrehozását anélkül, hogy kódot írnának. A legtöbb ember számára elegendő egy WordPress blog. Ha ez az, amit keres, keresse fel most a Godaddy.com oldalt. Elkészültünk. Másrészt, ha irányítani akarja, és nem korlátozza a megosztott tárhely hiányosságait pénztárcája felborítása nélkül jó helyen jár.

    A Vim a kedvenc szövegszerkesztőm a terminálon. Miután egy kis ideig játszottam a nano-val és az emacs-szal, végül megelégedtem a vimmel az egyszerűsége miatt (legyen szíves. Bár testreszabható, és úgy használható, mint egy teljes IDE, leginkább a szervereimen lévő fájlok szerkesztésére és apró, de lényeges változtatásokra használom. Ne menjünk bele a szerkesztők háborújába, és kezdjük el.

    Megjegyzések (45)

    Zaryel 2015. augusztus 12.:

    Ian Mustafa 2015. szeptember 26.:

    Rob 2015. szeptember 29.:

    adeem 2016. február 11.:

    Ivan Venediktov 2016. április 9.

    Főbb célok:

    • úgy valósítsa meg a keresést, hogy a keresési lekérdezés sorba történő beírása után a keresési eredmények e sor alatt jelenjenek meg
    • az eredmény kérése csak a keresési lekérdezés bevitelének befejezése után történjen

    Rendben, menjünk!

    Maga a blokk hozzávetőleges elrendezése egy keresési karakterlánccal és egy div-becenévvel, amelyhez a keresési eredményeket adjuk hozzá:

    Mert A keresés elérhető a webhely fejlécében, adjuk hozzá a megfelelő keresési és stílusszkripteket a találatokhoz:

    //a keresés befejezése: $APPLICATION->AddHeadScript("/search/ajax_search.js"); $APPLICATION->AddHeadScript("/search/jquery.mCustomScrollbar.js"); $APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH . "/css/ajax_search.css"); $APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH . "/css/jquery.mCustomScrollbar.min.css");

    Most pedig lássuk, mi van az ajax_search.js fájlban:

    függvény get_result ()( //a keresési eredmények törlése $("#search_result").html(""); //még nem kaptuk meg a keresési eredményeket - jelenítse meg az előtöltőt $("#search_result").append( "

    "); $.ajax(( type: "POST", url: "/search/ajax_search.php", adat: "q="+q, dataType: "json", siker: function(json)( //clear) preloader $("#search_result").html(""); $("#search_result").append(" "); // adja hozzá a json tömb minden elemét egy div-be a class="live-search" paraméterrel (használhatja saját elrendezését) $.each(json, function(index, element) ( $("#search_result" ).find ("".élő keresés").append(" "+elem.TITLE+""+elem.BODY_FORMATED+""); //console.log (elem.BODY_FORMATED); )); //stílusa a görgetésnek $(".live-search").mCustomScrollbar(( scrollInertia: 500 )); ) )); ) var timer = 0 ; var q = ""; $(dokumentum).ready(function() ( $("#q").keyup(function() ( q = this.value; clearTimeout(timer); timer = setTimeout(get_result, 1000) ) ; )); $("#reset_live_search").click(function() ( $("#search_result").html(""); )); ));

    keyup függvényt hívjuk a get_result () függvénynek, amely a div-nick-et id = "search_result"-val tölti ki ajaxban.

    Az mCustomScrollbar csak egy stílushívás (kikapcsolhatja).

    A /search/ajax_search.php webhelyről JSON formátumban kapunk adatokat.

    A JS komponenssel minden világos, most lássuk, mi történik az ajax_search.php fájlban:

    Search(array("QUERY" => $q, "SITE_ID" => LANG, "MODULE_ID" => "iblock", "CHECK_DATES" => "Y", "PARAM2" => "8")); $eredmény = array(); while ($res = $obSearch->GetNext())( $id = $res["ITEM_ID"]; //ha található szakasz: if (strripos($id, "S")!==false)( $result_item ["CÍM"] = $res["CÍM"]; $eredmény_item["URL"] = $res["URL"]; $result_item["BODY_FORMATED"] = $res["CÍM_FORMATED"]; $eredmény = $ result_item; ) //ha nincs S, akkor else( $result_item["CÍM"] = $res["CÍM"]; $result_item["URL"] = $res["URL"]; $eredmény_item[" BODY_FORMATED"] = $res["BODY_FORMATED"]; $eredmény = $eredmény_elem; ) ) echo json_encode($eredmény); ) ?>

    Ebben az esetben a keresés a Bitrix CSearch osztály Search metódusával történik. A PARAM2-ben írjuk, hogy melyik infoblokkban keressük. A keresési eredményeket a $result tömbbe toljuk. Vegye figyelembe, hogy a $res['ITEM_ID'] lehet elem vagy szakasz. Attól függően, hogy mit találtunk, a $result_item['BODY_FORMATED'] mezőben vagy a szakasz nevét, vagy az infoblokk talált elemének szövegrészét betoljuk.