Variables From External Sources

Оновлено: 11.05.2023

Коли форма надсилається PHP-скрипту, інформація з цієї форми автоматично стає доступною скрипту. Існує кілька способів отримати доступ до цієї інформації, наприклад:

Приклад #1 Проста HTML-форма

Існує лише два способи доступу до даних з ваших HTML-форм. Доступні на даний момент способи перераховані нижче:

Приклад #2 Доступ до даних з простої POST HTML-форми

<?php
echo $_POST['username'];
echo $_REQUEST['username'];
?>

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

Зауважте:

Крапки та пробіли в іменах змінних перетворюються на символ підкреслення. Наприклад, стає $_REQUEST["a_b"].

PHP також розуміє масиви в контексті змінних форми (див. відповідний розділ FAQ). Ви можете, наприклад, згрупувати пов'язані змінні разом або використовувати цю функцію для отримання значень з введених даних з множинним вибором. Наприклад, давайте створимо форму і після її відправлення відобразимо дані:

Приклад #3 Змінні складнішої форми

<?php
if ($_POST) {
    echo '<pre>';
    echo htmlspecialchars(print_r($_POST, true));
    echo '</pre>';
}
?>
<form action="" method="post">
Name: <input type="text" name="personal[name]" /><br />
Email: <input type="text" name="personal[email]" /><br />
Beer: <br />
<select multiple name="beer[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbräu</option>
</select><br />
<input type="submit" value="submit me!" />
</form>

Примітка: Якщо ім'я зовнішньої змінної починається з допустимого синтаксису масиву, кінцеві символи ігноруються. Наприклад, стане $_REQUEST['foo']['bar'].

При відправці форми можна використовувати зображення замість стандартної кнопки відправки з тегом like:

Коли користувач клацає десь на зображенні, супровідна форма буде передана на сервер з двома додатковими змінними, sub_x і sub_y. Вони містять координати кліку користувача на зображенні. Досвідчені користувачі можуть помітити, що фактичні назви змінних, надіслані браузером, містять крапку, а не підкреслення, але PHP автоматично перетворює крапку на підкреслення.

PHP прозоро підтримує HTTP cookies, як визначено в " RFC 6265. Cookies - це механізм для зберігання даних у віддаленому браузері і, таким чином, відстеження або ідентифікації користувачів, які повертаються. Ви можете встановити cookies за допомогою функції setcookie(). Файли cookie є частиною заголовка HTTP, тому функція SetCookie повинна бути викликана до того, як будь-який вивід буде відправлений браузеру. Це таке ж обмеження, як і для функції header(). Після цього дані cookie доступні у відповідних масивах даних cookie, таких як $_COOKIE, а також у $_REQUEST. Докладнішу інформацію та приклади див. на сторінці посібника з setcookie().

Примітка: Починаючи з версій PHP 7.2.34, 7.3.23 і 7.4.11, відповідно, імена вхідних файлів cookie більше не декодуються в url з міркувань безпеки.

Якщо ви хочете присвоїти декілька значень одній змінній cookie, ви можете присвоїти її у вигляді масиву. Наприклад:

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

Це створить два окремих файли cookie, хоча MyCookie тепер буде єдиним масивом у вашому скрипті. Якщо ви хочете встановити лише один файл cookie з декількома значеннями, скористайтеся спочатку функцією serialize() або explode() для цього значення.

Зверніть увагу, що файл cookie замінить попередній файл cookie з тим самим ім'ям у вашому браузері, якщо шлях або домен не відрізняються. Отже, для додатку кошика для покупок ви можете захотіти вести лічильник і передавати його далі, тобто

Приклад #4 Приклад setcookie()

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

Зазвичай PHP не змінює імена змінних, коли вони передаються в скрипт. Однак слід зазначити, що крапка (крапка, крапка) не є допустимим символом в імені PHP-змінної. Подивіться на причину:

<?php
$varname.ext;  /* invalid variable name */
?>

З цієї причини важливо зазначити, що PHP автоматично замінить всі крапки у вхідних іменах змінних на підкреслення.

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

Оскільки HTTP є текстовим протоколом, більшість, якщо не весь, вміст, який надходить у суперглобальних масивах, таких як $_POST і $_GET, залишиться у вигляді рядків. PHP не намагатиметься перетворити значення до певного типу. У наведеному нижче прикладі $_GET["var1"] буде містити рядок "null", а $_GET["var2"] - рядок "123".

Version Description 7.2.34, 7.3.23, 7.4.11 The names of incoming cookies are no longer url-decoded for security reasons.