Php získat všechny parametry get. Externí proměnné (proměnné mimo PHP). Předávání proměnných do PHP pomocí metody POST

První metodou, jak provést požadavek PHP POST, je použít file_get_contents . Druhá metoda bude používat fread v kombinaci s několika dalšími funkcemi. Obě možnosti používají funkci stream_context_create k vyplnění požadovaných polí záhlaví požadavku.

Vysvětlení kódu

Proměnná $sPD obsahuje data, která mají být přenesena. Musí být ve formátu řetězce požadavku HTTP, takže některé speciální znaky musí být zakódovány.

Jak ve funkci file_get_contents, tak ve funkci fread máme dva nové parametry. První z nich je use_include_path . Protože provádíme požadavek HTTP, bude v obou příkladech nepravdivý. Když je nastaveno na true pro čtení místního zdroje, funkce bude hledat soubor na adrese include_path .

Druhým parametrem je kontext, který je vyplněn návratovou hodnotou stream_context_create, která přebírá hodnotu pole $aHTTP.

Použití file_get_contents k vytváření požadavků POST

Chcete-li odeslat požadavek POST pomocí file_get_contents v PHP, musíte použít stream_context_create k ručnímu vyplnění polí záhlaví a určení, který "wrapper" se má použít - v tomto případě HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST data $aHTTP = array("http" => // Wrapper, který bude použit array("method" => "POST", // Metoda požadavku // Hlavičky požadavku jsou nastaveny pod "header" => "Content - typ: application/x-www-form-urlencoded", "content" => $sPD)); $kontext = stream_context_create($aHTTP); $obsah = file_get_contents($sURL, false, $kontext); echo $obsah;

Použití fread k provádění požadavků POST

K vytváření požadavků POST můžete použít funkci fread. Následující příklad používá stream_context_create k sestavení nezbytných záhlaví požadavků HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST data $aHTTP = array("http" => // Wrapper, který bude použit array("method" => "POST", // Metoda požadavku // Hlavičky požadavku jsou nastaveny pod "header" => "Content - typ: application/x-www-form-urlencoded", "content" => $sPD)); $kontext = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $kontext); $obsah = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $obsah;

Vytváření požadavků GET pomocí PHP

Nyní se zaměříme na používání fread a file_get_contents ke stahování obsahu z internetu přes HTTP a HTTPS. Chcete-li použít metody popsané v tomto článku, musíte povolit možnost fopen wrappers. Chcete-li to provést, musíte v souboru php.ini nastavit parametr allow_url_fopen na hodnotu On.

Provádění požadavků POST a GET v PHP se používá k přihlášení na webové stránky, načtení obsahu webových stránek nebo ke kontrole nových verzí aplikací. Probereme, jak vytvářet jednoduché požadavky HTTP.

Používání fread ke stahování nebo přijímání souborů přes internet

Pamatujte, že čtení webové stránky je omezeno na přístupnou část paketu. Takže musíte použít funkci stream_get_contents (podobně jako file_get_contents ) nebo smyčku while ke čtení obsahu po menších kouscích, dokud není dosaženo konce souboru:

V tomto případě zpracování požadavku PHP POST je poslední argument funkce fread roven velikosti fragmentu. Zpravidla by nemělo být větší než 8192 (8*1024).

od získat (9)

Jaký je způsob „méně kódu“, jak získat parametry z řetězce dotazu adresy URL, který je takto formátován?

www.mysite.com/category/subcategory?myqueryhash

Výstup by měl být: myqueryhash

Vím o tom:

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

Odpovědi

Tento kód a zápis nejsou moje. Evan K řeší úlohu s více hodnotami stejného jména pomocí uživatelem definované funkce;) převzato z:

Výstupy z výše uvedeného příkladu:

Ahoj Hannes!

Pokud chcete získat celý řetězec dotazu:

$_SERVER["QUERY_STRING"]

Také, pokud hledáte aktuální název souboru spolu s řetězcem dotazu, budete potřebovat následující

Základní jméno ($_SERVER["REQUEST_URI"])

Získáte tak informace jako v následujícím příkladu

soubor.php? arg1 = hodnota & arg2 = hodnota

A pokud také potřebujete úplnou cestu k souboru počínaje kořenem jako /folder/folder2/file.php?arg1=val&arg2=val, pak stačí odebrat funkci basename() a použít překryv

$_SERVER["REQUEST_URI"]

Děkuji @K. Shahzad To pomáhá, když chcete přepsat řetězec dotazu bez jakýchkoli přepisovacích dodatků. Řekněme, že přepíšete /test/? X = y v index.php? Q = test & x = y a chcete získat řetězec dotazu.

Funkce get_query_string())( $arr = explode("?",$_SERVER["REQUEST_URI"]); if (count($arr) == 2)( return ""; )else( return "?".end( $ arr)."
"; ) ) $řetězec_dotazu = získat_řetězec_dotazu();

PHP způsob, jak toho dosáhnout, je použít funkci parse_url, která analyzuje URL a vrátí její komponenty. Včetně řetězce dotazu.

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

Zde je moje funkce pro obnovení částí řetězce dotazu REFERRER.

Pokud volající stránka již měla řetězec dotazu ve svém vlastním souboru a vy se na tuto stránku potřebujete vrátit a chcete odeslat některé, ne všechny, z těchto proměnných $_GET (např. číslo stránky).

Příklad: řetězec dotazu referrer byl?foo=1&bar=2&baz=3 volání refererQueryString("foo" , "baz") vrací foo=1&baz=3" :

Funkce refererQueryString(/* var args */) ( //Vrátí prázdný řetězec, pokud není k dispozici žádný referer nebo žádné proměnné $_GET v refereru: if (!isset($_SERVER["HTTP_REFERER"]) || empty($_SERVER["HTTP_REFERER " "]) || empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) ( return ""; ) //Získání URL dotazu referera (něco jako "threadID=7&page=8") $refererQueryString = parse_url ( urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Které hodnoty chcete extrahovat? (Předali jste jejich názvy jako proměnné.) $args = func_get_args(); //Získejte "" řetězce of referer" s URL: $pairs = explode("&",$refererQueryString); //Řetězec, který vrátíte později: $return = ""; //Analyzujte načtené řetězce a vyhledejte ty, které vás zajímají: foreach ($pairs as $pair ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Pokud jste předali název jako arg, připojte aktuální pár pro vrácení řetězce : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Zde jsou vaše vrácené páry "klíč=hodnota" slepené s "& ": return ltrim($return,"&"); ) //Pokud byl váš referer "page.php?foo=1&bar=2&baz=3" //a chcete header() zpět na "page.php?foo=1&baz=3" //(žádný "bar", pouze foo a baz), pak použijte: header("Umístění: stránka.php?".refererQueryString("foo","baz"));

Podpora společnosti Microsoft uvádí: "Maximální délka adresy URL je 2083 znaků v aplikaci Internet Explorer."

IE má problémy s URL již déle. Zdá se, že Firefox funguje dobře s >4k znaky.

Webové programování je z velké části pouze zpracování různých dat zadaných uživatelem - tedy zpracování HTML formulářů.
Pravděpodobně neexistuje žádný jiný jazyk jako PHP, který by vám tolik usnadnil zpracování a parsování, tzn. proměnné, které přišly (z prohlížeče uživatele). Faktem je, že všechny potřebné schopnosti jsou zabudovány do jazyka PHP, takže ani nemusíte přemýšlet o vlastnostech protokolu HTTP a přemýšlet o tom, jak odesílat a přijímat formuláře POST nebo dokonce stahovat soubory. Vývojáři PHP mají zajištěno pro všechno.

Zde se nebudeme podrobně zabývat mechanismem protokolu HTTP, který je zodpovědný za doručování dat z prohlížeče na server a zpět, tomuto PHP a HTTP je věnována speciální část. Do hloubky jsou probrány také principy práce s HTML formuláři.

Nyní budeme tyto mechanismy zvažovat pouze z aplikovaného hlediska, aniž bychom se pouštěli do teorie.

Abychom mohli přijímat data od uživatelů, potřebujeme s nimi interaktivní interakci.

Nyní se pokusíme napsat skript, který vezme uživatelské jméno jako parametry a výstupy:

"Ahoj, !".

Nejprve se podívejme na nejjednodušší způsob, jak předat název skriptu – přímo jej napsáním do adresy URL za znak ? - například ve formátu jméno=název . Zde je příklad:

http://localhost/script.php?name=name

Náš skript potřebuje rozpoznat parametr name. Zjednodušeně řečeno, skript (skript) musí přijmout parametr name ve formě proměnné name a poté v prohlížeči uživatele zobrazit řetězec „Ahoj, !“. Můžete to udělat takto:

Napíšeme skript, který převezme parametr name a zobrazí výsledek v prohlížeči uživatele a poté jej uloží pod názvem script.php:

V našem příkladu jsme použili předdefinovanou proměnnou $_GET["name"] k "přijetí" parametru name. Nyní předáním parametru name=Sasha prostřednictvím požadavku GET získáme následující výsledek:

Ahoj Sašo!

Nyní se pokusíme předat parametr name nikoli z řetězce dotazu prohlížeče, ale prostřednictvím formuláře HTML. Vytvoříme HTML dokument s následujícím obsahem:


Název:

Nyní uložíme tento HTML dokument na náš testovací server (localhost) pod názvem send.html do stejného adresáře, kam jsme již uložili skript script.php.

Nyní spustíme HTML dokument v prohlížeči:

http://localhost/send.html

Zadejte jméno do pole a stiskněte tlačítko „GO!“. Formulář předá parametr name našemu skriptu script.php prostřednictvím požadavku GET. Pokud jste udělali vše správně a váš webový server funguje normálně, uvidíte jméno, které jste zadali do pole formuláře! V adresním řádku prohlížeče uvidíte cestu a parametr názvu, který jste předali.

Nyní musíme pochopit, jak můžeme předat mnoho parametrů, pro začátek alespoň dva.

Potřebujeme tedy, aby skript vydal následující:

"Ahoj! Jsi starý!"

To znamená, že musíme skriptu předat 2 parametry: jméno a věk.

Nyní napíšeme script.php, který bude mít dva parametry: jméno a věk a také HTML dokument s formulářem, který tyto dva parametry předá našemu novému skriptu:

A zde je HTML dokument send.html, pomocí kterého předáme našemu skriptu parametry jména a věku:



Zadejte své jméno:

Zadejte věk:



Nyní náš skript převezme dva parametry jméno a věk a zobrazí výsledek v prohlížeči ve formátu: "Ahoj, jsi starý!"

Věnujte pozornost adresnímu řádku prohlížeče po předání parametrů skriptu, bude vypadat asi takto (bez kódování URL v azbuce):

http://localhost/script.php?name=Sasha&age=23

V závislosti na nastavení vašeho interpretu existuje několik způsobů, jak přistupovat k datům z vašich formulářů HTML. Zde jsou nějaké příklady:

//Ve formuláři pomocí metody get odešleme hodnotu 1 přes skryté pole Send a request

get.php soubor

Příspěvek s žádostí o PHP

Požadavek na příspěvek Php se také odesílá prostřednictvím formuláře, pouze atribut ve značce formuláře bude method="post" . A my obdržíme data v zadaném souboru z pole post $_POST["search"] a hned uvedeme příklad.

Úkol: odeslat data z index.php metodou POST na server v souboru get.php a přijmout je zpět, pokud je pole pro odesílání dat prázdné, zobrazit zprávu o prázdném poli. Začněme řešení s index.php

Vyhledávací dotaz

Vyplňte pole požadavku

Zadaný dotaz:

Poslat žádost

get.php soubor

AJAX Array Passing

Pojďme provést stejný úkol pomocí ajaxu. Ajax je ve skutečnosti technologie související s javascriptem, ale v rámci poznámky k přenosu dat na server se dotkneme i této technologie. Ajax je samozřejmě téma na samostatný článek. Během procesu požadavku také zobrazíme gif indikátoru načítání. Máme také dva soubory index.php a get.php. soubor index.php. Nezapomeňte připojit jquery. Vezměte prosím na vědomí, že chcete-li skrýt gif při prvním načtení stránky, přiřaďte k bloku boxu styl zobrazení: žádný

$(document).ready(function())( //připojíme událost k tlačítku odeslání $(".submit").click(function())( $.ajax(( //jak budeme přenášet datový typ) : "GET", / /kam předáme url: "get.php", //jaká data předáme data: (příznak: 1), //událost před odesláním ajaxu beforeSend: function())( //zobrazení gif $(".box").show( ); ), //událost po obdržení odpovědi, //získání pole v datovém úspěchu: function(data)( //skryjte gif $(".box").hide (); var html = ""; //f- i JSON.parse převede data json do objektu var dt=JSON.parse(data); for (var i = 0; i

Soubor get.php. Přijímáme data z pole get do souboru a předáváme pole z php do javascriptu. Chcete-li předat pole do php do js, ​​musí být převedeno do formátu json. K tomu používáme php funkci json_encode. Po překódování je json odeslán prostřednictvím prostředků php, konkrétně voláním echo.

Mám strukturu URL s řetězcem dotazu a parametrem s názvem pozice.

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

Mám také rozevírací seznam pro výběr formuláře s pozicí jména pro výběr formuláře.

Vyberte povolání správce Vyberte pozici správce sítě

Když uživatel provede výběr, odešle hodnoty parametru do atributu action s parametrem select name="position", který se má použít v řetězci dotazu.

Moje otázka zní, jak získám přístup k hodnotám výběru formuláře odděleně od hodnot řetězce dotazu?

Používám metodu _GET k volání hodnoty z parametru řetězce dotazu.

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

Je zřejmé, že to získává svou hodnotu ze struktury adresy URL, nikoli z prvku formuláře. Nebo možná je, nejsem si jistý. Ale když jsem to zkoušel, zdá se, že jsem dospěl k závěru, že to získává podle adresy URL a ne podle formy.

Jak mohu získat přístup k hodnotě výběru formuláře při porovnávání v mém PHP?

Aktualizace

Mám problém s kanonickou adresou URL uvedenou v záhlaví.

Tak to má být

jediný rozdíl je - a + v řetězci dotazu.

Ne všechny mé řetězce dotazu mají +. Někteří mají -. Zobrazuji však obsah na obou adresách URL, bez ohledu na to, zda má - nebo +. V obou případech obdrží obě adresy URL stejný obsah stránky.

Ale protože kanonický je vytvářen dynamicky z URI a ne z hodnoty prvku formuláře, na obou stránkách s obsahem jsou 2 různé kanonické znaky.

Použití _Get('value') načte hodnotu z řetězce dotazu namísto prvku formuláře. Vím to, protože hodnota prvku formuláře má mezeru mezi správcem sítě, která se zakóduje, když se formulář odešle jako síť+administrátor. Takže pokud mohu porovnat s hodnotou prvku formuláře, mohu nastavit správnou kanonickou.