Php get all get paraméterek. Külső változók (a PHP-n kívüli változók). Változók átadása PHP-nek a POST módszerrel

A PHP POST kérés végrehajtásának első módja a file_get_contents használata. A második módszer a freadet néhány más funkcióval kombinálva fogja használni. Mindkét lehetőség a stream_context_create függvényt használja a kérésfejléc szükséges mezőinek kitöltéséhez.

Kód magyarázata

A $sPD változó tartalmazza az átvinni kívánt adatokat. HTTP kérési karakterlánc formátumban kell lennie, ezért néhány speciális karaktert kódolni kell.

Mind a file_get_contents függvényben, mind a fread függvényben két új paraméterünk van. Az első a use_include_path . Mivel HTTP kérést küldünk, az mindkét példában hamis lesz. Ha igaz értékre van állítva egy helyi erőforrás olvasásához, a függvény az include_path címen keresi a fájlt.

A második paraméter a kontextus, amely a stream_context_create visszatérési értékével van feltöltve, amely az $aHTTP tömb értékét veszi fel.

A file_get_contents használata POST-kérésekhez

Ha POST kérést szeretne küldeni a file_get_contents használatával PHP-ben, a stream_context_create segítségével kézzel kell kitöltenie a fejlécmezőket, és meg kell adnia, hogy melyik "burkolót" használja – ebben az esetben a HTTP:

$sURL = "http://brugbart.com/Példák/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST adatok $aHTTP = array("http" => // Használandó burkoló array("method" => "POST", // Kérési metódus // A kérés fejlécei a "header" alatt vannak beállítva => "Tartalom - típus: application/x-www-form-urlencoded", "content" => $sPD)); $kontextus = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $kontextus); echo $tartalom;

Fread használata POST kérések végrehajtására

A fread funkció segítségével POST kéréseket küldhet. A következő példa a stream_context_create paramétert használja a szükséges HTTP-kérelem fejlécek összeállításához:

$sURL = "http://brugbart.com/Példák/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST adatok $aHTTP = array("http" => // Használandó burkoló array("method" => "POST", // Request Method // A kérés fejlécei a "header" alatt vannak beállítva => "Tartalom - típus: application/x-www-form-urlencoded", "content" => $sPD)); $kontextus = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $kontextus); $contents = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $tartalom;

GET kérések készítése PHP-vel

Most a fread és file_get_contents használatával fogunk összpontosítani tartalmak letöltésére az internetről HTTP-n és HTTPS-en keresztül. A cikkben leírt módszerek használatához engedélyeznie kell az fopen wrappers opciót. Ehhez a php.ini fájlban az allow_url_fopen paramétert On értékre kell állítani.

A PHP-ben a POST és GET kérések végrehajtása a webhelyekre való bejelentkezésre, a weboldal tartalmának lekérésére vagy az alkalmazások új verzióinak ellenőrzésére szolgál. Megmutatjuk, hogyan lehet egyszerű HTTP-kéréseket készíteni.

Fread használata fájlok letöltésére vagy fogadására az interneten keresztül

Ne feledje, hogy a weboldalak olvasása a csomag elérhető részére korlátozódik. Tehát a stream_get_contents függvényt (hasonlóan a file_get_contents-hez) vagy egy while ciklust kell használnia a tartalom kisebb darabokban történő olvasásához, amíg el nem éri a fájl végét:

PHP POST kérés feldolgozása esetén a fread függvény utolsó argumentuma megegyezik a töredék méretével. Általában nem lehet nagyobb, mint 8192 (8*1024).

a gettől(9)

Mi az a "kevesebb kód" módszer a paraméterek lekérésére egy ilyen formátumú URL-lekérdezési karakterláncból?

www.mysite.com/category/subcategory?myqueryhash

A kimenetnek a következőnek kell lennie: myqueryhash

Tudok róla:

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

Válaszok

Ez a kód és a jelölés nem az enyém. Evan K felold egy többértékű, azonos nevű feladatot egy felhasználó által definiált függvénnyel;) innen:

A fenti példa kimenetei:

Szia Hannes!

Ha meg szeretné kapni a teljes lekérdezési karakterláncot:

$_SZERVER["QUERY_STRING"]

