Когато се предаде формуляр към 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($_POST, true));
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>
Когато предавате формуляр, можете да използвате изображение вместо предаващ бутон, посредством таг от типа:
<input type="image" src="image.gif" name="sub" />
Когато потребителят щракне някъде по изображението, придружаващият формуляр ще бъде предаден на сървъра с две допълнителни променливи, sub_x и sub_y. Те съдържат координатите на потребителското щракване върху изображението. По-опитните от вас може би са забелязали, че действителните имена на променливите, изпратени от браузъра, съдържат точки, а не подчертавки, но PHP автоматично превръща точката в подчертавка.
В повечето случаи, PHP не променя имената на променливите, когато биват предадени на скрипт. Трябва да бъде отбелязано обаче, че точката не е валиден знак за име на променлива в PHP. Поради тази причина, прегледайте:
<?php
$varname.ext; /* невалидно име на променлива */
?>
Сега, това което синтактичният анализатор вижда е променлива с име $varname, последвана от оператора за съединяване на низове, последван от голия низ (низ извън кавички, който не съвпада с никой известен ключ или запазена дума) 'ext'. Очевидно, това няма да даде желания резултат.
Поради тази причина е важно да се отбележи, че PHP автоматично ще замести всички точки в постъпващите променливи с подчертавки.
Тъй като PHP установява типовете на променливите и ги преобразува (обикновено) ако е необходимо, не винаги е очевидно от какъв тип е дадена променлива във всеки един момент. PHP включва няколко функции, които откриват от какъв тип е променливата, като: gettype(), is_array(), is_float(), is_int(), is_object() и is_string(). Вж. също глава Типове.