Передача параметрів в PHP

Матеріал з Вікі ЦДУ
Версія від 08:23, 7 квітня 2012; V kotyak (обговореннявнесок)

(різн.) ← Попередня версія • Поточна версія (різн.) • Новіша версія → (різн.)
Перейти до: навігація, пошук

Сучасні веб-ресурси не просто надають інформацію відвідувачу, але і взаємодіють з ним. Для взаємодії з користувачем потрібно отримувати деяку інформацію від нього. Для отримання даних є декілька методів, дуже поширені методи GET і POST. І відповідно в PHP є підтримка цих методів передачі даних GET і POST. Подивимося, як працюють ці методи.

Метод GET

Дані методом GET передаються шляхом їх додавання до URL-адресою викликається сценарію, призначеного для обробки отриманої інформації. Для пояснення даного методу наберіть в адресному рядку браузера URL-адресу ресурсу і додайте спочатку знак запитання (?), А потім рядок num = 10. Наприклад Код

http://домен.ru/script.php?num=10

Якщо у вас локальний сервер, то зазвичай домен буде localhost, і тоді попередній запис буде виглядати Код

http://localhost/script.php?num=10

У цьому випадку ми передаємо параметр num рівний 10. Щоб додати наступних параметрів сценарієм потрібно використовувати розділювач - амперсант (&), наприклад Код

http://домен.ru/script.php?num=10&type=new&v=text

У даному випадку ми передали скрипту три параметри: num зі значенням 10, type зі значенням "new" і v зі значенням "text". Для отримання цих параметрів у скрипті потрібно використовувати вбудований масив $ _GET. Ключами цього масиву будуть назви параметрів. У нашому випадку потрібно використовувати $ _GET ["num"], $ _GET ["type "],$_ GET [" v "]. Ці елементи масиву і будуть містити значення переданих параметрів. Для демонстрації цього прикладу створіть файл script.php такого змісту Код

