Az igazi programok egyik fontos tulajdonsága az interaktivitás. Amint az emberek is kommunikálnak, úgy a programokkal is kapcsolatba kell lépnünk, hogy hasznos munkát végezzenek. A folyamat leegyszerűsítve:
utasítás -> válasz -> utasítás -> válasz ...
Az utasítás lehet egy esemény (megnyomunk egy gombot a grafikus felületen, rákattintunk egy linkre), vagy terminálos futtatás esetén egy paraméter értéke. Kezdjük az egyszerűbbel:
Terminálos futtatás
Amennyiben a register_argc_argv be van kapcsolva, elérhetővé válik egy fenntartott változó $argv néven, amely tömb (array) típusú. A futtatás közben megadott paramétereket $argv[1], $argv[2], ... stb. néven érjük el. Az $argv[0] mindig a szkript nevét tartalmazza. Emellett egy $argc nevű változó a megadott paraméterek számát tartalmazza:
php -f pelda.php "első paraméter" "második paraméter"
A pelda.php tartalma legyen ez:
---------------------------
<?php
if ($argc != 3) { //Ha a paraméterek száma nem 3 (szkript neve + 2 paraméter)
echo 'Pontosan két paraméter szükséges!';
exit; // Kilép
}
else { // Különben...
$szkript_neve = $argv[0];
$elso_parameter = $argv[1];
$masodik_parameter = $argv[2];
echo "Szkript: $szkript_neve, #1: $elso_parameter, #2 $masodik_parameter";
exit;
}
?>
---------------------------
A megadott paraméterek értékeivel a programunk dolgozni tud az előzőekben tanultak szerint.
Webszerveres futtatás
Lassan megérkezünk az igazán hasznos területhez: a böngészőben való futtatáshoz. Mielőbb belevágnánk, tisztáznunk kell pár fogalmat: a PHP szerver oldali műveleteket végez, tehát a böngészőben a futása eredményeit láthatjuk, nem ott helyben történnek a PHP-t érintő események. Bármennyire modern legyen egy felület (JavaScript, Ajax-os hívások, stb.), a rendszer továbbra is utasítás -> válasz folyamatokra fog építeni. A böngészők a grafikus felület megjelenítéséhez HTML-t használnak, amelynek van két speciális interaktivitási módszere: a form és a link. A formban található elemek értékei (szövegmezők, gombok, jelölők, listák) alapesetben POST metóduson keresztül kerülnek a szerverre. A linkek paraméterei pedig GET metódust használnak.
Szerver oldalon ezen két metódusból származó értékeket fogjuk el, és dolgozzuk fel. Erre két speciális változó áll rendelkezésünkre, amelyek típusa asszociatív tömb:
$_POST['formelem']
és
$_GET['linkparameter']
Lássunk egy példát! Mentsük el "teszt.php" néven, másoljuk a webszerverünk gyökérkönyvtárába, majd hívjuk meg egy böngészőben, pl. így: "http://szerverem.neve/teszt.php"
---------------------------
<?php
$valasz = 'Adj meg bármilyen értéket a fenti szövegmezőbe!';
$linkvalasz = 'Még nem kattintottál a linkre!';
if (isset($_POST['hello'])) {
$valasz = 'Ezt írtad be:' . $_POST['hello'];
}
if (isset($_GET['linkparameter'])) {
$linkvalasz = 'A link paramétere: '. $_GET['linkparameter'];
}
echo "<!DOCTYPE html>
<html>
<head><title>Teszt</title></head>
<body>
<form method='post' action='teszt.php'>
<label for='hello'>Szöveg:</hello><input id='hello' type='text' name='hello' value=''><input type='submit' name='do_submit' value='Mehet!'>
</form>
<div>$valasz</div>
<div><a href='teszt.php?linkparameter=valami'>Ez egy link, paraméterrel.</a></div>
<div>$linkvalasz</div>
</body>
</html>";
?>
---------------------------
FIGYELEM! A fenti példa semmilyen ellenőrzést nem végez a megadott adatokon, csak a működési folyamatot mutatja be. A $_POST és a $_GET meglétét isset() függvénnyel ellenőriztük.
Mindig tervezzük meg alaposan a lépéseket, és ne bízzunk meg vakon semmilyen bejövő adatban! Éles tervezésben az egyik legfontosabb művelet a beérkező adatok ellenőrzése és érvényesítése. A legegyszerűbb és legnaivabb a típusok ellenőrzése (ne engedjünk szöveget ott, ahol számot várunk, stb.), a komolyabbak a különböző adatmanipulációs kísérletek kivédésére irányulnak. Ezekről a későbbiekben tanulunk majd.
--------------------------------------------------------------
Feladatok
1. Írjunk egy parancssoros szkriptet, amely 2 paramétert fogad, az első a nevünk, a második az életkorunk! Ellenőrizzük az érkező adatokat, és írjuk ki az eredményt!
2. Írjunk egy webszerveren futó szkriptet, amely a fenti feladat szerint működik!
3. Készítsünk egy webes szkriptet, amely egy alap névjegykártya adatait gyűjti be és jeleníti meg! (Név, telefonszám, emailcím, postai cím)