Pohlavie muži vyhľadávanie php odoslať. Formulár na odosielanie údajov v PHP (POST, GET). HTML formulár na odosielanie údajov

  • 20.06.2020

Aktualizované 30. apríla 2016

Ukážem vám, ako vytvoriť jednoduché vyhľadávanie pomocou PHP a MySQL. Naučíte sa:

  • Ako používať metódy GET a POST
  • Pripojte sa k databáze
  • Komunikujte s databázou
  • Nájdite zodpovedajúce položky databázy s daným slovom alebo frázou
  • Zobraziť výsledky

Príprava

Mali by ste mať nainštalované a spustené samozrejme Apache, MySQL a PHP (môžete použiť pre rôzne platformy alebo WAMP pre Windows, MAMP pre mac) alebo webový server / hosting, ktorý podporuje databázy PHP a MySQL.

Vytvorme databázu, tabuľku a naplňte ju niekoľkými položkami, ktoré môžeme použiť na vyhľadávanie:

  • Prejdite na stránku phpMyAdmin, ak máte na svojom počítači server, môžete k nemu pristupovať na adrese http: // localhost / phpmyadmin /
  • Vytvorte databázu, nazval som moju tutorial_search
  • Vytvorenie tabuľky Použil som 3 polia, ktoré som nazval moje články.
  • Konfigurácia pre 1. pole. Meno: id, typ: INT, kontrola AUTO_INCREMENT, index: primárny

INT znamená, že je to celé číslo
AUTO_INCREMENT znamená, že nové položky budú mať iné (vyššie) číslo ako predchádzajúce
Index: primárny znamená, že ide o jedinečný kľúč používaný na identifikáciu riadku

  • 2. pole: Názov: názov, typ: VARCHAR, dĺžka: 225

VARCHAR znamená reťazec textu, maximálne 225 znakov (je potrebné zadať maximálnu dĺžku), použite ho pre tituly, mená, adresy
dĺžka znamená, že nemôže byť dlhšia ako 225 znakov (ak chcete, môžete ju nastaviť na nižšie číslo)

  • 3. pole: Meno: text, typ: TEXT

TEXT znamená, že je to „dlhý reťazec, nie je potrebné zadať dĺžku, použite ho pre dlhý text.

  • Vyplňte tabuľku niekoľkými náhodnými článkami (nájdete ich na spravodajských weboch, napr.: CNN, BBC atď.). Kliknite na vložiť v hornom menu a skopírujte text do konkrétnych polí. Pole „id“ nechajte prázdne. Vložte aspoň tri.

Malo by to vyzerať asi takto:

  • Vytvorte priečinok v adresári servera a dva súbory: index.php a search.php (v skutočnosti to všetko môžeme urobiť iba s jedným súborom, ale použite dva, bude to jednoduchšie)
  • Vyplňte ich predvolenými značkami html, doctype, head atď.

Vyhľadávanie

  • Vytvorte formulár s vyhľadávacím poľom a tlačidlom Odoslať v index.php, môžete použiť metódu GET alebo POST, akciu nastavte na search.php. Ako názov textového poľa som použil "dotaz".

