Php отримати всі get параметри. Зовнішні змінні (змінні поза PHP). Передача змінних у PHP за допомогою методу POST

Перший метод для виконання PHP POST запиту полягає у використанні file_get_contents. Другий метод буде використовувати шпильку в поєднанні з парою інших функцій. Обидва варіанти використовують функцію 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).

з get (9)

Що таке спосіб «менший за код» для отримання параметрів з рядка запиту URL-адреси, яка відформатована таким чином?

www.mysite.com/category/subcategory?myqueryhash

Вихід має бути: myqueryhash

Я знаю про це:

Www.mysite.com/category/subcategory?q=myquery

Answers

Цей код та позначення не мої. Evan K дозволяє багатозначне однойменне завдання з функцією користувача;) береться з:

Наведений вище приклад виводить:

Привіт, Ханнесе!

Якщо ви хочете отримати весь рядок запиту:

$_SERVER["QUERY_STRING"]

Крім того, якщо ви шукаєте поточне ім'я файлу разом із рядком запиту, вам просто потрібно наступне

Basename($_SERVER["REQUEST_URI"])

Це надасть вам інформацію, як у наступному прикладі

file.php? arg1 = значення & арг2 = значення

І якщо вам також потрібен повний шлях до файлу, починаючи з root, наприклад, /folder/folder2/file.php?arg1=val&arg2=val, тоді просто видаліть функцію basename () і просто використовуйте накладення

$_SERVER["REQUEST_URI"]

Завдяки @K. Shahzad Це допомагає, коли ви хочете переписати рядок запиту без будь-яких додатків, що переписують. Скажімо, ви переписуєте /test/? X = y в index.php? Q = test & x = y і ви хочете отримати рядок запиту.

