Invata PHP cu punctsivirgula.ro

I. Introducere
II. Notiuni de baza
III. Notiuni avansate
IV. Aplicatii
V. Extra
C O N T I N U T
Exemple de formulare

Formular simplu de login in PHP    11 ! 

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: "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 face 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: scriptul pur si simplu afiseaza codul HTML static (un formular HTML).

    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). Dupa executia operatiilor, se va afisa apoi codul HTML static, precum si rezultatul secventei de cod de la final

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 la submit:

  1. se valideaza datele (se verifica daca au fost introduse valori): if( !isset( $_POST[ 'user' ] ) ...
  2. 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" /> 
	<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

adytzul89 a spus Cum adaug un .. - 04.08.2011

Cum adaug un link la redirectionare, unde trebuie sa modific si ce scriu ? multumesc fain

Alexandru a spus Redirectionare dupa login - 09.08.2011

Dupa login, se poate redirectiona la o alta pagina folosind functia "header". Mai multe detalii la http://php.punctsivirgula.ro/http/

Serge a spus Dece se foloseste a 2 oara value ? - 10.05.2012

value="Login" name="trimite" value="1" ?? nu inteleg ce face?

aaa...sau mi se pare verifica la inceput ca !empty( $_POST[ 'trimite' ] , ca sa nu fie o valoare nula,asa-i?

Alexandru a spus Pentru Serge - 15.05.2012

S-a strecurat o mica eroare. Am corectat acum.
La un element <input> trebuie "value" o singura data, desi functioneaza si daca apare de doua ori.

Cat despre motivul pentru care este necesara "value", da, ai dreptate, dupa ce se face submit continutul input-ului cu numele "trimite" este pus in vectorul $_POST, astfel ca $_POST['trimite'] va contine valoarea specificata de "value".

In cazul nostru: <input name="trimite" value="Login">
Rezulta $_POST['trimite'] == "Login", deci o valoare ne-nula.

Bogdan a spus Probleme parola - 15.01.2014

Mie nu imi merge...nu se autentifica cu litere...adik daca pun la $parola_corecta litere nu imi merge...imi returneaza "parola nu a fost specificata". Daca pun in schimb cifre, imi merge...Cum e posibil asa ceva? Pls hepl!

Alexandru a spus Pnetru Bogdan - 15.01.2014

Exemplul de pe site functioneaza, deci daca ai descarcat fisierul direct de pe site ar trebui sa iti mearga si tie. Esti sigur ca ce ai pus in $parola_corecta introduci si in pagina?

Tine cont ca se face o comparatie exacta (folosind operatorul ===), deci variabila $parola_corecta trebuie declarata ca string. Chiar si numerele trebuie scrise intre ghilimele (de ex. $parola_corecta = '123'), altfel comparatia nu va returna ce trebuie.

O alta chestie, cumva parola ta incepe cu 0?

Bogdan a spus Parola?? - 15.01.2014

primul meu gand a fost..."o fi ceva legat de case sensitive",dar nici vorba...am respectat intocmai modelul de pe site.Am pus si o litera mica : De ex :, in cazul meu, am $username='admin';$password='x';, dar tot nu merge.Daca pun de ex '0', sau '1', sau orice alta cifra, sau combinatie de cifre, merge...cred ca am scapat ceva pe la vreo bucla if, altfel nu-mi explic...

Alexandru a spus Pentru Bogdan - 16.01.2014

Daca tot nu merge, posteaza codul aici sau trimite-mi-l pe email. Poate are vreo scapare pe undeva si nu o sesizezi.

Bogdan a spus Pentru Alexandru - 22.01.2014

Scuze de intarziere...dar am lucrat de pe pc-ul de la munca de la birou si am fost plecat cateva zile...Codul e prea lung...imi da eroare...
Acceseaza-l te rog aici http://textuploader.com/1oau!

Cu stima,
Bogdan

Bogdan a spus Completare - 22.01.2014

Daca nu merge linkul, lasa-mi te rog adr de mail.

Multumesc!

Alexandru a spus Pentru Bogdan - 22.01.2014

Salut,

Problema care imi sare in ochi la o prima vedere este al doilea if din fisierul tau (linia 9):

(incorect) if(!(isset($_POST['user'])||strlen($_POST['user'])==0))

Acolo sunt puse niste paranteze dupa semnul exclamarii care practic neaga intreaga expresie din paranteza. Trebuie ca semnul exclamarii sa fie pus imediat inainte de isset pentru a nega functia isset, nu intreaga expresie:

(corect) if(!isset($_POST['user']) || strlen($_POST['user'])==0)

Incearca asta si spune-mi daca merge. Altceva, nu vad ce ar putea fi, dar ma mai uit.


Adauga un comentariu la aceasta sectiune.

 


Formulare "in real life" - exemple de site-uri care folosesc formulare    9 ! 

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:

Expresie de cautat:

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:

Cauta functia PHP sau un cuvant:

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:

Suma de convertit
Moneda - moneda sursa
- moneda in care se face conversia
Alexandru a spus Mai multe exemple - 31.10.2009

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.

Mihai a spus Contacteaza-ma - 22.11.2009

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

Mihai a spus Panou de control - 23.11.2009

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

Lutzu a spus Vreau si eu sa invat - 23.02.2010

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 )

Piny a spus @Mihai & Lutzu - 11.08.2010

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 :)

