Php obține toți parametrii. Variabile externe (variabile în afara PHP). Transmiterea de variabile către PHP folosind metoda POST

Prima metodă de a efectua o solicitare PHP POST este utilizarea file_get_contents . A doua metodă va folosi fread în combinație cu alte câteva funcții. Ambele opțiuni folosesc funcția stream_context_create pentru a completa câmpurile de antet solicitate.

Explicația codului

Variabila $sPD conține datele de transferat. Trebuie să fie în format de șir de solicitare HTTP, așa că unele caractere speciale trebuie să fie codificate.

Atât în ​​funcția file_get_contents, cât și în funcția fread avem doi parametri noi. Primul este use_include_path . Deoarece facem o solicitare HTTP, aceasta va fi falsă în ambele exemple. Când este setată la true pentru a citi o resursă locală, funcția va căuta fișierul la include_path .

Al doilea parametru este context, care este populat cu valoarea returnată a stream_context_create, care ia valoarea matricei $aHTTP.

Folosind file_get_contents pentru a face cereri POST

Pentru a trimite o solicitare POST folosind file_get_contents în PHP, trebuie să utilizați stream_context_create pentru a completa manual câmpurile de antet și a specifica ce „wrapper” să utilizați - în acest caz HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // Adresa URL POST $sPD = "nume=Jacob&bench=150"; // Date POST $aHTTP = array("http" => // Wrapper care va fi folosit array("method" => "POST", // Metoda de solicitare // Anteturile de solicitare sunt setate sub "header" => "Conținut - tip: application/x-www-form-urlencoded”, „content” => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $conținut;

Folosind fread pentru a efectua cereri POST

Puteți folosi funcția fread pentru a face solicitări POST. Următorul exemplu utilizează stream_context_create pentru a compune anteturile de solicitare HTTP necesare:

$sURL = "http://brugbart.com/Examples/http-post.php"; // Adresa URL POST $sPD = "nume=Jacob&bench=150"; // Date POST $aHTTP = array("http" => // Wrapper care va fi folosit array("method" => "POST", // Request Method // Antetele cererii sunt setate sub "header" => "Conținut - tip: application/x-www-form-urlencoded”, „content” => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $context); $conținut = ""; în timp ce (!feof($mâner)) ( $conținut .= fread($mâner, 8192); ) fclose($mâner); echo $conținut;

Efectuarea cererilor GET cu PHP

Acum ne vom concentra pe utilizarea fread și file_get_contents pentru a descărca conținut de pe internet prin HTTP și HTTPS. Pentru a utiliza metodele descrise în acest articol, trebuie să activați opțiunea fopen wrappers. Pentru a face acest lucru, trebuie să setați parametrul allow_url_fopen la On în fișierul php.ini.

Efectuarea solicitărilor POST și GET în PHP este folosită pentru a vă conecta pe site-uri web, pentru a prelua conținutul paginii web sau pentru a verifica noi versiuni de aplicații. Vom discuta cum să faceți cereri HTTP simple.

Utilizarea fread pentru a descărca sau a primi fișiere prin Internet

Rețineți că citirea paginii web este limitată la porțiunea accesibilă a pachetului. Deci, trebuie să utilizați funcția stream_get_contents (similar cu file_get_contents ) sau o buclă while pentru a citi conținutul în bucăți mai mici până când se ajunge la sfârșitul fișierului:

În acest caz de procesare a unei solicitări PHP POST, ultimul argument al funcției fread este egal cu dimensiunea fragmentului. De regulă, nu ar trebui să fie mai mare de 8192 (8*1024).

de la get(9)

Care este o modalitate „mai puțin cod” de a obține parametri dintr-un șir de interogare URL care este formatat astfel?

www.mysite.com/category/subcategory?myqueryhash

Ieșirea ar trebui să fie: myqueryhash

stiu despre asta:

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

Răspunsuri