GET – znamená, že vaše informácie budú uložené na adrese URL (http: //localhost/tutorial_search/search.php? Dopyt = váš dotaz)
POST – znamená, že vaše informácie sa nezobrazia, používajú sa na heslá, súkromné ​​informácie, oveľa bezpečnejšie ako GET

Dobre, začnime s php.

  • Otvorte search.php
  • Spustite php ()
  • Pripojte sa k databáze (prečítajte si komentáre v nasledujúcom kóde)

< to >$ dotaz = mysql_real_escape_string ($ dotaz); // zabezpečí, aby nikto nepoužil injekciu SQL $ raw_results = mysql_query ("SELECT * FROM Articles WHERE (` title` LIKE "%". $ query. "%") ALEBO (`text` LIKE"% ". $ query."% ")") alebo zomrieť (mysql_error ()); // * znamená, že vyberie všetky polia, môžete tiež napísať: `id`,` title`, `text` // články je názov našej tabuľky //"% $ dotaz% "je to, čo hľadáme" ,% znamená čokoľvek, napríklad ak $ dotaz je Ahoj // bude sa zhodovať s "ahoj", "Ahoj človeče", "gogohello", ak chcete presnú zhodu, použite `title` =" $ dotaz "// alebo ak chcete na zhodu iba celého slova, takže „gogohello“ je mimo, použite „% $ dotaz%“ ... ALEBO ... "$ dotaz%" ... ALEBO ... "% $ dotaz" if (mysql_num_rows ($ raw_results)>

". $ výsledky [" názov "]."

". $ výsledky [" text "]."

"; // uverejňuje výsledky získané z databázy (názov a text) môžete tiež zobraziť id ($ výsledky [" id "]))) inak (// ak neexistujú žiadne zodpovedajúce riadky, urobte nasledujúce echo" Žiadne výsledky ";)) else (// ak je dĺžka dopytu menšia ako minimálna ozvena "Minimálna dĺžka je". $ min_length;)?>

Hotový!

Teraz to funguje. Skúšajte rôzne slová, variácie, upravujte kód, experimentujte. "Pridávam úplný kód oboch súborov v prípade, že si myslíte, že ste" niečo vynechali. Neváhajte sa opýtať alebo požiadať o návody.

index.php

Vyhľadávanie



search.php

Výsledky vyhľadávania = $ min_length) (// ak je dĺžka dopytu väčšia alebo rovnaká minimálna dĺžka, potom $ query = htmlspecialchars ($ dotaz); // zmení znaky použité v html na ich ekvivalenty, napríklad:< to >$ dotaz = mysql_real_escape_string ($ dotaz); // zabezpečí, aby nikto nepoužil injekciu SQL $ raw_results = mysql_query ("SELECT * FROM Articles WHERE (` title` LIKE "%". $ query. "%") ALEBO (`text` LIKE"% ". $ query."% ")") alebo zomrieť (mysql_error ()); // * znamená, že vyberie všetky polia, môžete tiež napísať: `id`,` title`, `text` // články je názov našej tabuľky //"% $ dotaz% "je to, čo hľadáme" ,% znamená čokoľvek, napríklad ak $ dotaz je Ahoj // bude sa zhodovať s "ahoj", "Ahoj človeče", "gogohello", ak chcete presnú zhodu, použite `title` =" $ dotaz "// alebo ak chcete na zhodu iba celého slova, takže „gogohello“ je mimo, použite „% $ dotaz%“ ... ALEBO ... "$ dotaz%" ... ALEBO ... "% $ dotaz" if (mysql_num_rows ($ raw_results)> 0) (// ak sa vráti jeden alebo viac riadkov, urobte nasledovné while ($ results = mysql_fetch_array ($ raw_results)) (// $ results = mysql_fetch_array ($ raw_results) vloží údaje z databázy do poľa, kým sú platné, že áno ozvena slučky"

". $ výsledky [" názov "]."

". $ výsledky [" text "]."

"; // uverejňuje výsledky získané z databázy (názov a text) môžete tiež zobraziť id ($ výsledky [" id "]))) inak (// ak neexistujú žiadne zodpovedajúce riadky, urobte nasledujúce echo" Žiadne výsledky ";)) else (// ak je dĺžka dopytu menšia ako minimálna ozvena "Minimálna dĺžka je". $ min_length;)?>

JavaScript je vo vašom prehliadači zablokovaný. Povoľte JavaScript, aby stránka fungovala!

Práca s formulármi

HTML formuláre sa používajú na prenos údajov od používateľa webovej stránky na server. Na prácu s formulármi v PHP existuje množstvo špeciálnych nástrojov.

Preddefinované premenné

PHP má množstvo preddefinovaných premenných, ktoré sa nemenia, keď všetky aplikácie bežia v určitom prostredí. Nazývajú sa tiež premenné prostredia alebo premenné prostredia. Odrážajú nastavenia prostredia webového servera Apache, ako aj informácie o požiadavkách pre daný prehliadač. Je možné získať hodnoty adresy URL, reťazca dopytu a ďalších prvkov požiadavky HTTP.

Všetky preddefinované premenné sú obsiahnuté v asociatívnom poli $ GLOBALS. Okrem premenných prostredia toto pole obsahuje aj globálne premenné definované v programe.

Príklad 1

Zobrazenie poľa $ GLOBAL $ hodnota) echo "\ $ GLOBALS [\" $ kľúč \ "] == $ hodnota
"; ?>

V dôsledku toho sa na obrazovke zobrazí zoznam všetkých globálnych premenných vrátane premenných prostredia. Tie najčastejšie používané:

