Відмінності між версіями «Передача параметрів в PHP»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
(Створена сторінка: Существует два широко распространенных решения этой задачи. 1) Генерация JS кода с помощь…)
 
 
(не показані 12 проміжних версій 2 учасників)
Рядок 1: Рядок 1:
Существует два широко распространенных решения этой задачи.
+
Сучасні веб-ресурси не просто надають інформацію відвідувачу, але і взаємодіють з ним. Для взаємодії з користувачем потрібно отримувати деяку інформацію від нього. Для отримання даних є декілька методів, дуже поширені методи GET і POST. І відповідно в PHP є підтримка цих методів передачі даних GET і POST. Подивимося, як працюють ці методи.  
  
1) Генерация JS кода с помощью серверного скрипта.
+
== '''Метод GET ''' ==
  
Тут нужно помнить о том, что любой запуск скриптов на сервере создает дополнительную нагрузку. Поэтому генерировать JS скрипты целиком не правильно. Гораздо проще вставить небольшой фрагмент JS кода, который создаст массив с параметрами, прямо внутрь страницы, а основную часть JS кода разместить в статичных файлах.
+
Дані методом 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"]."<br>");
 +
echo ($_GET["type"]."<br>");
 +
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="" /><br/>
 +
У вас є компютер? <select name="type">
 +
<option value="yes">Так</option>
 +
<option value="no">Ні</option>
 +
</select><br/>
 +
Ваші коментарі:<br/>
 +
<textarea name="v" ></textarea><br/>
 +
<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="" /><br/>
 +
У вас є компютер? <select name="type">
 +
<option value="yes">Так</option>
 +
<option value="no">Ні</option>
 +
</select><br/>
 +
Ваші коментарі:<br/>
 +
<textarea name="v" ></textarea><br/>
 +
<input type="submit" name="bsubmit" value="Отправить" />
 +
</form>
 +
</body>
 +
</html>
 +
Введіть у поля форми будь-які значення та натисніть кнопку "Відправити". Після натискання кнопки браузер відкриє іншу сторінку (script.php), і у вікні браузера будуть відображені дані, які ви ввели. Я думаю зрозуміло чому: браузер передасть дані сценарієм script.php, і в скрипті ці дані будуть оброблені і виведені на екран.
  
Поясню сказанное на примере.
+
== '''Метод POST''' ==
  
Допустим у нас есть страница (index.php) и js файл (my-scripts.js). Нам нужно передать несколько параметров из массива $config.
+
Тепер давайте розглянемо, як працює метод POST.
 +
Для відправлення даних методом POST потрібно використовувати HTML-форми. Як ми пам'ятаємо, що за спосіб відсилання даних форми відповідає атрибут method тега form. Тому потрібно в атрибуті method тега form вказати значення POST. В іншому форма може бути така ж, як і для методу GET. Змінимо нашу форму, яку ми вже використали для передачі даних способом GET, для передачі методом POST.
 +
Код
 +
<form action="script_post.php" method="post" >
 +
Введіть чісло <input type="text" name="num" value="" /><br/>
 +
У вас є компютер? <select name="type">
 +
<option value="yes">Так</option>
 +
<option value="no">Ні</option>
 +
</select><br/>
 +
Ваші коментарі:<br/>
 +
<textarea name="v" ></textarea><br/>
 +
<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="" /><br/>
 +
У вас є компютер? <select name="type">
 +
<option value="yes">Так</option>
 +
<option value="no">Ні</option>
 +
</select><br/>
 +
Ваші коментарі:<br/>
 +
<textarea name="v" ></textarea><br/>
 +
<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"]."<br>");
 +
echo ($_POST["type"]."<br>");
 +
echo ($_POST["v"]);
 +
?>
 +
</body>
 +
</html>
 +
Тепер відкрийте файл forma_post.php в браузері. Введіть які-небудь дані в поля форми і натисніть кнопочку "Відправити". Зараз, напевно, ви помітили відміну методу POST від GET - в адресному рядку браузера не з'явилися дані форми. Дані методом POST не можна передати через адресний рядок браузера. Це суттєва відмінність потрібно запам'ятати.
 +
