PHP kézikönyv
Előző | 12. Fejezet. Változók | Következő

# Változók a PHP-n kívülről

## HTML űrlapok (GET és POST)

Egy HTML űrlap (form) elküldésével az űrlapból származó összes adat automatikusan elérhetővé válik a szkript számára a PHP segítségével. Többféle mód létezik ezen információk elérésére:

Példa 12-8. Egy egyszerű HTML form

    <form action="ize.php" method="post">
        Nev:   <input type="text" name="usernev" /><br />
        Email: <input type="text" name="email" /><br />
        <input type="submit" name="submit" value="Elküld" />
    </form>

Az egyéni beállításaidtól függően több mód is létezik HTML formok által beküldött adatok elérésére. Íme néhány példa:

Példa 12-9. Egy egyszerű HTML POST űrlapból származó adatok elérése

    <?php
    // PHP 4.1.0-tól használható

       echo $_POST['usernev'];
       echo $_REQUEST['usernev'];

       import_request_variables('p', 'p_');
       echo $p_usernev;

    // PHP 3-tól használható. PHP 5.0.0 óta ezek a hosszú előredefiniált
    // változók letilthatók a register_long_arrays direktívával.

       echo $HTTP_POST_VARS['usernev'];

    // Használható, ha a register_globals PHP direktíva értéke = on.
    // A PHP 4.2.0 óta a register_globals alapértelmezett értéke = off.
    // E mód használata nem ajánlott.

       echo $usernev;
    ?>

Egy GET form használata hasonló, kivéve hogy a megfelelő GET előredefiniált változókat kell használnod. A GET a QUERY_STRING-re vonatkozik (az információ, ami az URL-ben a '?' után szerepel). Például a http://www.pelda.hu/teszt.php?azon=3 tartalmaz egy GET adatot, amely $_GET['azon'] módon érhető el. Lásd még: $_REQUEST, import_request_variables()

> Megjegyzés: A szuperglobális tömbök, mint például a $_POST vagy a $_GET, a PHP 4.1.0-től állnak rendelkezésre.

Mint láttuk, a PHP 4.2.0 előtt a register_globals alapértelmezett értéke on volt, PHP 3-ban pedig mindig be volt állítva. A PHP közösség azt javasolja mindenkinek, hogy ne alapozzon erre a direktívára, mert az off-ra állítását sokkal inkább részesítík előnyben; ennek megfelelően érdemes programozni.

