Php získa všetky parametre. Externé premenné (premenné mimo PHP). Odovzdávanie premenných do PHP pomocou metódy POST

Prvou metódou na vykonanie požiadavky PHP POST je použitie file_get_contents . Druhá metóda bude používať fread v kombinácii s niekoľkými ďalšími funkciami. Obe možnosti používajú funkciu stream_context_create na vyplnenie požadovaných polí hlavičky požiadavky.

Vysvetlenie kódu

Premenná $sPD obsahuje údaje, ktoré sa majú preniesť. Musí byť vo formáte reťazca požiadavky HTTP, takže niektoré špeciálne znaky musia byť zakódované.

Vo funkcii file_get_contents aj vo funkcii fread máme dva nové parametre. Prvým je use_include_path . Keďže vytvárame požiadavku HTTP, bude v oboch príkladoch nepravdivá. Keď je nastavené na hodnotu true na čítanie lokálneho zdroja, funkcia bude hľadať súbor na adrese include_path .

Druhým parametrom je kontext, ktorý je vyplnený návratovou hodnotou stream_context_create, ktorá má hodnotu poľa $aHTTP.

Použitie file_get_contents na vytváranie požiadaviek POST

Ak chcete odoslať požiadavku POST pomocou file_get_contents v PHP, musíte použiť stream_context_create na manuálne vyplnenie polí hlavičky a určiť, ktorý "wrapper" sa má použiť - v tomto prípade HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "meno=Jacob&bench=150"; // POST dáta $aHTTP = array("http" => // Wrapper, ktorý sa použije array("method" => "POST", // Metóda požiadavky // Hlavičky požiadaviek sú nastavené 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žitie fread na vykonávanie požiadaviek POST

Na vytvorenie požiadaviek POST môžete použiť funkciu fread. Nasledujúci príklad používa stream_context_create na vytvorenie potrebných hlavičiek HTTP požiadaviek:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "meno=Jacob&bench=150"; // POST dáta $aHTTP = array("http" => // Wrapper, ktorý bude použitý array("method" => "POST", // Metóda požiadavky // Hlavičky požiadaviek sú nastavené 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áranie žiadostí GET pomocou PHP

Teraz sa zameriame na používanie fread a file_get_contents na sťahovanie obsahu z internetu cez HTTP a HTTPS. Ak chcete použiť metódy opísané v tomto článku, musíte povoliť možnosť fopen wrappers. Ak to chcete urobiť, musíte v súbore php.ini nastaviť parameter allow_url_fopen na hodnotu On.

Vykonávanie požiadaviek POST a GET v PHP sa používa na prihlásenie na webové stránky, načítanie obsahu webových stránok alebo kontrolu nových verzií aplikácií. Popíšeme si, ako vytvárať jednoduché požiadavky HTTP.

Používanie fread na sťahovanie alebo prijímanie súborov cez internet

Pamätajte, že čítanie webovej stránky je obmedzené na prístupnú časť paketu. Takže musíte použiť funkciu stream_get_contents (podobnú file_get_contents ) alebo cyklus while na čítanie obsahu po menších častiach, kým sa nedosiahne koniec súboru:

V tomto prípade spracovania požiadavky PHP POST sa posledný argument funkcie fread rovná veľkosti fragmentu. Spravidla by nemalo byť väčšie ako 8192 (8*1024).

od získať (9)

Aký je spôsob „menej kódu“ na získanie parametrov z reťazca dopytu adresy URL, ktorý je takto naformátovaný?

www.mysite.com/category/subcategory?myqueryhash

Výstup by mal byť: myqueryhash

Viem o tom:

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

Odpovede

Tento kód a zápis nie sú moje. Evan K rieši úlohu s viacerými hodnotami s rovnakým názvom pomocou funkcie definovanej používateľom;) prevzaté z:

Výstupy vyššie uvedeného príkladu:

Ahoj Hannes!

Ak chcete získať celý reťazec dopytu:

$_SERVER["QUERY_STRING"]

Tiež, ak hľadáte aktuálny názov súboru spolu s reťazcom dotazu, potrebujete len nasledovné

Základné meno ($_SERVER["REQUEST_URI"])

Získate tak informácie ako v nasledujúcom príklade

súbor.php? arg1 = hodnota & arg2 = hodnota

A ak potrebujete aj úplnú cestu k súboru začínajúcu od koreňového adresára, ako je /priečinok/priečinok2/súbor.php?arg1=val&arg2=val, potom jednoducho odstráňte funkciu basename() a použite prekrytie

$_SERVER["REQUEST_URI"]

Ďakujem @K. Shahzad Toto pomáha, keď chcete prepísať reťazec dotazu bez akýchkoľvek prepisovacích doplnkov. Povedzme, že prepíšete /test/? X = y v index.php? Q = test & x = y a chcete získať reťazec dotazu.

Funkcia get_query_string())( $arr = explode("?",$_SERVER["REQUEST_URI"]); if (count($arr) == 2)( return ""; )else( return "?".end( $ arr)."
"; ) ) $reťazec_dopytu = get_reťazec_dopytu();

PHP spôsob, ako to urobiť, je použiť funkciu parse_url, ktorá analyzuje URL a vráti jej komponenty. Vrátane reťazca dopytu.

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

Tu je moja funkcia na obnovenie častí reťazca dotazu REFERRER.

Ak volajúca stránka už obsahovala reťazec dopytu vo svojom vlastnom a potrebujete sa vrátiť na túto stránku a chcete odoslať niektoré, nie všetky, z týchto premenných $_GET (napr. číslo stránky).

Príklad: reťazec dopytu sprostredkovateľa bol?foo=1&bar=2&baz=3 volanie refererQueryString("foo" , "baz") vráti foo=1&baz=3" :

Funkcia refererQueryString(/* var args */) ( //Vrátenie prázdneho reťazca, ak nie je k dispozícii žiadny sprostredkovateľ alebo žiadne premenné $_GET v sprostredkovateľovi: if (!isset($_SERVER["HTTP_REFERER"]) || empty($_SERVER["HTTP_REFERER " "]) || empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) ( return ""; ) //Získanie URL dopytu referera (niečo ako "threadID=7&page=8") $refererQueryString = parse_url ( urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Ktoré hodnoty chcete extrahovať? (Zadali ste ich názvy ako premenné.) $args = func_get_args(); //Vytiahnite reťazce "" of referer" s URL: $pairs = explode("&",$refererQueryString); //Reťazec, ktorý vrátite neskôr: $return = ""; //Analyzujte získané reťazce a hľadajte tie, ktoré vás zaujímajú: foreach ($pairs as $pair ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Ak ste zadali názov ako arg, pripojte aktuálny pár na vrátenie reťazca : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Tu sú vaše vrátené páry "key=value" zlepené spolu s "&" ": return ltrim($return,"&"); ) //Ak bol váš sprostredkovateľ "page.php?foo=1&bar=2&baz=3" //a chcete header() vrátiť späť na "page.php?foo=1&baz=3" //(žiadny "bar", iba foo a baz), potom použite: header("Umiestnenie: stránka.php?".refererQueryString("foo","baz"));

Podpora spoločnosti Microsoft uvádza: "Maximálna dĺžka adresy URL je 2083 znakov v programe Internet Explorer."

IE má problémy s URL už dlhšie. Zdá sa, že Firefox funguje dobre s >4k znakmi.

Webové programovanie je väčšinou len spracovanie rôznych údajov zadávaných používateľom - teda spracovanie HTML formulárov.
Pravdepodobne neexistuje iný jazyk ako PHP, ktorý by vám tak uľahčil úlohu spracovania a parsovania, t.j. premenné, ktoré pochádzajú (z prehliadača používateľa). Faktom je, že všetky potrebné schopnosti sú zabudované v jazyku PHP, takže nemusíte ani premýšľať o vlastnostiach protokolu HTTP a premýšľať o tom, ako odosielať a prijímať formuláre POST alebo dokonca sťahovať súbory. Vývojári PHP majú zaopatrené na všetko.

Tu sa nebudeme podrobne zaoberať mechanizmom protokolu HTTP, ktorý je zodpovedný za doručovanie údajov z prehliadača na server a späť, tomuto PHP a HTTP je venovaná špeciálna časť. Hĺbkovo sú rozoberané aj princípy práce s HTML formulármi.

Teraz budeme uvažovať o týchto mechanizmoch iba z aplikovaného hľadiska bez toho, aby sme sa ponorili do teórie.

Aby sme mohli prijímať údaje od používateľov, potrebujeme s nimi interaktívnu interakciu.

Teraz sa pokúsme napísať skript, ktorý berie užívateľské meno ako parametre a výstupy:

"Ahoj, !".

Najprv sa pozrime na najjednoduchší spôsob odovzdania názvu skriptu – jeho priamym zadaním do adresy URL za znak ? - napríklad vo formáte meno=meno . Tu je príklad:

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

Náš skript musí rozpoznať parameter name. Zjednodušene povedané, skript (skript) musí akceptovať parameter name vo forme premennej name a následne v prehliadači používateľa zobraziť reťazec „Ahoj, !“. Môžete to urobiť takto:

Napíšeme skript, ktorý prevezme parameter name a zobrazí výsledok v prehliadači používateľa a potom ho uloží pod názvom script.php:

V našom príklade sme použili preddefinovanú premennú $_GET["name"] na "prijatie" parametra name. Teraz odovzdaním parametra name=Sasha prostredníctvom požiadavky GET získame nasledujúci výsledok:

Ahoj Sasha!

Teraz sa pokúsme odovzdať parameter name nie z reťazca dopytu prehliadača, ale prostredníctvom formulára HTML. Vytvárame HTML dokument s nasledujúcim obsahom:


Názov:

Teraz uložme tento HTML dokument na našom testovacom serveri (localhost) pod názvom send.html do rovnakého adresára, kde sme už uložili skript script.php.

Teraz spustíme HTML dokument v prehliadači:

http://localhost/send.html

Zadajte meno do poľa a stlačte tlačidlo „GO!“. Formulár odovzdá parameter name nášmu skriptu script.php prostredníctvom požiadavky GET. Ak ste urobili všetko správne a váš webový server funguje normálne, uvidíte meno, ktoré ste zadali do poľa formulára! V adresnom riadku prehliadača uvidíte cestu a parameter názvu, ktorý ste zadali.

Teraz musíme pochopiť, ako môžeme odovzdať veľa parametrov, na začiatok aspoň dva.

Potrebujeme teda, aby skript vydal nasledovné:

"Ahoj! Si starý!"

To znamená, že skriptu musíme odovzdať 2 parametre: meno a vek.

Teraz napíšeme script.php, ktorý bude mať dva parametre: meno a vek, ako aj HTML dokument s formulárom, ktorý tieto dva parametre odovzdá nášmu novému skriptu:

A tu je HTML dokument send.html, pomocou ktorého odovzdáme parametre mena a veku nášmu skriptu:



Zadajte svoje meno:

Zadajte vek:



Teraz náš skript berie dva parametre meno a vek a zobrazí výsledok v prehliadači vo formáte: "Ahoj, si starý!"

Venujte pozornosť adresnému riadku prehliadača po odovzdaní parametrov skriptu, bude to vyzerať asi takto (bez kódovania URL v cyrilike):

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

V závislosti od vašich nastavení tlmočníka existuje niekoľko spôsobov prístupu k údajom z vašich formulárov HTML. Tu je niekoľko príkladov:

//Vo formulári metódou get odošleme hodnotu 1 cez skryté pole Odoslať požiadavku

súbor get.php

Príspevok so žiadosťou o PHP

Žiadosť o príspevok Php sa tiež odosiela prostredníctvom formulára, iba atribút v značke formulára bude method="post" . A my dostaneme údaje v zadanom súbore z poľa post $_POST["search"] a hneď uvedieme príklad.

Úloha: pošlite dáta z index.php metódou POST na server v súbore get.php a prijmite ich späť, ak je pole na odosielanie dát prázdne, zobrazte správu o prázdnom poli. Začnime riešenie s index.php

Vyhľadávací dopyt

Vyplňte pole žiadosti

Zadaný dopyt:

Poslať žiadosť

súbor get.php

AJAX Array Passing

Urobme rovnakú úlohu pomocou ajaxu. Ajax je v skutočnosti technológia súvisiaca s javascriptom, ale v rámci poznámky o prenose údajov na server sa dotkneme aj tejto technológie. Samozrejme, ajax je téma na samostatný článok. Počas procesu žiadosti zobrazíme aj gif indikátora načítania. Máme tiež dva súbory index.php a get.php. súbor index.php. Nezabudnite pripojiť jquery. Upozorňujeme, že ak chcete skryť gif pri prvom načítaní stránky, priraďte k bloku boxu štýl zobrazenia: žiadny

$(document).ready(function())( //k tlačidlu odoslania pripojíme udalosť $(".submit").click(function())( $.ajax(( //ako prenesieme dátový typ) : "GET", / /kam odovzdáme url: "get.php", //aké údaje odovzdávame údaje: (príznak: 1), //udalosť pred odoslaním ajaxu beforeSend: function())( //zobrazenie gif $(".box").show( ); ), //udalosť po prijatí odpovede, //získanie poľa v úspešnosti údajov: function(data)( //skrytie gif $(".box").hide (); var html = ""; //f- i JSON.parse preloží údaje json do objektu var dt=JSON.parse(data); for (var i = 0; i

Súbor get.php. Prijímame údaje z poľa get do súboru a odovzdávame pole z php do javascriptu. Na odovzdanie poľa do php do js je potrebné ho previesť do formátu json. Na tento účel používame funkciu php json_encode. Po prekódovaní sa json odošle prostredníctvom prostriedkov php, konkrétne volaním echo.

Mám štruktúru adresy URL s reťazcom dopytu a parametrom s názvom pozícia.

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

Mám tiež rozbaľovaciu ponuku na výber formulára s pozíciou výberu názvu formulára.

Vyberte povolanie správcu Vyberte pozíciu správcu siete

Keď používateľ vykoná výber, odošle hodnoty parametrov do atribútu action s parametrom select name="position", ktorý sa má použiť v reťazci dotazu.

Moja otázka znie, ako získam prístup k hodnotám výberu formulára oddelene od hodnôt reťazca dotazu?

Používam metódu _GET na volanie hodnoty z parametra reťazca dotazu.

$pozícia = isset($_GET["pozícia"]) ? ($_GET["pozícia"]) : "";

Je zrejmé, že to získava svoju hodnotu zo štruktúry adresy URL, nie z prvku formulára. Alebo možno je, nie som si istý. Ale keď som to testoval, zdá sa, že som dospel k záveru, že to získava podľa adresy URL a nie podľa formy.

Ako sa dostanem k hodnote výberu formulára pri porovnávaní v mojom PHP?

Aktualizovať

Mám problém s kanonickou adresou URL uvedenou v hlavičke.

Tak to má byť

jediný rozdiel je - a + v reťazci dopytu.

Nie všetky moje dopytové reťazce majú +. Niektorí majú -. Ale zobrazujem obsah na oboch adresách URL, bez ohľadu na to, či má - alebo +. V každom prípade obe adresy URL dostanú rovnaký obsah stránky.

Ale keďže kanonický sa vytvára dynamicky z URI a nie z hodnoty prvku formulára, na oboch stránkach s obsahom sú 2 rôzne kanonické znaky.

Použitie _Get('value') načíta hodnotu z reťazca dotazu namiesto prvku formulára. Viem to, pretože hodnota prvku formulára má medzi správcom siete medzeru, ktorá sa zakóduje, keď sa formulár odošle ako sieť+správca. Takže ak môžem porovnať s hodnotou prvku formulára, môžem nastaviť správnu kanonickú hodnotu.