VariabilnéPopisObsah
$ _SERVER ["HTTP_USER_AGENT"]Meno klienta a verziaMozilla / 5.0 (kompatibilný; Googlebot / 2.1; + http: //www.google.com/bot.html)
$ _SERVER ["REMOTE_ADDR"]IP adresa144.76.78.4
getenv ("HTTP_X_FORWARDED_FOR")Interná IP adresa klienta
$ _SERVER ["REQUEST_METHOD"]Spôsob požiadavky (GET alebo POST)GET
$ _SERVER ["QUERY_STRING"]Pri požiadavke GET sa kódované údaje odovzdajú spolu s adresou URL
$ _SERVER ["REQUEST_URL"]Úplná adresa klienta vrátane reťazca dotazu
$ _SERVER ["HTTP_REFERER"]Adresa stránky, z ktorej bola žiadosť podaná
$ _SERVER ["PHP_SELF"]Cesta k spustiteľnému programu/index.php
$ _SERVER ["SERVER_NAME"]doménastránky
$ _SERVER ["REQUEST_URI"]spôsob/php/php_form.php

Spracovanie používateľského vstupu

Program na spracovanie vstupu PHP možno oddeliť od textu HTML obsahujúceho vstupné formuláre alebo ho možno umiestniť na jednu stránku.

Príklad 2

Príklad spracovania vstupu

"metóda =" príspevok ">

Číslo karty:



Nie je tu žiadne tlačidlo prenosu dát, pretože jednopoľový formulár sa odošle automaticky po stlačení klávesu .

Pri spracovaní položky s výberom s viacerými hodnotami musíte k názvu položky pridať pár hranatých zátvoriek, aby ste získali prístup ku všetkým vybratým hodnotám. Ak chcete vybrať viacero položiek, podržte stlačený kláves Ctrl.

Príklad 3.1

Zoznam



VÝSLEDOK PRÍKLADU 3.1:

Príklad 3.2

Spracovanie zoznamu zo súboru ex1.htm

    "; foreach (položka $ ako hodnota $) echo"
  • $ hodnota "; echo"
"; ?>

Príklad 4. Príjem hodnôt zo začiarkavacích políčok

$ v) (ak ($ ​​v) echo „Poznáte programovací jazyk $ k!
"; else echo" Nepoznáte programovací jazyk $ k.
"; } } ?>
"method =" post "> Aké programovacie jazyky poznáte?
PHP
Perl

VÝSLEDOK PRÍKLADU 4:

Príklad 5

"; ?>
"metóda =" príspevok ">

Formuláre je možné spracovávať bez obáv o skutočné názvy polí.

Na tento účel môžete použiť (v závislosti od spôsobu prenosu) asociatívne pole $ HTTP_GET_VARS alebo $ HTTP_POST_VARS. Tieto polia obsahujú páry názov / hodnota pre každý prvok odoslaného formulára. Ak je vám to jedno, môžete použiť asociatívne pole $ _REQUEST.

Príklad 6

Spracovanie ľubovoľného vstupu bez ohľadu na spôsob prenosu $ value) echo "$ kľúč == $ hodnota
"; ?>

Príklad 7. Spracovanie kliknutia na tlačidlo pomocou operátora „@“.

">

Pomocou funkcie hlavičky () odoslaním hlavičky „Umiestnenie“ do prehliadača môžete používateľa presmerovať na novú stránku.

Napríklad:

Prenos súboru na server. Nahrajte súbor. Nahrať

PHP umožňuje prenášať súbory na server. HTML formulár na odoslanie súboru musí obsahovať argument enctype = "multipart / form-data".

Okrem toho musí byť pred poľom na kopírovanie súboru vo formulári skryté pole s názvom max_file_size. Toto skryté pole by malo obsahovať maximálnu veľkosť prenášaného súboru (zvyčajne nie viac ako 2 MB).

Samotné pole prenosu súboru je bežný prvok INPUT s argumentom type = "file".

Napríklad:

"metóda =" príspevok ">

Po nahratí súboru na server je jedinečne pomenovaný a uložený v dočasnom adresári. Úplná cesta k súboru sa zapíše do globálnej premennej, ktorej názov je zhodný s názvom poľa na prenos tohto súboru. Okrem toho PHP ukladá niektoré ďalšie informácie o prenášanom súbore do iných globálnych premenných:

Príklad 8

Spracovanie preneseného súboru "; echo" meno: ". $ _ FILES [" užívateľský súbor "] [" meno "]."
"; echo" veľkosť: ". $ _ FILES [" užívateľský súbor "] [" veľkosť "]."
"; echo" typ: ". $ _ FILES [" užívateľský súbor "] [" typ "]."
"; } ?>
"metóda =" príspevok ">



Príklady nahrávania súborov na server

Ak máte problémy so serverom prekódovaním nahraného súboru, symbol s kódom 0x00 nahradený medzerou (znak s kódom 0x20), pridajte do súboru httpd.conf z adresára Apache (/ usr / local / apache) nasledujúce riadky.

CharsetRecodeMultipartForms vypnuté

Najlepší spôsob, ako udržať používateľa na stránke, je nechať ho nájsť to, čo hľadá. Ak na to vytvoríte vhodný systém, úroveň preferencií vašich stránok porastie a používateľ sa určite vráti, aby našiel to, čo ho zaujíma.

Ukážem vám, ako vytvoriť jednoduchý, no funkčne efektívny vyhľadávací formulár, ktorý bude slúžiť na vyhľadávanie článkov na stránke. Výsledky sa zobrazia na stránke bez akéhokoľvek opätovného načítania, čo je nepochybne najlepší spôsob prezentácie informácií.

Vytvorím 2 súbory: search.php ktorý bude obsahovať HTML a JavaScript. Druhý súbor, do_search.php, bude obsahovať kód PHP. Začnime vytvárať prvý súbor:

PHP, ukážka vyhľadávania jQuery

Skúste napísať slovo ajax


Výsledky pre


V tomto súbore sme vytvorili bežný HTML formulár, ktorý odosiela požiadavku POST na koncový súbor do_search.php.

