Php få alle få parametere. Eksterne variabler (variabler utenfor PHP). Sende variabler til PHP ved å bruke POST-metoden

Den første metoden for å utføre en PHP POST-forespørsel er å bruke file_get_contents . Den andre metoden vil bruke fread i kombinasjon med et par andre funksjoner. Begge alternativene bruker stream_context_create-funksjonen for å fylle ut de nødvendige forespørselshodefeltene.

Kodeforklaring

$sPD-variabelen inneholder dataene som skal overføres. Den må være i HTTP-forespørselsstrengformat, så noen spesialtegn må kodes.

I både file_get_contents-funksjonen og fread-funksjonen har vi to nye parametere. Den første er use_include_path . Siden vi lager en HTTP-forespørsel, vil den være usann i begge eksemplene. Når satt til sann for å lese en lokal ressurs, vil funksjonen se etter filen på include_path .

Den andre parameteren er kontekst, som er fylt ut med returverdien til stream_context_create, som tar verdien til $aHTTP-matrisen.

Bruker file_get_contents til å lage POST-forespørsler

For å sende en POST-forespørsel ved å bruke file_get_contents i PHP, må du bruke stream_context_create for å manuelt fylle ut overskriftsfeltene og spesifisere hvilken "wrapper" som skal brukes - i dette tilfellet HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "navn=Jacob&bench=150"; // POST-data $aHTTP = array("http" => // Wrapper som vil bli brukt array("method" => "POST", // Request method // Request header er satt under "header" => "Innhold - type: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); ekko $innhold;

Bruker fread til å lage POST-forespørsler

Du kan bruke fread-funksjonen til å lage POST-forespørsler. Følgende eksempel bruker stream_context_create til å komponere de nødvendige HTTP-forespørselshodene:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "navn=Jacob&bench=150"; // POST-data $aHTTP = array("http" => // Wrapper som vil bli brukt array("method" => "POST", // Forespørselsmetode // Forespørselshoder er satt under "header" => "Innhold - type: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", falsk, $kontekst); $contents = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); ekko $innhold;

Gjør GET-forespørsler med PHP

Vi vil nå fokusere på å bruke fread og file_get_contents for å laste ned innhold fra internett via HTTP og HTTPS. For å bruke metodene som er beskrevet i denne artikkelen, må du aktivere alternativet fopen wrappers. For å gjøre dette må du sette parameteren allow_url_fopen til On i php.ini-filen.

Å utføre POST- og GET-forespørsler i PHP brukes til å logge på nettsteder, hente innhold på nettsider eller se etter nye versjoner av applikasjoner. Vi vil dekke hvordan du lager enkle HTTP-forespørsler.

Bruke fread til å laste ned eller motta filer over Internett

Husk at lesing av nettsider er begrenset til den tilgjengelige delen av pakken. Så du må bruke stream_get_contents-funksjonen (lik file_get_contents ) eller en while-løkke for å lese innholdet i mindre biter til slutten av filen er nådd:

I dette tilfellet med å behandle en PHP POST-forespørsel, er det siste argumentet til fread-funksjonen lik fragmentstørrelsen. Som regel bør den ikke være større enn 8192 (8*1024).

fra get(9)

Hva er en "mindre kode" måte å hente parametere fra en URL-spørringsstreng som er formatert slik?

www.mysite.com/category/subcategory?myqueryhash

Utdataene skal være: myqueryhash

Jeg vet om det:

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

Svar

Denne koden og notasjonen er ikke min. Evan K løser en jobb med flere verdier med samme navn med en brukerdefinert funksjon;) hentet fra:

Eksempelet ovenfor gir ut:

Hei Hannes!

Hvis du vil ha hele søkestrengen:

$_SERVER["QUERY_STRING"]

Også, hvis du leter etter det gjeldende filnavnet sammen med søkestrengen, trenger du bare følgende

Basenavn($_SERVER["REQUEST_URI"])

Dette vil gi deg informasjon som følgende eksempel

fil.php? arg1 = verdi & arg2 = verdi

Og hvis du også trenger den fullstendige banen til filen som starter fra roten som /folder/folder2/file.php?arg1=val&arg2=val, så fjern bare basename()-funksjonen og bruk overlegg

$_SERVER["REQUEST_URI"]

Takk @K. Shahzad Dette hjelper når du vil omskrive spørringsstrengen uten noen omskrivningstilføyelser. La oss si at du omskriver /test/? X = y i index.php? Q = test & x = y og du vil hente spørringsstrengen.

Funksjon get_query_string())( $arr = eksplodere("?",$_SERVER["REQUEST_URI"]); if (count($arr) == 2)( returner ""; )else( returner "?".end( $ arr)."
"; ) ) $query_string = get_query_string();

PHP-måten å gjøre dette på er å bruke funksjonen parse_url, som analyserer en URL og returnerer dens komponenter. Inkludert spørringsstrengen.

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

Her er min funksjon for å gjenopprette deler av REFERRER-spørrestrengen.

Hvis anropssiden allerede hadde en spørringsstreng i sin egen , og du må gå tilbake til den siden og vil sende noen, ikke alle, av disse $_GET vars (f.eks. sidenummer).

Eksempel: Referrer-spørringsstrengen was?foo=1&bar=2&baz=3 kaller refererQueryString("foo" , "baz") returnerer foo=1&baz=3" :

Funksjon refererQueryString(/* var args */) ( //Return tom streng hvis ingen referer eller ingen $_GET vars i referer tilgjengelig: if (!isset($_SERVER["HTTP_REFERER"]) || empty($_SERVER["HTTP_REFERER " "]) || empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) (retur ""; ) //Få URL-spørring til referer (noe sånt som "threadID=7&page=8") $refererQueryString = parse_url ( urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Hvilke verdier vil du trekke ut? (Du sendte navnene deres som variabler.) $args = func_get_args(); //Få ""-strenger ut av referer" s URL: $pairs = explode("&",$refererQueryString); //String du vil returnere senere: $return = ""; //Analyser hentede strenger og se etter de av interesse: foreach ($pairs) som $pair ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Hvis du sendte navnet som arg, legg ved gjeldende par for å returnere streng : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Her er dine returnerte "key=value"-par limt sammen med "& ": return ltrim($return,"&"); ) //Hvis refereren din var "page.php?foo=1&bar=2&baz=3" //og du vil header() tilbake til "page.php?foo=1&baz=3" //(ingen "bar", bare foo og baz), og bruk deretter: header("Location: page.php?".refererQueryString("foo","baz"));

Microsoft Support sier: "Maksimal URL-lengde er 2083 tegn i Internet Explorer."

IE har hatt problemer med URL-er i lengre tid. Firefox ser ut til å fungere fint med >4k tegn.

Nettprogrammering er for det meste bare behandlingen av forskjellige data som er lagt inn av brukeren - det vil si å behandle HTML-skjemaer.
Det er sannsynligvis ikke noe annet språk som PHP som vil gjøre oppgaven med å behandle og analysere så mye enklere for deg, dvs. variabler som kom fra (fra brukerens nettleser). Faktum er at alle nødvendige funksjoner er innebygd i PHP-språket, slik at du ikke engang trenger å tenke på funksjonene til HTTP-protokollen og tenke på hvordan du sender og mottar POST-skjemaer eller til og med laster ned filer. PHP-utviklerne har sørget for alt.

Her vil vi ikke dvele i detalj på mekanismen til HTTP-protokollen, som er ansvarlig for å levere data fra nettleseren til serveren og tilbake; en spesiell seksjon er viet til denne PHP og HTTP. Prinsippene for arbeid med HTML-skjemaer diskuteres også i dybden.

Nå vil vi vurdere disse mekanismene bare fra et anvendt synspunkt, uten å gå i dybden med teori.

For å motta data fra brukere trenger vi interaktiv interaksjon med dem.

La oss nå prøve å skrive et skript som tar et brukernavn som parametere og utdata:

"Hallo, !".

La oss først se på den enkleste måten å sende et navn til et skript på - ved å skrive det direkte i URL-en etter ? - for eksempel i formatet navn=navn . Her er et eksempel:

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

Skriptet vårt må gjenkjenne navneparameteren. Det vil si, for å si det enkelt, skriptet (skriptet) må godta navneparameteren i form av navnevariabelen, og deretter vise strengen "Hei, !" i brukerens nettleser. Du kan gjøre det på denne måten:

Vi skriver et skript som tar navneparameteren og viser resultatet i brukerens nettleser, og lagrer det deretter under navnet script.php:

I vårt eksempel brukte vi den forhåndsdefinerte variabelen $_GET["navn"] for å "motta" navneparameteren. Nå, ved å sende parameteren name=Sasha via en GET-forespørsel, vil vi få følgende resultat:

Hei Sasha!

La oss nå prøve å sende navneparameteren ikke fra nettleserens spørringsstreng, men gjennom et HTML-skjema. Vi lager et HTML-dokument med følgende innhold:


Navn:

La oss nå lagre dette HTML-dokumentet på vår testserver (localhost) under navnet send.html i samme katalog der vi allerede lagret script.php-skriptet.

Nå starter vi HTML-dokumentet i nettleseren:

http://localhost/send.html

Skriv inn navnet i feltet og trykk på "GO!"-knappen. Skjemaet vil sende navneparameteren til vårt script script.php via en GET-forespørsel. Hvis du gjorde alt riktig og webserveren din fungerer normalt, vil du se navnet du skrev inn i skjemafeltet! I nettleserens adresselinje vil du se banen og navneparameteren du passerte.

Nå må vi forstå hvordan vi kan passere mange parametere, minst to til å begynne med.

Så vi trenger skriptet for å sende ut følgende:

"Hei! Du er gammel!"

Det vil si at vi må sende 2 parametere til skriptet: navn og alder.

Nå skal vi skrive et script.php som tar to parametere: navn og alder, samt et HTML-dokument med et skjema som sender disse to parameterne til vårt nye skript:

Og her er HTML-dokumentet send.html, som vi sender navn og aldersparametre til skriptet vårt:



Skriv inn navnet ditt:

Angi alder:



Nå tar skriptet vårt to parametere navn og alder og viser resultatet i nettleseren i formatet: "Hei! Er du gammel!"

Vær oppmerksom på nettleserens adresselinje etter å ha sendt parametrene til skriptet, det vil se omtrent slik ut (uten kyrillisk URL-koding):

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

Avhengig av tolkeinnstillingene dine, er det flere måter å få tilgang til data fra HTML-skjemaene dine på. Her er noen eksempler:

//I skjemaet, ved hjelp av get-metoden, sender vi verdien 1 gjennom et skjult felt Send en forespørsel

get.php-fil

Php forespørsel innlegg

Php-postforespørselen sendes også gjennom et skjema, kun attributtet i form-taggen vil være method="post" . Og vi vil motta dataene i den angitte filen fra post $_POST["søk"]-arrayen og umiddelbart gi et eksempel.

Oppgave: send data fra index.php ved å bruke POST-metoden til serveren i get.php-filen og motta den tilbake, hvis datasendingsfeltet er tomt, vis en melding om det tomme feltet. La oss starte løsningen med index.php

Søkeord

Fyll ut forespørselsfeltet

Oppgitt forespørsel:

Send forespørsel

get.php-fil

AJAX Array Passing

La oss utføre den samme oppgaven med ajax. Egentlig er ajax en teknologi relatert til javascript, men som en del av notatet om overføring av data til serveren vil vi også berøre denne teknologien. Selvfølgelig er ajax et tema for en egen artikkel. Under forespørselsprosessen vil vi også vise en gif av lasteindikatoren. Vi har også to filer index.php og get.php. Index.php-fil. Ikke glem å koble til jquery. Vær oppmerksom på at for å skjule gif-en når siden først lastes, tilordne stilvisningen: ingen til boksblokken

$(document).ready(function())( //vi legger ved en hendelse til send-knappen $(".submit").click(function())( $.ajax(( //hvordan vi vil overføre datatype : "GET", / /hvor vi sender url: "get.php", //hvilke data vi sender data: (flagg: 1), //hendelse før sending av ajax førSend: function())( //vis en gif $(".box").show( ); ), //hendelse etter å ha mottatt et svar, //få en array i data suksess: function(data)( //hide the gif $(".box").hide (); var html = ""; //f- i JSON.parse oversetter json-data til et objekt var dt=JSON.parse(data); for (var i = 0; i

Get.php-filen. Vi mottar data fra get-matrisen inn i filen og sender matrisen fra php til javascript. For å sende en matrise til php til js, må den konverteres til json-format. For å gjøre dette bruker vi php-funksjonen json_encode. Etter omkoding sendes json via php-midler, spesifikt kaller echo.

Jeg har en URL-struktur med en spørringsstreng og en parameter kalt posisjon.

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

Jeg har også en rullegardinmeny for skjemavelg med posisjonen for skjemavelg navn.

Velg Yrke Administrator Velg Stilling Nettverksadministrator

Når brukeren gjør et valg, sender den parameterverdiene til handlingsattributtet med select name="posisjon" som parameteren som skal brukes i spørringsstrengen.

Spørsmålet mitt er hvordan får jeg tilgang til skjemavalgverdiene separat fra spørrestrengverdiene?

Jeg bruker metoden _GET for å kalle en verdi fra en spørringsstrengparameter.

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

Dette får åpenbart verdien fra URL-strukturen, ikke skjemaelementet. Eller kanskje det er det, ikke sikker. Men ved å teste det, ser det ut til at jeg har kommet til den konklusjonen at den får den via URL og ikke etter form.

Hvordan får jeg tilgang til skjemaets valgverdi når jeg sammenligner i PHP?

Oppdater

Jeg har et problem med den kanoniske URL-adressen som er angitt i overskriften.

Det er slik det skal være

den eneste forskjellen er - og + i søkestrengen.

Ikke alle søkestrengene mine har +. Noen har -. Men jeg viser innhold på begge nettadressene, uavhengig av om det har en - eller +. Uansett mottar begge nettadressene det samme sideinnholdet.

Men siden det kanoniske er opprettet dynamisk fra URIen og ikke fra verdien til skjemaelementet, er det 2 forskjellige kanoniske tegn på begge innholdssidene.

Bruk av _Get('verdi') henter verdien fra spørringsstrengen i stedet for skjemaelementet. Jeg vet dette fordi skjemaelementverdien har et mellomrom mellom nettverksadministrator som blir urlenkodet når skjemaet sendes inn som nettverk+administrator.Så hvis jeg kan sammenligne med skjemaelementverdien kan jeg sette den korrekte kanoniske.