Acest cod și notația nu sunt ale mele. Evan K rezolvă un job cu mai multe valori cu același nume cu o funcție definită de utilizator;) luat din:

Exemplul de mai sus rezultă:

Salut Hannes!

Dacă doriți să obțineți întregul șir de interogare:

$_SERVER[„QUERY_STRING”]

De asemenea, dacă căutați numele de fișier curent împreună cu șirul de interogare, aveți nevoie doar de următoarele

Nume de bază($_SERVER["REQUEST_URI"])

Acest lucru vă va oferi informații precum exemplul următor

fișier.php? arg1 = valoare și arg2 = valoare

Și dacă aveți nevoie și de calea completă către fișier pornind de la rădăcină, cum ar fi /folder/folder2/file.php?arg1=val&arg2=val, atunci eliminați funcția basename() și utilizați suprapunerea

$_SERVER[„REQUEST_URI”]

Multumesc @K. Shahzad Acest lucru vă ajută atunci când doriți să rescrieți șirul de interogare fără adăugiri de rescriere. Să presupunem că rescrii /test/? X = y în index.php? Q = test & x = y și doriți să obțineți șirul de interogare.

Funcția get_query_string())( $arr = explode("?",$_SERVER["REQUEST_URI"]); if (count($arr) == 2)( return ""; )else( return "?".end( $ arr)."
"; ) ) $query_string = get_query_string();

Modul PHP de a face acest lucru este de a folosi funcția parse_url, care analizează o adresă URL și returnează componentele acesteia. Inclusiv șirul de interogare.

$url = "www.mysite.com/category/subcategory?myqueryhash"; echo parse_url($url, PHP_URL_QUERY); # ieșire „myqueryhash”

Iată funcția mea de a recupera părți din șirul de interogare REFERRER.

Dacă pagina de apelare avea deja un șir de interogare propriu și trebuie să reveniți la pagina respectivă și doriți să trimiteți unele, nu toate, din acele $_GET vars (de exemplu, numărul paginii).

Exemplu: șirul de interogare referitor a fost?foo=1&bar=2&baz=3 apelând refererQueryString(„foo” , „baz”) returnează foo=1&baz=3” :

Funcția refererQueryString(/* var args */) ( //Returnează șirul gol dacă nu este disponibil niciun referer sau nu $_GET vars în referer: if (!isset($_SERVER["HTTP_REFERER"]) || empty($_SERVER["HTTP_REFERER " "]) || empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) ( returnează ""; ) //Obțineți interogarea URL a refererului (ceva ca "threadID=7&page=8") $refererQueryString = parse_url ( urldecode($_SERVER["HTTP_REFERER"), PHP_URL_QUERY); //Ce valori doriți să extrageți? (Le-ați transmis numele ca variabile.) $args = func_get_args(); //Obțineți șirurile "" URL-ul refererului": $pairs = explode("&",$refererQueryString); //Șir pe care îl veți returna mai târziu: $return = ""; //Analizați șirurile preluate și căutați-le pe cele de interes: foreach ($perechi as $pair ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Dacă ați trecut numele ca arg, atașați perechea curentă pentru a returna șirul : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) ) //Iată perechile returnate „cheie=valoare” lipite împreună cu „& ": return ltrim($return,"&"); ) //Dacă refererul dvs. a fost „page.php?foo=1&bar=2&baz=3” //și doriți să faceți antet() înapoi la „page.php?foo=1&baz=3” //(fără „bară”, numai foo și baz), apoi aplicați: header("Location: page.php?".refererQueryString("foo","baz"));

Asistența Microsoft afirmă: „Lungimea maximă a adresei URL este de 2083 de caractere în Internet Explorer”.

IE are probleme cu adresele URL de mai mult timp. Firefox pare să funcționeze bine cu >4k caractere.

Programarea web este, în cea mai mare parte, doar prelucrarea diferitelor date introduse de utilizator - adică procesarea formularelor HTML.
Probabil că nu există nicio altă limbă precum PHP care să vă ușureze sarcina de procesare și parsare, de exemplu. variabilele care provin din (din browserul utilizatorului). Faptul este că toate capabilitățile necesare sunt încorporate în limbajul PHP, astfel încât nici măcar nu trebuie să vă gândiți la caracteristicile protocolului HTTP și să vă gândiți cum să trimiteți și să primiți formulare POST sau chiar să descărcați fișiere. prevăzut pentru tot.

Aici nu ne vom opri în detaliu asupra mecanismului protocolului HTTP, care este responsabil pentru livrarea datelor de la browser la server și înapoi; o secțiune specială este dedicată acestui PHP și HTTP. Principiile de lucru cu formulare HTML sunt, de asemenea, discutate în profunzime.

Acum vom lua în considerare aceste mecanisme doar din punct de vedere aplicat, fără a pătrunde în teorie.

Pentru a primi date de la utilizatori, avem nevoie de interacțiune interactivă cu aceștia.

Acum să încercăm să scriem un script care ia un nume de utilizator ca parametri și rezultate:

"Buna ziua, !".

Mai întâi, să ne uităm la cel mai simplu mod de a transmite un nume unui script - introducându-l direct în adresa URL după ? - de exemplu, în formatul nume=nume . Iată un exemplu:

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

Scriptul nostru trebuie să recunoască parametrul nume. Adică, pentru a spune simplu, scriptul (scriptul) trebuie să accepte parametrul nume sub forma variabilei nume și apoi să afișeze șirul „Bună ziua,!” în browserul utilizatorului. O poți face astfel:

Scriem un script care preia parametrul name și afișează rezultatul în browserul utilizatorului, apoi îl salvează sub numele script.php:

În exemplul nostru, am folosit variabila predefinită $_GET["nume"] pentru a "primi" parametrul nume. Acum, prin transmiterea parametrului name=Sasha printr-o solicitare GET, vom obține următorul rezultat:

Bună Sasha!

Acum să încercăm să transmitem parametrul nume nu din șirul de interogare a browserului, ci printr-un formular HTML. Creăm un document HTML cu următorul conținut:


Nume:

Acum să salvăm acest document HTML pe serverul nostru de testare (localhost) sub numele send.html în același director în care am salvat deja scriptul script.php.

Acum lansăm documentul HTML în browser:

http://localhost/send.html

Introduceți numele în câmp și apăsați butonul „GO!”. Formularul va transmite parametrul nume scriptului nostru script.php printr-o solicitare GET. Dacă ați făcut totul corect și serverul dvs. web funcționează normal, veți vedea numele pe care l-ați introdus în câmpul de formular! În bara de adrese a browserului veți vedea calea și parametrul de nume pe care l-ați transmis.

Acum trebuie să înțelegem cum putem trece mulți parametri, cel puțin doi pentru început.

Deci, avem nevoie de script pentru a scoate următoarele:

"Bună! Ești bătrân!"

Adică trebuie să trecem 2 parametri scriptului: numele și vârsta.

Acum vom scrie un script.php care ia doi parametri: nume și vârstă, precum și un document HTML cu un formular care va trece acești doi parametri noului nostru script:

Și iată documentul HTML send.html, cu care vom trece parametrii nume și vârstă scriptului nostru:



Introdu numele tau:

Introduceți vârsta:



Acum, scriptul nostru ia doi parametri numele și vârsta și afișează rezultatul în browser în formatul: „Bună,! Ești bătrân!”

Acordați atenție barei de adrese a browserului după ce treceți parametrii scriptului, va arăta cam așa (fără codificarea URL chirilic):

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

În funcție de setările interpretului, există mai multe moduri de a accesa datele din formularele HTML. Aici sunt cateva exemple:

//În formular, folosind metoda get, trimitem valoarea 1 printr-un câmp ascuns Send a request

fișier get.php

Postare de solicitare PHP

Cererea de postare PHP este trimisă și printr-un formular, doar atributul din eticheta formularului va fi method="post" . Și vom primi datele în fișierul specificat din tabloul post $_POST["search"] și vom da imediat un exemplu.

Sarcină: trimiteți date de la index.php folosind metoda POST către server în fișierul get.php și primiți-le înapoi, dacă câmpul de trimitere a datelor este gol, afișați un mesaj despre câmpul gol. Să începem soluția cu index.php

Interogare de căutare

Completați câmpul de solicitare

Interogarea introdusă:

Trimite cerere

fișier get.php

AJAX Array Trece

Să realizăm aceeași sarcină folosind ajax. De fapt, ajax este o tehnologie legată de javascript, dar ca parte a notei despre transferul de date către server, vom aborda și această tehnologie. Desigur, ajax este un subiect pentru un articol separat. În timpul procesului de solicitare, vom afișa și un gif al indicatorului de încărcare. Avem și două fișiere index.php și get.php. Fișierul index.php. Nu uitați să conectați jquery. Vă rugăm să rețineți că pentru a ascunde gif-ul la prima încărcare a paginii, atribuiți stilul de afișare: niciunul blocului casetă

$(document).ready(function())( //atașăm un eveniment la butonul de trimitere $(".submit").click(function())( $.ajax(( //cum vom transfera tipul de date) : "GET", / /unde trecem url: "get.php", //ce date transmitem date: (flag: 1), //eveniment înainte de a trimite ajax beforeSend: function())( //afișează un gif $(".box").show(); ), //eveniment după primirea unui răspuns, //obține o matrice în succesul datelor: function(data)( //ascunde gif $(".box").hide (); var html = ""; //f- i JSON.parse traduce datele json într-un obiect var dt=JSON.parse(data); for (var i = 0; i

Fișierul get.php. Primim date din matricea get în fișier și trecem matricea de la php la javascript. Pentru a transmite o matrice la php la js, trebuie convertită în format json. Pentru a face acest lucru, folosim funcția php json_encode. După recodificare, json este trimis prin mijloace php, în special apelând echo.

Am o structură URL cu un șir de interogare și un parametru numit poziție.

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

Am, de asemenea, un meniu vertical de selectare a formularului cu poziția numelui de selectare a formularului.

Selectați ocupația Administrator Selectați Poziția Administrator de rețea

Când utilizatorul face o selecție, acesta trimite valorile parametrilor la atributul de acțiune cu select name="position" ca parametru de utilizat în șirul de interogare.

Întrebarea mea este cum accesez valorile de selecție a formularului separat de valorile șirului de interogare?

Folosesc metoda _GET pentru a apela o valoare dintr-un parametru șir de interogare.

$poziție = isset($_GET[„poziție”]) ? ($_GET["poziție"]): "";

Evident, aceasta își obține valoarea din structura URL, nu din elementul formular. Sau poate că este, nu sunt sigur. Dar testând-o, se pare că am ajuns la concluzia că îl obține prin URL și nu după formă.

Cum pot accesa valoarea selectată a formularului când compar în PHP-ul meu?

Actualizați

Am o problemă cu adresa URL canonică specificată în antet.

Așa ar trebui să fie

singura diferență este - și + din șirul de interogare.

Nu toate șirurile mele de interogare au +. Unii au -. Dar afișez conținut pe ambele adrese URL, indiferent dacă are un - sau +. Oricum, ambele adrese URL primesc același conținut de pagină.

Dar, deoarece canonicul este creat dinamic din URI și nu din valoarea elementului de formular, există 2 caractere canonice diferite pe ambele pagini de conținut.

Folosind _Get('value') se preia valoarea din șirul de interogare în loc de elementul formular. Știu acest lucru deoarece valoarea elementului de formular are un spațiu între administratorul de rețea, care devine urlencoded atunci când formularul este trimis ca administrator de rețea +.Deci, dacă pot compara cu valoarea elementului de formular, o pot seta pe cea canonică corectă.