У PHP в незалежності, яким способом були відправлені дані - методом POST або методом GET - отримати дані можна використовуючи масив $ _REQUEST.
  
Страница будет выглядеть так.
+
== '''Порівняння методів GET і POST''' ==
  
  1.
+
При використанні методу GET дані передаються шляхом додавання до URL-адреси. Таким чином, вони будуть видимі користувачеві, що з точки зору безпеки не завжди добре. Також максимальний обсяг переданих даних буде залежати від браузера - від максимально-допустимої кількості символів в адресному рядку браузера.  
      <script type="text/javascript">
+
При використанні методу POST дані не будуть видимі користувачеві (не відображаються в адресному рядку браузера). І тому вони більш захищені, а, отже, і програма яка обробляє ці дані більш захищена в плані безпеки. Також обсяг переданих даних практично ні чим не обмежений.  
  2.
+
Вибираючи спосіб передачі даних потрібно враховувати наведені особливості і зупинятися на найбільш прийнятному методі.
          $(function() {
+
  3.
+
              $.config = {
+
  4.
+
                  par1:<?php echo $config['par1']; ?>
+
  5.
+
              };
+
  6.
+
          });
+
  7.
+
      </script>
+
  8.
+
      <script type="text/javascript" src="my-script.js"></script>
+
  
Как видите, мы создали глобальный хеш ($.config) и установили для его элемента par1 значение из массива $config.
+
[[category:Інтернет-програмування|*]]
  
Примечание. Для работы этого примера нужно подключить библиотеку jQuery.
+
[[category:Навчальні проекти]]
 
+
Теперь хеш $.config можно использовать в my-script.js. Например, так
+
 
+
  1.
+
      $(function() {
+
  2.
+
          alert($.config.par1);
+
  3.
+
      });
+
 
+
Примечание. Если вам нужно передавать сложные структуры с параметрами, то будет удобнее использовать JSON формат.
+
 
+
2) Передача параметров в атрибуте src скрипта.
+
 
+
Этот способ используется загрузчиком библиотеки Script.aculo.us.
+
 
+
Идея следующая.
+
 
+
1) Необходимые параметры добавляются прямо к адресу скрипта. Напрмер, так
+
 
+
src="my-script.js?par1=myValue&par2=value2
+
 
+
Т.е. мы формируем GET запрос. Но естественно статичный JS файл его обработать не может.
+
 
+
2) Чтобы получить доступ к этим параметрам, мы добавляем в JS файл код, который:
+
 
+
2.1) находит соответствующий тег script;
+
 
+
2.2) читает его атрибут src;
+
 
+
2.3) получает строку с параметрами, например, с помощью такого регулярного выражения
+
/my-script\.js(\?.*)?$/
+
 
+
2.4) разбирает строку с параметрами (это можно сделать с помощью функции split).
+
 
+
Приводить пример для этого способа я не буду, т.к., во-первых, его можно посмотреть в исходниках script.aculo.us (файл scriptaculous.js, строки 48-56), а во-вторых, на мой взгляд, он обладает несколькими серьезными недостатками.
+
 
+
1) Вы не сможете передать большой объем данных таким способом, т.к. существуют ограничения на длину URL.
+
 
+
2) Значительно усложняется код как серверной, так и клиентской частей приложения. Сервер должен преобразовать массив с данными в строку, а браузер выполняет обратную операцию.
+

Поточна версія на 08:23, 7 квітня 2012

Сучасні веб-ресурси не просто надають інформацію відвідувачу, але і взаємодіють з ним. Для взаємодії з користувачем потрібно отримувати деяку інформацію від нього. Для отримання даних є декілька методів, дуже поширені методи 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 дані не будуть видимі користувачеві (не відображаються в адресному рядку браузера). І тому вони більш захищені, а, отже, і програма яка обробляє ці дані більш захищена в плані безпеки. Також обсяг переданих даних практично ні чим не обмежений. Вибираючи спосіб передачі даних потрібно враховувати наведені особливості і зупинятися на найбільш прийнятному методі.