PHP dobije sve parametre. Eksterne varijable (varijable izvan PHP-a). Prenošenje varijabli u PHP pomoću POST metode

Prva metoda za izvođenje PHP POST zahtjeva je korištenje file_get_contents. Druga metoda će koristiti fread u kombinaciji s nekoliko drugih funkcija. Obje opcije koriste funkciju stream_context_create da popune potrebna polja zaglavlja zahtjeva.

Objašnjenje koda

Varijabla $sPD sadrži podatke za prijenos. Mora biti u HTTP formatu stringa zahtjeva, tako da neki posebni znakovi moraju biti kodirani.

I u funkciji file_get_contents i u funkciji fread imamo dva nova parametra. Prvi je use_include_path. Budući da pravimo HTTP zahtjev, on će biti lažan u oba primjera. Kada je postavljeno na true za čitanje lokalnog resursa, funkcija će tražiti datoteku na include_path.

Drugi parametar je kontekst, koji je popunjen povratnom vrijednošću stream_context_create, koji uzima vrijednost $aHTTP niza.

Korištenje file_get_contents za izradu POST zahtjeva

Da biste poslali POST zahtjev koristeći file_get_contents u PHP-u, trebate koristiti stream_context_create da ručno popunite polja zaglavlja i odredite koji "wrapper" koristiti - u ovom slučaju HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST podaci $aHTTP = array("http" => // Omot koji će se koristiti array("method" => "POST", // Metoda zahtjeva // Zaglavlja zahtjeva su postavljena ispod "header" => "Sadržaj - tip: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $contents;

Korištenje fread-a za izvođenje POST zahtjeva

Možete koristiti funkciju fread za izradu POST zahtjeva. Sljedeći primjer koristi stream_context_create za sastavljanje potrebnih zaglavlja HTTP zahtjeva:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST podaci $aHTTP = array("http" => // Omot koji će se koristiti array("method" => "POST", // Metoda zahtjeva // Zaglavlja zahtjeva su postavljena ispod "header" => "Sadržaj - tip: 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;

Izrada GET zahtjeva sa PHP-om

Sada ćemo se fokusirati na korištenje fread-a i file_get_contents-a za preuzimanje sadržaja s interneta putem HTTP-a i HTTPS-a. Da biste koristili metode opisane u ovom članku, morate omogućiti opciju fopen wrappers. Da biste to uradili, potrebno je da postavite parametar allow_url_fopen na On u php.ini datoteci.

Izvođenje POST i GET zahtjeva u PHP-u koristi se za prijavu na web stranice, preuzimanje sadržaja web stranica ili provjeru novih verzija aplikacija. Pokrićemo kako napraviti jednostavne HTTP zahtjeve.

Korišćenje fread-a za preuzimanje ili primanje datoteka preko Interneta

Zapamtite da je čitanje web stranice ograničeno na pristupačni dio paketa. Dakle, trebate koristiti funkciju stream_get_contents (slično file_get_contents) ili while petlju da pročitate sadržaj u manjim dijelovima dok se ne dostigne kraj datoteke:

U ovom slučaju obrade PHP POST zahtjeva, posljednji argument funkcije fread jednak je veličini fragmenta. U pravilu ne bi trebao biti veći od 8192 (8*1024).

od get(9)

Koji je način "manje koda" za dobivanje parametara iz URL upitnog niza koji je ovako formatiran?

www.mysite.com/category/subcategory?myqueryhash

Izlaz bi trebao biti: myqueryhash

znam za to:

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

Odgovori

Ovaj kod i notacija nisu moji. Evan K rješava istoimeni posao s više vrijednosti pomoću korisnički definirane funkcije;) preuzeto iz:

Gornji primjer daje rezultate:

Hello Hannes!

Ako želite dobiti cijeli niz upita:

$_SERVER["QUERY_STRING"]

Također, ako tražite trenutno ime datoteke zajedno sa nizom upita, potrebno vam je samo sljedeće

Osnovno ime($_SERVER["REQUEST_URI"])

Ovo će vam dati informacije poput sljedećeg primjera

file.php? arg1 = vrijednost i arg2 = vrijednost

A ako vam je potrebna i puna putanja do datoteke počevši od root-a kao /folder/folder2/file.php?arg1=val&arg2=val onda samo uklonite funkciju basename() i samo koristite preklapanje

$_SERVER["REQUEST_URI"]

Hvala @K. Shahzad Ovo pomaže kada želite da prepišete niz upita bez ikakvih dodataka za ponovno pisanje. Recimo da prepisujete /test/? X = y u index.php? Q = test & x = y i želite da dobijete string upita.

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

PHP način da to učinite je korištenje funkcije parse_url, koja analizira URL i vraća njegove komponente. Uključujući string upita.

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

Evo moje funkcije za oporavak dijelova REFERRER stringa upita.

Ako je pozivajuća stranica već imala svoj niz upita, a vi se morate vratiti na tu stranicu i želite poslati neke, ne sve, od tih $_GET varova (npr. broj stranice).

Primjer: niz upita Referrer je bio?foo=1&bar=2&baz=3 pozivajući refererQueryString("foo" , "baz") vraća foo=1&baz=3" :

Funkcija refererQueryString(/* var args */) ( //Vrati prazan niz ako nema upućivača ili nema dostupnih $_GET varova u refereru: if (!isset($_SERVER["HTTP_REFERER"]) || prazno($_SERVER["HTTP_REFERER"] " "]) || empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) ( return ""; ) //Preuzmi URL upit referera (nešto poput "threadID=7&page=8") $refererQueryString = parse_url ( urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Koje vrednosti želite da izdvojite? (Prosledili ste njihova imena kao varijable.) $args = func_get_args(); //Izvucite nizove "" URL referera": $pairs = explode("&",$refererQueryString); //String koji ćete vratiti kasnije: $return = ""; //Analizirajte preuzete nizove i potražite one od interesa: foreach ($pairs kao $pair ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Ako ste prenijeli ime kao arg, prikačite trenutni par u povratni niz : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Evo vaših vraćenih parova "ključ=vrijednost" zalijepljenih zajedno sa "& ": return ltrim($return,"&"); ) //Ako je vaš referer bio "page.php?foo=1&bar=2&baz=3" //i želite header() vratiti na "page.php?foo=1&baz=3" //(bez "bar", samo foo i baz), a zatim primijeniti: header("Location: page.php?".refererQueryString("foo","baz"));

Microsoft podrška navodi: "Maksimalna dužina URL-a je 2083 karaktera u Internet Explorer-u."

IE već duže ima problema sa URL-ovima. Čini se da Firefox radi dobro sa >4k karaktera.

Web programiranje je najvećim dijelom samo obrada različitih podataka koje unese korisnik – odnosno obrada HTML obrazaca.
Vjerovatno ne postoji drugi jezik poput PHP-a koji bi vam toliko olakšao zadatak obrade i raščlanjivanja, tj. varijable koje dolaze iz (iz pretraživača korisnika). Činjenica je da su sve potrebne mogućnosti ugrađene u PHP jezik, tako da ne morate ni razmišljati o karakteristikama HTTP protokola i razmišljati o tome kako slati i primati POST obrasce ili čak preuzimati datoteke. PHP programeri imaju obezbeđeno za sve.

Ovdje se nećemo detaljno zadržavati na mehanizmu HTTP protokola, koji je odgovoran za isporuku podataka od pretraživača do servera i nazad; poseban odjeljak posvećen je ovom PHP-u i HTTP-u. Principi rada sa HTML formama su takođe detaljno razmotreni.

Sada ćemo ove mehanizme razmatrati samo sa primijenjene tačke gledišta, bez upuštanja u teoriju.

Da bismo primali podatke od korisnika, potrebna nam je interaktivna interakcija s njima.

Pokušajmo sada napisati skriptu koja uzima korisničko ime kao parametre i izlaze:

"Zdravo, !".

Prvo, pogledajmo najjednostavniji način prosljeđivanja imena skripti - direktno upisivanjem u URL nakon ? - na primjer, u formatu ime=ime . Evo primjera:

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

Naša skripta treba da prepozna parametar imena. Odnosno, pojednostavljeno rečeno, skripta (skripta) mora prihvatiti parametar imena u obliku varijable imena, a zatim prikazati string „Zdravo, !“ u korisnikovom pretraživaču. Možete to učiniti na sljedeći način:

Pišemo skriptu koja uzima parametar name i prikazuje rezultat u pretraživaču korisnika, a zatim ga sprema pod imenom script.php:

U našem primjeru, koristili smo unaprijed definiranu varijablu $_GET["name"] da "primimo" parametar imena. Sada, prosljeđivanjem parametra name=Sasha putem GET zahtjeva, dobit ćemo sljedeći rezultat:

Zdravo Saša!

Sada pokušajmo da prosledimo parametar name ne iz niza upita pretraživača, već kroz HTML obrazac. Izrađujemo HTML dokument sa sljedećim sadržajem:


ime:

Hajde da sada sačuvamo ovaj HTML dokument na našem test serveru (localhost) pod imenom send.html u istom direktorijumu gde smo već sačuvali skriptu script.php.

Sada pokrećemo HTML dokument u pretraživaču:

http://localhost/send.html

Unesite naziv u polje i pritisnite dugme “GO!”. Obrazac će proslediti parametar name našoj skripti script.php putem GET zahteva. Ako ste sve uradili ispravno i vaš web server radi normalno, vidjet ćete ime koje ste unijeli u polje obrasca! U adresnoj traci pretraživača videćete putanju i parametar imena koji ste preneli.

Sada moramo razumjeti kako možemo proslijediti mnoge parametre, barem dva za početak.

Dakle, potrebna nam je skripta za izlaz sljedećeg:

"Zdravo! Star si!"

Odnosno, potrebno je da prosledimo 2 parametra skripti: ime i starost.

Sada ćemo napisati script.php koji uzima dva parametra: ime i starost, kao i HTML dokument sa formom koja će proslediti ova dva parametra našoj novoj skripti:

A evo i HTML dokumenta send.html, sa kojim ćemo proslediti parametre imena i starosti našoj skripti:



Unesite svoje ime:

Unesite godine:



Sada naša skripta uzima dva parametra ime i starost i prikazuje rezultat u pretraživaču u formatu: "Zdravo,! Jesi li star!"

Obratite pažnju na adresnu traku pretraživača nakon što prosledite parametre u skriptu, ona će izgledati otprilike ovako (bez ćiriličnog URL kodiranja):

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

Ovisno o postavkama vašeg tumača, postoji nekoliko načina za pristup podacima iz vaših HTML obrazaca. Evo nekoliko primjera:

//U obrascu, koristeći metodu get, šaljemo vrijednost 1 kroz skriveno polje Pošalji zahtjev

get.php fajl

PHP post zahtjeva

Zahtjev za Php post se također šalje putem obrasca, samo će atribut u oznaci obrasca biti method="post" . I mi ćemo primiti podatke u navedenoj datoteci iz post $_POST["search"] niza i odmah dati primjer.

Zadatak: poslati podatke iz index.php metodom POST na server u get.php datoteci i primiti ih nazad, ako je polje za slanje podataka prazno, prikazati poruku o praznom polju. Započnimo rješenje sa index.php

Upit za pretragu

Popunite polje za zahtjev

Uneseni upit:

Posalji zahtjev

get.php fajl

Prolaz AJAX niza

Hajde da izvršimo isti zadatak koristeći ajax. Zapravo, ajax je tehnologija vezana za javascript, ali kao dio napomene o prijenosu podataka na server, dotakćemo se i ove tehnologije. Naravno, ajax je tema za poseban članak. Tokom procesa zahtjeva, također ćemo prikazati gif indikatora učitavanja. Takođe imamo dva fajla index.php i get.php. Index.php fajl. Ne zaboravite povezati jquery. Imajte na umu da da biste sakrili gif kada se stranica prvi put učita, dodijelite stilski prikaz: none bloku okvira

$(document).ready(function())( //prilažemo događaj gumbu za slanje $(".submit").click(function())( $.ajax(( //kako ćemo prenijeti tip podataka : "GET", / /gdje prosljeđujemo url: "get.php", //koje podatke prosljeđujemo podatke: (zastava: 1), //događaj prije slanja ajaxa beforeSend: function())( //prikaži gif $(".box").show( ); ), //događaj nakon primanja odgovora, //dobijamo niz u uspješnosti podataka: function(data)( //sakrij gif $(.box").hide (); var html = ""; //f- i JSON.parse prevodi json podatke u objekt var dt=JSON.parse(data); for (var i = 0; i

Get.php fajl. Primamo podatke iz get niza u fajl i prosleđujemo niz iz php-a u javascript. Da biste prosledili niz u php u js, potrebno ga je konvertovati u json format. Da bismo to učinili, koristimo php funkciju json_encode. Nakon rekodiranja, json se šalje putem php sredstava, posebno pozivajući echo.

Imam URL strukturu sa nizom upita i parametrom koji se zove pozicija.

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

Također imam padajući izbornik za odabir obrasca sa položajem imena za odabir obrasca.

Odaberite zanimanje Administrator Odaberite Položaj mrežnog administratora

Kada korisnik napravi odabir, on šalje vrijednosti parametara atributu akcije sa select name="position" kao parametrom za korištenje u nizu upita.

Moje pitanje je kako da pristupim vrijednostima odabira obrasca odvojeno od vrijednosti niza upita?

Koristim metodu _GET za pozivanje vrijednosti iz parametra stringa upita.

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

Očigledno, ovo dobija svoju vrijednost iz URL strukture, a ne iz elementa forme. Ili možda jeste, nisam siguran. Ali testirajući ga, čini se da sam došao do zaključka da ga dobija preko URL-a, a ne putem forme.

Kako mogu pristupiti odabranoj vrijednosti obrasca kada upoređujem u svom PHP-u?

Ažuriraj

Imam problem sa kanonskim URL-om navedenim u zaglavlju.

Tako bi trebalo da bude

jedina razlika je - i + u nizu upita.

Nemaju svi moji stringovi upita +. Neki imaju -. Ali prikazujem sadržaj na oba URL-a, bez obzira da li ima - ili +. U svakom slučaju, oba URL-a primaju isti sadržaj stranice.

Ali pošto se kanonski kreira dinamički iz URI-ja, a ne iz vrijednosti elementa forme, postoje 2 različita kanonska znaka na obje stranice sadržaja.

Upotreba _Get('value') preuzima vrijednost iz niza upita umjesto elementa obrasca. Znam to jer vrijednost elementa obrasca ima razmak između mrežnog administratora koji se urlenkodira kada se obrazac pošalje kao network+administrator. Dakle, ako mogu uporediti sa vrijednošću elementa forme, mogu postaviti ispravnu kanonsku.