Plemićki registar obrazac php. PHP skripte za obradu HTML obrazaca. Primjer #1 Najjednostavniji HTML obrazac

Posljednju izmjenu napravio Vincy 23. srpnja 2019.

Korisnička registracija ili prijava sastavni je dio mnogih web aplikacija i ključno je da bude ispravna za uspjeh aplikacije. To je početna točka angažmana korisnika s vašom aplikacijom.

Trebao bi biti što jednostavniji s najboljim UI/UX. Implementacija funkcije registracije korisnika pomoću PHP-a jednostavan je zadatak i ja ću vas provesti kroz korake s primjerima u ovom članku.

Što je unutra? Kako funkcionira ovaj primjer registracije PHP korisnika?

Ovaj primjer koda može se podijeliti u 3 dijela.

  • Dobivanje podataka o korisniku putem HTML obrasca.
  • Provjera podataka koje je korisnik poslao na slanju obrasca.
  • Rukovanje bazom podataka za spremanje registriranog korisnika u bazu podataka nakon provjere valjanosti.
  • Treći korak će se izvršiti nakon što se uvjerimo da korisnik već nije dodan. Ova provjera jedinstvenosti podataka izvršit će se na temelju njihove e-pošte i korisničkog imena koje su unijeli.

    Tijekom registracije općenito prikupljamo podatke o korisnicima koji su spremni registrirati se s našom aplikacijom. Neki od njih će biti obvezni, a neki izborni.

    Dakle, ova funkcionalnost također može uključivati ​​dio za provjeru valjanosti kako bi se osiguralo da korisnički podaci nisu prazni i format. Validacija se može obaviti na strani klijenta ili na strani poslužitelja.

    Uvijek je bolje imati provjeru valjanosti na strani poslužitelja. Možete odabrati da ga imate na strani klijenta također radi lakšeg korištenja korisnicima. Ali posjedovanje na strani poslužitelja nije izborno i minimalni zahtjev.

    Struktura datoteke

    HTML obrazac koji korisniku omogućuje registraciju

    U ovom primjeru obrazac za registraciju sadrži polja Korisničko ime, Ime (ime za prikaz), Lozinka i Email. Također ima polje za potvrdu lozinke koje omogućuje korisniku da ponovno unese svoju lozinku za potvrdu. Ove dvije lozinke usporedit će se kasnije u vrijeme .

    Slanjem ovog obrasca od korisnika se očekuje da se slaže s uvjetima. Stoga se polje za potvrdu dodaje prije gumba Registriraj kako bi se to osiguralo.

    Obrazac za registraciju PHP korisnika Prijava Korisničko ime

    CONFIG.PHP datoteku

    less/reg/?mode=auth">Prijava

  • Ova datoteka dbconnect.php morat će se povezati s rukovateljima obrascima.

    Obratite pažnju na varijablu $address_site, ovdje sam naveo naziv svoje testne stranice na kojoj ću raditi. U skladu s tim navedite naziv svoje stranice.

    Struktura stranice

    Sada pogledajmo HTML strukturu naše stranice.

    Premjestit ćemo zaglavlje i podnožje stranice u zasebne datoteke, zaglavlje.php I podnožje.php. Uključit ćemo ih na sve stranice. Naime na glavnoj stranici (datoteka indeks.php), na stranicu s obrascem za registraciju (datoteka obrazac_registar.php) i na stranicu s obrascem za autorizaciju (datoteka obrazac_auth.php).

    Blokiraj s našim vezama, registracija I ovlaštenje, dodajte ih u zaglavlje stranice tako da budu prikazani na svim stranicama. Jedna poveznica vodi do stranice s formularom za registraciju (datoteka obrazac_registar.php), a drugi na stranicu s obrascem za autorizaciju (datoteka obrazac_auth.php).

    Sadržaj datoteke header.php:

    Naziv naše stranice

    Kao rezultat toga, naša glavna stranica izgleda ovako:


    Naravno, vaša stranica može imati potpuno drugačiju strukturu, ali to nam sada nije važno. Glavna stvar je da postoje poveznice (gumbi) za registraciju i autorizaciju.

    Sada prijeđimo na obrazac za registraciju. Kao što već razumijete, imamo to u dosjeu obrazac_registar.php.

    Idite u bazu podataka (u phpMyAdmin), otvorite strukturu tablice korisnika i pogledajte koja nam polja trebaju. To znači da su nam potrebna polja za unos imena i prezimena, polje za unos poštanske adrese (Email) i polje za unos lozinke. A iz sigurnosnih razloga ćemo dodati polje za unos captcha.

    Na poslužitelju, kao rezultat obrade registracijske forme, mogu se pojaviti razne greške zbog kojih se korisnik neće moći registrirati. Stoga, da bi korisnik razumio zašto registracija ne uspijeva, potrebno je prikazati poruke o tim greškama.

    Prije prikazivanja obrasca dodajte blok za prikaz poruka o pogreškama iz sesije.

    I još nešto, ako je korisnik već autoriziran, a iz znatiželje ide izravno na stranicu za registraciju upisivanjem u adresnu traku preglednika adresa_mjesta/registar_obrazca.php, tada ćemo u ovom slučaju umjesto obrasca za registraciju prikazati zaglavlje da je on već registriran.

    Općenito, kod datoteke obrazac_registar.php dobili smo ovo:

    Već ste registrirani

    U pregledniku stranica s obrascem za registraciju izgleda ovako:


    Pomoću obaveznog atributa učinili smo sva polja obaveznim.

    Obratite pozornost na kod registracijske forme gdje se prikazuje captcha:


    Naveli smo put do datoteke u vrijednosti atributa src za sliku captcha.php, koji generira ovaj captcha.

    Pogledajmo kod datoteke captcha.php:

    Kod je dobro komentiran, pa ću se fokusirati samo na jednu točku.

    Unutar funkcije imageTtfText(), naveden je put do fonta verdana.ttf. Da bi captcha radila ispravno, moramo stvoriti mapu fontovi, i tamo postavite datoteku fonta verdana.ttf. Možete ga pronaći i preuzeti s interneta ili preuzeti iz arhive s materijalima ovog članka.

    Završili smo s HTML strukturom, vrijeme je da krenemo dalje.

    Provjera valjanosti e-pošte pomoću jQueryja

    Svaki obrazac treba provjeriti valjanost unesenih podataka, kako na strani klijenta (koristeći JavaScript, jQuery), tako i na strani poslužitelja.

    Posebnu pozornost moramo obratiti na polje Email. Vrlo je važno da je upisana poštanska adresa važeća.

    Za ovo polje za unos postavili smo vrstu e-pošte (type="email"), ovo nas malo upozorava na netočne formate. Ali to nije dovoljno, jer kroz inspektor koda koji nam preglednik nudi, možemo jednostavno promijeniti vrijednost atributa tip S elektronička pošta na tekst, i to je to, naš ček više neće vrijediti.


    I u ovom slučaju, moramo napraviti pouzdaniju provjeru. Da bismo to učinili, koristit ćemo jQuery biblioteku iz JavaScripta.

    Za povezivanje jQuery biblioteke, u datoteci zaglavlje.php između oznaka , prije završne oznake , dodajte ovaj redak:

    Odmah nakon ovog retka dodat ćemo kod za potvrdu e-pošte. Ovdje ćemo dodati kod za provjeru duljine unesene lozinke. Njegova duljina mora biti najmanje 6 znakova.

    Pomoću ove skripte provjeravamo ispravnost unesene adrese e-pošte. Ako je korisnik unio netočnu e-poštu, prikazujemo poruku o pogrešci o tome i onemogućujemo gumb za slanje obrasca. Ako je sve u redu, uklanjamo grešku i aktiviramo gumb za slanje obrasca.

    I tako smo završili s provjerom valjanosti obrasca na strani klijenta. Sada ga možemo poslati na server, gdje ćemo također napraviti par provjera i dodati podatke u bazu.

    Registracija korisnika

    Obrazac šaljemo u datoteku na obradu registar.php, POST metodom. Naziv ove datoteke rukovatelja naveden je u vrijednosti atributa akcijski. A način slanja naveden je u vrijednosti atributa metoda.

    Otvori ovu datoteku registar.php i prva stvar koju trebamo napraviti je napisati funkciju pokretanja sesije i povezati datoteku koju smo prethodno napravili dbconnect.php(U ovoj datoteci napravili smo vezu s bazom podataka). I također, odmah deklarirajmo ćelije poruke_pogreške I poruke_uspjeha u globalnom nizu sesija. U poruke_pogreške zabilježit ćemo sve poruke o pogreškama koje se pojave tijekom obrade obrazaca i u poruke_uspjeha, snimat ćemo radosne poruke.

    Prije nego nastavimo, moramo provjeriti je li obrazac uopće poslan. Napadač može pogledati vrijednost atributa akcijski iz obrasca i saznajte koja datoteka obrađuje ovaj obrazac. Možda mu padne na pamet otići izravno na ovu datoteku upisivanjem sljedeće adrese u adresnu traku preglednika: http://adresa_mjesta/registracija.php

    Stoga moramo provjeriti ćeliju u globalnom POST nizu čiji naziv odgovara nazivu našeg gumba "Registracija" iz obrasca. Na taj način provjeravamo je li kliknuto na gumb "Registracija" ili ne.

    Ako napadač pokuša otići izravno na ovu datoteku, primit će poruku o pogrešci. Dopustite mi da vas podsjetim da varijabla $address_site sadrži naziv stranice i deklarirana je u datoteci dbconnect.php.

    Captcha vrijednost u sesiji dodana je kada je generirana, u datoteci captcha.php. Kao podsjetnik, ponovno ću vam pokazati ovaj dio koda iz datoteke captcha.php, gdje se captcha vrijednost dodaje sesiji:

    Sada prijeđimo na samu provjeru. U datoteci registar.php, unutar if bloka, gdje provjeravamo je li kliknuto na gumb "Registracija", odnosno gdje je naznačen komentar " // (1) Prostor za sljedeći dio koda"pišemo:

    //Provjeri primljeni captcha //Skrati razmake s početka i kraja retka $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //Usporedite primljenu vrijednost s vrijednošću iz sesije. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Ako captcha nije točna, vraćamo korisnika na stranicu za registraciju i tamo ćemo mu prikazati poruku o pogrešci da je unio krivi captcha . $error_message = "

    Greška! Unijeli ste krivi captcha

    "; // Spremite poruku o pogrešci u sesiju. $_SESSION["error_messages"] = $error_message; // Vratite korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: " .$address_site ."/form_register.php"); //Zaustavite skriptu exit(); ) // (2) Mjesto za sljedeći dio koda )else( //Ako captcha nije proslijeđena ili je prazna izlaz ("

    Greška! Ne postoji kontrolni kod, odnosno captcha kod. Možete otići na glavnu stranicu.

    "); }

    Zatim moramo obraditi primljene podatke iz POST polja. Prije svega trebamo provjeriti sadržaj globalnog POST niza, odnosno postoje li tamo ćelije čiji nazivi odgovaraju nazivima polja za unos iz naše forme.

    Ako ćelija postoji, tada skraćujemo razmake s početka i kraja retka iz ove ćelije, u suprotnom, preusmjeravamo korisnika natrag na stranicu s formularom za registraciju.

    Zatim, nakon što smo izrezali razmake, dodamo liniju u varijablu i provjerimo je li varijabla prazna, ako nije prazna, idemo dalje, u suprotnom preusmjeravamo korisnika natrag na stranicu s formularom za registraciju.

    Zalijepite ovaj kod na navedeno mjesto" // (2) Prostor za sljedeći dio koda".

    /* Provjerite ima li podataka poslanih iz obrasca u globalnom nizu $_POST i zamotajte dostavljene podatke u regularne varijable.*/ if(isset($_POST["first_name"]))( //Skratite razmake od početka i kraj niza $first_name = trim($_POST["first_name"]); //Provjeri da li je varijabla prazna if(!empty($first_name))( // Radi sigurnosti, konvertiraj posebne znakove u HTML entitete $first_name = htmlspecialchars($first_name, ENT_QUOTES) ; )else( // Spremite poruku pogreške u sesiju. $_SESSION["error_messages"] .= "

    Unesite svoje ime

    Nedostaje polje za naziv

    "; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) if( isset($_POST["last_name"]))( //Skrati razmake s početka i kraja retka $last_name = trim($_POST["last_name"]); if(!empty($last_name)) ( // Radi sigurnosti, pretvorite posebne znakove u HTML entitete $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Spremite poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= "

    Molimo unesite svoje prezime

    "; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) )else ( // Spremite poruku pogreške u sesiju. $_SESSION["error_messages"] .= "

    Nedostaje polje za prezime

    "; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) if( isset($_POST["email"]))( //Skrati razmake s početka i kraja retka $email = trim($_POST["email"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) Lokacija koda za provjeru formata adrese e-pošte i njezine jedinstvenosti )else( // Spremite poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= "

    Unesi svoj email

    "; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) )else ( // Spremite poruku pogreške u sesiju. $_SESSION["error_messages"] .= "

    "; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) if( isset($_POST["password"]))( //Skrati razmake s početka i kraja niza $password = trim($_POST["password"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //Kriptiraj lozinku $password = md5($password."top_secret"); )else( // Spremi poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= "

    Unesite svoju lozinku

    "; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) )else ( // Spremite poruku pogreške u sesiju. $_SESSION["error_messages"] .= "

    "; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) // (4) Mjesto za kod za dodavanje korisnika u bazu

    Od posebnog značaja je polje elektronička pošta. Moramo provjeriti format primljene poštanske adrese i njezinu jedinstvenost u bazi podataka. Odnosno, postoji li već registrirani korisnik s istom adresom e-pošte?

    Na navedenoj lokaciji" // (3) Lokacija koda za provjeru formata poštanske adrese i njezine jedinstvenosti" dodajte sljedeći kod:

    //Provjerite format primljene adrese e-pošte koristeći regularni izraz $reg_email = "/^**@(+(*+)*\.)++/i"; //Ako format primljene adrese e-pošte ne odgovara regularnom izrazu if(!preg_match($reg_email, $email))( // Spremi poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= "

    Unijeli ste netočan email

    "; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); ) // Provjeravamo je li takva adresa već u bazi podataka. $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email."""); / /Ako broj primljenih ima točno jedan red, što znači da je korisnik s ovom adresom e-pošte već registriran if($result_query->num_rows == 1)( //Ako dobiveni rezultat nije lažan if(($row = $result_query->fetch_assoc()) != false) ( // Spremi poruku o pogrešci u sesiju. $_SESSION["error_messages"] .= "

    Korisnik s ovom email adresom je već registriran

    "; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); )else( // Spremi poruku o pogrešci na sesiju . $_SESSION["error_messages"] .= "

    Pogreška u upitu baze podataka

    "; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); ) /* zatvaranje odabira */ $ result_query-> close(); //Zaustavljanje skripte exit(); ) /* zatvaranje odabira */ $result_query->close();

    I tako, završili smo sa svim provjerama, vrijeme je da dodamo korisnika u bazu podataka. Na navedenoj lokaciji" // (4) Mjesto za kod za dodavanje korisnika u bazu" dodajte sljedeći kod:

    //Upit za dodavanje korisnika u bazu $result_query_insert = $mysqli->query("INSERT INTO `users` (ime, prezime, email, lozinka) VRIJEDNOSTI ("".$first_name."", "".$last_name ." ", "".$email.", "".$lozinka."")"); if(!$result_query_insert)( // Spremite poruku pogreške u sesiju. $_SESSION["error_messages"] .= "

    Pogreška u zahtjevu za dodavanje korisnika u bazu podataka

    "; //Vrati korisnika na stranicu za registraciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_register.php"); //Zaustavi izlaz skripte(); )else( $_SESSION["success_messages"] = "

    Registracija uspješno završena!!!
    Sada se možete prijaviti koristeći svoje korisničko ime i lozinku.

    "; //Pošaljite korisnika na stranicu za autorizaciju header("HTTP/1.1 301 Moved Permanently"); header("Lokacija: ".$address_site."/form_auth.php"); ) /* Dovršavanje zahtjeva */ $ result_query_insert-> close(); //Zatvori vezu s bazom podataka $mysqli->close();

    Ako se dogodila pogreška u zahtjevu za dodavanje korisnika u bazu, dodajemo poruku o toj pogrešci u sesiju i vraćamo korisnika na stranicu za registraciju.

    Inače, ako je sve prošlo u redu, sesiji dodajemo i poruku, ali ovaj put je ugodnije, naime kažemo korisniku da je registracija uspjela. I preusmjeravamo ga na stranicu s obrascem za autorizaciju.

    Skripta za provjeru formata adrese e-pošte i duljine lozinke nalazi se u datoteci zaglavlje.php, pa će vrijediti i za polja iz ovog obrasca.

    Sesija se također pokreće u datoteci zaglavlje.php, dakle u datoteci obrazac_auth.php Nema potrebe za pokretanjem sesije, jer ćemo dobiti grešku.


    Kao što sam već rekao, ovdje radi i skripta za provjeru formata email adrese i duljine lozinke. Stoga, ako korisnik unese netočnu e-mail adresu ili kratku lozinku, odmah će dobiti poruku o pogrešci. Tipka ući postat će neaktivan.

    Nakon ispravljanja grešaka, gumb ući postaje aktivan, a korisnik će obrazac moći poslati na poslužitelj gdje će se obraditi.

    Autorizacija korisnika

    Pripisati vrijednost akcijski hendikep autorizacije ima navedenu datoteku auth.php, to znači da će obrazac biti obrađen u ovoj datoteci.

    I tako, otvorite datoteku auth.php i napisati kod za obradu autorizacijskog obrasca. Prvo što trebate učiniti je pokrenuti sesiju i povezati datoteku dbconnect.php za povezivanje s bazom podataka.

    Kada kliknete na vezu za izlaz sa stranice, prelazimo na datoteku odjava.php, gdje jednostavno uništavamo ćelije s email adresom i lozinkom iz sesije. Nakon toga vraćamo korisnika natrag na stranicu na kojoj je link kliknut Izlaz.

    Kod datoteke odjava.php:

    To je sve. Sada znate kako implementirati i obraditi obrasce za registraciju korisnika i autorizaciju na vašoj web stranici. Ovi se obrasci nalaze na gotovo svakoj web stranici, pa bi ih svaki programer trebao znati izraditi.

    Također smo naučili kako validirati ulazne podatke, kako na strani klijenta (u pregledniku, koristeći JavaScript, jQuery) tako i na strani poslužitelja (pomoću PHP-a). Također smo naučili kako implementirati proceduru za napuštanje stranice.

    Sve skripte su testirane i rade. Arhivu s datotekama ove male stranice možete preuzeti na ovom linku.

    U budućnosti ću napisati članak u kojem ću opisati. Također planiram napisati članak u kojem ću objasniti (bez ponovnog učitavanja stranice). Dakle, kako biste bili informirani o objavljivanju novih članaka, možete se pretplatiti na moju web stranicu.

    Ako imate bilo kakvih pitanja, slobodno me kontaktirajte, a ako primijetite bilo kakvu grešku u članku, javite mi.

    Plan lekcije (5. dio):

  • Izrada HTML strukture za autorizacijski obrazac
  • Zaprimljene podatke obrađujemo
  • Pozdrav korisnika prikazujemo u zaglavlju stranice
  • Svidio vam se članak?

    Zdravo! Sada ćemo pokušati implementirati najjednostavniju registraciju na web mjestu koristeći PHP + MySQL. Da biste to učinili, Apache mora biti instaliran na vašem računalu. Princip rada naše skripte prikazan je u nastavku.

    1. Započnimo stvaranjem tablice korisnika u bazi podataka. Sadržat će korisničke podatke (prijavu i lozinku). Idemo na phpmyadmin (ako kreirate bazu podataka na računalu http://localhost/phpmyadmin/). Kreiramo tablicu korisnici, ona će imati 3 polja.

    Ja ga kreiram u bazi podataka mysql, možete ga kreirati u drugoj bazi podataka. Zatim postavite vrijednosti kao na slici:

    2. Potrebna je veza s ovom tablicom. Kreirajmo datoteku bd.php. Njegov sadržaj:

    U mom slučaju to izgleda ovako:

    Spremite bd.php.
    Sjajno! Imamo tablicu u bazi i vezu s njom. Sada možete krenuti u izradu stranice na kojoj će korisnici ostavljati svoje podatke.

    3. Napravite reg.php datoteku sa sadržajem (svi komentari unutra):



    Registracija


    Registracija


    Vaša prijava:




    Tvoja lozinka:








    4. Napravite datoteku koja će unijeti podatke u bazu i spremiti korisnika. save_user.php (komentari unutra):

    5. Sada se naši korisnici mogu registrirati! Zatim morate stvoriti "vrata" za već registrirane korisnike za ulazak na stranicu. index.php (komentari unutra) :




    Početna stranica


    Početna stranica


    Vaša prijava:


    Tvoja lozinka:






    Registar



    OK, sada je sve gotovo! Lekcija može biti dosadna, ali vrlo korisna. Ovdje je prikazana samo ideja registracije, a zatim je možete poboljšati: dodajte sigurnost, dizajn, podatkovna polja, učitavanje avatara, odjavu s vašeg računa (da biste to učinili, jednostavno uništite varijable iz sesije s funkcijom nepostavljenosti) i tako dalje. Sretno!

    Sve sam provjerio, radi kako treba!

    Obrasci su bitan dio svake web aplikacije. Koristimo ih za autorizaciju i registraciju novog korisnika, na stranici za povratne informacije, prilikom postavljanja komentara i za mnoge druge zadatke. Međutim, njihovo stvaranje i zatim njihova provjera valjanosti može biti frustrirajući proces - a tu uskače Laravel, dajući nam neke zgodne klase za intuitivni rad s obrascima i njihovim podacima.

    Stvaranje obrazaca u Laravelu

    Stvaranje obrazaca u Laravelu je iznenađujuće jednostavno. Uglavnom, ništa vas ne sprječava da koristite standardne HTML oznake, ali Laravel vam može uvelike olakšati život. Recimo da klasa PHP Form ima PHP metodu label() koja vam omogućuje povezivanje oznaka s poljima obrasca pomoću odgovarajućih (automatski generiranih) ID-ova. Napravimo jednostavan obrazac kao primjer:

    PHP Registrirajte se!



    ?>

    Sve je očito, zar ne? Otvaramo obrazac POST-zahtjev na ruti registra, kreirajte nekoliko oznaka i polja za unos i dodajte CSRF ključ, zatim zatvorite obrazac. Ako nam treba siguran put(koristeći HTTPS), tada ćemo poziv PHP Form :: open () zamijeniti pozivom PHP Form :: open_secure (), a ako trebamo kreirati obrazac za učitavanje datoteka, tada će nam dobro doći PHP Form :: open_for_files (). .

    Vjerojatno ste primijetili neke PHP Input::old() pozive - pričat ćemo o njima, ali za sada zapamtite da su tu.

    Klasa Obrazac sadrži mnogo metoda za jednostavno kreiranje obrazaca - možete ih provjeriti u dokumentaciji.

    Krivotvorenje zahtjeva između stranica (CSRF)

    Neću ulaziti u detalje o CSRF-u – Jeff Atwood je napisao vrlo jasan članak o tome što je to i kako ga izbjeći.

    Metoda Form::token() stvara nasumični niz znakova, pohranjuje ga u podatke o sesiji (što znači da morate omogućiti podršku za to u aplikaciji/config/session.php) i prikazuje ga kao skriveno polje obrasca. Prilikom obrade zahtjeva obrasca koji koristi CSRF ključ, možemo upotrijebiti ugrađeni csrf filter kako bismo provjerili da nitko nije dirao zahtjev i da on zapravo dolazi od korisnika.

    Ovako izgleda kod filtera (datoteka application/routes.php):

    PHP ruta::filter("csrf", funkcija() (
    if (Request :: forged ()) return Response :: error ( "500" );
    });

    Možemo ga prilagoditi kako nam je potrebno, ali za ovaj će članak biti dovoljan standardni rukovatelj.

    PHP ruta :: post ("register" , array("before" => "csrf" , function () (
    // Registracija novog korisnika.
    }));

    To je sve što nam treba da omogućimo CSRF filter - samo provjerite nalazi li se na prethodnom popisu.

    Validacija unesenih podataka

    Sada kada smo se uvjerili da se pristiglom zahtjevu može vjerovati, moramo provjeriti podatke koje je korisnik unio u obrazac. Vratimo se na našu registracijsku rutu, tamo dodamo ček, a onda ću objasniti što je što.

    Nekoliko ljudi primijetilo je da se provjera ne bi trebala provoditi u kontroleru. Obično je najbolje to učiniti u modelu - moj sljedeći članak, Advanced Input Validation in Laravel, opisuje upravo ovaj način rješavanja problema.

    PHP // datoteka aplikacija/rute.php.

    Route :: post ("register" , array("before" => "csrf" , function () (
    $pravila = niz(
    "korisničko ime" => niz("potrebno" , "jedinstveno:korisnici,korisničko ime"),
    "email" => array("required" , "email" , "unique:users,email" ),
    "lozinka" => niz("potrebno" , "min:7")
    );

    $validacija = Validator::make(Input::all(), $rules);

    Ako ($validacija -> ne uspije ()) (
    // provjera nije uspjela.
    return Redirect::to("register")->with_input()->with_errors($validation);
    }

    // podaci su provjereni - možemo kreirati novog korisnika.
    }));

  • Definiramo niz pravila - ključevi odgovaraju nazivima polja za unos obrasca, vrijednosti- pravila kojih se moraju pridržavati. U našem slučaju polje za korisničko ime mora biti popunjeno (obavezno) i jedinstveno (unique).
  • Napravite objekt PHP Validatora - prvi parametar prihvaća podatke za provjeru (u našem slučaju podatke obrasca primljene putem POST), drugi- skup pravila.
  • Zatim provodimo provjeru - ako ne uspije, preusmjeravamo korisnika natrag na put registracije (koristeći DOBITI) sa starim unosom i porukama o greškama.
  • Ako su sva polja ispravno popunjena, registriramo novi račun, autoriziramo korisnika ili radimo nešto treće.
  • Redoslijed radnji koje ovdje izvodimo naziva se obrazac Objavi/Preusmjeri/Dobij (PRG) - to je sjajan način da se spriječi dvostruko podnošenje obrazaca.

    Sada pogledajmo pravila koja smo gore definirali.

    potrebno - označava da polje mora biti popunjeno - drugim riječima, mora imati vrijednost.

    jedinstveno - ovo je malo kompliciranije. Ovo pravilo uzima 3 parametra, od kojih se 2 mogu izostaviti. Prvi parametar je naziv tablice u kojoj treba provjeriti jedinstvenost vrijednosti; drugi je naziv polja u tablici, ako ne odgovara nazivu polja u obrascu (u tom slučaju se može preskočiti); treći i posljednji parametar je vrijednost ( iskaznica) za primarni ključ.

    Pretpostavimo da ažuriramo postojeći korisnički profil - također želimo da njegov e-mail bude jedinstven, ali ako on odluči ne mijenjati adresu, onda ne bismo trebali reći da je uneseni e-mail već zauzet - od njega. Da bismo to učinili, prosljeđujemo korisnički ID - Laravel će isključiti odgovarajući unos iz provjere.

    PHP $rules = niz(
    "email" => array("required" , "email" , "unique:users,email," . $user -> id )
    );

    e-mail - provjerava je li unesena vrijednost Izgleda kao na ispravnu e-mail adresu, ali je ne provjerava postojanje.

    min - postavlja minimalnu dopuštenu duljinu vrijednosti ovog polja.

    Potpuni popis dostupnih pravila može se pronaći u dokumentaciji.

    Prikaz greške

    Svojstvo PHP $validation -> errors sadrži isti objekt Messages sa svim pogreškama pronađenim u ulaznim podacima. Laravel će otkriti da je napravljeno preusmjeravanje s greškama i automatski će vezati ovaj objekt za podnošenje. Uskoro ćete shvatiti što mislim.

    Sjećate li se PHP Input::old() poziva? Kada proslijedimo zahtjev s unosom oni će vratiti vrijednosti koje je korisnik ranije unio u obrazac. Dakle, ako sam rekao da se zovem "Jason", ali nije došlo do registracije, "Jason" će ostati upisano čak i nakon što sam preusmjeren natrag na obrazac. Sjajno!

    Polja lozinke u početku nemaju zadanu vrijednost, ali je možete eksplicitno postaviti pomoću niz atributa:

    PHP echo Form :: password ("password" , array("value" => Input :: old ("password" ))));

    Vratimo se našoj formi. Kao što se sjećate, imamo varijablu $errors - PHP Messages objekt. Učinimo naš obrazac lakšim za korištenje prikazivanjem pogrešaka kada je netočno ispunjen:

    PHP Registrirajte se!

    Echo Form::open("register" , "POST" );

    echo Form::label ("korisničko ime" , "Korisničko ime" ) . Form::text("username" , Input::old("username" ));

    if ($errors -> has ("username")) (
    echo $greške -> prvi ("korisničko ime" );
    }

    echo Form::label ("e-pošta" , "E-pošta" ) . Obrazac :: tekst ( "e-mail" , Unos :: stari ( "e-mail" ));

    if ($errors -> has ("email")) (
    echo $greške -> prvi ("e-pošta");
    }

    echo Form::label ("lozinka" , "lozinka" ) . Obrazac::lozinka("lozinka");

    if ($errors -> has ("password")) (
    echo $greške -> prvi ("lozinka" );
    }

    echo Form::submit("Registracija!");

    echo Forma::token(). Obrazac::zatvori();

    ?>

    Poruke će biti prikazane samo ako određeno polje sadrži pogreške.

    Poruku možete oblikovati u željeni HTML prosljeđivanjem u drugom parametru:

    PHP echo $errors -> first ("username" , ":message" );

    Ili, ako želite prikazati prvu poruku o pogrešci za bilo koje polje, a ne samo korisničko ime :)); ?>

    PHP $errors -> all() vraća niz formatiranih poruka, pa ga spajamo u niz.

    Vlastita pravila i greške

    Često ćete morati stvoriti vlastita pravila za provjeru valjanosti unosa. Prije Laravela 3 to se radilo nasljeđivanjem klase Validator i dodavanjem metoda u nju. Uz podršku paketa, bilo je potrebno robusnije rješenje kako se ne bi stvarale mnoge potklase. Laravel 3 omogućuje registraciju proizvoljnih pravila pomoću PHP Validatora::register():

    PHP // ovaj kod se može postaviti, na primjer, u application/start.php:
    Validator :: registar ("starts_with", funkcija ($attribute, $value, $parameters) (
    return starts_with ($vrijednost, $parametri [0]);
    });

    U ovom jednostavnom rukovatelju, jednostavno vraćamo true ako vrijednost počinje s navedenim nizom (proslijeđen kao prvi i jedini parametar), a false u suprotnom. Jedan od rijetkih koji se ovdje koristi globalne funkcije Laravel - PHP starts_with().

    Korištenje novog pravila:

    PHP $rules = niz(
    "web stranica" => niz("obavezno" , "počinje_sa:http://" )
    );

    Ovdje smo trebali definirati polje kao obavezna("potreban") Uz ovo, također moramo dodati poruku o pogrešci u datoteku application/language/en/validation.php:

    PHP "prilagođeno" => niz(
    "website_starts_with" => "Web stranica mora započeti s http://"
    )

    Ili to možete učiniti prilikom stvaranja instance Validatora, prosljeđujući je treći parametar:

    Dakle, napravili smo obrazac koji šalje POST- zahtjev našoj ruti, gdje unos provjerava kontroler - koji zauzvrat, ako se otkriju greške, šalje klijenta natrag, spremajući prethodni unos i prikazujući odgovarajuće poruke.



    Pročitajte također: