Обробка http запитів PHP. Обробка запитів за допомогою PHP. Використання HTML-форм для передачі даних на сервер

HTML-форми дозволяють передавати введені користувачем дані на сервер, де можна додатково обробити. Обслуговування форм виконується у два етапи. Спочатку форма має бути представлена ​​користувачеві, який заповнить її своїми даними та потім відправить на сервер. Кожна форма має цільову веб-сторінку, яка повинна бути завантажена для обробки даних, надісланих користувачем. Найчастіше це той самий файл сценарію, який генерує форму. У цьому випадку PHP-код просто перевіряє наявність даних у формі, щоб визначити, чи викликати йому знову сценарій для створення форми або розпочати обробку отриманих даних.

Увага! Урок застарів. Нові уроки з цієї теми містяться в курсі PHP для початківців.

Найчастіше, відправлення форм на сервер передбачає якусь роботу з базами даних. Наприклад, операція пошуку в базі даних – це необхідна дія для більшості різноманітних програм, будь то пошук повідомлень у форумі, користувачів чи блогу. У будь-якому випадку ця операція здатна полегшити життя користувача. Т.к. до цього моменту ми ще не познайомилися із взаємодією PHP і СУБД MySQL, то в даній статті ми розглянемо прості приклади обробки форм, а головним завданням для мене є показати, як відбувається передача інформації за допомогою мови PHP.

Передача інформації за допомогою мови PHP

У цьому розділі наведено основні відомості про те, як можна передавати дані між веб-сторінками. Певна частина цієї інформації не стосується виключно технології PHP, а описує взаємодію засобів PHP і HTML або стосується самого протоколу HTTP.

Відсутність підтримки стану у протоколі HTTP

Найважливіша особливість функціонування будь-якої технології Інтернет, яку завжди слід пам'ятати, у тому, що сам протокол HTTP характеризується відсутністю підтримки станів. Це означає, що кожен запит HTTP (який у більшості випадків зводиться до вимоги на отримання та доставку окремого ресурсу, такого як HTML-сторінка, файл.jpg, таблиця стилів тощо) є незалежним від усіх інших запитів, не включає якусь запит -або інформацію про ідентифікацію клієнта і залишає сліду у пам'яті комп'ютера.

Навіть якщо сайт спроектований в такий спосіб, що навігація, тобто. перехід з однієї сторінки на іншу, відбувається строго в одному напрямку (припустимо, сторінка 1 веде лише до сторінки 2, яка веде тільки до сторінки 3, і т.д.), засоби підтримки протоколу HTTP не мають інформації та не враховують те, що користувач, який переглядає сторінку 2, обов'язково повинен був відвідати сторінку 1. Не можна присвоїти значення будь-якої змінної на сторінці 1 і сподіватися, що воно буде імпортовано на сторінку 2 за допомогою самої мови HTML. Код HTML може використовуватися для відображення форми, і за допомогою цього коду можна навіть вводити інформацію, але якщо не будуть застосовуватись деякі додаткові засоби передачі введеної інформації на іншу сторінку або в іншу програму, то значення, надане змінною, після переходу на іншу сторінку просто зникне .

Технології обробки форм, подібні до PHP, призначені саме для вирішення цього завдання. Кошти PHP дозволяють перехопити значення змінної, що передається з попередньої сторінки на наступну, і забезпечити доступ до цього значення для подальшого використання. Як виявилось, технологія PHP надає можливість виконувати функції передачі даних такого типу надзвичайно успішно, тому дозволяє швидко та легко розгортати необхідні засоби для вирішення найрізноманітніших завдань, пов'язаних із забезпеченням функціонування веб-сайту.

Зручні можливості передачі невеликої кількості значень з даної конкретної сторінки на будь-яку іншу сторінку веб-сайту надають форми HTML. Є також інші способи підтримки стану протягом багатьох переглядів сторінок, що характеризуються більшою тривалістю зберігання даних, такі як файли cookie та сеанси, які будуть описані в одній з наступних статей. А в цій статті розглядаються в основному найбільш прості способи передачі інформації між веб-сторінками, в яких використовуються методи GET і POST у поєднанні з протоколом HTTP для створення сторінок, що динамічно формуються, і обробки даних форми.

Параметри GET