> Megjegyzés: A magic_quotes_gpc konfigurációs beállítás hatással van a GET, POST és COOKIE metódusokkal kapott értékekre. Bekapcsolva a (Ez a "PHP", biz'a!) szövegből automágikusan (Ez a \"PHP\", biz\'a!) lesz, hogy megkönnyítse az adatbázisba írást. Lásd még: addslashes(), stripslashes() és magic_quotes_sybase!

A PHP megérti és kezeli a tömbökbe rendezett űrlapváltozókat. (Lásd kapcsolódó Gy.I.K.!) Hasznos lehet csoportosítani az összetartozó változókat, vagy az olyan űrlapelemeket, ahol több lehetőség közül nem csak egy választható. Példaképpen küldjünk el egy űrlapot saját magának, és elküldéskor jelenítsük meg az adatot.

Példa 12-10. Összetettebb űrlapváltozók

`<?php
if (isset($_POST['muvelet']) && $_POST['muvelet'] == 'bekuldve') {
echo '<pre>';
print_r($_POST);
echo '<a href="'. $_SERVER['PHP_SELF'] .'">Próbáld újra</a>';
echo '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Név: <input type="text" name="szemelyes[nev]" /><br />
Email: <input type="text" name="szemelyes[email]" /><br />
Sör: <br />
<select multiple name="sor[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbräu</option>
</select><br />
<input type="hidden" name="muvelet" value="bekuldve" />
<input type="submit" name="submit" value="Küld!" />
</form>
<?php
}
?>`

PHP 3-ban ilyen módon csak egydimenziós tömbök hozhatók létre, míg PHP 4-től nincs ilyen korlátozás.

### IMAGE SUBMIT változónevek

Az űrlap elküldésekor megoldható, hogy gomb helyett képet használunk ilyesféle jelölés segítségével:

    <input type="image" src="kep.gif" name="elkuld">

Ha a felhasználó a képre kattint, a kiszolgálóra a következő két változó jut el: elkuld_x-et és elkuld_y-t. Ezek tartalmazzák a kattintás képen belüli koordinátáit. A tapasztaltabbak biztos megjegyeznék, hogy a változónevek nem aláhúzást, hanem pontot tartalmaznak, de a PHP a pontot automatikusan aláhúzássá konvertálja.

## HTTP sütik (cookie)

A PHP támogatja a Netscape specifikációja által definiált HTTP sütiket. A süti olyan mechanizmus, amely a távoli böngészőn tesz lehetővé adattárolást, és így lehetővé teszi a visszatérő felhasználók azonosítását. A sütiket a setcookie() függvénnyel lehet beállítani. A sütik a HTTP fejléc részei, így a SetCookie függvényt bármilyen kimenet generálása előtt kell meghívni. Ugyanezt a megkötést kell betartani a header() függvénnyel. A süti adatok a megfelelő tömbökben találhatóak, mint például a $_COOKIE, $HTTP_COOKIE_VARS valamint a $_REQUEST. További részleteket és példákat a kézikönyv setcookie() oldalán találsz.

Ha több adatot akarsz rendelni egy sütiváltozóhoz, egyszerűen tekintsd egy tömbnek. Például:

`<?php setcookie("Sutikem[ize]", "Teszt 1", time()+3600); setcookie("Sutikem[bigyo]", "Teszt 2", time()+3600); ?>`

Ez két különböző süti, viszont a szkriptedben a Sutikem egyetlen tömb lesz. Ha egy sütiben szeretnél tárolni összetett adatokat, használhatod a serialize() vagy az explode() függvényeket.

Vigyázz, mert a süti felülírja az előző azonos nevű sütit, hacsak nem különbözik a path vagy a domain. Így pl. egy bevásárlókocsi megírásakor jó egy számlálót is elhelyezni, hogy elkerüljük a problémát.

Példa 12-11. Példa a setcookie() használatára

`<?php if (isset($_COOKIE['szamlalo'])) { $szamlalo = $_COOKIE['szamlalo'] + 1; } else { $szamlalo = 1; } setcookie("szamlalo", $szamlalo, time()+3600); setcookie("Kosar[$szamlalo]", $elem, time()+3600); ?>`

## Pontok a bejövő változónevekben

Általában a PHP nem változtatja meg a változók neveit, amikor a szkript megkapja őket. A pont viszont nem érvényes karakter egy PHP változóneven belül. Az ok megértéséért nézd ezt:

`<?php $varname.ext; /* érvénytelen változónév */ ?>`

Most az elemző lát egy $varname nevű változót, amelyet stringösszefűző operátor (.) követ, majd egy csupasz sztring: az ext - idézőjel nélküli string, amely nem egyezik semmilyen ismert vagy lefoglalt kulcsszóval. Ez nyilván nem a kívánt eredményt adná.

Emiatt fontos, hogy PHP automatikusan helyettesíti a pontokat aláhúzásjellel.

## Változótípusok meghatározása

Mivel a PHP határozza meg a változók típusát és konvertálja őket (általában) szükség szerint, nem mindig nyilvánvaló, hogy milyen típusú egy pillanatban egy adott változó. A PHP-nek számos függvénye van, amelyek egy változó típusát hivatottak eldönteni, mint például: gettype(), is_array(), is_float(), is_int(), is_object(), és is_string(). Lásd még a típusokról szóló fejezetet.

Előző | Tartalom | Következő
Változó változók | Fel | Állandók