Învăţăm PHP: Despre $_POST


Am văzut în lecţia anterioară cum cunoştinţele de bază dau roade. Nu? Am văzut ce dinamicitate pot primi paginile cu $_GET. Metoda e foarte utilă atunci când noi alcătuim legăturile (generate de noi, utilizate de noi, în situl/webaplicaţia noastră). Evident nu îi vei spune niciodată cuiva: „te rog vizitează-mi pagina cucubau.php dar nu uita să pui parametru abc cu valoarea 5 şi xyz cu valoarea 111”. Nope. Niciodată. Dacă vrem ca anumite informaţii să fie furnizate de utilizator ne folosim de formulare. Am pornit de la premisa că ştiţi HTML. Menţinem premisa. În codul de mai jos avem un mic formular care cere numele şi o culoare. Simplu.

Întrebarea este: cum fructificăm aceste date? Păi în loc de $_GET (care, reţineţi, ia date din URL-ul care cere execuţia scriptului, încărcarea paginii PHP) folosim $_POST (care ia datele dintr-un flux invizibil navigatorului, via HTTP POST). Utilizarea este similară: $_POST[‘numele_campului’], evident folosind în formular la name numele_campului. Vedeţi în formularul de mai jos şi apoi partea PHP. Dacă vreţi să vedeţi codul în acţiune mergeţi aici.

[PHP]

Nume

Culoare


Va cheama $nume „;
echo „si culoarea Dvs favorita este $culoare. „;
echo „Nu-i asa ca am ghicit?”;
?>[/PHP]

Aţi observat poate că pagina demonstrativă afişează la prima încărcare „Va cheama si culoarea Dvs favorita este .” Evident, căci nu are valorile. Nu am putea evita aşa ceva? Ba da. Vom testa dacă a fost trimis (submis) un formular sau nu. Revenim la exemplul din articolul anterior, cu culoarea RGB. Dacă vreţi să vedeţi codul în acţiune mergeţi aici (nu uitaţi, valorile trebuie să fie între 0 şi 255).

[PHP]

R:
V:
A:

Perechea: ($rosu,$verde,$albastru)”;
echo „

„;
}
?>[/PHP]

Ce este nou? În primul rând i-am spus şi butonului cumva (culmea inspiraţiei, i-am spus tot „submit”, ca tipul butonului, dar îi puteţi spune oricum), şi apoi l-am testat dacă e setat (isset), semn că formularul a fost trimis (submis). Doar în acest caz preluăm datele şi afişăm textul plus pătratul. Problema de mai sus (cu afişarea iniţială eronată) a fost rezolvată! În plus observaţi că am pus (integer) pentru a forţa trecerea la număr întreg indiferent de ce scrie utilizatorul. Dacă cineva scrie 50a se va converti la 50. Dacă scrie doar litere sau ceva ce începe cu o literă, numărul va fi 0. E mai sigur.

Acum să vedem câteva aspecte mai particulare. Şi vom începe cu o generalizare: dacă vrem ca un script să poată lua datele atât cu $_GET cât şi cu $_POST (de exemplu în faza de teste poate fi util)? Apelăm la combinata lor, reprezentată de $_REQUEST. Uneori e foarte util aşa ceva: să zicem că implementaţi o căutare într-o librărie – dacă veţi folosi $_POST nu veţi putea trimite (prin email de exemplu) spre pagina care afişează rezultatele căutării (căci aceasta se construieşte cu HTTP POST); dacă folosiţi $_REQUEST veţi avea însă şi această alternativă.

Al doilea aspect pe vreau să îl subliniez e… grav. Grav de tot! Cu formulare permiteţi navigatorilor să „introducă” ceva în webaplicaţia Dvs. Încercaţi la primul exemplu să introduceţi la nume de exemplu <script>alert(5);</script>. S-a executat, aşa-i (încercaţi în IE şi va merge)? Să zicem că valorile le memoraţi într-o bază de date (sau fişier) şi le afişaţi. Cineva ar putea folosi JScript pentru a infecta situl, cu o redirecţionare spre un sit virusat. Hopa! Nu e bine! Pentru aceasta trebuie să fiţi foarte atenţi când preluaţi date de la utilizatori. Vă recomand una dintre următoarele două funcţii:

  • htmlentities – aceasta va transforma <script>alert(5);</script> în &lt;script&gt;alert(5);&lt;/script&gt;
  • strip_tags – aceasta va transforma <script>alert(5);</script> în alert(5);

Prima variantă prezervă chiar şi codul răuvoitor dar anulându-l prin faptul că scriptul va fi afişat nu executat; a doua variantă curăţă de orice taguri HTML, lăsând doar valori care nu pot „strica” cu ceva. Reîncercaţi primul cod folosind funcţiile (adică înlocuind de exemplu cu $nume=htmlentities($_POST[‘nume’]); – studiaţi diferenţele! Şi reţineţi cele explicate mai sus, inclusiv avertismentele.


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (2 evaluări, media: 5,00 din 5)
Loading...Loading...

0 comentarii


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *