Php параметры get запроса. Получить значение параметра из формы выбора вместо строки запроса. Передача переменных при помощи метода GET

Вы могли заметить, что на большинство сайтов можно лицезреть вот такие адреса:

Http://сайт/index.php?blog=2

Тут, даже не зная php, можно догадаться, что мы обращаемся к файлу index.php Но то, что идет после знака вопроса, мало кто знает. Все довольно просто: ?blog=2 это объявление глобальной переменной «$_GET["blog"]» с значением «2». Таким образом я в скрипт передаю переменную которая отвечает за вывод информации из базы данных. Давайте напишем небольшой скрипт в котором Вы все наглядно увидите:

if(isset($_GET["blog"])) {
echo $_GET["blog"];
}
?>

Мы используем оператор условий if() в качестве условия стоит вот такая строчка:

Isset($_GET["blog"])

isset() позволяет узнать существует ли переменная которая указана в скобках, то есть условие которое я описал в коде звучит так: Если существует переменная $_GET["blog"] то вывести содержимое этой переменной на экран. Вот что получилось:

Думаю понятно Создается глобальная переменная $_GET с идентификатором который мы объявили в адресной строке (в данном случае с идентификатором «blog» )

Теперь хочу пояснить один момент. Предположим нам необходимо объявить две переменные, как это сделать? Первая переменная объявляется после знака вопроса «?» Вторая же переменная объявляется после такого знака «&» (Если честно не знаю что это за знак ), вот пример объявление трех переменных:

Http://сайт/index.php?a=1&b=2&c=3

Вот код вывода:

if(isset($_GET["a"]) AND isset($_GET["b"]) AND isset($_GET["c"])) {
echo $_GET["a"]."
";
echo $_GET["b"]."
";
echo $_GET["c"]."
";
}
?>

Условие звучит так:

Если существует глобальная переменная $_GET["a"] и глобальная переменная $_GET["b"] и глобальная переменная $_GET["с"] то вывести их на экран , вот результат:

Формы

Прежде чем мы перейдем к post запросам, необходимо разобрать, что такое формы? Почему нужно? Потому что глобальная переменная $_POST[""] создается именно через формы. Что такое форма? Это поля для ввода какой-нить информации пользователем. Поля бывают в одну строчку, большие поля, так же бывают радио кнопочки, чек боксы. Разберем все по порядку...

Форма это тег:


элементы формы

У формы есть атрибуты, перечислю самые распространенные:

Давайте создадим форму:


элементы формы

В качестве файла обработчика я поставил файл test.php так как именно в нем пишу для Вас примеры. Метод отправки я поставил post так как именно этим методам пользуются в 99.9% случаях. Так же я присвоил нашей форме имя — form

Теперь окунемся в мир элементов формы. Первым делом Вы должны понять, что почти все элементы являются тегом отличие лишь в атрибуте type у этих тегов. Давайте я перечислю используемые элементы форм:

Я уверен, что вы не раз встречали такие поля, так что тут как говорится: «no comments»

Теперь давайте составим небольшую тренировочную анкету, с которой будем работать далее. Наша задача составить небольшую анкетку которая поведает нам имя заполнявшего, пол, из какой он страны, любимый цвет и поле текста где пользователь может добавить что-нить о себе. Вот что у меня получилось:

Ваше Фамилия Имя Отчество:

Ваш пол:
М
Ж

Из какой Вы страны



Любимый(ые) цвет(а):

Черный:
Красный:
Белый:
Другой:

О себе:




Обратите внимание, что почти у каждого тега есть атрибут value , для чего он? В него записываются данные которые Вы собираетесь перенести на другую страницу. Надеюсь понятно

Теперь если запустить этот код в браузере, то мы увидим следующее:

У формы я использовал атрибут action со значением test.php это означает, как я уже говорил, что данные из формы передадутся в файл test.php.

POST запрос

Теперь напишем php код который позволит нам увидеть введенную нами информацию. Где хранятся данные? В случае с get запросом, наши данные лежали в глобальной переменной $_GET[""]. При post запросе, данные будут лежать в глобальной переменной $_POST[""]. В квадратных скобках, необходимо прописывать, как и в случае с глобальной переменной get, идентификатор. Вопрос, где этот идентификатор взять? Вот для чего нам необходим атрибут name у элементов форм! Именно эти имена и служат нам ключом в глобальном массиве post. Ну что ж, приступим к описанию скрипта:

if(isset($_POST["submit"])) {
echo "ФИО: ".$_POST["fio"]."
";
echo "Пол: ".$_POST["sex"]."
";
echo "Страна проживания: ".$_POST["city"]."
";

Echo "Любимый(ые) цвет(а):
";
echo $_POST["color_1"]."
";
echo $_POST["color_2"]."
";
echo $_POST["color_3"]."
";
echo $_POST["color_4"]."
";
echo "О себе: ".$_POST["about"]."


";
}
?>

Написанное нами условие if гласит: Если существует глобальная переменная $_POST["submit"] то выводим данные на экран. Эта глобальная переменная создается в случае если мы нажали на кнопку отправки, вот для чего в данном примере необходим атрибут name в кнопке. Вы вполне можете задаться вопросом, почему же у кнопки атрибут name не обязательный? Все довольно просто. Обычно программист не отслеживает нажатие кнопки, а отслеживает посланные данные. Для корректной работы, например формы контактов, необходимо отследить не нажатие кнопки, а правильность ввода информации, и узнать вводили ли эту информацию вообще. В нашем же примере мы не проверяли посланные данные, а просто отследили нажатие кнопки, для упрощение примера... Вот что у нас получилось:

Заключение

Ну что ж, за сегодня мы разобрали два метода передачи данных между скриптами, так же галопам познакомились с формами. Очень надеюсь, что эта информация Вам хоть где то пригодится. Если есть какие вопросы, или мысли, пишите комментарии. Удачи Вам, на сегодня у меня все!

P.S.: Хотите что бы компьютерные игры стали еще более реалистичными? directx 11 для windows 7 скачать бесплатно можно на виндоус ин! Наслаждайтесь замечательной графикой!

из 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 была?foo=1&bar=2&baz=3 вызывающая refererQueryString("foo" , "baz") возвращает foo=1&baz=3" :

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"]) || empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) { return ""; } //Get URL query of referer (something like "threadID=7&page=8") $refererQueryString = parse_url(urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Which values do you want to extract? (You passed their names as variables.) $args = func_get_args(); //Get "" strings out of referer"s URL: $pairs = explode("&",$refererQueryString); //String you will return later: $return = ""; //Analyze retrieved strings and look for the ones of interest: foreach ($pairs as $pair) { $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //If you passed the name as arg, attach current pair to return string: if(in_array($key,$args)) { $return .= "&". $key . "=" .$val; } } //Here are your returned "key=value" pairs glued together with "&": return ltrim($return,"&"); } //If your referer was "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.

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

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

У меня также есть выпадающий список выбора формы с именем выбора формы position ,

Когда пользователь делает выбор, он отправляет значения параметра в атрибут действия с параметром 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 , Так что, если я могу сравнить со значением элемента формы, я могу установить правильный канонический.

Первый метод для выполнения 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 ).