$_POST si $_GET
In PHP avem nevoie foarte mult sa prelucram date trimise din formulare sau sa folosim master page despre care am vorbit in lectia instructiunea switch ei bine acestea doua si multe alte probleme care nu-mi vin acum in minte au ca rezolvare $_POST si $_GET.
In primul rand REQUEST-urile normale la pagini se fac prin doua metode:
- POST
- GET
- HEAD
- DELETE
- OPTIONS
- PUT
- TRACE
- CONNECT
1. $_GET
$_GET este un array in PHP. $_GET in unele cazuri exceptionale care tin de vizitator poate fi si un array multidimensional, aveti grija la tipul unei valori din array deoarece puteti intampina vurnerabilitatea Path Disclousure care este foarte periculoasa in caz ca atacatorul are si un SQLi in site de exemplu, o buna evitare pentru asta poate fi insa oprirea afisarii erorilor cand site-ul nu mai este in contructie.
Creati un fisier numit test.php pe server si adaugati urmatorul cod in el:
<?php // folosim htmlspecialchars pentru a filtra variabila. // Folosirea htmlspecialchars pe un parametru luat de la vizitator este OBLIGATORIE // folosim scurtatura pentru if pentru a nu intampina eroarea cand $_GET['var'] nu este definit $var = htmlspecialchars( isset($_GET['var']) ? $_GET['var'] : '' ); echo $var; ?>Acuma accesati test.php?var=orice-vreti-voi . O sa va apara ceva asemanator cu:
Dupa cum vedeti cu $_GET am putut prelua un parametru din url.
Acum vom incerca acelasi lucru si cu formular HTML. Creeaza un fisier test-get.php si adauga in el:
<?php if( isset($_GET['nume']) ): echo 'Salut <b>'.htmlspecialchars($_GET['nume']).'</b>! <br/>'; echo '<a href="?">Vreau sa testez din nou</a>'; else: echo '<form>'; echo '<input type="text" name="nume" placeholder="Numele tau"/>'; echo '<input type="submit" value="Apasa aici"/>'; echo '</form>'; endif; ?>Puteti testa urmatorul script mai jos:
Folosim htmlspecialchars() pentru a converti toate caracterele care ne pot face rau aplicatiilor din punct de vedere al securitatii. Despre XSS voi vorbii intr-o lectie viitoare, nu uitati sa filtrati tot ce primiti de la vizitator.
Diferentele dintre POST si GET sunt:
- POST poate transporta mult mai multa cantitate de date fata de GET
- XSS-ul in POST este mai greu de expluatat ca in GET
- Parametrii GET sunt in url, pot fi folositi si in linkuri nu doar in formulare
1. $_POST
$_POST este asemanator $_GET din punct de vedere al folosirii lui in php. Creati fisierul test-post.php si adaugati in el urmatorul cod:<?php /* Atata timp cat nu salvam sau afisam valoarea primita de la vizitator nu este necesar sa o si filtram. Insa este RECOMANDAT!*/ if( isset($_POST['limbaj']) ): $_POST['limbaj'] = htmlspecialchars($_POST['limbaj']); # folosim $_SERVER['REQUEST_METHOD'] pentru a afla metoda de reuqest folosita if($_SERVER['REQUEST_METHOD'] == 'POST'): switch ($_POST['limbaj']): case 'PHP': echo 'Si mie imi place acest limbaj de programare.' break; case 'ASP': echo 'Eu urasc acest limbaj de programare.' break; default: echo 'Nu cunosc acest limbaj de programare.' break; endswitch; else: echo 'Esti sigur ca metoda folosita pentru REQUEST este cea buna?'; endif; else: echo '<form method="post">'; echo '<input type="text" name="nume" placeholder="Limbajul de programare preferat"/>'; echo '<input type="submit" value="Apasa aici"/>'; echo '</form>'; echo '<hr/>'; echo '<form method="get">'; echo '<input type="submit" value="Testeaza si cu metoda GET"/>'; echo '</form>'; endif; ?>Poti testa scriptul mai jos:
Tags: Curs Php