Parameters van get request php. Leren werken met GET- en POST-verzoeken. GET-verzoeken maken met PHP

Ik heb een URL-structuur met een queryreeks en een parameter met de naam position.

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

Ik heb ook een vervolgkeuzelijst voor formulierselectie met de formulierkeuzenaam position .

Wanneer de gebruiker een selectie maakt, stuurt deze de parameterwaarden naar het action-attribuut met select name="position" als de parameter die in de querystring moet worden gebruikt.

Mijn vraag is: hoe krijg ik toegang tot de formulierselectiewaarden, afzonderlijk van de waarden van de queryreeks?

Ik gebruik de _GET-methode om een ​​waarde aan te roepen uit een queryreeksparameter.

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

Het is duidelijk dat dit zijn waarde ontleent aan de URL-structuur, niet aan het formulierelement. Of misschien wel, dat weet ik niet zeker. Maar als ik het test, schijn ik tot de conclusie te zijn gekomen dat het het via een URL ontvangt en niet via de vorm.

Hoe kan ik toegang krijgen tot de selectiewaarde van het formulier tijdens het vergelijken in mijn PHP?

Update

Ik heb een probleem met de canonieke URL die in de header is opgegeven.

dit is hoe het zou moeten zijn

het enige verschil zijn de - en + in de queryreeks.

Niet al mijn queryreeksen hebben +. Sommigen hebben -. Maar ik toon inhoud op beide URL's, ongeacht of deze een - of + heeft. Hoe dan ook, beide URL's ontvangen dezelfde pagina-inhoud.

Maar omdat het canonieke karakter dynamisch wordt gemaakt op basis van de URI en niet op basis van de waarde van het formulierelement, zijn er op beide inhoudspagina's twee verschillende canonieke tekens.

Met _Get('value') wordt de waarde opgehaald uit de queryreeks in plaats van uit het formulierelement. Ik weet dit omdat de waarde van het formulierelement een spatie heeft tussen de netwerkbeheerder die urlencoded wordt wanneer het formulier wordt ingediend als network+administrator . Dus als ik kan vergelijken met de waarde van het formulierelement, kan ik de juiste canonieke waarde instellen.

We gaan dus opnieuw door met het bestuderen van de basisprincipes van PHP en in dit artikel zullen we kennis maken met manieren om variabelen door te geven in PHP, namelijk met GET- en POST-methoden. Elk van hen heeft zijn voor- en nadelen en wordt in geschikte situaties gebruikt, die in dit artikel zullen worden besproken. We zullen ook kijken naar codevoorbeelden die laten zien hoe de POST- en GET-methoden werken.

Variabelen doorgeven met behulp van de GET-methode

Deze methode voor het doorgeven van variabelen wordt in PHP gebruikt om variabelen door te geven aan een bestand via de adresbalk. Dat wil zeggen dat variabelen onmiddellijk via de adresbalk van de browser worden verzonden. Een voorbeeld hiervan is bijvoorbeeld een link naar een artikel in WordPress zonder gebruik te maken van CNC (SEF), dat er ongeveer zo uitziet:

Https://site/?p=315

Dat wil zeggen dat in dit geval de variabele $p met de waarde 315 wordt doorgegeven. Laten we nu de GET-methode in meer detail bekijken aan de hand van een voorbeeld. Laten we zeggen dat we drie variabelen $a, $b en $c aan het bestand moeten doorgeven GET-methode en geef hun som weer op het scherm. Je kunt hiervoor de volgende code gebruiken.

$a = $_GET["a"]; $b = $_GET["b"]; $c = $_GET["c"]; $summa = $a + $b + $c; echo "Som $a + $b + $c = $summa";

Omdat alle variabelen erin worden geplaatst globale array GET(), dan kennen we onze variabelen eerst de waarden toe van de overeenkomstige elementen van de GET-array. We doen dit helemaal aan het begin om verschillende fouten bij het doorgeven van variabelen te voorkomen. Om het werk te demonstreren, schrijven we vervolgens een willekeurige formule en geven het resultaat op het scherm weer.

Om de GET-methode te testen, voegt u eenvoudigweg een vraagteken “?” toe aan de bestandslink. en vermeld via het ampersand “&” de variabelen met hun waarden. Laten we een dossier hebben get.php, die aan de basis van de site ligt. Om variabelen naar een bestand over te brengen, schrijft u gewoon het volgende in de adresbalk.

Https://site/get.php?a=1&b=2&c=3

Zoals u in het voorbeeld kunt zien, voegen we eerst een vraagteken toe direct na de bestandsnaam. Vervolgens registreren we de variabele en geven we de waarde ervan aan met behulp van gelijken. Hierna vermelden we andere variabelen op dezelfde manier via het ampersand. Als we nu deze link volgen, zien we de som van de variabelen $a, $b en $c.