select_list ($ sql); if (počet ($ riadok)) ($ end_result = ""; foreach ($ riadok ako $ r) ($ výsledok = $ r ["title"]; $ bold = " ". $ slovo.""; $ end_result. ="

  • ". str_ireplace ($ slovo, $ tučné, $ výsledok)."
  • ";) echo $ end_result;) else (echo"
  • Nenašli sa žiadne výsledky pre vaše vyhľadávanie.
  • "; } } ?>

    PHP kód obsahuje komentáre, pomocou ktorých môžete ľahko pochopiť, ako skript funguje. Ak sa v databáze nachádzajú zhody, zobrazíte ich používateľovi, pričom slová, ktoré používateľ hľadal, zvýrazníte tučným písmom.

    Dajme tomu všetkému nejaké CSS:

    Telo (rodina písma: Arial, Helvetica, bezpätkové;) * (okraj: 0; výplň: 0;) #container (okraj: 0 auto; šírka: 600px;) a (farba: # DF3D82; dekorácia textu: žiadny) a: hover (farba: # DF3D82; text-decoration: underline;) ul.update (štýl zoznamu: žiadny; veľkosť písma: 1,1 em; okraj-vrchol: 10px) ul.update li (výška: 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 (margin- 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 (hmotnosť písma: tučné; farba: # 000000;) #search_box (vyplnenie: 4px; orámovanie: plné 1px # 666666; šírka: 300px; výška: 30px; veľkosť písma: 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 ; štýl písma: kurzíva; farba: # ff0000; ) h2 (pravý okraj: 70px;)

    Teraz ste sa naučili, ako vytvoriť jednoduchý vyhľadávací formulár, ktorý funguje bez opätovného načítania stránky. Dúfam, že sa vám návod páčil.

    11,1 tis

    Jednou z najobľúbenejších a najpotrebnejších funkcií na akejkoľvek stránke je vyhľadávanie implementované pomocou špeciálneho formulára. Táto funkcia umožňuje návštevníkom rýchlo nájsť obsah, ktorý ich na stránke zaujíma.

    Dnes vám chceme povedať, ako vykonať vyhľadávanie na stránke pomocou špeciálneho formulára, ktorý bude vyhľadávať databázové tabuľky a zobrazovať informácie o aktuálnych manažéroch na stránke. Naučíte sa vytvárať databázové tabuľky, ktoré budú obsahovať informácie o aktuálnom zamestnaní.

    Navrhnite vyhľadávacie formuláre pomocou PHP a tiež sa zoznámte s SQL ( Štruktúrovaný Dopytovací Jazyk) - špeciálny jazyk na zhromažďovanie, zaznamenávanie a úpravu informácií obsiahnutých v databázach. Skôr ako začnete, odporúčame vám stiahnuť súbory projektu.

    Čo potrebuješ

    • Nástroj na prácu s databázami MySQL.
    • Lokálny alebo vzdialený server s podporou PHP.
    • Textový editor.

    Vytvárame databázu

    Ak si nie ste úplne istí, že viete zistiť databázu na svojom hostingu, kontaktujte poskytovateľa hostingu a požiadajte ho o príslušné pokyny alebo pomoc. Po vytvorení databázy ju budete musieť pripojiť, vytvoriť tabuľku a zapísať do nej potrebné údaje.

    Najpopulárnejším nástrojom na správu MySQL je PHP My Admin. Tento nástroj bude pre náš dnešný tutoriál stačiť.

    Vytvorenie tabuľky

    Naša tabuľka by mala byť vytvorená v nasledujúcom formáte:

    Názov stĺpca Dátový typ Dĺžka Null or Not Null Primárny kľúč? Automatický prírastok
    ID INT 1 Nie je nulový Áno Áno
    Krstné meno Varchar 50 Nie je nulový # #
    Priezvisko Varchar 50 Nie je nulový # #
    Email Varchar 50 Nie je nulový # #
    Telefónne číslo Varchar 15 Nie je nulový # #

    Databázová tabuľka sa skladá zo stĺpcov a riadkov, rovnako ako v Exceli. Prvý stĺpec vám umožňuje identifikovať údaje podľa názvu. Ďalej je stĺpec Typy údajov, ktorý nám udáva typ údajov, ktoré stĺpec obsahuje. Pole Dĺžka určuje maximálne množstvo pamäte (úložného priestoru) pre stĺpec tabuľky. Používame premenné, ktoré poskytujú väčšiu flexibilitu. Inými slovami, ak je dĺžka celého mena menšia ako 50 znakov, zaberie sa iba časť prideleného priestoru.

    A medzi personálnymi údajmi nemôžu byť žiadne prázdne hodnoty ( null, prázdny). Prvý riadok je zvýraznený žltou farbou, pretože stĺpec ID je náš primárny kľúč. Hlavný kľúč v databáze zabezpečuje, že každý záznam je jedinečný. Tento stĺpec sa tiež automaticky zvyšuje, čo znamená, že každému záznamu v našej databáze bude automaticky pridelené jedinečné číslo.

    Do tabuľky zapisujeme zástupcov zamestnancov

    Keď pochopíte tabuľku, začnite ju plniť údajmi. Na zafixovanie postupu vo vašej mysli stačí 6 záznamov. Nižšie je môj vlastný príklad:

    ID stĺpca Krstné meno Priezvisko Email Telefónne číslo
    2 Ryan Butler 417-854-8547
    3 Brent Callahan 417-854-6587

    Dizajn formulára

    Ak chcete vytvoriť formulár na vyhľadávanie na stránkach pomocou Google, otvorte akýkoľvek vhodný textový editor. Odporúčam používať bezplatný PSPad. Môžete použiť ľubovoľný textový editor, ktorý poskytuje zvýraznenie syntaxe. To značne uľahčí proces písania a ladenia PHP kódu. Keď vytvárate stránku pre vyhľadávací formulár, nezabudnite ju uložiť vo formáte .php, inak nebude kód PHP analyzovaný podľa očakávania. Po uložení dokumentu doň skopírujte nasledujúce označenie:

    Hľadať kontakty:

    Podrobné vyhľadávanie kontaktov

    Môžete vyhľadávať podľa mena alebo priezviska



    Ak sa vyznáte v HTML, tak by vám malo byť všetko jasné aspoň po úvodnú značku formulára. Vo vnútri tohto tagu je najdôležitejší prvok celého kódu – atribút action. Ako akciu pre náš formulár sme zadali názov nášho súboru a potom sme použili reťazec dopytu „ ísť”.

    Kontrola súladu s kritériom

    Keď používateľ zadá meno alebo priezvisko a potom klikne na tlačidlo Odoslať, formulár odovzdá údaje sebe a pridá reťazec dopytu „ ísť“. V tomto bode skontrolujeme prítomnosť reťazca dotazu go. Ak je výsledok pozitívny, zobrazíme výsledky vyhľadávania.

    Pred zobrazením požadovaných výsledkov musíme ešte raz skontrolovať: (1) bol formulár odoslaný, (2) obsahoval reťazec dopytu go, (3) bol vyhľadávací dopyt zadaný malými alebo veľkými písmenami? Ak žiadna z kontrol neposkytuje pozitívny výsledok ( pravda), potom nie sme povinní vykonávať žiadne akcie.

    Najprv pridajte malý blok kódu PHP na vyhľadávanie na stránkach za uzatváraciu značku.:



    Najprv otvoríme blok PHP kódu so značkou „“.

    Akýkoľvek PHP kód v tejto dvojici značiek bude vykonaný serverom. Potom skontrolujeme, či bol formulár odoslaný:

    Zadajte hľadaný výraz

    "; } ?>

    Použijeme vstavanú funkciu isset, ktorá vráti bool a vložíme do nej pole $ _POST. Booleovský výraz v programovaní nám umožňuje získať hodnotu true alebo false.

    Ak teda funkcia vráti hodnotu true, formulár bol odoslaný a musíme pokračovať vo vykonávaní kódu ďalej. Ak funkcia vráti hodnotu false, zobrazí sa chybové hlásenie. Uložte celý napísaný kód do súboru search_submit.php.

    Zadajte hľadaný výraz

    "; } } } ?>

    Do hlavného výrazu vnoríme ďalší podmienený booleovský výraz, ale iba tentoraz použijeme pole $ _GET spolu s hodnotou „ ísť“. Uložte zmeny do súboru search_go.php.

    Teraz sa musíme uistiť, že návštevníci môžu zadať prvé písmeno v reťazci dopytu iba veľké alebo len malé. Musíme tiež poskytnúť spôsob, ako zohľadniť kritériá vyhľadávania zadané návštevníkom. Najlepšie je overiť údaje zadané návštevníkom pomocou regulárneho výrazu:

    Do našich dvoch vložíme ďalší podmienený booleovský výraz. Tentokrát na overenie vstupu používame regulárny výraz. Používame vstavanú funkciu preg_match s dvoma parametrami: regulárny výraz a pole formulára, ktoré sa má overiť.

    V našom prípade to bude pole „Názov“ ( názov). Aby sme získali parametre vyhľadávania poskytnuté návštevníkom, vytvoríme premennú $ name a naviažeme na ňu hodnotu POST s názvom poľa z formulára, ktorý sa použije v dotaze SQL. Teraz sme implementovali: (1) odoslanie údajov formulára, (2) reťazec dopytu obsahuje hodnotu go a (3) návštevník zadal prvé veľké alebo malé písmeno. A všetky tieto kontroly sa dejú ešte pred vykonaním zmien v databáze. Uložte všetky zmeny.

    Pripojiť, vybrať, dotazovať a vrátiť výsledky z databázovej tabuľky

    Ak chcete získať údaje z tabuľky, musíte sa najprv pripojiť k serveru v skripte vyhľadávania na lokalite. Na to používame nasledujúci kód:

    ", "") alebo zomrieť (" Nemôžem sa pripojiť k databáze, pretože: ". mysql_error ()); else (echo"

    Zadajte hľadaný výraz

    "; } } }?>

    Vytvoríme premennú $ db a naviažeme ju na vstavanú funkciu MySQL mysql_connect, ktorá má tri parametre: server s databázou ( localhost, ak pracujete lokálne), prihlasovacie meno a heslo.

    Potom spustíme vstavanú funkciu PHP die, ktorá zastaví ďalšie spúšťanie kódu, ak nie je pripojenie k databáze. A informáciu o chybe zobrazíme spustením vstavanej funkcie MySQL mysql_error, ktorá vráti dôvod chyby. Uložte súbor search_connectdb.php.

    Zadajte hľadaný výraz

    "; } } } ?>

    Vytvorte premennú s názvom mydb a naviažte ju na vstavanú Funkcie MySQL mysql_select_db a potom uvedieme názov databázy, ktorú sme vytvorili predtým. Ďalej dotazujeme databázovú tabuľku pomocou SQL dotazu s premennou name, ktorá obsahuje parametre vyhľadávania zadané návštevníkom:

    Zadajte hľadaný výraz

    "; } } } ?>

    Pri dotazovaní databázovej tabuľky vytvoríme premennú $ sql a naviažeme ju na riadok obsahujúci dotaz SQL. Na získanie hodnôt zo stĺpcov id a mena a priezviska z tabuľky kontaktov používame príkaz SELECT. Potom použijeme klauzulu WHERE spolu s hodnotami mena a priezviska na zúženie vyhľadávania.

    Spolu s operátorom LIKE používame znak percenta (%) – špeciálny znak, ktorý vracia 0 alebo viac znakov, ako aj premennú názvu z hľadaného reťazca. Výsledkom je LIKE ( v kombinácii so špeciálnym znakom) nájde akékoľvek zodpovedajúce meno v tabuľke databázy. Celý proces možno opísať takto: „ Z tabuľky kontaktov vyberieme meno a priezvisko, ktoré sa zhodujú s tými, ktoré zadal návštevník". Uložte súbor search_query.php.

    Zadajte hľadaný výraz

    "; } } } ?>

    Vytvoríme premennú $ result a priradíme jej hodnotu funkcie mysql_query () a vložíme ju do $ query. Teraz je naša požiadavka uložená v premennej result. Na výstup výsledku v PHP vytvoríme slučku a potom vypíšeme údaje v neusporiadanom zozname:

    n "; echo"

  • " . "
  • n "; echo"";)) inak (echo"

    Zadajte hľadaný výraz

    "; } } } ?>

    Najprv vytvoríme while cyklus, v ňom vytvoríme premennú s názvom row a inicializujeme ju návratovou hodnotou funkcie mysql_fetch_array, ktorá preberá výslednú premennú, ktorá obsahuje náš SQL dotaz. V rámci cyklu while priraďujeme každú hodnotu stĺpca premennej s rovnakým názvom. Potom vypíšeme hodnoty v neusporiadanom zozname.

    Tu je dôležité venovať pozornosť dvom bodom: (1) vo vnútri cyklu while nemusíte priraďovať hodnoty premenným poľa riadkov, pretože hodnoty možno prevziať priamo z poľa riadkov; (2) kotviaca značka, ktorú používame v názve súboru spolu s id a primárnym kľúčom. Dôvodom je, že mnohé položky vyhľadávania na začiatku nič nezobrazujú.

    Keďže zobrazujeme iba meno a priezvisko, pričom ID pripojíme na koniec nášho kotviaceho štítku, môžeme ID použiť na dodatočnú žiadosť, ktorá zobrazí ďalšie informácie o zamestnancoch. Uložte súbor a otestujte formulár vyhľadávania na stránkach PHP ( search_display.php).

    Odstráňte záložky

    Výsledky sa zobrazujú ako neusporiadaný zoznam, no podstatou je, že nepotrebujeme karty. Aby ste sa toho zbavili, pridajte nasledujúce pravidlo CSS na úplný začiatok súboru v hlave:

    Hľadajte podľa písmena

    Na implementáciu vyhľadávania podľa písmen je potrebných len niekoľko riadkov kódu navyše. Pridajme túto pohodlnú funkciu pre návštevníkov. Takto budú môcť zástupcov personálu hláskovať krstné meno alebo priezvisko.

    Za koncovú značku formulára pridajte nasledujúci riadok kódu:

    A | B | K

    Zviažeme štítok na reťazec dopytu pomocou kotvy a nastavte ho na konkrétne písmeno. Na implementáciu funkcie vyhľadávania podľa písmen musíme pridať nasledujúci kód hneď za uzatváraciu zloženú zátvorku v pôvodnom skripte, ako je uvedené nižšie:

    ) // Koniec skriptu vyhľadávacieho formulára if (isset ($ _ GET ["by"])) ($ písmeno = $ _ GET ["by"]; // Pripojenie k databáze $ db = mysql_connect ("názov servera" , "username" , "password") alebo zomrieť ("Nemôžem sa pripojiť k databáze, pretože:". mysql_error ()); // - Vyberte databázu $ mydb = mysql_select_db ("yourDatabase"); // - Dopyt do databázy tabuľka $ sql = "SELECT ID, First Name, LastName FROM Contacts WHERE FirstName LIKE"% ". $ letter."% "OR LastName LIKE"% ". $ letter."% ""; // - Spustenie MySQL Query $ function query výsledok = mysql_query ($ sql); // - Výsledky počítania $ numrows = mysql_num_rows ($ výsledok); echo "

    Pre výraz ". $ letter." sa našli výsledky ". $ numrows."

    "; // - Spustite cyklus a zoraďte výsledky počas ($ riadok = mysql_fetch_array (výsledok $)) ($ krstné meno = $ riadok [" krstné meno "]; $ Priezvisko = $ riadok [" Priezvisko "]; $ ID = $ riadok [ "ID"]; // - Vytlačí výsledok v poli echo "
      n "; echo"
    • "." ". $ Krstné meno." ". $ Priezvisko."
    • n "; echo"
    "; } }

    Tu sme zmenili štyri úryvky skriptu vyhľadávania na stránke:

    • Použijeme funkciu isset () a naplníme pole $ _GET a potom skontrolujeme hodnotu by;
    • Vytvorte premennú $ písmeno a inicializujte jej hodnotu pomocou poľa $ _GET;
    • Pridajte premennú písmeno do dotazu SQL;
    • Vo vnútri výrazu špecifikujeme premennú písmeno, v ktorej dostaneme spočítaný počet riadkov.

    Uložte súbor search_byletter.php a skontrolujte výsledok.

    Vyhľadajte konkrétneho zamestnanca

    Ak chcete zobraziť informácie o zvyšku personálu, ktorý sa prenáša cez jedinečné ID v rámci nášho odkazu, musíme pridať nasledujúci kód hneď za uzatváraciu zloženú zátvorku v skripte písmen, ako je uvedené nižšie:

    ) // Koniec skriptu if (isset ($ _ GET ["id"])) ($ contactid = $ _ GET ["id"]; // Pripojenie k databáze $ db = mysql_connect ("názov servera", " užívateľské meno", " heslo ") alebo zomrieť (" Nemôžem sa pripojiť k databáze, pretože: ". mysql_error ()); // - vyberte databázu na použitie $ mydb = mysql_select_db (" yourDatabase "); // - Dopyt do databázy údaje tabuľky $ sql = "SELECT * FROM Contacts WHERE ID =". $ contactid; // - Spustite dotaz na funkciu mysql_query () $ result = mysql_query ($ sql); // - Spustite cyklus a zoraďte výsledky počas ($ row = mysql_fetch_array ($ result)) ($ FirstName = $ riadok ["FirstName"]; $ LastName = $ riadok ["Priezvisko"]; $ PhoneNumber = $ riadok ["PhoneNumber"]; $ Email = $ riadok [ "E-mail"]; // - Vytlačí výsledok v poli echo "

    "; } }

    Tu sme zmenili štyri časti kódu:

    • Používame funkciu isset () a pomocou nej kontrolujeme hodnotu ID v poli $ _GET;
    • Vytvorte premennú $ contactid a inicializujte ju pomocou poľa $ _GET;
    • V tabuľke vyberte všetko, čo je označené hviezdičkou *. Hviezdička je skratka v SQL, ktorá znamená " dajte mi všetky stĺpce a riadky z tabuľky"... Aby sme určili, aké informácie sa majú zobraziť, uvádzame premennú contactid na konci príkazu SQL;
    • Zobrazujeme ďalšie informácie o každom zástupcovi personálu.

    Uložte súbor search_byid.php a skontrolujte výsledok.

    Upozorňujeme, že naša funkcia funguje podľa očakávania. Keď do poľa zadáte meno alebo priezvisko, alebo keď vyberiete písmeno ako hypertextový odkaz, zobrazia sa iba mená zástupcov zamestnancov. Ak umiestnite kurzor myši na odkaz, v stavovom riadku uvidíte jedinečné ID. Ak kliknete na konkrétnu osobu, panel s adresou sa zmení a zobrazia sa ďalšie informácie o tomto zamestnancovi.

    SQL injekcia

    Dôvod, prečo sme do nášho vyhľadávacieho poľa pridali regulárny výraz, je ten, že nikto nemôže zasahovať do nášho dopytu SQL. Tento problém bol bežný a hackerom sa podarilo spustiť svoje vlastné SQL dotazy pri manipulácii s vašou aplikáciou. Ak by sme napríklad povolili možnosť použitia apostrofu v našom poli, hacker by mohol databázu jednoducho vymazať pomocou dotazu:

    „PUSTITE TABUĽKU

    Ako už bolo uvedené, regulárny výraz zabezpečuje, že návštevník môže ako prvý znak zadať iba malé alebo veľké písmená.

    Na záver

    V dnešnom článku sme sa pozreli na to, ako vykonať vyhľadávanie na stránke, ako aj na:

    • Vytvárajte databázy a súvisiace tabuľky;
    • Používajte nástroje na správu databáz, vytváranie stĺpcov a zadávanie údajov;
    • Vyvíjajte vyhľadávacie formuláre založené na PHP, ktoré dokážu kontrolovať vstupné údaje, prítomnosť premenných v dotaze, ako aj pripojenie k databáze a zobrazenie výsledkov z tabuľky;
    • Ako ochrániť vašu aplikáciu a databázu pred SQL injection.

    Pomocou znalostí získaných z tohto článku môžete ľahko upraviť kód niekoho iného a v prípade potreby rozšíriť funkčnosť vyhľadávacieho formulára.

    Táto publikácia je prekladom článku " Ako vytvoriť funkciu vyhľadávania pomocou PHP a MySQL„Pripravil priateľský projektový tím

    V tomto článku sa dozviete, ako vytvoriť vyhľadávanie obsahu databázy pre vašu stránku. Tento algoritmus podporuje vyhľadávanie viacerých kľúčových slov. Algoritmus vyberie riadky databázovej tabuľky, v ktorých sú prítomné všetky zadané kľúčové slová.

    Je tam stôl "novinky" ktorý obsahuje nasledujúce polia: id, titul a obsahu:

    Chcete hľadať podľa poľa obsahu v našej databáze, ktorá pozostáva z nasledujúcich stĺpcov, pozri príklad na obrázku vyššie. Poďme k implementácii. Najprv si vytvorte stránku na testovanie práce. Bude obsahovať formulár s poľom na zadávanie kľúčových slov a tlačidlom "nájsť":

    Výpis html kódu:

    Vyhľadajte v databáze



    Do atribútov formulára zapíšeme cestu k handleru, ktorý obsahuje algoritmus a metódu post transfer.

    Reláciu používame na odovzdanie radu vybraných položiek.

    Aby sme to dosiahli, spustíme ho na samom začiatku stránky.

    Pre výstup použijeme funkciu print_r ().

    Aby sa po opätovnom načítaní stránky výsledok už druhýkrát nezobrazil pomocou odstaviť zabijeme reláciu.

    Vytvorme handler search.php... Najprv spustíme reláciu a pripojíme sa k databáze:

    "localhost", "dbname" => "ggwp", "user" => "ggwp", "password" => "123456",); $ dsn = "mysql: hostiteľ = ($ params [" hostiteľ "]); dbname = ($ params [" dbname "])"; $ db = nové PDO ($ dsn, $ params ["používateľ"], $ params ["heslo"]); $ db-> exec ("názvy súborov utf8"); ?>

    Získajte viac informácií o pripojení k databáze cez CHOP pozrieť sa do.

    Činnosť algoritmu je znázornená na obrázku:

    Rozoberme si výber podľa prvého slova, ako príklad použijeme vyhľadávací dotaz „ako spraviť web“:

    dotaz ($ sql); $ result-> setFetchMode (PDO :: FETCH_ASSOC); $ id_mass = pole (); $ i = 1; while ($ row = $ result-> fetch ()) ($ id_mass [$ i] = $ riadok ["id"]; $ i ++;) $ id_count = count ($ id_mass); ?>

    Najprv sa zmeňte $ str získajte reťazec z formulára pomocou metódy POST... Tento riadok rozdelíme pomocou funkcie na slová oddelené medzerou vystaviť a spočítajte počet slov. Vykonáme dotaz, v ktorom skontrolujeme prítomnosť prvého slova v stĺpci obsahu... Vytvoríme prázdne pole a zapíšeme do neho hodnoty získané ako výsledok výberu dotazu. Zapisujeme si $ id_count počet prijatých položiek.

    dotaz ($ sql); $ result-> setFetchMode (PDO :: FETCH_ASSOC); $ vysledok-> vykonat (); $ id_mass2 = pole (); $ riadok = $ vysledok-> vyzdvihnutie (); $ temp = $ riadok ["id"]; if ($ temp! = $ id_mass [$ j]) ($ id_mass [$ j] = -1;)))?>

    Táto časť algoritmu pracuje na princípe „screeningu“. Povedzme, že v databáze je desať článkov. Po vzorkovaní prvého slova dostaneme idčlánkov, v ktorých je slovo „ako“, takýchto článkov bolo šesť. Ďalej hľadáme druhé slovo medzi týmito šiestimi článkami, čím zužujeme vyhľadávanie. Táto iterácia ponecháva štyri články, ktoré zahŕňajú ako a čo robiť. V poslednej iterácii medzi zvyšnými štyrmi článkami hľadáme slovo „site“. Po tomto prechode dostaneme id jeden článok, ktorý obsahuje všetky kľúčové slová.

    Počet iterácií sa rovná počtu slov vo vyhľadávacom dopyte. Konečná prijatá suma id môže byť čokoľvek, v závislosti od dotazu a obsahu databázovej tabuľky.

    Ak v dôsledku vykonania dotazu v slučke dostaneme id(premenná tepl) rovná jednej z id predchádzajúca vzorka ( id_mass), potom toto id nechávame nezmenené. V opačnom prípade priradíme k prvku id_mass [j] hodnotu -1, čím sa vylúči zo spracovania.

    Po skončení cyklov dostaneme pole z id kde boli nájdené kľúčové slová a -1. Preniesť používateľovi len tie požadované id, používame cyklus, v ktorom prebieha kontrola, v dôsledku ktorej sú všetky prvky rovné -1 vyradené. Ostatné prvky odovzdáme do poľa relácie:

    Funkcia hlavička slúži na presmerovanie klienta na stránku vyhľadávania.

    V dôsledku vykonaných akcií sme dostali funkciu prehľadávania databázovej tabuľky. S malými úpravami je možné tento algoritmus použiť na načítanie a vyhľadávanie akéhokoľvek poľa v akejkoľvek databáze.