Метод GET передбачає передачу параметрів із попередньої сторінки на наступний у складі рядка запиту, який представлений у форматі універсального ідентифікатора ресурсу URI. При використанні методу GET для обробки форми до URL, позначеного за допомогою атрибуту action форми, після роздільника додається у вигляді знака питання вказане ім'я (імена) і значення (значення) змінної, після чого весь цей рядок передається обробному агенту (в даному випадку веб- серверу).

Нижче наведено приклад форми HTML, в якій використовується метод GET (введіть цю розмітку та збережіть файл під ім'ям sportselect.html):

Основи PHP

Виберіть ваш улюблений вид спорту

Після того як користувач зробить свій вибір і клацне на кнопці "Надіслати", браузер з'єднає перелічені нижче елементи у зазначеному порядку, без пробілів між елементами:

  • URL у лапках після слова action (http://localhost/sports.php).
  • Знак питання (?), що означає, що наступні символи становлять рядок GET.
  • Змінна назва, знак рівності (=) та відповідний параметр value (value=Хокей).
  • Амперсанд (&) і наступна за ним пара name=value (якщо є).

Таким чином, браузер сформує наступний рядок URL:
http://localhost/sports.php?sport=Хокей

Потім браузер перенаправляє отриманий рядок URL в межах власного простору адрес як новий запит. Сценарій PHP, наведений нижче (sports.php), до якого передається зазначена форма, здійснює вибірку значень змінних GET з останньої частини рядка запиту, вставляє ці змінні та значення змінних у суперглобальний масив $_GET (який незабаром буде описаний) і виконує якісь необхідні дії із цими значеннями; у разі відбувається вставка у текстовий рядок.

Нижче наведено приклад коду, в якому показано оброблювач форми PHP для зазначеної вище форми HTML:

Улюблений вид спорту

Ваш улюблений вид спорту -

Зверніть увагу на те, що значення, введене в полі форми HTML з атрибутом name="sport" на попередній сторінці, тепер доступне у вигляді змінної PHP з ім'ям $_GET["sport"]. Роботу цього прикладу демонструє наступний малюнок:

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

Обробник форм отримує доступ до кожного елемента, що передається за допомогою методу GET, звертаючись до масиву $_GET, а до кожного елемента, що передається за допомогою методу POST, звертаючись до масиву $_POST. Синтаксична структура, що застосовується для звернення до будь-якого елемента суперглобального масиву, є простою і одноманітною:

$_array_name["index_name"]

Тут index_name - це частина пари "ім'я-значення", що стосується імені (для методу GET), або ім'я поля форми HTML (для методу POST). Відповідно до попереднього прикладу $_GET["sport"] вказує значення елемента select форми, що має ім'я "sport"; це значення передано за допомогою операції GET, виконаної стосовно початкового файлу. В обробнику форми необхідно використовувати масив, що відповідає методу, за допомогою якого були передані дані. Зокрема, у прикладі значення $_POST["sport"] не визначено, оскільки з початкової форми не були відправлені будь-які дані за допомогою методу POST.

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

Тільки те, що бажані функціональні можливості можуть бути досягнуті за допомогою параметрів GET, не означає, що потрібно використовувати метод GET. Недоліки методу GET, які виявляються у більшості типів обробки форм, є такими суттєвими. В оригінальній робочій специфікації HTML 4.0, опублікованій у 1997 році, цей метод не був рекомендований для використання. Основні недоліки методу GET перераховані нижче:

  • Метод GET не застосовується для створення вікон реєстрації, оскільки ім'я користувача та пароль повністю видно на екрані, а також не виключена можливість збереження цих даних у пам'яті браузера клієнта як інформація про відвідану сторінку.
  • Кожна операція передачі даних методом GET, включаючи сам набір даних, реєструється у журналі веб-сервера.
  • У методі GET передбачено надання даних змінного середовища сервера, тому довжина URL обмежена. Можливо, вам доводилося бачити, як виглядають дуже довгі URL-адреси, передані за допомогою методу GET, і дійсно, навряд чи комусь захочеться передавати за допомогою цього методу фрагмент тексту у форматі HTML, що складається з 300 слів.

У початковій специфікації HTML зазначено, що довжина рядка запиту має перевищувати 255 символів. Безумовно, це обмеження надалі було знято і залишилася лише рекомендація дотримуватися межі 255 символів, але застосування довших рядків все одно може стати причиною порушення в роботі.

Параметри POST

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

Серед розробників поширена нічим не виправдана впевненість у тому, що метод POST безпечніший, ніж GET. Насправді жоден з цих методів не є більш менш безпечним, ніж інший. Відвідувач може також успішно переглядати змінні та дані, що надсилаються за допомогою методу POST, як і за допомогою методу GET. Єдина відмінність полягає в тому, що в першому випадку дані, що передаються, не виявляються в адресному рядку. Але це не означає, що вони приховані. Дані, надіслані за допомогою методу POST, можуть переглядатися та модифікуватись користувачем веб-сайту.

Першим і найважливішим правилом програмування, особливо програмування для мережі, є:
Ніколи не довіряти вхідним даним.

Слід завжди виходити з того, що відвідувач, можливо, зі злим наміром або нехай навіть випадково змінив дані, що передаються в конкретну програму, тому необхідно ретельно перевіряти ці дані.

Дані форми, що передається, стають більшою або меншою мірою безпечними, тільки якщо запит захищений з використанням SSL, TLS або якогось іншого способу шифрування. Але до кінцевого користувача або відвідувача дані однаково надходять у відкритому вигляді, тому для нього так чи інакше залишається можливість переглядати і змінювати дані. Справа в тому, що за допомогою протоколу SSL здійснюється просто шифрування даних, що передаються через мережу, що не дозволяє розглядати дані у відкритому вигляді на етапі їх проходження від відправника до одержувача. Що ж до можливості для відвідувача вносити зміни до даних форм, то в протоколі SSL для запобігання цьому нічого не передбачено.

Щоб змінити спосіб передачі даних у попередньому прикладі, потрібно внести такі зміни:

...

Робота з кількома значеннями

Якщо у формі є прапорці чи перемикачі, виникає нова проблема. Наприклад, користувач може вибрати у формі відразу два значення, але змінна не може зберігати більше одного значення, тому доведеться використовувати масив. Ця ситуація демонструється на прикладі нижче:

" method="post">
Виберіть ваших улюблених вихованців

Вибрані тварини: "; foreach ($animal as $a) ( echo " ".htmlentities($a).""; } } ?>

Ця форма дозволяє користувачеві вибрати улюблених улюбленців. У цьому прикладі користувач може помітити відразу кілька прапорців. Отже, при обробці даних форми в PHP-сценарії необхідно передбачити можливість отримати доступ до кількох значень одного імені. Ми розмістили пару квадратних дужок () після імені в атрибуті name, щоб мати можливість відправляти кілька варіантів вибору у вигляді масиву. Якби квадратні дужки були опущені, і користувач помітив кілька прапорців, його вибір був би заміщений останнім зазначеним прапорцем. Помістивши квадратні дужки після імені, ми вказали, що значення мають зберігатися як масиву.

В обробнику масив зберігається в змінну $animal і перераховується за допомогою циклу foreach, як звичайний масив.

Валідація форми та форматування змінних форми

Програма, отримуючи дані від користувача, щоразу повинна перевіряти їх на коректність. Якщо не перевіряти дані, введені користувачем, можна отримати багато проблем, у тому числі загрозу безпеці. Перевірити дані не так складно, як може здатися.

Більш зручною для користувачів є перевірка на стороні клієнта з використанням JavaScript, але незалежно від того, чи ця перевірка буде використана, перевірку на стороні сервера потрібно виконувати обов'язково.

При створенні форм HTML необхідно також враховувати наступне: якщо у формі мають бути відображені заздалегідь заповнені вхідні дані, необхідно встановити атрибут value. Це зауваження особливо справедливе по відношенню до двох різновидів форм - тим, які використовуються для редагування даних, отриманих з бази даних, і тим, які призначені для можливого надсилання даних більше одного разу. Останній випадок дуже часто зустрічається в таких ситуаціях, коли форма повинна бути повторно виведена після виявлення помилок вже заздалегідь заповнених даних. Як приклад можна вказати форму реєстрації, дані якої не приймаються на обробку доти, доки користувач не вкаже допустиму адресу електронної пошти або інші необхідні дані.

У прикладі нижче показаний спосіб обробки форми, що включає валідацію на стороні сервера та обробку на тій самій сторінці форми:

Основи PHP

" method="post">
Контактна інформація "class="">
"class="">

У цьому прикладі використовується функція filter_var() яка здійснює перевірку змінної з використанням фільтра та приймає два параметри - вихідний рядок та константу, що вказує на тип фільтра. Крім валідації email-адрес (FILTER_VALIDATE_EMAIL) ця функція підтримує наступні константи: FILTER_VALIDATE_URL - перевіряє значення на коректність URL (наприклад,), FILTER_VALIDATE_IP - перевіряє значення на коректність IP-адрес, є альтернативами функцій is_bool(), is_float(), is_int() тощо.

Отже, минулого уроку ми згадували про те, як відбувається робота користувача з сайтом. Їхнє спілкування відбувається у формі запит-відповідь. Користувач надсилає у запиті якісь дані, а сервер повертає будь-яку відповідь, залежно від цих даних.

Він переходить по ній і чудово почувається, бо все вже введено за нього.

Однак, параметри адресного рядка – це не завжди доречно. Наприклад, коли в параметрах міститься конфіденційна інформація: пароль, пін-код. І будь-яка людина, яка мимо проходить, може її побачити. Як у такій ситуації бути? Використовувати POST запити!

Що це таке? Та все той же запит від клієнта до сервера, тільки параметри передаються всередині запиту, а не в адресному рядку. І побачити їх просто так не вдасться.

Що за тіло запиту? Ну це просто дані, які передаються на сервер. При цьому вони приховані від зайвих очей.

Щоб надіслати POST-запит, потрібно в HTML-формі задати для атрибуту method значення POST.

курсу PHP для початківців.

Дані, надіслані за допомогою POST-запиту доступні PHP в суперглобальному масиві $_POST.

Давайте виведемо передані скриптом вище значення login та password. Для цього у файл login.php покладемо наступний код:

Код доступний тільки після покупки курсу PHP для початківців.

Відкрийте тепер форму, введіть значення і натисніть кнопку «Увійти».
Ви побачите введені вами у формі дані, причому вони будуть відсутні в адресному рядку. Вуаль! Тепер ніхто не підгляне ваш пароль у адресному рядку.

Як побачити тіло POST-запиту

Щоб побачити дані запиту POST у браузері, в Google Chrome потрібно перейти в режим розробника. Натисніть клавішу F12 у вікні браузера. Після цього ви побачите панель розробника.

Перейдіть у вкладку Network, а потім встановіть галочку навпроти Preserve log.

Тепер поверніться на форму і знову введіть дані, після чого натисніть кнопку «Увійти».

Одночасно з тим, як ви натиснете кнопку входу, ви побачите в панелі розробника запит на login.php.

Натисніть на нього, і праворуч відобразяться деталі запиту. За промовчанням відкривається вихідний код відповіді. Тут можна побачити те, що було згенеровано за допомогою PHP та надіслано веб-сервером до браузера.

Нас тут цікавить вкладка Headers. Перейдіть до неї, і прокрутіть вміст у самий низ. Тут ви побачите дані, які браузер відправив на сервер.

Висновок

Отак і працюють POST-запити під капотом. Використовують їх завжди, коли не потрібно відображати деталі запиту адресного рядка. Хороші приклади: форма авторизації, введення даних про кредитну картку. Такими даними краще в адресному рядку не світити.

А зараз – трохи нестандартне домашнє завдання =)

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

Перший метод для виконання PHP POST запиту полягає у використанні file_get_contents. Другий метод використовуватиме fread у поєднанні з парою інших функцій. Обидва варіанти використовують функцію stream_context_create , щоб заповнити необхідні поля заголовка запиту.

Пояснення коду

Змінна $sPD містить дані, які потрібно надіслати. Вона повинна мати формат рядка HTTP-запиту, тому деякі спеціальні символи мають бути закодовані.

І функції file_get_contents , і функції fread ми маємо два нових параметра. Перший з них - use_include_path. Так як ми виконуємо HTTP-запит, в обох прикладах він матиме значення false. При використанні значення true для зчитування локального ресурсу функція шукатиме файл за адресою include_path.

Другий параметр — context , він заповнюється значенням stream_context_create , що повертається, який приймає значення масиву $aHTTP .

Використання file_get_contents для виконання запитів POST

Щоб в PHP відправити POST запит за допомогою file_get_contents , потрібно застосувати stream_context_create , щоб вручну заповнити поля заголовка і вказати, яка обгортка буде використовуватися - в даному випадку HTTP :

$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адреса POST $sPD = "name=Jacob&bench=150"; // Дані POST $aHTTP = array("http" => // Обгортка, яка буде використовуватися array("method" => "POST", // Метод запиту // Нижче задаються заголовки запиту "header" => "Content- type: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $contents;

Використання fread для виконання POST-запитів

Для виконання запитів POST можна використовувати функцію fread . У прикладі stream_context_create використовується для складання необхідних заголовків HTTP-запиту :

$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адреса POST $sPD = "name=Jacob&bench=150"; // Дані POST $aHTTP = array("http" => // Обгортка, яка буде використовуватися array("method" => "POST", // Request Method // Нижче задаються заголовки запиту "header" => "Content- type: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $context); $contents = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $contents;

Виконання GET-запитів за допомогою PHP

Тепер ми приділимо увагу використанню fread та file_get_contents для завантаження контенту з інтернету через HTTP та HTTPS. Щоб використовувати методи, описані в цій статті, необхідно активувати опцію fopen wrappers. Для цього у файлі php.ini потрібно встановити для параметра allow_url_fopen значення On.

Виконання POST та GET запитів PHP застосовується для входу в систему на сайтах, отримання вмісту веб-сторінки або перевірки нових версій програм. Ми розповімо, як виконувати прості HTTP-запити.

Використання fread для завантаження чи отримання файлів через інтернет

Пам'ятайте, що зчитування веб-сторінки обмежується доступною частиною пакета. Тому потрібно використовувати функцію stream_get_contents ( аналогічну file_get_contents) або цикл while , щоб зчитувати вміст меншими фрагментами доти, доки досягне кінець файла:

У разі обробки POST запиту PHP останній аргумент функції fread дорівнює розміру фрагмента. Він, як правило, не повинен бути більше, ніж 8192 ( 8*1024 ).

Майте на увазі, що він може бути більшим або меншим, а також може бути обмежений налаштуваннями системи, на якій запускається PHP .

Використання file_get_contents для отримання URL-адреси сайту

Ще простіше використовувати цей метод при зчитуванні файлу по HTTP, тому що вам не доведеться дбати про зчитування по фрагментах - все обробляється в PHP.

Дана публікація є перекладом статті «Making POST Requests With PHP», підготовленої дружною командою проекту

Клієнти браузера можуть надсилати інформацію на веб-сервер.

Перш ніж браузер відправить інформацію, він кодує її, використовуючи схему, яка називається кодуванням URL. У цій схемі пари ім'я/значення поєднуються з рівними знаками, а різні пари поділяються амперсандом.

Name1=value1&name2=value2&name3=value3

Пробіли видаляються та замінюються символом +, і будь-які інші неалфанумерні символи замінюються шістнадцятковими значеннями. Після того, як інформація закодована, вона надсилається на сервер.

Метод GET

Метод GET відправляє закодовану інформацію користувача, додану до запиту сторінки. Сторінки та кодованої інформації відокремлені один від одного? знаком питання.

http://www.test.com/index.htm?name1=value1&name2=value2

  • Метод GET створює довгий рядок, який відображається у ваших журналах сервера, у полі «Розташування» браузера.
  • Метод GET обмежується відправити ДО лише 1024 символів.
  • Ніколи не використовуйте метод GET, якщо у вас є пароль або інша конфіденційна інформація для надсилання на сервер.
  • GET не може бути використаний для передачі двійкових даних, наприклад зображення або текстові документи, на сервер.
  • Доступ до даних, надісланих методом GET, можна отримати за допомогою змінного оточення QUERY_STRING.
  • PHP надає асоціативний масив $_GET для доступу до всієї інформації, що відправляється з використанням методу GET.

if($_GET["name"] || $_GET["age"]) ( echo "Welcome ". $_GET["name"]; echo "You are ". $_GET["age"]. " years old ."; exit(); )

Name: Age:

Метод POST

Метод POSTпередає інформацію через заголовки HTTP. Інформація кодується, як описано у випадку методу GET, і міститься в заголовку QUERY_STRING.

  • Метод POST не має обмежень на розмір даних, які потрібно надіслати.
  • Метод POST може використовуватися для надсилання ASCII, а також двійкових даних.
  • Дані, надіслані методом POST, проходять через заголовок HTTP, тому безпека залежить від протоколу HTTP. Використовуючи Secure HTTP, ви можете переконатись, що ваша інформація захищена.
  • PHP надає асоціативний масив $_POST для доступу до всієї інформації, що відправляється з використанням методу POST.

Спробуйте наступний приклад, помістивши вихідний код скрипт test.php .

if($_POST["name"] || $_POST["age"]) ( if (preg_match("[^A-Za-z"-]",$_POST["name"]))) ( die (" invalid name and name should be alpha"); ) echo "Welcome ". $_POST["name"]; echo "You are ". $_POST["age"]. " years old."; exit(); )

Name: Age:

Змінна $_REQUEST

Змінна PHP $_REQUESTмістить вміст як $_GET, $_POST, так і $_COOKIE. Ми обговоримо змінну $_COOKIEколи ми розповімо про файли cookie.

Змінна PHP $_REQUEST може використовуватися для отримання результату даних форми, відправлених з використанням методів GET і POST.

(дистриб'ютив Денвер) і ви навчилися писати найпростіші програми на PHP, саме час дізнатися, яким чином браузер (клієнт) може робити серверу запити і отримувати відповідні відповіді. На прикладі створення простої HTML-форми ми вивчимо основні засади такої взаємодії.

Якщо ви вже добре знаєтеся на каталогах Денвера, то можете створити будь-який PHP-файл у зручній для вас директорії і приступити безпосередньо до написання коду. Для тих, хто ще не впевнений у своїх силах, раджу вчинити так: на віртуальному диску з Денвером (зазвичай це Z) у папці home створіть папку lessons. Далі, у цій папці створіть ще одну папку - www. Це ваша робоча папка проекту, яка буде доступна з рядка адреси браузера. Перезавантажте Денвер, щоб створений хост прописався у системі. Нарешті, у папці www створіть файл index.php. Це буде основний файл з вашим кодом.

Як бачите – це звичайна HTML-розмітка, проте ми назвали файл index.php, а це означає, що тепер у документ ми можемо вставляти будь-які інструкції PHP.

Якщо ви зайдете в браузері за адресою http://lessons/ , то побачите такий результат:

Заповніть поля (наприклад: ім'я – Вася, рік народження – 1990) та натисніть кнопку "надіслати". Що ви бачите? А нічого! Знову та сама форма, тільки порожня. Однак не поспішайте засмучуватись – погляньте на адресний рядок браузера. Вона змінилася і тепер виглядає приблизно так:

Http://lessons/index.php?user_name=Вася&user_year=1990&submit_form=надіслати

А це означає, що сервер таки отримав ваші дані!

Давайте тепер розберемося.

Метод GET

По-перше, що взагалі таке HTML-форма? Це інтерфейс, що дозволяє надсилати будь-які дані з браузера клієнта на сервер. Погляньте на атрибути вашої форми:

Атрибут action відповідає за адресу одержувача даних, що надсилаються. У разі форма вирушає той самий адресу, тобто. на lessons/index.php

На особливу увагу заслуговує атрибут method , який визначає метод відправки запиту на сервер. Таких методів є кілька, а найбільш поширені (і практичні) це методи GET і POST. Нині нас цікавитиме метод GET.

GET-запит означає, що дані передаватимуться на сервер безпосередньо через адресний рядок. Ви в цьому вже переконалися, надіславши форму – до рядка адреси додалися певні дані. Звідки ці дані беруться? Зверніть увагу на теги input у HTML-формі. Усі вони мають атрибут name , який встановлює ім'я даного поля.

При методі GET до основної адреси додається символ "?" (знак питання), щоб сервер розумів, що надійшли якісь дані. Після символу "?" йдуть безпосередньо самі дані у вигляді ім'я = значення. Якщо таких даних кілька, вони поділяються між собою символом об'єднання "&". Надішліть форму з іншими значеннями полів і переконайтеся в цьому.

Настав час навчитися "ловити" та обробляти отримані дані. Зважаючи на те, що атрибут action вказує на поточний файл index.php, значить дані надходять саме сюди, тому у цьому ж файлі ми і пропишемо код обробки GET-запиту.

Отже, відразу після тегу додамо такий PHP-код:

Збережіть файл, знову зайдіть на http://lessons/, відправте форму і – о, диво! - Що ви бачите?

Щойно після відправлення форми сервер отримав та обробивотримані дані та надіслав у браузер свою відповідь!

Розглянемо PHP-код нашого проекту, який є умовою:

If (isset($_GET["submit_form"])) ( )

Сервер перевіряє, чи отримана змінна GET-запиту з ім'ям submit_form? Тобто, простіше кажучи, а чи взагалі була відправлена ​​форма? Якщо це так, то серверний php-код відправляє прямо до браузера користувача нову HTML-розмітку зі своєю відповіддю, використовуючи для цього оператор echo . Якщо ви уважно вивчите написаний код-обробник, то вам одразу все стане зрозумілим!

Цікавий цей метод GET! Змініть адресний рядок, наприклад, на такий:

Http://lessons/index.php?user_name=Моє ім'я&user_year=1900&submit_form=надіслати

та натисніть кнопку "Введення". Сервер вам знову відповість, прийнявши вже інші дані! Думаю, із цим усе зрозуміло.

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

Метод POST

Цей метод передбачає передачу даних окремим пакетним потоком в тілі запиту, що надійно захищає дані, що надсилаються, і дозволяє передавати значні обсяги інформації, які можуть бути обмежені лише налаштуваннями сервера. Тому такий тип запиту ідеально підходить для надсилання особистих даних та будь-яких типів файлів.

Змініть файл, замінивши в PHP-коді імена змінних $_GET на $_POST, а у формі пропишіть method="POST" . Оновіть сторінку і знову надішліть форму. Результат буде таким же, що і при методі GET, однак адресний рядок залишився без змін, а це означає, що дані були відправлені в захищеному вигляді в тілі самого запиту.

Для закріплення матеріалу створимо маленьку веб-додаток, яка буде вимагати логін та пароль користувача для входу на сайт. Код прикладу буде відносно складним і від вас потрібна увага та бажання розібратися у функціоналі PHP-програми.

Файл index.php:

Запустіть приклад та подивіться, що відбувається. Спочатку запитується логін і пароль користувача (у коді ми визначили їх як "admin" і "secret"), якщо все правильно - ми потрапляємо на головну сторінку сайту, якщо дані невірні - виводиться відповідне попередження.

Розглянемо реалізацію цієї технології.

Зверніть увагу – весь код HTML-форми ми не виводимо безпосередньо, а запам'ятовуємо у змінній $form.

Будьте уважні з лапками! Весь HMTL-код знаходиться всередині одинарних лапок, тому його внутрішні лапки повинні бути подвійними. Якби ви написали

$form = " ... ваш код ... ",

то внутрішній код міститиме навпаки – одинарні лапки.

Далі, у рядку 27 перевіряється, чи була відправлена ​​форма (умова 1 на рис.), якщо ні – виводиться HTML-форма та сценарій припиняє свою роботу- Функція die() . Більше нічого, окрім форми у браузер не виводиться.

Якщо дані були отримані, перевіряються POST-змінні на відповідність заданим (умова 2 на рис.). Якщо вони не збігаються, виводиться попереджувальне повідомлення, HTML-форма для входу і сценарій знову припиняє роботу (die() ).

Якщо ж друга умова виконується, скрипт пропускає всі оператори else і переходить на відображення основної сторінки. (Перехід 3 на рис.).

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

 
Статті потемі:
Що таке брут акаунтів?
Часто нас запитують: «Поясніть детально які акаунти вконтакте називаються феком, а які ретривом. І які ще бувають? І які довше живуть? ». Звичайно ж, для збільшення часу життя облікового запису - виводити облікові записи в соціальну мережу тільки з унікальної користі.
Обробка запитів за допомогою PHP
HTML-форми дозволяють передавати введені користувачем дані на сервер, де можна додатково обробити. Обслуговування форм виконується у два етапи. Спочатку форма має бути представлена ​​користувачеві, який заповнить її своїми даними і потім відп.
Адаптивне ціле фонове зображення за допомогою CSS
Від автора: У цій навчальній статті ми розглянемо просту техніку створення фонового зображення, яке повністю розтягуватиметься на всю ширину вікна перегляду (viewport) браузера. Для цього нам знадобиться CSS-властивість background-size; JavaScript не
Поширені коди помилок на принтерах HP
МФУ HP Laserjet M1132 MFP – це одна з найкращих та найпопулярніших моделей принтерів HP. Професійний сервісний центр Комплейс виконує ремонт HP M1132 за 1-2 дні. Гарантія на ремонт 2 місяці. Помилка E8 HP M1132 Помилка E8 – це помилка сканера. Сканер