Php merr të gjithë parametrat e marrë. Variabla të jashtëm (variabla jashtë PHP). Kalimi i variablave në PHP duke përdorur metodën POST

Metoda e parë për të kryer një kërkesë PHP POST është përdorimi i file_get_contents. Metoda e dytë do të përdorë fread në kombinim me disa funksione të tjera. Të dy opsionet përdorin funksionin stream_context_create për të plotësuar fushat e kërkuara të kokës së kërkesës.

Shpjegimi i kodit

Ndryshorja $sPD përmban të dhënat që do të transferohen. Duhet të jetë në formatin e vargut të kërkesës HTTP, kështu që disa karaktere speciale duhet të kodohen.

Si në funksionin file_get_contents ashtu edhe në funksionin fread kemi dy parametra të rinj. E para është use_include_path. Meqenëse po bëjmë një kërkesë HTTP, ajo do të jetë false në të dy shembujt. Kur vendoset në true për të lexuar një burim lokal, funksioni do të kërkojë skedarin në include_path.

Parametri i dytë është konteksti, i cili është i mbushur me vlerën e kthimit të stream_context_create, e cila merr vlerën e grupit $aHTTP.

Përdorimi i file_get_contents për të bërë kërkesa POST

Për të dërguar një kërkesë POST duke përdorur file_get_contents në PHP, duhet të përdorni stream_context_create për të plotësuar manualisht fushat e kokës dhe të specifikoni se cilin "mbështjellës" të përdorni - në këtë rast HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "emri=Jacob&bench=150"; // Të dhënat POST $aHTTP = grup ("http" => // Mbështjellësi që do të përdoret array("metod" => "POST", // Metoda e kërkesës // Titujt e kërkesës vendosen poshtë "header" => "Përmbajtja - lloji: aplikacioni/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $përmbajtje = file_get_contents ($sURL, false, $context); jehonë $përmbajtje;

Përdorimi i fread për të bërë kërkesa POST

Ju mund të përdorni funksionin fread për të bërë kërkesa POST. Shembulli i mëposhtëm përdor stream_context_create për të kompozuar titujt e nevojshëm të kërkesës HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "emri=Jacob&bench=150"; // Të dhënat POST $aHTTP = grup ("http" => // Mbështjellësi që do të përdoret array("metod" => "POST", // Metoda e kërkesës // Titujt e kërkesës vendosen poshtë "header" => "Përmbajtja - lloji: aplikacioni/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $context); $contents = ""; ndërsa (!feof($handle)) ( $përmbajtje .= fread($handle, 8192); ) fclose($handle); jehonë $përmbajtje;

Bërja e kërkesave GET me PHP

Tani do të fokusohemi në përdorimin e fread dhe file_get_contents për të shkarkuar përmbajtje nga interneti nëpërmjet HTTP dhe HTTPS. Për të përdorur metodat e përshkruara në këtë artikull, duhet të aktivizoni opsionin fopen wrappers. Për ta bërë këtë, duhet të vendosni parametrin allow_url_fopen në On në skedarin php.ini.

Kryerja e kërkesave POST dhe GET në PHP përdoret për të hyrë në faqet e internetit, për të marrë përmbajtjen e faqeve të internetit ose për të kontrolluar për versione të reja të aplikacioneve. Ne do të trajtojmë se si të bëjmë kërkesa të thjeshta HTTP.

Përdorimi i fread për të shkarkuar ose marrë skedarë përmes Internetit

Mos harroni se leximi i faqes në internet është i kufizuar në pjesën e aksesueshme të paketës. Kështu që ju duhet të përdorni funksionin stream_get_contents (i ngjashëm me file_get_contents) ose një cikli while për të lexuar përmbajtjen në copa më të vogla derisa të arrihet fundi i skedarit:

Në këtë rast të përpunimit të një kërkese PHP POST, argumenti i fundit i funksionit fread është i barabartë me madhësinë e fragmentit. Si rregull, nuk duhet të jetë më i madh se 8192 (8*1024).

nga marrja (9)

Cila është një mënyrë "më pak kod" për të marrë parametra nga një varg pyetjesh URL që është formatuar kështu?

www.mysite.com/category/subcategory?myqueryhash

Dalja duhet të jetë: myqueryhash

Unë e di për të:

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

Përgjigjet

Ky kod dhe shënim nuk janë të miat. Evan K zgjidh një punë me shumë vlera me të njëjtin emër me një funksion të përcaktuar nga përdoruesi;) marrë nga:

Rezultatet e shembullit të mësipërm:

Përshëndetje Hannes!

Nëse dëshironi të merrni të gjithë vargun e pyetjes:

$_SERVER["QUERY_STRING"]

Gjithashtu, nëse jeni duke kërkuar për emrin aktual të skedarit së bashku me vargun e pyetjes, ju duhet vetëm sa vijon

Emri bazë ($_SERVER["REQUEST_URI"])

Kjo do t'ju japë informacion si shembulli i mëposhtëm

file.php? arg1 = vlerë & arg2 = vlerë

Dhe nëse ju duhet gjithashtu shtegu i plotë drejt skedarit duke filluar nga root si /folder/folder2/file.php?arg1=val&arg2=val, atëherë thjesht hiqni funksionin basename() dhe thjesht përdorni mbivendosje

$_SERVER["REQUEST_URI"]

Faleminderit @K. Shahzad Kjo ju ndihmon kur dëshironi të rishkruani vargun e pyetjes pa ndonjë shtesë rishkrimi. Le të themi se e rishkruan /test/? X = y në indeks.php? Q = test & x = y dhe dëshironi të merrni vargun e pyetjes.

Funksioni get_query_string())( $arr = shpërthejë("?",$_SERVER["REQUEST_URI"]); if (count($arr) == 2)(kthehu ""; )else(kthehu "?".fund( $ arr)."
"; ) ) $query_string = get_query_string();

Mënyra PHP për ta bërë këtë është përdorimi i funksionit parse_url, i cili analizon një URL dhe kthen përbërësit e tij. Përfshirë vargun e pyetjes.

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

Këtu është funksioni im për të rikuperuar pjesë të vargut të pyetjes REFERRER.

Nëse faqja thirrëse kishte tashmë një varg pyetjesh në vete , dhe ju duhet të ktheheni në atë faqe dhe dëshironi të dërgoni disa, jo të gjitha, nga ato vargje $_GET (p.sh. numrin e faqes).

Shembull: vargu i pyetjes së referuesit ishte?foo=1&bar=2&baz=3 duke thirrur refererQueryString("foo" , "baz") kthen foo=1&baz=3" :

Funksioni refererQueryString(/* var args */) ( //Ktheje vargun bosh nëse nuk ka referues ose nuk ka vargje $_GET në referues të disponueshëm: nëse (!isset($_SERVER["HTTP_REFERER"]) || bosh($_SERVER["HTTP_REFERER " "]) || bosh(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) (kthehu ""; ) //Merr pyetjen e URL-së së referuesit (diçka si "threadID=7&page=8") $refererQueryString = analizo_url ( urldcode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Cilat vlera dëshironi të nxirrni? (I keni kaluar emrat e tyre si variabla.) $args = func_get_args (); //Merrni vargjet "" e URL-së së referuesit: $pairs = explode("&",$refererQueryString); //String që do ta ktheni më vonë: $return = ""; //Analizo vargjet e marra dhe kërko ato me interes: foreach ($pairs as $pair ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Nëse e keni kaluar emrin si arg, bashkëngjitni çiftin aktual në vargun e kthimit : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Këtu janë çiftet tuaja "key=value" të kthyera të ngjitura së bashku me "& ": return ltrim($return,"&"); ) //Nëse referuesi juaj ishte "page.php?foo=1&bar=2&baz=3" //dhe dëshironi të ktheni kokën() në "page.php?foo=1&baz=3" //(pa "bar", vetëm foo dhe baz), pastaj aplikoni: header("Vendndodhja: faqe.php?".refererQueryString("foo","baz"));

Mbështetja e Microsoft thotë: "Gjatësia maksimale e URL-së është 2083 karaktere në Internet Explorer."

IE ka pasur probleme me URL-të për më shumë. Firefox duket se funksionon mirë me >4k karaktere.

Programimi në ueb në pjesën më të madhe është vetëm përpunimi i të dhënave të ndryshme të futura nga përdoruesi - d.m.th., përpunimi i formave HTML.
Ndoshta nuk ka asnjë gjuhë tjetër si PHP që do ta lehtësonte kaq shumë detyrën e përpunimit dhe analizimit, d.m.th. variablat që kanë ardhur nga (nga shfletuesi i përdoruesit). Fakti është se të gjitha aftësitë e nevojshme janë të integruara në gjuhën PHP, kështu që ju as nuk duhet të mendoni për veçoritë e protokollit HTTP dhe të mendoni se si të dërgoni dhe merrni formularë POST apo edhe të shkarkoni skedarë. Zhvilluesit e PHP kanë parashikuar për gjithçka.

Këtu nuk do të ndalemi në detaje në mekanizmin e protokollit HTTP, i cili është përgjegjës për dërgimin e të dhënave nga shfletuesi në server dhe mbrapa; një seksion i veçantë i kushtohet këtij PHP dhe HTTP. Parimet e punës me format HTML diskutohen gjithashtu në thellësi.

Tani ne do t'i shqyrtojmë këto mekanizma vetëm nga një këndvështrim i aplikuar, pa u thelluar në teori.

Për të marrë të dhëna nga përdoruesit, ne kemi nevojë për ndërveprim interaktiv me ta.

Tani le të përpiqemi të shkruajmë një skript që merr një emër përdoruesi si parametra dhe rezultate:

"Përshëndetje, !".

Së pari, le të shohim mënyrën më të thjeshtë për t'i kaluar një emër një skripti - duke e shtypur direkt në URL pas ? - për shembull, në formatin name=name . Ja një shembull:

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

Skripti ynë duhet të njohë parametrin e emrit. Kjo do të thotë, për ta thënë thjesht, skripti (skripti) duhet të pranojë parametrin e emrit në formën e ndryshores së emrit, dhe më pas të shfaqë vargun "Përshëndetje,!" në shfletuesin e përdoruesit. Ju mund ta bëni këtë në këtë mënyrë:

Ne shkruajmë një skript që merr parametrin e emrit dhe shfaq rezultatin në shfletuesin e përdoruesit, dhe më pas e ruan atë nën emrin script.php:

Në shembullin tonë, ne përdorëm variablin e paracaktuar $_GET["name"] për të "marrë" parametrin e emrit. Tani, duke kaluar parametrin name=Sasha nëpërmjet një kërkese GET, do të marrim rezultatin e mëposhtëm:

Përshëndetje Sasha!

Tani le të përpiqemi të kalojmë parametrin e emrit jo nga vargu i pyetjeve të shfletuesit, por përmes një forme HTML. Ne krijojmë një dokument HTML me përmbajtjen e mëposhtme:


Emri:

Tani le ta ruajmë këtë dokument HTML në serverin tonë të testimit (localhost) nën emrin send.html në të njëjtin direktorium ku kemi ruajtur tashmë skriptin script.php.

Tani ne hapim dokumentin HTML në shfletuesin:

http://localhost/send.html

Futni emrin në fushë dhe shtypni butonin "SHKO!". Formulari do të kalojë parametrin e emrit në script.php tonë nëpërmjet një kërkese GET. Nëse keni bërë gjithçka në mënyrë korrekte dhe serveri juaj i internetit po punon normalisht, do të shihni emrin që keni futur në fushën e formularit! Në shiritin e adresave të shfletuesit do të shihni shtegun dhe parametrin e emrit që keni kaluar.

Tani duhet të kuptojmë se si mund të kalojmë shumë parametra, të paktën dy për të filluar.

Pra, na duhet skripti për të nxjerrë sa vijon:

"Përshëndetje! Ti je plak!"

Kjo do të thotë, ne duhet të kalojmë 2 parametra në skenar: emrin dhe moshën.

Tani do të shkruajmë një script.php që merr dy parametra: emrin dhe moshën, si dhe një dokument HTML me një formë që do t'i kalojë këto dy parametra në skriptin tonë të ri:

Dhe këtu është dokumenti HTML send.html, me të cilin ne do t'i kalojmë parametrat e emrit dhe moshës në skriptin tonë:



Shkruaj emrin tend:

Fut moshën:



Tani skripti ynë merr dy parametra emrin dhe moshën dhe shfaq rezultatin në shfletues në formatin: "Përshëndetje, A jeni i vjetër!"

Kushtojini vëmendje shiritit të adresave të shfletuesit pasi të kaloni parametrat në skript, do të duket diçka si kjo (pa kodim URL cirilik):

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

Në varësi të cilësimeve të përkthyesit tuaj, ka disa mënyra për të aksesuar të dhënat nga formularët tuaj HTML. Ketu jane disa shembuj:

//Në formular, duke përdorur metodën get, ne dërgojmë vlerën 1 përmes një fushe të fshehur Dërgo një kërkesë

skedar get.php

Postimi i kërkesës Php

Kërkesa për postim Php dërgohet gjithashtu përmes një formulari, vetëm atributi në etiketën e formës do të jetë metoda = "post" . Dhe ne do t'i marrim të dhënat në skedarin e specifikuar nga grupi i postimit $_POST["kërko"] dhe menjëherë do të japim një shembull.

Detyrë: dërgoni të dhëna nga index.php duke përdorur metodën POST në server në skedarin get.php dhe merrni përsëri, nëse fusha e dërgimit të të dhënave është bosh, shfaqni një mesazh në lidhje me fushën e zbrazët. Le të fillojmë zgjidhjen me index.php

Pyetja e kërkimit

Plotësoni fushën e kërkesës

Kërkesa e futur:

Dergo kerkesen

skedar get.php

Kalimi i grupit AJAX

Le të kryejmë të njëjtën detyrë duke përdorur ajax. Në fakt, ajax është një teknologji e lidhur me javascript, por si pjesë e shënimit për transferimin e të dhënave në server, ne do të prekim edhe këtë teknologji. Sigurisht, ajax është një temë për një artikull të veçantë. Gjatë procesit të kërkesës, ne do të shfaqim gjithashtu një gif të treguesit të ngarkimit. Kemi gjithashtu dy skedarë index.php dhe get.php. Skedari Index.php. Mos harroni të lidhni jquery. Ju lutemi vini re se për të fshehur gif-in kur faqja të ngarkohet për herë të parë, caktoni shfaqjen e stilit: asnjë në bllokun e kutisë

$(document).ready(function())( //ne bashkangjisim një ngjarje në butonin e paraqitjes $(".submit"). kliko(funksion())( $.ajax(( //si do të transferojmë llojin e të dhënave : "GET", / /ku kalojmë url: "get.php", //çfarë të dhënash kalojmë të dhënat: (flamur: 1), //ngjarja përpara se të dërgojmë ajax përparaDërgo: funksion())( //shfaq një gif $("box").shfaq(); ), //ngjarja pasi të marrësh një përgjigje, //merr një grup në suksesin e të dhënave: funksion(të dhënat)( //fsheh gif-in $(".box").fshih (); var html = ""; //f- i JSON.parse përkthen të dhënat json në një objekt var dt=JSON.parse(data); për (var i = 0; i

Skedari get.php. Ne marrim të dhëna nga grupi get në skedar dhe kalojmë grupin nga php në javascript. Për të kaluar një grup në php në js, ai duhet të konvertohet në formatin json. Për ta bërë këtë, ne përdorim funksionin php json_encode. Pas rikodimit, json dërgohet përmes mjeteve php, veçanërisht duke thirrur echo.

Unë kam një strukturë URL me një varg pyetjesh dhe një parametër të quajtur pozicion.

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

Unë kam gjithashtu një listë dropdown për zgjedhjen e formularit me pozicionin e zgjedhjes së emrit të formës.

Zgjidhni administratorin e profesionit Zgjidhni Pozicionin e administratorit të rrjetit

Kur përdoruesi bën një përzgjedhje, ai dërgon vlerat e parametrave në atributin e veprimit me emrin e zgjedhur = "pozicioni" si parametër për t'u përdorur në vargun e pyetjes.

Pyetja ime është se si mund të aksesoj vlerat e përzgjedhjes së formularit veçmas nga vlerat e vargut të pyetjes?

Unë jam duke përdorur metodën _GET për të thirrur një vlerë nga një parametër i vargut të pyetjes.

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

Natyrisht kjo e merr vlerën e saj nga struktura e URL-së, jo nga elementi i formës. Ose ndoshta është, nuk jam i sigurt. Por duke e testuar, duket se kam arritur në përfundimin se po e merr me URL dhe jo nga forma.

Si mund të aksesoj vlerën e përzgjedhur të formularit kur krahasoj në PHP-në time?

Përditëso

Kam një problem me URL-në kanonike të specifikuar në kokë.

Kështu duhet të jetë

i vetmi ndryshim është - dhe + në vargun e pyetjeve.

Jo të gjitha vargjet e pyetjeve të mia kanë +. Disa kanë -. Por unë po shfaq përmbajtje në të dy URL-të, pavarësisht nëse ka një - ose +. Sido që të jetë, të dy URL-të marrin të njëjtën përmbajtje të faqes.

Por meqenëse kanoniku krijohet në mënyrë dinamike nga URI dhe jo nga vlera e elementit të formës, ka 2 karaktere të ndryshme kanonike në të dyja faqet e përmbajtjes.

Përdorimi i _Get('vlera') merr vlerën nga vargu i pyetjes në vend të elementit të formës. Unë e di këtë sepse vlera e elementit të formës ka një hapësirë ​​midis administratorit të rrjetit e cila merr kodin urlen kur formulari dorëzohet si rrjet+administrator. Pra, nëse mund të krahasoj me vlerën e elementit të formës, mund të vendos atë kanonike të saktë.