Formular simplu de login in PHP
2
Mai jos este un exemplu de formular ce poate fi folosit pentru autentificarea (logarea) utilizatorilor. Deocamdata nu contine decat elementele de baza si verificari simple, tocmai pentru a evidentia modul de lucru cu formulare in PHP. Codul contine comentarii in care sunt explicati pasii urmariti.
In mare, sunt executati urmatorii pasi:
- se verifica daca a fost facut submit
Ar putea fi putin derutant faptul ca portiunea de cod PHP se afla in acelasi fisier cu formularul HTML. Intrebarea fireasca ar fi: "nu se executa prelucrarea datelor cand de fapt trebuie doar sa afiseze formularul?" sau altfel spus "cum stie serverul cand sa prelucreze datele din formular?".
Ideea este ca acea portiune de cod PHP se executa la fiecare afisare a paginii. De fapt nu toata, ci doar prima parte. Cand se incarca pagina (in urma unui click sau refresh), pe langa codul HTML static se returneaza si rezultatul codului PHP. In cazul nostru, codul PHP consta in 2 atribuiri de variabile si un if mare. Atribuirile se executa mereu (la fiecare afisare), la fel si if-ul, doar ca rezultatul comparatiilor este adevarat doar atunci cand datele din formular au fost trimise.
Cu alte cuvinte, acel if va fi evaluat true doar cand utilizatorul da submit la formular - deci prelucrarea datelor se va face doar dupa ce utilizatorul face click pe "Login".
- daca nu a fost facut submit, e simplu: pur si simplu afiseaza codul HTML static si ce mai este prin script (rezultatul va fi un formular).
Dupa ce s-a incarcat pagina, utilizatorul va putea introduce datele in formular si va putea da submit. Atunci cand se da submit, se face un request POST catre aceeasi pagina si se executa inca o data codul PHP din cadrul fisierului, de aceasta data insa cu informatiile actualizate
- cand se face submit, se intra pe ramura lui if unde se executa mai multe operatii (in cazul nostru doar 2)
Nota: este foarte important sa se inteleaga mersul lucrurilor, cum este tratata pagina in fiecare situatie si cum se ajunge sa se execute fiecare portiune de cod. Daca aceste aspecte nu sunt clare nu veti putea scrie formulare de unii singuri.
Continuand cu explicarea codului, iata care sunt operatiile care se executa:
- se valideaza datele (se verifica daca au fost introduse valori): if( !isset( $_POST[ 'user' ] ) ...
- se verifica daca numele de utilizator si parola sunt corecte: if( $erori == 0 ) ...
Daca sunt corecte, atunci se face o redirectionare catre o pagina ce poate fi accesata dupa autentificare. Redirectionarea se realizeaza folosind etichete HTML, desi exista o modalitate mai eleganta de a o realiza (dupa cum veti vedea in lectia Headere).
Codul este expus mai jos. Aveti si posibilitatea sa descarcati scriptul (mai jos) si sa-l incercati pe serverul vostru local.
<?php # username si parola $user_corect = 'admin'; $parola_corecta = 'ghiceste-Ma'; # verific daca se acceseaza pagina ca urmare a unui request POST $mesaj = ''; if( isset( $_POST ) && !empty( $_POST[ 'trimite' ] ) ) { # nota: se va intra pe ramura aceasta a lui if atunci cand utilizatorul # face click pe butonul "Login" # Atunci cand pagina este accesata normal (scriind adresa in browser) # variabila $_POST este goala $erori = 0; # validam datele, presupunem ca nu sunt erori si verificam valoarile introduse if( !isset( $_POST[ 'user' ] ) || strlen( $_POST[ 'user' ] ) == 0 ) { $mesaj = 'Numele de utilizator nu a fost specificat'; $erori = 1; } elseif( !isset( $_POST[ 'pass' ] ) || strlen( $_POST[ 'pass' ] ) == 0 ) { $mesaj = 'Parola nu a fost specificata'; $erori = 1; } # daca nu au fost erori, atunci fac prelucrarile if( $erori == 0 ) { # pentru acum, vom face o verificare simpla if( $_POST[ 'user' ] === $user_corect && $_POST[ 'pass' ] === $parola_corecta ) { # login realizat, redirectionez echo 'Ati fost autentificat. Veti fi redirectionat...'; exit; # nu mai afisez nimic altceva } else { # nu s-a facut login $mesaj = 'Username-ul sau parola sunt gresite'; } } } ?> <html> <head> <title>Aplicatie formular: pagina de login - Invata PHP</title> </head> <body style="font-family: verdana,sans-serif; font-size: small;"> <form action="" method="post" style="width: 30%"> <fieldset> <legend>Date de autentificare</legend> <input type="text" name="user" /> User<br /> <input type="password" name="pass" /> Pass<br /> </fieldset> <fieldset> <legend>Actiuni</legend> <input type="submit" value="Login" name="trimite" value="1" /> <input type="reset" value="Curata formular" /> </fieldset> </form> <?php # aici afisam mesajul de eroare, daca avem if( strlen( $mesaj ) > 0 ) { echo '<p style="color: red">', $mesaj, '</p>'; } ?> </body> </html>
Formularul este disponibil pentru testare aici (click pentru a accesa). Introduceti diferite valori pentru a verifica functionalitatea, iar in final introduceti datele corecte (admin / ghiceste-Ma).
Descarcati fisierul PHP si incercati-l pe serverul vostru
Pagina de administrare anunturi
0
O alta situatie in care se folosesc formularele este atunci cand se doreste administrarea unor date, cum ar fi anunturile. In cele ce urmeaza va fi explicat mecanismul de functionare a unei aplicatii in care se pot adauga si vizualiza anunturi. Pentru a face codul usor de inteles, sunt incluse doar operatiile de baza, fara validari sau prelucrari aditionale.
In acest exemplu, vom folosi si formularul de login descris mai sus. Astfel, in urma unei autentificari reusite, utilizatorul va fi redirectionat catre pagina principala de anunturi, numita anunturi.php. Aceasta cuprinde 2 sectiuni: "anunturi existente" si "adaugare anunt".
Sectiunea "Anunturi existente"
In acesta aplicatie simpla, citirea anunturilor existente se face prin intermediul unei functii (citireDate) definite intr-un fisier separat. Pentru acest exemplu, am ales ca datele sa fie stocate temporar in memorie, urmand ca mai tarziu sa vedem cum le putem stoca in fisiere sau intr-o baza de date. Pentru scopul acestui exemplu nu este relevant modul de salvare/citire a datelor, deci nu se va insista asupra acestui aspect.
<?php // anunturi.php - prima parte $anunturi = citireDate(); # verific daca exista anunturi salvate if( !is_array( $anunturi ) || count( $anunturi ) == 0 ) { echo '<strong style="color: orange">Nu exista anunturi</strong>'; } else { # cum exista deja anunturi, le afisez echo '<table width="75%" cellspacing="0" border="1">'; # folosesc o structura repetitiva care parcurge vectorul si afiseaza datele lui foreach($anunturi as $anunt) { echo '<tr>'; echo '<td>', $anunt[ 'nume' ], '</td>'; echo '<td>', $anunt[ 'telefon' ], '</td>'; echo '<td>', $anunt[ 'email' ], '</td>'; echo '<td>', $anunt[ 'oras' ], '</td>'; echo '<td width="45%">', $anunt[ 'continut' ], '</td>'; echo '</tr>'; } # afisez cate anunturi exista echo '</table><p>', 'Anunturi salvate: ', count( $anunturi ), '</p>'; } ?>
Asa cum se poate observa, se verifica mai intai daca exista date ( count( $anunturi ) == 0 verifica numarul de elemente din vector). Daca nu exista anunturi, se afiseaza un mesaj specific.
In caz contrar, atunci cand exista anunturi salvate, acestea sunt afisate cu ajutorul structurii repetitive foreach. Pentru detalii consultati sectiunea de structuri repetitive a site-ului.
In cadrul structurii, este afisat cate un rand de tabel ce contine datele anuntului. La final, sub tabel este afisat un mesaj cu numarul total de inregistrari gasite.
Sectiunea "Adaugare anunt"
Sub lista de anunturi, pe aceeasi pagina este afisat si formularul pentru adaugarea de noi inregistrari. Acesta este de tip POST, care trimite datele catre fisierul anunturi-post.php. Prin apasarea pe butonul "Salveaza anuntul", datele introduse vor fi transmise catre fisierul PHP de pe server si vor fi disponibile prin intermediul variabilei $_POST.
<!-- anunturi.php - a doua parte --> <form method="post" action="anunturi-post.php"> <input type="text" name="nume" value="" /> Nume contact<br /> <input type="text" name="telefon" value="" /> Telefon contact<br /> <input type="text" name="email" value="" /> Email<br /> <input type="text" name="oras" value="" /> Oras<br /> Continut: <br /> <textarea name="continut" rows="10" cols="50"></textarea><br /> <input type="submit" name="trimite" value="Salveaza anuntul" /> <input type="reset" value="Curata" /> </form>
Fisierul anunturi-post.php
Fisierul PHP care proceseaza datele este inclus mai jos. Ca si in exemplul de login, se fac verificari pentru a fi siguri ca a fost facut un submit. Daca datele sunt disponibile in variabila $_POST atunci acestea sunt salvate cu ajutorul functiei scriereDate. Functia de salvare a datelor va returna intotdeauna true (in aceasta mica aplicatie), deci va fi mereu afisat mesajul de succes.
<?php // anunturi-post.php # verific daca a fost facut submit if( isset( $_POST ) && !empty( $_POST[ 'trimite' ] ) ) { # salvez datele, apelez functia din anunturi-acces-date-sesiune.php $rezultat = scriereDate( $_POST ); if( $rezultat ) $mesaj = '<strong>Date salvate cu succes!</strong>'; else $mesaj = '<strong style="color: red">Datele nu au putut fi salvate</strong>'; } else { # nu a fost facut post, poate cineva a intrat direct din browser pe aceasta pagina? $mesaj = 'Nimic de afisat aici.'; } ?>
Formularul este disponibil pentru testare aici (click pentru a accesa). Datele de login sunt aceleasi ca mai sus (admin / ghiceste-Ma).
Puteti descarca fisierele PHP si sa le incercati pe serverul vostru local.
- index.php (pagina de login)
- anunturi.php (fisierul principal)
- anunturi-post.php (fisierul de prelucrare a datelor din form)
- acces-date.php (fisierul de citire/salvare a datelor)
Descarcati o arhiva cu toate fisierele
Atentie! codul foloseste un mod simplist de verificare a autentificarii, util doar pentru intelegerea codului. Nu folositi acest tip de verificare intr-o aplicatie reala. Un exemplu de autentificare corect gasiti pe pagina de aplicatii sesiune.
Formulare "in real life" - exemple de site-uri care folosesc formulare
6
Mai jos sunt incluse o serie de formulare folosite in site-uri live. Veti fi surprinsi poate sa observati ca majoritatea site-urilor folosesc formulare si ca o mare parte din activitatea de navigare pe internet presupune folosirea formularelor.
La randul vostru, ca dezvoltatori web, voi insiva veti construi foarte des formulare si veti scrie codul de prelucrare/manipulare a datelor provenite din formulare.
Exemplele de mai jos nu prezinta decat partea formala, codul HTML al formularelor. Partea de programare (codul efectiv care face prelucrarea) nu este disponibila, fiind gazduita de fiecare site in parte. Rolul acestor exemple este de a va da o idee despre cum sunt folosite formularele si cu ce ocazii, ce elemente sunt intrebuintate si care este comportamentul browserului pentru fiecare tip de formular (GET/POST).
Formular de cautare folosind motorul Bing
<form id="form_bing" action="http://www.bing.com/search" method="get"> Expresie de cautat:<br /> <input type="text" name="q" value="" /> <input type="submit" value="Cauta pe Bing" /> </form>
Analog se poate construi un formular pentru Google. Practic, trebuie schimbat decat atributul action din formular (pus URL-ul specific Google: http://www.google.com/search), intrucat cele doua motoare de cautare accepta acelasi parametru GET (numit simplu q) pentru textul de cautat.
Formularul de cautare este disponibil mai jos:
Formular de cautare in documentatia PHP
<form id="form_php" action="http://ro.php.net/manual-lookup.php" method="get"> Cauta functia PHP sau un cuvant:<br /> <input type="text" name="pattern" value="" /> <input type="submit" value="Cauta" /> </form>
La fel ca mai sus, formularul foloseste metoda GET, ceea ce ofera o facilitate: utilizatorul poate introduce singur, in URL, textul de cautat. Dati Cauta si verificati adresa paginii care se deschide.
Formularul de cautare este disponibil mai jos:
Formular de conversie valutara din EUR in RON
<form id="form_xe" action="http://www.xe.com/ucc/convert.cgi" method="get" > <fieldset> <legend>Suma de convertit</legend> <input type="text" name="Amount" value="10" style="width: 100px" /> </fieldset> <fieldset> <legend>Moneda</legend> <input type="text" name="From" value="EUR" style="width: 100px" /> - moneda sursa<br /> <input type="text" name="To" value="RON" style="width: 100px" /> - moneda in care se face conversia<br /> </fieldset> <fieldset> <input type="submit" name="image" value="Convertire" /> </fieldset> </form>
Formularul de conversie este disponibil mai jos:
Formular de cautare locuri de munca pe site-ul ejobs.ro
<form action="http://www.ejobs.ro/user/searchjobs" id="searchjob" method="post" > <input type="hidden" value="" name="refine"/> <input type="hidden" value="" name="allof"/> <table cellspacing="0" cellpadding="0" border="0" > <tr> <td valign="middle" style="padding-left: 3px;"><span>Locuri de munca:</span></td> <td valign="middle" style="padding-left: 9px;" rowspan="5"> <input type="submit" value="Cauta Job >>" name="cauta_job" /> </td> </tr> <tr> <td valign="middle" style="padding-left: 3px;"> <input onclick="if (this.value=='Cuvant cheie') {this.value='';}" style="width: 210px;" name="jobskeyword" value="Cuvant cheie" /> </td> </tr> <tr> <td valign="middle" style="padding-left: 3px;"> <select style="width: 210px;" name="oras"> <option value="">Toate orasele</option> </select> </td> </tr> <tr> <td valign="middle" style="padding-left: 3px;"> <select style="width: 210px;" name="categ"> <option value="">Toate departamentele</option> </select> </td> </tr> <tr> <td valign="middle" style="padding-left: 3px;"> <select style="width: 210px;" name="nivel_cariera"> <option value="">Orice nivel de cariera</option> </select> </td> </tr> </table> </form>
Acesta este un formular putin mai cuprinzator. Contine mai multe tipuri de elemente, inclusiv de tip ascuns (hidden). Aceste sunt folosite pentru a transmite anumite informatii care nu trebuie in mod necesar sa fie accesibile utilizatorilor. Elementele hidden sunt accesibile ca orice alt input, prin intermediul variabilei $_POST.
Formularul de la eJobs foloseste metoda POST. Ca urmare datele introduse nu apar in URL si nu pot fi modificate imediat. Mai mult, la refresh pe pagina de rezultate o sa apara acea avertizare care cere confirmarea ca datele introduse sa fie trimise inca o data la server.
Formularul este disponibil mai jos:
Daca va intereseaza un anumit tip de formular, sau vreti un exemplu anume legat de formulare, astept sa lasati comentariu si voi incerca sa-l pun pe site.
Autor, vreau sa ma contactezi ca am multe intrebari si e singurul tutorial de php pe care l-am gasit..nu l-am citit tot dar am niste intrebari sa-ti spun..am pus mailul pe care sper ca il poti vedea...multumesc
Vreau eu o pagina care sa arate un text intr-un tabel care sa fie modificat dintr-un panou de control...asta ca sa vad cum se face unul
Multumesc
As vrea sa fac un formular cu cateva campuri in care sa editez ceva , si sa apara in acea pagina sub forma de tabel
Ex: nume , Localitate , nr de casa , telefon .
V-as fi foarte recunoscator daca as face asa ceva
( normal , accesul cu parola )
Ceea ce doriti voi este mult mai complex decat un simplu form. No offense... dar nu cred ca o sa fie cineva dispus sa va faca treaba in locul vostru :)
domnu Alexandru as dori sa fac si eu 2 formulare ptr un site de masini.1 pentru cautare si al 2-lea pentru adaugare anunturi.problema ar fi k ceva stiu.de ex pe cel de cautare l-am facut dar nu stiu cum fac sa caute in site.pe cel de-al 2-lea il fac dar nu stiu cum sa fac sa imi salveze anunturile undeva.dak se poate sa ma ajutai.add la silviu2606.multumesc mult
Adauga un comentariu la aceasta sectiune.
Cum adaug un link la redirectionare, unde trebuie sa modific si ce scriu ? multumesc fain
Dupa login, se poate redirectiona la o alta pagina folosind functia "header". Mai multe detalii la http://php.punctsivirgula.ro/http/
Adauga un comentariu la aceasta sectiune.