<html>
<head>
<title>Проверка метода GET в PHP</title>
</head>
<body>
<?php
echo ($_GET["num"]."
"); echo ($_GET["type"]."
"); echo ($_GET["v"]); ?> </body> </html>

І тепер викличте цей файл у браузері Код

http://путь/script.php?num=10&type=new&v=text

і ви побачите передані параметри у вікні браузера. Але якщо ви викличте цей файл без додаткових параметрів http://путь/script.php, то побачите помилки, які видасть інтерпретатор PHP, про те, що таких елементів масиву $ _GET немає. Як ви, напевно, розумієте примушувати користувача набирати дані в адресному рядку браузера не дуже добре і зовсім незручно. Тому для прийому даних від користувача потрібно використовувати html-форми. Напишемо простеньку html-форму. Код

<form action="script.php" method="get" >
Введіть число <input type="text" name="num" value="" />
У вас є компютер? <select name="type"> <option value="yes">Так</option> <option value="no">Ні</option> </select>
Ваші коментарі:
<textarea name="v" ></textarea>
<input type="submit" name="bsubmit" value="Отправить" /> </form>

Трохи прокоментую створену форму. Форми створюються тегом form. Поля форми створюються тегами input, select, textarea (докладніше можна почитати про форми в HTML). У тезі form в атрибуті action вказується URL-адреса скрипта, який отримає дані форми. У нашому випадку ми вказали вже існуючий у нас файл script.php. Атрибут method задає метод відправлення даних. Ми вказали метод GET. Тепер ми знаємо, якому файлу будуть передані дані форми, і яким способом, залишилося розібратися, де їх там шукати? Дані цієї форми будуть передані веб-ресурсу браузером шляхом додавання їх до URL-адреси: спочатку буде знак запитання (?), Потім будуть представлені параметри розділені амперсантом (&). Назва параметру буде братися з атрибуту name, яке має бути прописано у будь-якому полі форми. Значення параметра буде залежати від типу поля. Якщо поле є текстовим, то значенням буде введений користувачем текст. Якщо ж поле буде представляти собою список, групу перемикачів або прапорців, то значенням параметра буде значення атрибута value вибраного елемента. Поясню на прикладі нашої форми. Якщо користувач введе в полі input число 10, то назвою параметра буде num (значення атрибута name тега input), а значенням буде 10 (введене користувачем число). Відповідно браузер сформує пару "num = 10". Якщо користувач зі списку вибере варіант "Так", то назвою параметра буде type (значення атрибута name тега select), а значенням буде yes (значення атрибута value тега option). Відповідно браузер сформує пару "type = yes". Тепер цю форму розмістимо на сторінці forma.php. Код

<html>
<head>
<title>Форма для передачі даних методом GET і PHP</title>
</head>
<body>
<form action="script.php" method="get" >
Введіть число <input type="text" name="num" value="" />
У вас є компютер? <select name="type"> <option value="yes">Так</option> <option value="no">Ні</option> </select>
Ваші коментарі:
<textarea name="v" ></textarea>
<input type="submit" name="bsubmit" value="Отправить" /> </form> </body> </html>

Введіть у поля форми будь-які значення та натисніть кнопку "Відправити". Після натискання кнопки браузер відкриє іншу сторінку (script.php), і у вікні браузера будуть відображені дані, які ви ввели. Я думаю зрозуміло чому: браузер передасть дані сценарієм script.php, і в скрипті ці дані будуть оброблені і виведені на екран.

Метод POST

Тепер давайте розглянемо, як працює метод POST. Для відправлення даних методом POST потрібно використовувати HTML-форми. Як ми пам'ятаємо, що за спосіб відсилання даних форми відповідає атрибут method тега form. Тому потрібно в атрибуті method тега form вказати значення POST. В іншому форма може бути така ж, як і для методу GET. Змінимо нашу форму, яку ми вже використали для передачі даних способом GET, для передачі методом POST. Код

<form action="script_post.php" method="post" >
Введіть чісло <input type="text" name="num" value="" />
У вас є компютер? <select name="type"> <option value="yes">Так</option> <option value="no">Ні</option> </select>
Ваші коментарі:
<textarea name="v" ></textarea>
<input type="submit" name="bsubmit" value="Отправить" /> </form>

Як бачите, форма залишилася такаж за винятком атрибутів method і action. Тепер дані будуть передаватися сценарієм script_post.php. Помістимо нашу форму на сторінці forma_post.php. Код

<html>
<head>
<title>Форма для передачі даних методом POST і PHP</title>
</head>
<body>
<form action="script_post.php" method="post" >
Введіть число <input type="text" name="num" value="" />
У вас є компютер? <select name="type"> <option value="yes">Так</option> <option value="no">Ні</option> </select>
Ваші коментарі:
<textarea name="v" ></textarea>
<input type="submit" name="bsubmit" value="Отправить" /> </form> </body> </html>

Тепер треба написати сценарій, який буде обробляти дані нашої форми. Для отримання в скрипті даних переданим методом POST потрібно використовувати вбудований масив $ _POST. Ключами цього масиву будуть назви параметрів. У нашому випадку потрібно використовувати $ _POST ["num"], $ _POST ["type "],$_ POST [" v "]. Ці елементи масиву і будуть містити значення переданих даних. Як бачите відміну від використання способу GET, виражається лише у використанні масиву $ _POST. Тому нам не важко буде написати файл script_post.php: Код

<html>
<head>
<title>Проверка метода POST в PHP</title>
</head>
<body>
<?php
echo ($_POST["num"]."
"); echo ($_POST["type"]."
"); echo ($_POST["v"]); ?> </body> </html>

Тепер відкрийте файл forma_post.php в браузері. Введіть які-небудь дані в поля форми і натисніть кнопочку "Відправити". Зараз, напевно, ви помітили відміну методу POST від GET - в адресному рядку браузера не з'явилися дані форми. Дані методом POST не можна передати через адресний рядок браузера. Це суттєва відмінність потрібно запам'ятати. У PHP в незалежності, яким способом були відправлені дані - методом POST або методом GET - отримати дані можна використовуючи масив $ _REQUEST.

Порівняння методів GET і POST

При використанні методу GET дані передаються шляхом додавання до URL-адреси. Таким чином, вони будуть видимі користувачеві, що з точки зору безпеки не завжди добре. Також максимальний обсяг переданих даних буде залежати від браузера - від максимально-допустимої кількості символів в адресному рядку браузера. При використанні методу POST дані не будуть видимі користувачеві (не відображаються в адресному рядку браузера). І тому вони більш захищені, а, отже, і програма яка обробляє ці дані більш захищена в плані безпеки. Також обсяг переданих даних практично ні чим не обмежений. Вибираючи спосіб передачі даних потрібно враховувати наведені особливості і зупинятися на найбільш прийнятному методі.