Function get_query_string()( $arr = explode("?",$_SERVER["REQUEST_URI"])), if (count($arr) == 2)( return ""; )else( return "?".end($ arr).
"; ) ) $query_string = get_query_string();

PHP-спосіб зробити це - використовувати функцію parse_url, яка аналізує URL-адресу і повертає її компоненти. Включно з рядком запиту.

$url = "www.mysite.com/category/subcategory?myqueryhash"; echo parse_url($url, PHP_URL_QUERY); # output "myqueryhash"

Ось моя функція для відновлення частин рядка запиту REFERRER.

Якщо на сторінці, що викликає, вже був рядок запиту у власному , і ви повинні повернутися на цю сторінку і хочете відправити деякі, не всі, з цих $_GET варів (наприклад, номер сторінки).

Приклад: рядок запиту Referrer був?

Function refererQueryString(/* var args */) ( //Return empty string if no referer or no $_GET vars in referer available: if (!isset($_SERVER["HTTP_REFERER"])) || empty($_SERVER["HTTP_REFERER "]) || urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); s URL: $pairs = explode("&",$refererQueryString); / / ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //If you passed the name arg, attach current pair to return string: if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Here are your returned "key=value" Пари glued together with "&": return ltrim($return,"&"); ) //If your referer був "page.php?foo=1&bar=2&baz=3" //and you want to header() back to "page.php?foo=1&baz=3" //(no "bar", only foo and baz), then apply: header("Location: page.php?".refererQueryString("foo","baz"));

Служба підтримки Microsoft заявляє: «Максимальна довжина URL-адреси становить 2083 символи в Internet Explorer».

IE має проблеми з URL-адресами довше. Firefox, схоже, відмінно працює із символами > 4k.

Web-програмування здебільшого є саме обробку різних даних, введених користувачем - тобто, обробку HTML-форм.
Мабуть, немає іншої такої мови, як PHP, яка б настільки полегшила завдання обробки і розбору, тобто. змінних, які надійшли із (з браузера користувача). Справа в тому, що в мову PHP вбудовані всі необхідні можливості, так що вам не доведеться навіть і замислюватися над особливостями протоколу HTTP і розмірковувати, як відбувається надсилання і прийом POST-форм або навіть завантаження файлів. Розробники PHP все передбачили.

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

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

Для того, щоб приймати дані від користувачів, нам потрібна інтерактивна взаємодія з ними.

А тепер спробуємо написати сценарій, який приймає у параметрах ім'я користувача та виводить:

"Вітання, !".

Спочатку розглянемо найпростіший спосіб передачі імені сценарію - безпосередній набір його URL після знака ? - Наприклад, у форматі name=ім'я . Ось приклад:

http://localhost/script.php?name=ім'я

Наш сценарій має розпізнати параметр name. Тобто, простіше кажучи, сценарій (скрипт) повинен прийняти параметр name у вигляді змінної name , а потім вивести в браузер користувача рядок "Привіт, !". Зробити це можна таким чином:

Пишемо скрипт, що приймає параметр name і виводить результат у браузер користувача, а потім зберігаємо його під ім'ям script.php :

У прикладі ми використовували зумовлену змінну $_GET["name"] , щоб "прийняти" параметр name . Тепер, передавши через GET-запит параметр name=Саша, ми отримаємо наступний результат:

Привіт Саша!

А тепер спробуємо передати параметр не з рядка запиту браузера, а через HTML-форму. Створюємо HTML-документ такого змісту:


Name:

Тепер збережемо цей HTML-документ на нашому тестовому сервері (localhost) під ім'ям send.html у тій же директорії, де вже збережено сценарій script.php .

Тепер запускаємо HTML-документ у браузері:

http://localhost/send.html

Вводимо ім'я в полі та натискаємо кнопку "GO!". Форма передасть через GET-запит параметр name нашому скрипту script.php. Якщо ви все зробили правильно і ваш web-сервер працює нормально, ви побачите введене вами поле форми ім'я! В адресному рядку браузера ви побачите шлях і переданий вами параметр name.

Тепер ми повинні зрозуміти, як ми можемо передати безліч параметрів, для початку хоча б два .

Отже, нам потрібно, щоб скрипт виводив таке:

"Привіт, ! Вам років!".

Тобто нам потрібно передати в скрипт 2 параметри: name та age.

Тепер ми напишемо скрипт script.php , який приймає два параметри: name і age , а також HTML-документ з формою, яка ці два параметри буде передавати в наш новий скрипт:

А ось і HTML-документ send.html, за допомогою якого ми параметри name і age передамо нашому скрипту:



Введіть ім'я:

Введіть вік:



Тепер наш скрипт приймає два параметри name і age і виводить у браузер результат формату: "Привіт! Вам років!".

Зверніть увагу на адресний рядок браузера після передачі параметрів сценарію, він буде виглядати приблизно так (без URL-кодування кирилиці):

http://localhost/script.php?name=Саша&age=23

Залежно від установок інтерпретатора, існує кілька способів доступу до даних з ваших HTML-форм. Ось кілька прикладів:

//У формі методом get через приховане поле надсилаємо значення 1 Надіслати запит

Файл get.php

Php запит post

Php запит post передається так само через форму, тільки атрибут у меті form буде method="post" . І отримувати дані у вказаному файлі ми будемо з масиву пост $_POST["search"] і відразу наведемо приклад.

Завдання: відправити дані з index.php методом POST на сервер у файл get.php і отримати їх назад, якщо поле відправки даних пусте вивести повідомлення про незаповнене поле. Рішення почнемо з index.php

Пошуковий запит

Заповніть поле запиту

Введений запит:

Відправити запит

Файл get.php

Передача масиву AJAX

Виконаємо те саме завдання за допомогою ajax. Взагалі то ajax це технологія, що відноситься до javascript, але в рамках нотатки про передачу даних на сервер торкнемося і цієї технології. Звичайно, ajax це тема окремої статті. У процесі запиту ще виводитимемо гіфку індикатора завантаження. Також маємо два файли index.php та get.php. Файл index.php Не забуваймо підключати jquery. Зверну увагу, для приховування гіфки при першому завантаженні сторінки призначаємо блоку box стиль display: none

$(document).ready(function()( //вішаємо подію на кнопку відправити $(".submit").click(function()( $.ajax(( //як будемо передавати дані type: "GET", / /куди передаємо url: "get.php", //які дані передаємо data: (flag: 1), //подія перед відправкою ajax beforeSend: function()( //виводимо гіфку $(".box").show( ); ), //подія після отримання відповіді, //отримуємо масив у data success: function(data)( //приховуємо гіфку $(".box").hide(); var html = ""; //ф- я JSON.parse переводить json дані в об'єкт var dt=JSON.parse(data);for (var i = 0; i

Файл get.php У файл отримуємо дані з геть масиву і з php передаємо масив javascript. Щоб передати php масив в js, його потрібно привести до формату json. Для цього використовуємо php ф-ю json_encode. Після перекодування робиться відправка json php засобами, саме викликаємо echo.

У мене є структура URL із рядком запиту та параметром під назвою position ,

http://computerhelpwanted.com/jobs/?occupation=administrator&position=network+administrator

У мене також є список вибору форми з ім'ям вибору форми position ,

Select Occupation Administrator Select Position Network Administrator

Коли користувач робить вибір, він надсилає значення параметра до атрибуту дії з параметром select name = «position» як параметр для використання в рядку запиту.

У мене є питання, як мені отримати доступ до значень вибору форми окремо від значень рядка запиту?

Я використовую метод _GET для виклику значення параметра рядка запиту.

$position = isset($_GET["position"]) ? ($_GET["position"]) : "";

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

Як я можу отримати доступ до значення вибору форми у порівнянні з моїм PHP?

Оновити

У мене проблема з канонічною URL-адресою, вказаною в заголовку.

так має бути

єдина різниця полягає в - та + у рядку запиту.

Не всі рядки мого запиту мають +. У деяких є. Але я показую контент з обох URL, незалежно від того, чи є у нього або +. У будь-якому випадку обидва URL отримують однаковий вміст сторінки.

Але оскільки канонічне створюється динамічно з URI, а не значення елемента форми, на обох сторінках контенту є 2 різних канонічних символу.

Використання _Get ('value') отримує значення з рядка запиту замість елемента форми. Я знаю це, тому що значення елемента форми має пробіл між network administrator який отримує urlencoded, коли форма представляє як network+administrator , Так що якщо я можу порівняти зі значенням елемента форми, я можу встановити правильний канонічний.