Silviu a spus salut - 07.01.2011

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

crissti a spus se poate? - 28.07.2013

Buna ziua
In incercarea de a deslusi cat mai bine php-ul am dat peste un mic hop, am creat pagina html si am pus in ea un mic script, invatat tot de aici, pentru a posta ceva pe pagina, in cazul de fata bancuri.
COD: SELECTAÅ¢I TOT
<?php
$titlu = $_POST['titlu'];
$banc = $_POST['banc'];
echo "<p><h3 class='titlu-la-bancuri'><li><dt>$titlu:</dt></li></h3></p>";
echo " <dd> $banc </dd>";
?>

L-am pus in regula si cu formularele si pana aici totul e ok.
COD: SELECTAÅ¢I TOT
<form action="index.php" method="post">
<font size='5px' color='blue'><b> Titlu bancului:</b></font><br>
<textarea type="text" name="titlu" rows='2' cols='23'> </textarea><hr>
<font size='5px' color='blue'><b> Banc:</b></font><br>
<textarea type="text" name="banc" rows='15' cols='28'> </textarea><hr>
<input type="image" src="xx.png" name="submit" value="Trimite formular" />
</form>

Pe o singura pagina vreua sa fie 5 bancuri, deci am pus scriptul de 5 ori pt acelas formular,
ca sa le postez din acelasi loc pe toate si sa nu fie fiecare banc cu formularele lui.

Aici apare problema, cum poate e si normal, atunci cand pun un banc imi apare la toate 5 pozitiile din pagina deoarece
script-ul e identic, asa ca m-am gandit ca deasupra casutelor de text sa pun si 5 butoane radio, le-am pus mai jos,
astfel incat atunci cand bifez primul buton sa se posteze bancul doar la prima pozitie din pagina,
pt al doilea la a doua pozitie, etc.
COD: SELECTAÅ¢I TOT
<input type="radio" name="unu"></input>
<input type="radio" name="doi"></input>
<input type="radio" name="trei"></input>
<input type="radio" name="patru"></input>
<input type="radio" name="cinci"></input>

Problema e ca nu stiu cum sa fac acele butoane sa functioneze asa cu am explicat eu in scriptul de fata, sunt incepator in php si cunostintele mele sunt extrem de limitate, dar nici nu am reusit sa gasesc un model dupa care sa ma ghidez.
Poate sa ma lumineze cineva?

O alta nelamurire pe care o am, daca postez pe pagina textul imi ramane acolo doar pana dau refresh sau inchid pagina dupa care dispare, pt a ramane definitiv pe pagina am nevoie de baza de date sau e altceva de facut?

Dan a spus @Crissti - 24.01.2014

Salut Cristi.
Daca am inteles eu corect, tu vrei sa faci o pagina de bancuri.
Pentru acest lucru ai nevoie de o solutie de stocare de date.
Ai avea de ales intre stocarea datelor intr-un fisier *.txt sau varianta cu o baza de date mysql sau alternativa (sqlite etc).
Daca nu folosesti o solutie de stocare, bancurile postate de tine vor ramane pe site vizibile doar pentru tine si doar pana cand dai refresh sau inchizi browserul. (ceilalti care intra pe site nu vor vedea continutul postat de tine).
Cert e ca esti pe drumul cel bun pt proiectul de care te-ai apucat dar mai ai de studiat un pic de html si ceva mai multisor php.
Nu e greu dar trebuie sa ai rabdare, determinare si perseverenta. Toate celelalte vor veni de la sine daca te tii de treaba. :)

ed62 a spus Formular... avansat :) - 08.04.2015

Multumesc pentru informatii.
O intrebare: in cazul este necesar un formular de introducere date in tabele, care ar fi modalitatea de realizare?
Ma confrunt cu o baza de date care are 3 tabele cu relatii 1-n (in cascada) si nu stiu cum sa fac un formular in care se introduc o inregistrare in tabel1, N inregistrari in tabel2 si la fiecare inregistrare din tabel2, una sau mai multe inregistrari in tabel3.
Am gasit o varianta (http://www.phpromania.net/forum/viewtopic.php?t=29223&p=153491), dar nu stiu ce functii trebuie folosite â for, while si ce variabile care sa preia datele scrise de utilizator si sa le introduca in tabelele respective, pastrand constrangerile dintre tabele (sa se completeze tabelul cu ID corespunzator in tabele).
Ati putea face un tutorial despre asta⦠sau sa imi dati doar cateva indicatii?
Multumesc.
O zi buna.


Adauga un comentariu la aceasta sectiune.