Променливи
PHP Manual

Променливи от външни източници

HTML формуляри (GET и POST)

Когато се предаде формуляр към PHP скрипт, автоматично информацията от този формуляр става достъпна в скрипта. Има много начини за осъществяване на достъп до тази информация, например:

Example #1 Прост HTML формуляр

<form action="foo.php" method="post">
    Name:  <input type="text" name="username" /><br />
    Email: <input type="text" name="email" /><br />
    <input type="submit" name="submit" value="Submit me!" />
</form>

В зависимост от вашата дистрибуция, настройки и лични предпочитания, има много начини да осъществявате достъп до данните от вашите HTML формуляри. Ето някои примери:

Example #2 Достъпване на данни от прост POST HTML формуляр

<?php 
// Налично от PHP 4.1.0

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

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

// След PHP 6 не са налични. От PHP 5.0.0, тези дълги предварително-дефинирани
// променливи могат да бъдат изключвани посредством директивата register_long_arrays.

   echo $HTTP_POST_VARS['username'];

// Налично, ако PHP директивата register_globals = on. От 
// PHP 4.2.0 стойността по подразбиране на register_globals = off.
// Използването/уповаването на този метод е непрепоръчително.

   echo $username;
?>

Изполването на GET формуляр е подобно, с изключение на това, че ще използвате подходящата GET предварително-дефинирана променлива. GET също се отразява и в QUERY_STRING (информацията след '?' в URL). Така че, например http://www.example.com/test.php?id=3 съдържа GET данни, които са достъпни посредством$_GET['id']. Вж. също $_REQUEST и import_request_variables().

Забележка: Свръхглобални масиви, като $_POST и $_GET, станаха налични в PHP 4.1.0

Както показахме, преди PHP 4.2.0 стойността по подразбиране на register_globals беше on. Общността на PHP насърчава всички да не разчитат на тази директива, тъй като е за предпочитане да се приеме, че тя е off и да кодират по съответния начин.

Забележка: Конфигурационната директива magic_quotes_gpc влияе върху Get, Post и Cookie стойностите. Ако е включена, стойността (It's "PHP!") автоматично ще се преобразува в (It\'s \"PHP!\"). Необходимо е избягване при вкарване в база данни. Вж. също addslashes(), stripslashes() и magic_quotes_sybase.

PHP също приема и масиви в контекста на променливи от формуляр. (вж. faq в тази връзка). Например, можете да групирате свързаните променливи заедно, или да използвате това свойство, за да получите стойности, въведени чрез множествен (multiple) select. Нека, например, да изпратим формуляр към него си и при предаването му да извеждаме данните:

Example #3 По-сложни формулярни променливи

<?php
if ($_POST) {
    echo 
'<pre>';
    echo 
htmlspecialchars(print_r($_POSTtrue));
    echo 
'</pre>';
}
?>
<form action="" method="post">
    Име:  <input type="text" name="personal[name]" /><br />
    E-mail: <input type="text" name="personal[email]" /><br />
    Бира: <br />
    <select multiple name="beer[]">
        <option value="shumensko">Шуменско</option>
        <option value="kamenitza">Каменица</option>
        <option value="zagorka">Загорка</option>
    </select><br />
    <input type="submit" value="Изпрати ме!" />
</form>

IMAGE SUBMIT променливи имена

Когато предавате формуляр, можете да използвате изображение вместо предаващ бутон, посредством таг от типа:

<input type="image" src="image.gif" name="sub" />

Когато потребителят щракне някъде по изображението, придружаващият формуляр ще бъде предаден на сървъра с две допълнителни променливи, sub_x и sub_y. Те съдържат координатите на потребителското щракване върху изображението. По-опитните от вас може би са забелязали, че действителните имена на променливите, изпратени от браузъра, съдържат точки, а не подчертавки, но PHP автоматично превръща точката в подчертавка.

HTTP бисквитки

PHP поддържа изцяло HTTP бисквитки, както са дефинирани в » Спецификацията на Netscape. Бисквитките представляват механизъм за записване на данни в отдалечения браузър, като по този начин се проследяват или идентифицират завръщащите се потребители. Можете да задавате бисквитки посредством функцията setcookie(). Бисквитките са част от HTTP заглавката, така че функцията SetCookie трябва да бъде извикана преди да бъде изпратен какъвто и да е изход към браузъра. Това е същото ограничение както при функцията header(). Тогава данните от бисквитките стават налични в съответните бисквитъчни масиви, като $_COOKIE, $HTTP_COOKIE_VARS, както и в $_REQUEST. Вж. страницата от ръководството setcookie() за повече подробности и примери.

Ако искате да присвоите множество стойности на една бисквитъчна променлива, можете да я присвоите като масив. Например:

<?php
  setcookie
("MyCookie[foo]"'Testing 1'time()+3600);
  
setcookie("MyCookie[bar]"'Testing 2'time()+3600);
?>

Това ще създаде две отделни бисквитки, въпреки че във вашия скрипт MyCookie ще бъде един единствен масив. Ако искате да зададете точно една бисквитка с множество стойности, разгледайте възможността да използвате serialize() или explode() върху стойността преди това.

Забележете, че бисквитката ще замени предишна бисквитка със същото име в браузъра ви, освен ако пътят или областта не са различни. Така че, за приложение с количка за пазаруване може би бихте искали да пазите брояч и да го предавате нататък. Т.е.

Example #4 Пример за setcookie()

<?php
if (isset($_COOKIE['count'])) {
    
$count $_COOKIE['count'] + 1;
} else {
    
$count 1;
}
setcookie('count'$counttime()+3600);
setcookie("Cart[$count]"$itemtime()+3600);
?>

Точки в имената на входящи променливи

В повечето случаи, PHP не променя имената на променливите, когато биват предадени на скрипт. Трябва да бъде отбелязано обаче, че точката не е валиден знак за име на променлива в PHP. Поради тази причина, прегледайте:

<?php
$varname
.ext;  /* невалидно име на променлива */
?>

Сега, това което синтактичният анализатор вижда е променлива с име $varname, последвана от оператора за съединяване на низове, последван от голия низ (низ извън кавички, който не съвпада с никой известен ключ или запазена дума) 'ext'. Очевидно, това няма да даде желания резултат.

Поради тази причина е важно да се отбележи, че PHP автоматично ще замести всички точки в постъпващите променливи с подчертавки.

Определяне типа на променливите

Тъй като PHP установява типовете на променливите и ги преобразува (обикновено) ако е необходимо, не винаги е очевидно от какъв тип е дадена променлива във всеки един момент. PHP включва няколко функции, които откриват от какъв тип е променливата, като: gettype(), is_array(), is_float(), is_int(), is_object() и is_string(). Вж. също глава Типове.


Променливи
PHP Manual