Továbbá, ha az aktuális fájlnevet keresi a lekérdezési karakterlánccal együtt, akkor csak a következőkre van szüksége

Alapnév ($_SERVER["REQUEST_URI"])

Ez a következő példához hasonló információkat nyújt

fájl.php? arg1 = érték & arg2 = érték

És ha a fájl teljes elérési útjára is szüksége van a gyökértől kezdve, például /mappa/mappa2/file.php?arg1=val&arg2=val, akkor egyszerűen távolítsa el a basename() függvényt, és használja az overlay-t

$_SERVER["REQUEST_URI"]

Köszönöm @K. Shahzad Ez akkor segít, ha át akarja írni a lekérdezési karakterláncot mindenféle átírási kiegészítés nélkül. Mondjuk átírod a /teszt/? X = y az index.php-ben? Q = teszt & x = y, és szeretné megkapni a lekérdezési karakterláncot.

Függvény get_query_string())( $arr = explode("?",$_SERVER["REQUEST_URI"]); if (count($arr) == 2)( return ""; )else( return "?".end( $ arr)."
"; ) ) $query_string = get_query_string();

Ezt a PHP a parse_url függvény használatával teheti meg, amely elemzi az URL-t, és visszaadja annak összetevőit. Beleértve a lekérdezési karakterláncot.

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

Ez a funkcióm a REFERRER lekérdezési karakterlánc egyes részei helyreállítására.

Ha a hívó oldalon már volt egy lekérdezési karakterlánc a sajátjában, és vissza kell térnie arra az oldalra, és el kell küldenie néhányat, nem az összeset a $_GET változók közül (pl. oldalszám).

Példa: a hivatkozó lekérdezési karakterlánc?foo=1&bar=2&baz=3 hívta a refererQueryString("foo" , "baz") értéket a foo=1&baz=3" :

Függvény refererQueryString(/* var args */) ( //Üres karakterláncot ad vissza, ha nincs hivatkozó vagy nincs $_GET változó a hivatkozóban: if (!isset($_SERVER["HTTP_REFERER"]) || empty($_SERVER["HTTP_REFERER" " "]) || empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) ( visszatér ""; ) //A hivatkozó URL-lekérdezésének lekérése (olyan, mint "threadID=7&page=8") $refererQueryString = parse_url ( urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Mely értékeket szeretnéd kivonni? (A nevüket változóként adtad át.) $args = func_get_args(); //A "" karakterláncok kinyerése of referer" URL-je: $pairs = explode("&",$refererQueryString); //Később visszatérő karakterlánc: $return = ""; //Elemezze a letöltött karakterláncokat, és keresse meg az érdekeseket: foreach ($pairs mint $pair ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Ha argként adtad meg a nevet, csatold az aktuális párt a visszatérési karakterlánchoz : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) ) //Itt vannak a visszaadott "kulcs=érték" párok összeragasztva az "&" elemmel ": return ltrim($return,"&"); ) //Ha az Ön hivatkozója "page.php?foo=1&bar=2&baz=3" volt //és a header()-t vissza szeretné állítani a "page.php?foo=1&baz=3" címre //(nincs "sáv", csak foo és baz), akkor alkalmazza: header("Hely: page.php?".refererQueryString("foo","baz"));

A Microsoft támogatása kijelenti: "Az URL maximális hossza 2083 karakter az Internet Explorerben."

Az IE-nek már régóta problémái vannak az URL-ekkel. Úgy tűnik, hogy a Firefox jól működik >4k karakterekkel.

A webes programozás többnyire csak a felhasználó által bevitt különféle adatok feldolgozása - azaz HTML űrlapok feldolgozása.
Valószínűleg nincs még egy olyan nyelv, mint a PHP, amely ennyire megkönnyítené a feldolgozást és az elemzést az Ön számára, pl. változók, amelyek innen származnak (a felhasználó böngészőjéből). A tény az, hogy a PHP nyelvbe minden szükséges képesség be van építve, így nem is kell a HTTP protokoll szolgáltatásaira gondolni, és azon gondolkodni, hogyan lehet POST űrlapokat küldeni és fogadni, vagy akár fájlokat letölteni. mindenre ellátva.

Itt nem foglalkozunk részletesen a HTTP-protokoll mechanizmusával, amely felelős az adatok továbbításáért a böngészőből a szerverbe és vissza; külön fejezetet szentelünk ennek a PHP-nek és a HTTP-nek. A HTML űrlapokkal való munka alapelveit is részletesen tárgyaljuk.

Most ezeket a mechanizmusokat csak alkalmazott szempontból fogjuk megvizsgálni, anélkül, hogy az elméletbe belemerülnénk.

Ahhoz, hogy adatokat kapjunk a felhasználóktól, interaktív interakcióra van szükségünk velük.

Most próbáljunk meg írni egy olyan szkriptet, amely egy felhasználónevet vesz paraméterként és kimenetként:

"Helló, !".

Először nézzük meg a legegyszerűbb módot a név szkriptnek való átadására – közvetlenül az URL-be írva a ? - például név=név formátumban. Íme egy példa:

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

A szkriptünknek fel kell ismernie a név paramétert. Vagyis leegyszerűsítve a szkriptnek (scriptnek) el kell fogadnia a név paramétert a névváltozó formájában, majd meg kell jelenítenie a „Hello, !” karakterláncot a felhasználó böngészőjében. Ezt a következőképpen teheti meg:

Írunk egy szkriptet, amely felveszi a név paramétert, és megjeleníti az eredményt a felhasználó böngészőjében, majd elmenti script.php néven:

Példánkban a $_GET["név"] előre definiált változót használtuk a névparaméter "fogadásához". Most, ha a name=Sasha paramétert átadjuk egy GET kéréssel, a következő eredményt kapjuk:

Szia Sasha!

Most próbáljuk meg a név paramétert nem a böngésző lekérdezési karakterláncából, hanem egy HTML űrlapon átadni. Létrehozunk egy HTML dokumentumot a következő tartalommal:


Név:

Most mentsük el ezt a HTML dokumentumot tesztszerverünkön (localhost) send.html néven ugyanabba a könyvtárba, ahová már mentettük a script.php szkriptet.

Most elindítjuk a HTML dokumentumot a böngészőben:

http://localhost/send.html

Írja be a nevet a mezőbe, és nyomja meg a „GO!” gombot. Az űrlap egy GET kéréssel továbbítja a név paramétert a script.php szkriptünknek. Ha mindent jól csináltál és a webszervered megfelelően működik, akkor az űrlapmezőben a beírt nevet fogod látni! A böngésző címsorában látni fogja az elérési utat és az átadott névparamétert.

Most meg kell értenünk, hogyan tudunk sok paramétert átadni, kezdetben legalább kettőt.

Tehát szükségünk van a szkriptre a következő kimenethez:

"Szia! Öreg vagy!"

Vagyis 2 paramétert kell átadnunk a szkriptnek: név és életkor.

Most írunk egy script.php-t, amely két paramétert vesz fel: név és életkor, valamint egy HTML-dokumentumot olyan űrlappal, amely ezt a két paramétert adja át az új szkriptünknek:

És itt van a send.html HTML dokumentum, amellyel átadjuk a nevet és az életkor paramétereket a szkriptünknek:



Adja meg nevét:

Írja be az életkort:



Most a szkriptünk két paramétert, nevet és életkort vesz fel, és az eredményt a következő formátumban jeleníti meg a böngészőben: „Helló! Öreg vagy!”

Ügyeljen a böngésző címsorára, miután átadta a paramétereket a szkriptnek, ez valahogy így fog kinézni (cirill URL-kódolás nélkül):

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

A tolmács beállításaitól függően többféleképpen is hozzáférhet a HTML-űrlapokból származó adatokhoz. Íme néhány példa:

//Az űrlapon a get metódussal az 1-es értéket egy rejtett mezőn keresztül küldjük el. Kérés küldése

get.php fájl

Php kérés post

A Php post kérés is űrlapon keresztül történik, csak a form tag attribútuma a method="post" lesz. És megkapjuk a megadott fájlban lévő adatokat a $_POST["keresés"] tömbből, és azonnal példát adunk.

Feladat: küldjön adatokat az index.php-ről POST metódussal a szerverre a get.php fájlban és fogadja vissza, ha az adatküldés mező üres, akkor az üres mezőről üzenetet jelenítsen meg. Kezdjük a megoldást az index.php-vel

Keresési lekérdezés

Töltse ki a kérés mezőt

Beírt lekérdezés:

Felkérést küld

get.php fájl

AJAX tömb átadása

Végezzük el ugyanezt a feladatot ajax segítségével. Valójában az ajax egy javascripthez kapcsolódó technológia, de a szerverre való adatátvitelről szóló megjegyzés részeként kitérünk erre a technológiára is. Természetesen az ajax egy külön cikk témája. Az igénylés során a betöltésjelző gifjét is megjelenítjük. Két fájlunk is van: index.php és get.php. Index.php fájl. Ne felejtse el csatlakoztatni a jquery-t. Kérjük, vegye figyelembe, hogy a gif elrejtéséhez az oldal első betöltésekor rendelje hozzá a megjelenítési stílust: none a dobozblokkhoz

$(document).ready(function())( //egy eseményt csatolunk a küldés gombhoz $(.submit").click(function())( $.ajax(( //hogyan továbbítjuk az adattípust : "GET", / /ahova url-t adunk át: "get.php", //milyen adatokat adunk át: (jelző: 1), //esemény az ajax küldése előtt beforeSend: function())( //gif megjelenítése $(".box").show( ); ), //event a válasz beérkezése után, //tömb beszerzése az adatok sikerességében: function(data)( //elrejti a gif $(".box").hide (); var html = ""; //f- i A JSON.parse a JSON-adatokat objektummá fordítja le var dt=JSON.parse(data); for (var i = 0; i

A get.php fájl. A get tömbből adatokat kapunk a fájlba, és átadjuk a tömböt php-ről javascriptre. Egy tömb php-nek js-be való átadásához json formátumba kell konvertálni. Ehhez a json_encode php függvényt használjuk. Az újrakódolás után a json php-n keresztül kerül elküldésre, konkrétan az echo hívásával.

Van egy URL-struktúrám egy lekérdezési karakterlánccal és egy pozíció nevű paraméterrel.

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

Van egy űrlapkiválasztó legördülő listám is az űrlapválasztó név pozíciójával.

Válassza ki a Foglalkozás rendszergazdáját Válassza a Hálózati adminisztrátor pozícióját

Amikor a felhasználó kiválaszt egyet, elküldi a paraméterértékeket az action attribútumnak a select name="position" paraméterrel a lekérdezési karakterláncban használandó paraméterként.

A kérdésem az, hogy hogyan érhetem el az űrlapkiválasztási értékeket a lekérdezési karakterlánc értékektől elkülönítve?

A _GET metódust használom egy lekérdezési karakterlánc paraméterből származó érték meghívására.

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

Nyilvánvalóan ez az URL-struktúrából nyeri az értékét, nem az űrlapelemből. Vagy talán az, nem biztos. De tesztelve, úgy tűnik, arra a következtetésre jutottam, hogy URL-en keresztül kapja meg, nem pedig űrlap alapján.

Hogyan érhetem el az űrlap kiválasztási értékét a PHP-ben történő összehasonlítás során?

Frissítés

Problémám van a fejlécben megadott kanonikus URL-lel.

Ennek így kell lennie

az egyetlen különbség a - és a + jel a lekérdezési karakterláncban.

Nem minden lekérdezési karakterláncomban van +. Vannak, akiknek -. De mindkét URL-en megjelenítek tartalmat, függetlenül attól, hogy van-e - vagy +. Akárhogy is, mindkét URL ugyanazt az oldaltartalmat kapja.

De mivel a kanonikus dinamikusan az URI-ból jön létre, és nem az űrlapelem értékéből, ezért mindkét tartalmi oldalon 2 különböző kanonikus karakter található.

A _Get('value') használata az értéket a lekérdezési karakterláncból kéri le az űrlapelem helyett. Ezt azért tudom, mert a form elem értékében van egy szóköz a hálózati adminisztrátor között, ami urlenkódot kap az űrlap beküldésekor hálózat+adminisztrátorként, így ha össze tudom hasonlítani az űrlapelem értékével, be tudom állítani a megfelelő kanonikus értéket.