Mai leckénkben a GET és a POST módszerekkel fogunk foglalkozni, melyek A PHP-formok című leckéből lehetnek ismerősek. Mai cikkünkből megtanulhatod, hogyan küldhetőek át az információk a szerverre a POST és a GET módszerek segítségével.
Az információ szerverre való küldésének módjai
A böngészők tipikusan a két HTTP (Hypertext Transfer Protocol) módszer egyikének segítségével kommunikálnak a szerverrel — ez a két módszer a POST és a GET. Mindkét módszerrel más módon továbbítjuk az információt, és mindkettőnek megvannak az előnyei és a hátrányai.
A PHP-formok című leckében egy HTML-formot használtunk, melyet egy PHP-weboldalra küldtünk feldolgozásra. Akkor a POST módszert alkalmaztuk, de választhattuk volna a GET módszert is. Mai leckénkben mindkét küldési módszerrel foglalkozni fogunk.
A POST módszer
A formokkal foglalkozó cikkünkben a POST módszert alkalmaztuk. A HTML-kód erre vonatkozó sora így festett:
PHP-kód-kivonat:
<form action="process.php" method="post">
< name="item">
...
<input name="quantity" type="text" />
Ez a HTML-kód határozza meg, hogy a form adatai a „process.php” weboldalon lesznek közzétéve, a POST módszer alkalmazásával. A PHP ezt úgy valósítja meg, hogy az összes „posztolt” értéket a „$_POST” asszociatív tömbben tárolja. Bizonyosodj meg róla, hogy jól választottad meg a form adatainak nevét, hiszen ezek lesznek a kulcsok a „$_POST” asszociatív tömbben.
Most, hogy már az asszociatív tömbök fogalmával is megismerkedtünk, a „process.php” PHP-kódja bizonyára sokkal érthetőbb, mint néhány hete volt.
PHP-kód-kivonat:
$quantity = $_POST['quantity'];
$item = $_POST['item'];
A formokban található nevek az asszociatív tömb kulcsai, ezért fontos, hogy a HTML-formban ne legyen két olyan bemeneti elem, amely neve megegyezik. Ha ez mégis megtörténne, könnyen problémákba ütközhetsz a POST módszer alkalmazása során.
A GET módszer
Ahogy korábban is említettük, a másik formküldési módszer a GET. Ha a HTML-formot úgy változtatnánk meg, hogy a GET módszert alkalmazza, a kódrészlet ilyen lenne:
PHP-kód-kivonat:
<form action="process.php" method="get">
< name="item">
...
<input name="quantity" type="text" />
"?item=##&quantity=##"
A kérdőjel („?”) mutatja a böngészőnek, hogy a jelet követő elemek változók. Most, hogy megváltoztattuk az információküldés módszerét az „order.html”-ben, a „process.php”-ben is módosítanunk kell a kódot, hogy a „$_GET” asszociatív tömböt alkalmazza.
Lássunk egy gyakorlati példát az URL kinézetére:
http://www.example.com/action.php?name=john&age=24
A félkövér részek a GET-paraméterek, a dőlt betűs részek pedig a paraméterek értékei. A & jel segítségével több paraméterérték-párt is az URL-be foglalhatunk.
PHP-kód-kivonat:
$quantity = $_GET['quantity'];
$item = $_GET['item'];
Miután megváltoztattuk a tömb nevét, a script helyesen fog működni. A GET módszer mutatja a változó információit a látogatónak, ezért arra nagyon kell ügyelni, hogy jelszavakat vagy személyes információkat ne a GET módszerrel küldjünk, hiszen nem szeretnénk, hogy a látogatóink olyasmit lássanak, amit nem kellene.
Mikor melyik módszert alkalmazzuk?
A GET módszerrel küldött információk mindenki számára láthatóak, hiszen az URL tartalmazza őket. A GET továbbá korlátozza a küldhető információ mennyiségét is. A módszerrel nagyjából 2000 karakternyi információt küldhetünk. A GET előnye, hogy mivel a változók az URL-ben találhatóak, a böngésző könyvjelzői közé menthetjük őket. Ez számos esetben lehet hasznos.
A POST módszerrel küldött információk előnye, hogy mások számára láthatatlanok (hiszen minden név/érték a HTTP-kérés testébe van ágyazva, és az információmennyiség sincs korlátozva). A POST emellett olyan funkciókat is támogat, mint például a több részből álló bináris bemenetek a fájlok szerverre való feltöltésekor. A hátránya, hogy mivel a változók nem jelennek meg az URL-ben, nem tudjuk a könyvjelzők közé rakni az oldalt.
Biztonsági óvintézkedések
Ha a felhasználó által bevitt adatokkal dolgozunk, mindig meg kell bizonyosodnunk arról, hogy a bevitt adatok biztonságban vannak. Ha az adatokat MySQL-adatbázisban fogjuk elhelyezni, lépéseket kell tennünk a MySQL Injection megakadályozása érdekében. Ha a felhasználók által bevitt adatok nyilvánosan elérhetőek lesznek, érdemes elgondolkodni a PHP htmlentities alkalmazásán.
Összegzés:
Mai cikkünkben bemutattuk a POST és a GET módszereket. Mindkettőnek megvannak az előnyei és a hátrányai, az pedig, hogy melyiket fogjuk használni, mindig az aktuális projektum igényeitől függ. Leckénkben nem foglalkoztunk részletesebben a biztonsággal, erről azonban nem szabad megfeledkezned, ha „élesben” alkalmazod majd a POST és a GET módszereket.