Deze methode is heel eenvoudig en vereist geen extra bestanden. Alle benodigde gegevens komen rechtstreeks via de adresbalk van de browser.

Laten we nu verder gaan met de tweede manier om variabelen door te geven in PHP - naar de POST-methode.

Variabelen doorgeven aan PHP met behulp van de POST-methode

Met deze methode kunt u in het geheim variabelen van het ene bestand naar het andere overbrengen. Zoals u al heeft begrepen, worden voor deze doeleinden meestal twee bestanden gebruikt. De eerste bevat een formulier voor het invoeren van initiële gegevens, en de tweede bevat een uitvoerend bestand dat variabelen accepteert. Laten we ter demonstratie eens kijken naar de volgende code.

Code van het eerste bestand met een formulier voor het indienen van gegevens. Laten we het de naam post-1.php geven

  • actie – specificeer het bestand waarnaar de variabelen zullen worden overgebracht.
  • methode - methode voor het doorgeven van variabelen. In ons geval is dit de POST-methode.
  • naam – naam van het formulier. Tegelijkertijd wordt een variabele met dezelfde naam naar het bestand overgebracht.

Tekstvelden:

  • naam – namen van variabelen. In ons geval is dit de voor- en achternaam (naam- en achternaamvariabelen).
  • type – veldtype. In ons geval is dit een tekstveld.
  • naam – de naam van de knop en de variabele die samen met andere variabelen wordt doorgegeven.
  • type – knoptype. In ons geval is dit een knop voor het verzenden van gegevens.
  • waarde – tekst op de knop.

De code van het tweede bestand, dat zal dienen als een variabele ontvanger. Laten we het post-2.php noemen

$naam = $_POST; $achternaam = $_POST; echo "De waarden van de variabelen doorgegeven door de POST-methode zijn $name en $lastname";

Net als bij de GET-methode wijzen we eerst de waarden van de overeenkomstige elementen toe aan de variabelen mondiale reeksNA. Voor de duidelijkheid geven we deze variabelen vervolgens op het scherm weer met behulp van .

Wanneer we nu het eerste bestand laden, wordt het formulier geladen. Na het invoeren van de gegevens klikt u op de knop "Verzenden", waardoor een pagina met een tweede bestand wordt geopend op een nieuw tabblad, waarop de waarden worden weergegeven die in het formulier op de vorige pagina zijn geschreven. Dat wil zeggen dat de waarden van variabelen uit het eerste bestand worden overgebracht naar het tweede bestand.

Dit concludeert dit artikel over het doorgeven van variabelen in PHP. Als u de verschijning van andere artikelen op de blog niet wilt missen, raad ik u aan zich op een handige manier op de nieuwsbrief te abonneren in het gedeelte 'Abonnement' of via het onderstaande formulier.

Dat is alles. Veel succes en succes bij het beheersen van de basisprincipes van PHP.

Het is je misschien opgevallen dat je op de meeste sites de volgende adressen kunt zien:

Http://site/index.php?blog=2

Hier kun je, zelfs zonder php te kennen, raden dat we toegang hebben tot een bestand index.php Maar weinig mensen weten wat er na het vraagteken komt. Het is vrij eenvoudig: ?blog=2 Dit is een declaratie van de globale variabele "$_GET["blog"]" met de waarde "2". Daarom geef ik een variabele door aan het script die verantwoordelijk is voor het weergeven van informatie uit de database. Laten we een klein script schrijven waarin je alles duidelijk kunt zien:

if(isset($_GET["blog"])) (
echo $_GET["blog"];
}
?>

We gebruiken de voorwaardeoperator if() en de volgende regel wordt als voorwaarde gebruikt:

Isset($_GET["blog"])

Met isset() kun je uitzoeken of de variabele die tussen haakjes is opgegeven, bestaat, dat wil zeggen dat de voorwaarde die ik in de code heb beschreven als volgt klinkt: Als de variabele $_GET["blog"] bestaat, geef dan de inhoud van deze variabele weer op het scherm. Dit is wat er gebeurde:

Ik denk dat het duidelijk is dat er een globale variabele wordt gemaakt $_GET met de identificatie die we in de adresbalk hebben aangegeven ( in dit geval met de identificatie “blog”)

Nu wil ik één punt verduidelijken. Stel dat we twee variabelen moeten declareren, hoe moet dat dan gebeuren? De eerste variabele wordt gedeclareerd na het vraagteken "?" De tweede variabele wordt gedeclareerd na het “&” teken ( Eerlijk gezegd weet ik niet wat dit teken is), hier is een voorbeelddeclaratie van drie variabelen:

Http://site/index.php?a=1&b=2&c=3

Hier is de uitvoercode:

if(isset($_GET["a"]) AND isset($_GET["b"]) AND isset($_GET["c"])) (
echo $_GET["a"]."
";
echo $_GET["b"]."
";
echo $_GET["c"]."
";
}
?>

De toestand klinkt als volgt:

Als er een globale variabele $_GET["a"] en een globale variabele $_GET["b"] en een globale variabele $_GET["c"] is, geef deze dan op het scherm weer, hier is het resultaat:

Formulieren

Voordat we er zijn na verzoeken, moet u begrijpen wat formulieren zijn? Waarom is het nodig? Omdat de globale variabele $_POST[""] via formulieren wordt aangemaakt. Wat is vorm? Dit zijn velden waarin de gebruiker bepaalde informatie kan invoeren. Er zijn velden met één regel, grote velden, maar ook keuzerondjes en selectievakjes. Laten we alles in orde brengen...

Het formulier is een tag:


vorm elementen

Het formulier heeft attributen, ik zal de meest voorkomende opsommen:

Laten we een formulier maken:


vorm elementen

Ik heb het bestand ingesteld als een handlerbestand test.php omdat ik daarin voorbeelden voor je schrijf. Ik heb de verzendmethode ingesteld op posten, omdat dit de methoden zijn die in 99,9% van de gevallen worden gebruikt. Ik heb ons formulier ook een naam gegeven: formulier

Laten we nu een duik nemen in de wereld van vormelementen. Het eerste dat u moet begrijpen, is dat bijna alle elementen een tag zijn het enige verschil zit in het attribuut type bij deze labels. Ik zal de gebruikte formulierelementen opsommen:

Ik weet zeker dat je dergelijke velden meer dan eens hebt gezien, dus hier is wat ze zeggen: “geen commentaar”

Laten we nu een kleine trainingsvragenlijst maken, waarmee we verder zullen werken. Onze taak is om een ​​kleine vragenlijst te maken die ons de naam vertelt van de persoon die de vragenlijst invult, het geslacht, het land waar hij of zij vandaan komt, de favoriete kleur en een tekstveld waarin de gebruiker iets over zichzelf kan toevoegen. Dit is wat ik heb:

Uw achternaam Voornaam Patroniem:

Uw geslacht:
M
EN

Uit welk land kom je?



Favoriete kleur(en):

Zwart:
Rood:
Wit:
Een andere:

Over mezelf:




Merk op dat bijna elke tag een attribuut heeft waarde, waar is het voor? Het registreert de gegevens die u naar een andere pagina gaat overbrengen. Ik hoop dat het duidelijk is

Als we deze code nu in de browser uitvoeren, zien we het volgende:

Voor het formulier heb ik het attribuut gebruikt actie met betekenis test.php dit betekent, zoals ik al zei, dat de gegevens uit het formulier worden overgebracht naar het test.php-bestand.

POST-verzoek

Laten we nu PHP-code schrijven waarmee we de informatie kunnen zien die we hebben ingevoerd. Waar worden de gegevens opgeslagen? In het geval van het get-verzoek bevonden onze gegevens zich in de globale variabele $_GET[""]. Wanneer u een postverzoek doet, worden de gegevens opgeslagen in de globale variabele $_POST[""]. Tussen vierkante haakjes moet u, zoals in het geval van de globale variabele get, een identificatie schrijven. De vraag is: waar kan ik deze identificatie verkrijgen? Daarom hebben we het naamattribuut op formulierelementen nodig! Het zijn deze namen die dienen als onze sleutel in de mondiale postarray. Laten we beginnen met het beschrijven van het script:

if(isset($_POST["verzenden"])) (
echo "Volledige naam: ".$_POST["fio"]."
";
echo "Geslacht: ".$_POST["geslacht"]."
";
echo "Land van verblijf: ".$_POST["stad"]."
";

Echo "Favoriete kleur(en):
";
echo $_POST["kleur_1"]."
";
echo $_POST["kleur_2"]."
";
echo $_POST["kleur_3"]."
";
echo $_POST["kleur_4"]."
";
echo "Over jezelf: ".$_POST["about"]."


";
}
?>

De if-voorwaarde die we schreven luidt: Als er een globale variabele $_POST["submit"] is, geven we de gegevens op het scherm weer. Deze globale variabele wordt aangemaakt als we op de knop Verzenden klikken. Daarom is in dit voorbeeld het attribuut name nodig in de knop. Je vraagt ​​je misschien af ​​waarom het naamattribuut van de knop optioneel is? Het is heel eenvoudig. Normaal gesproken controleert de programmeur niet de druk op de knop, maar controleert hij eerder de verzonden gegevens. Voor een correcte werking van bijvoorbeeld een contactformulier is het noodzakelijk om niet het klikken op een knop, maar de juistheid van de ingevulde gegevens bij te houden en na te gaan of deze gegevens überhaupt zijn ingevuld. In ons voorbeeld hebben we de verzonden gegevens niet gecontroleerd, maar hebben we eenvoudigweg de druk op de knop bijgehouden, om het voorbeeld te vereenvoudigen... Dit is wat we kregen:

Conclusie

Welnu, vandaag hebben we gekeken naar twee methoden voor het overbrengen van gegevens tussen scripts, en we hebben ook kennis gemaakt met formulieren. Ik hoop echt dat deze informatie op zijn minst ergens nuttig voor je zal zijn. Als u vragen of gedachten heeft, kunt u opmerkingen schrijven. Veel succes, dat is alles voor vandaag!

P.S.: Wil je dat computerspellen nog realistischer worden? directx 11 voor windows 7 kan gratis gedownload worden op windows in! Geniet van prachtige graphics!

van krijgen(9)

Wat is een 'minder code'-manier om parameters op te halen uit een URL-queryreeks die als volgt is opgemaakt?

www.mijnsite.com/category/subcategory?myqueryhash

De uitvoer zou moeten zijn: myqueryhash

Ik weet hiervan:

www.mijnsite.com/category/subcategory?q=mijnquery

Antwoorden

Deze code en notatie zijn niet van mij. Evan K lost een taak met meerdere waarden met dezelfde naam op met een door de gebruiker gedefinieerde functie;) afkomstig van:

Het bovenstaande voorbeeld levert het volgende op:

Hallo Hannes!

Als u de volledige queryreeks wilt ophalen:

$_SERVER["QUERY_STRING"]

Als u bovendien naar de huidige bestandsnaam zoekt samen met de queryreeks, heeft u alleen het volgende nodig

Basisnaam($_SERVER["REQUEST_URI"])

Dit geeft u informatie zoals in het volgende voorbeeld

bestand.php? arg1 = waarde & arg2 = waarde

En als je ook het volledige pad naar het bestand nodig hebt, beginnend bij de root, zoals /folder/folder2/file.php?arg1=val&arg2=val, verwijder dan gewoon de functie basename() en gebruik gewoon overlay

$_SERVER["REQUEST_URI"]

Bedankt @K. Shahzad Dit helpt als u de queryreeks wilt herschrijven zonder enige herschrijftoevoegingen. Laten we zeggen dat je /test/ herschrijft? X = y in index.php? Q = test & x = y en je wilt de queryreeks ophalen.

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

De PHP-manier om dit te doen is door de functie te gebruiken parse_url, dat een URL parseert en de componenten ervan retourneert. Inclusief de querytekenreeks.

$url = "www.mijnsite.com/categorie/subcategorie?mijnqueryhash"; echo parse_url($url, PHP_URL_QUERY); # uitvoer "myqueryhash"

Hier is mijn functie om onderdelen te herstellen lijnen verzoek VERWIJZER .

Als de oproepende pagina al een eigen querystring had en u naar die pagina moet terugkeren en enkele, niet alle, van die $_GET vars (bijvoorbeeld paginanummer) wilt verzenden.

Voorbeeld: de verwijzingsqueryreeks was?foo=1&bar=2&baz=3, waarbij refererQueryString("foo" , "baz") wordt aangeroepen, retourneert foo=1&baz=3" :

Functie refererQueryString(/* var args */) ( //Retourneer een lege tekenreeks als er geen referer of geen $_GET vars in referer beschikbaar is: if (!isset($_SERVER["HTTP_REFERER"]) || empty($_SERVER["HTTP_REFERER " "]) ||. empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) ( return ""; ) // Haal URL-query op van referer (zoiets als "threadID=7&page=8") $refererQueryString = parse_url ( urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Welke waarden wil je extraheren als variabelen.) $args = func_get_args(); of referer" s URL: $pairs = explode("&",$refererQueryString); //String die je later terugkrijgt: $return = ""; //Analyseer opgehaalde strings en zoek naar de strings die van belang zijn: foreach ($pairs as $pair) ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Als u de naam als arg hebt doorgegeven, koppelt u het huidige paar om terug te keren string: if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Hier zijn de geretourneerde "key=value"-paren aan elkaar gelijmd met " &": return ltrim($return,"&"); ) //Als uw referer "page.php?foo=1&bar=2&baz=3" was //en u wilt header() terug naar "page.php?foo=1&baz=3" //(geen "bar", alleen foo en baz), pas dan toe: header("Location: page.php?".refererQueryString("foo","baz"));

Microsoft-ondersteuning stelt: "De maximale URL-lengte is 2083 tekens in Internet Explorer."

IE heeft al langer problemen met URL's. Firefox lijkt prima te werken met >4k-tekens.