Php makuha ang lahat ng makakuha ng mga parameter. Mga panlabas na variable (mga variable sa labas ng PHP). Pagpasa ng mga Variable sa PHP Gamit ang POST Method

Ang unang paraan para magsagawa ng PHP POST na kahilingan ay ang paggamit ng file_get_contents . Ang pangalawang paraan ay gagamit ng fread kasama ng ilang iba pang mga function. Ginagamit ng parehong opsyon ang stream_context_create function upang punan ang mga kinakailangang field ng header ng kahilingan.

Paliwanag ng Code

Ang $sPD variable ay naglalaman ng data na ililipat. Dapat ito ay nasa HTTP request string format, kaya dapat na naka-encode ang ilang espesyal na character.

Sa parehong file_get_contents function at fread function mayroon kaming dalawang bagong parameter. Ang una ay use_include_path . Dahil gumagawa kami ng HTTP na kahilingan, magiging mali ito sa parehong mga halimbawa. Kapag nakatakda sa true para magbasa ng lokal na mapagkukunan, hahanapin ng function ang file sa include_path .

Ang pangalawang parameter ay konteksto, na nilagyan ng return value ng stream_context_create, na kumukuha ng value ng $aHTTP array.

Paggamit ng file_get_contents upang gumawa ng mga kahilingan sa POST

Upang magpadala ng POST na kahilingan gamit ang file_get_contents sa PHP, kailangan mong gumamit ng stream_context_create upang manu-manong punan ang mga field ng header at tukuyin kung aling "wrapper" ang gagamitin - sa kasong ito HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "pangalan=Jacob&bench=150"; // POST data $aHTTP = array("http" => // Wrapper na gagamitin array("method" => "POST", // Request method // Request header are set below "header" => "Content - uri: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create ($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $contents;

Paggamit ng fread upang magsagawa ng mga kahilingan sa POST

Maaari mong gamitin ang function ng fread upang gumawa ng mga kahilingan sa POST. Ang sumusunod na halimbawa ay gumagamit ng stream_context_create upang mabuo ang kinakailangang mga header ng kahilingan sa HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "pangalan=Jacob&bench=150"; // POST data $aHTTP = array("http" => // Wrapper na gagamitin array("paraan" => "POST", // Paraan ng Kahilingan // Ang mga header ng kahilingan ay nakatakda sa ibaba ng "header" => "Nilalaman - uri: application/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create ($aHTTP); $handle = fopen($sURL, "r", false, $context); $contents = ""; habang (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $contents;

Gumagawa ng GET Requests gamit ang PHP

Magtutuon na tayo ngayon sa paggamit ng fread at file_get_contents upang mag-download ng nilalaman mula sa internet sa pamamagitan ng HTTP at HTTPS. Upang magamit ang mga pamamaraang inilarawan sa artikulong ito, dapat mong paganahin ang opsyong fopen wrappers. Upang gawin ito, kailangan mong itakda ang allow_url_fopen parameter sa On sa php.ini file.

Ang pagsasagawa ng mga kahilingan sa POST at GET sa PHP ay ginagamit upang mag-log in sa mga website, kunin ang nilalaman ng web page, o suriin para sa mga bagong bersyon ng mga application. Tatalakayin namin kung paano gumawa ng mga simpleng kahilingan sa HTTP.

Paggamit ng fread upang mag-download o tumanggap ng mga file sa Internet

Tandaan na ang pagbabasa ng web page ay limitado sa naa-access na bahagi ng packet. Kaya kailangan mong gamitin ang stream_get_contents function (katulad ng file_get_contents ) o isang while loop para basahin ang content sa mas maliliit na chunks hanggang sa maabot ang dulo ng file:

Sa kasong ito ng pagproseso ng PHP POST na kahilingan, ang huling argumento ng fread function ay katumbas ng laki ng fragment. Bilang panuntunan, hindi ito dapat mas malaki sa 8192 (8*1024).

mula sa pagkuha (9)

Ano ang isang "mas kaunting code" na paraan upang makakuha ng mga parameter mula sa isang string ng query ng URL na naka-format tulad nito?

www.mysite.com/category/subcategory?myqueryhash

Ang output ay dapat na: myqueryhash

Alam ko ang tungkol dito:

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

Mga sagot

Ang code at notation na ito ay hindi akin. Niresolba ni Evan K ang isang multi-valued na trabaho na may parehong pangalan gamit ang function na tinukoy ng user;) na kinuha mula sa:

Ang halimbawa sa itaas ay naglalabas:

Hello Hannes!

Kung gusto mong makuha ang buong string ng query:

$_SERVER["QUERY_STRING"]

Gayundin, kung hinahanap mo ang kasalukuyang filename kasama ang string ng query, kailangan mo lang ang sumusunod

Basename($_SERVER["REQUEST_URI"])

Bibigyan ka nito ng impormasyon tulad ng sumusunod na halimbawa

file.php? arg1 = halaga at arg2 = halaga

At kung kailangan mo rin ang buong landas sa file simula sa ugat tulad ng /folder/folder2/file.php?arg1=val&arg2=val pagkatapos ay tanggalin lamang ang basename() function at gumamit lamang ng overlay

$_SERVER["REQUEST_URI"]

Salamat @K. Shahzad Nakakatulong ito kapag gusto mong muling isulat ang string ng query nang walang anumang muling pagdaragdag. Sabihin nating muling isinulat mo ang /test/? X = y sa index.php? Q = test & x = y at gusto mong makuha ang query string.

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

Ang PHP na paraan para gawin ito ay ang paggamit ng parse_url function, na nag-parse ng URL at nagbabalik ng mga bahagi nito. Kasama ang string ng query.

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

Narito ang aking function upang mabawi ang mga bahagi ng REFERRER query string.

Kung ang page sa pagtawag ay mayroon nang sariling string ng query , at kailangan mong bumalik sa page na iyon at gusto mong magpadala ng ilan, hindi lahat, sa mga $_GET vars na iyon (hal. page number).

Halimbawa: ang string ng query ng Referrer ay?foo=1&bar=2&baz=3 na tumatawag sa refererQueryString("foo" , "baz") ay nagbabalik foo=1&baz=3" :

Function refererQueryString(/* var args */) ( //Ibalik ang walang laman na string kung walang referer o walang $_GET vars sa referer na available: kung (!isset($_SERVER["HTTP_REFERER"]) || empty ($_SERVER["HTTP_REFERER " "]) || empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) ( return ""; ) //Kumuha ng URL query ng referer (tulad ng "threadID=7&page=8") $refererQueryString = parse_url ( urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Aling mga value ang gusto mong i-extract? (Ipinasa mo ang kanilang mga pangalan bilang mga variable.) $args = func_get_args(); //Kunin ang mga string ng "" ng referer" s URL: $pairs = explode("&",$refererQueryString); //String na ibabalik mo mamaya: $return = ""; //Suriin ang mga nakuhang string at hanapin ang mga interesado: foreach ($pairs bilang $pair ) ($keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Kung ipinasa mo ang pangalan bilang arg, ilakip ang kasalukuyang pares upang ibalik ang string : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Narito ang iyong ibinalik na "key=value" na mga pares na nakadikit sa "& ": return ltrim($return,"&"); ) //Kung ang iyong referer ay "page.php?foo=1&bar=2&baz=3" //at gusto mong i-header() pabalik sa "page.php?foo=1&baz=3" //(walang "bar", foo at baz lang), pagkatapos ay ilapat ang: header("Lokasyon: page.php?".refererQueryString("foo","baz"));

Nakasaad sa Suporta ng Microsoft: "Ang maximum na haba ng URL ay 2083 character sa Internet Explorer."

Matagal nang nagkakaroon ng mga problema ang IE sa mga URL. Mukhang gumagana nang maayos ang Firefox sa >4k na character.

Ang web programming para sa karamihan ay ang pagproseso lamang ng iba't ibang data na ipinasok ng user - ibig sabihin, pagproseso ng mga HTML form.
Malamang na walang ibang wika tulad ng PHP na magpapadali sa gawain ng pagproseso at pag-parse para sa iyo, i.e. mga variable na nagmula sa (mula sa browser ng gumagamit). Ang katotohanan ay ang lahat ng kinakailangang mga kakayahan ay binuo sa wikang PHP, kaya hindi mo na kailangang isipin ang tungkol sa mga tampok ng HTTP protocol at isipin kung paano magpadala at tumanggap ng mga POST form o kahit na mag-download ng mga file. Ang mga developer ng PHP ay may ibinigay para sa lahat.

Dito hindi kami magtatagal nang detalyado sa mekanismo ng HTTP protocol, na responsable para sa paghahatid ng data mula sa browser patungo sa server at pabalik; isang espesyal na seksyon ang nakatuon sa PHP at HTTP na ito. Ang mga prinsipyo ng pagtatrabaho sa mga form ng HTML ay tinalakay din nang malalim.

Ngayon ay isasaalang-alang natin ang mga mekanismong ito lamang mula sa isang inilapat na punto ng view, nang hindi nagsusuri sa teorya.

Upang makatanggap ng data mula sa mga user, kailangan namin ng interactive na pakikipag-ugnayan sa kanila.

Ngayon subukan nating magsulat ng script na kumukuha ng username bilang mga parameter at output:

"Kamusta, !".

Una, tingnan natin ang pinakasimpleng paraan upang maipasa ang isang pangalan sa isang script - direktang i-type ito sa URL pagkatapos ng ? - halimbawa, sa format name=name . Narito ang isang halimbawa:

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

Kailangang kilalanin ng aming script ang parameter ng pangalan. Iyon ay, upang ilagay ito nang simple, dapat tanggapin ng script (script) ang parameter ng pangalan sa anyo ng variable ng pangalan, at pagkatapos ay ipakita ang string na "Hello, !" sa browser ng user. Magagawa mo ito sa ganitong paraan:

Sumulat kami ng script na kumukuha ng parameter ng pangalan at ipinapakita ang resulta sa browser ng user, at pagkatapos ay ise-save ito sa ilalim ng pangalang script.php:

Sa aming halimbawa, ginamit namin ang paunang natukoy na variable na $_GET["name"] upang "matanggap" ang parameter ng pangalan. Ngayon, sa pamamagitan ng pagpasa ng parameter name=Sasha sa pamamagitan ng isang kahilingan sa GET, makukuha natin ang sumusunod na resulta:

Hello Sasha!

Ngayon subukan nating ipasa ang parameter ng pangalan hindi mula sa string ng query ng browser, ngunit sa pamamagitan ng HTML form. Lumilikha kami ng isang HTML na dokumento na may sumusunod na nilalaman:


Pangalan:

Ngayon, i-save natin ang HTML na dokumentong ito sa aming test server (localhost) sa ilalim ng pangalang send.html sa parehong direktoryo kung saan na-save na namin ang script.php script.

Ngayon inilunsad namin ang HTML na dokumento sa browser:

http://localhost/send.html

Ipasok ang pangalan sa field at pindutin ang "GO!" na buton. Ipapasa ng form ang parameter ng pangalan sa aming script script.php sa pamamagitan ng kahilingan sa GET. Kung ginawa mo nang tama ang lahat at gumagana nang normal ang iyong web server, makikita mo ang pangalan na iyong inilagay sa field ng form! Sa address bar ng browser makikita mo ang path at ang parameter ng pangalan na iyong naipasa.

Ngayon ay kailangan nating maunawaan kung paano tayo makapasa ng maraming parameter, kahit dalawa lang sa simula.

Kaya, kailangan namin ang script upang i-output ang sumusunod:

"Hello! Matanda ka na!"

Ibig sabihin, kailangan nating ipasa ang 2 parameter sa script: pangalan at edad.

Ngayon ay magsusulat kami ng script.php na tumatagal ng dalawang parameter: pangalan at edad, pati na rin ang HTML na dokumento na may form na magpapasa sa dalawang parameter na ito sa aming bagong script:

At narito ang HTML na dokumento na send.html, kung saan ipapasa namin ang mga parameter ng pangalan at edad sa aming script:



Ilagay ang iyong pangalan:

Ilagay ang edad:



Ngayon ang aming script ay tumatagal ng dalawang parameter na pangalan at edad at ipinapakita ang resulta sa browser sa format na: "Hello,! Matanda ka na ba!"

Bigyang-pansin ang address bar ng browser pagkatapos ipasa ang mga parameter sa script, magiging ganito ang hitsura nito (nang walang pag-encode ng Cyrillic URL):

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

Depende sa iyong mga setting ng interpreter, mayroong ilang mga paraan upang ma-access ang data mula sa iyong mga HTML form. Narito ang ilang halimbawa:

//Sa form, gamit ang get method, ipinapadala namin ang value 1 sa pamamagitan ng hidden field Magpadala ng kahilingan

get.php file

Php request post

Ang hiling na Php post ay ipinapadala din sa pamamagitan ng isang form, tanging ang katangian sa tag ng form ay magiging method="post" . At matatanggap namin ang data sa tinukoy na file mula sa post na $_POST["search"] array at agad na magbibigay ng halimbawa.

Gawain: magpadala ng data mula sa index.php gamit ang POST method sa server sa get.php file at tanggapin ito pabalik, kung walang laman ang field ng pagpapadala ng data, magpakita ng mensahe tungkol sa walang laman na field. Simulan natin ang solusyon sa index.php

Query sa paghahanap

Punan ang field ng kahilingan

Naglagay ng query:

Magpadala ng kahilingan

get.php file

AJAX Array Passing

Gawin natin ang parehong gawain gamit ang ajax. Sa totoo lang, ang ajax ay isang teknolohiyang nauugnay sa javascript, ngunit bilang bahagi ng tala sa paglilipat ng data sa server, hahawakan din namin ang teknolohiyang ito. Siyempre, ang ajax ay isang paksa para sa isang hiwalay na artikulo. Sa panahon ng proseso ng paghiling, magpapakita rin kami ng gif ng indicator ng paglo-load. Mayroon din kaming dalawang file na index.php at get.php. Index.php file. Huwag kalimutang ikonekta ang jquery. Pakitandaan na para itago ang gif kapag unang nag-load ang page, italaga ang style display: wala sa box block

$(document).ready(function())( //nagkabit kami ng event sa submit button $(".submit").click(function())( $.ajax(( //paano namin ililipat ang data type : "GET", / /kung saan namin ipinapasa ang url: "get.php", //anong data ang ipinapasa namin ng data: (flag: 1), //kaganapan bago magpadala ng ajax beforeSend: function())( //magpakita ng gif $(".box").show( ); ), //kaganapan pagkatapos makatanggap ng tugon, //makakuha ng array sa tagumpay ng data: function(data)( //itago ang gif $(".box").itago (); var html = ""; //f-i JSON.parse nagsasalin ng data ng json sa isang object var dt=JSON.parse(data); para sa (var i = 0; i

Ang get.php file. Nakatanggap kami ng data mula sa get array papunta sa file at ipinapasa ang array mula php hanggang javascript. Upang maipasa ang isang array sa php sa js, kailangan itong i-convert sa format na json. Upang gawin ito, ginagamit namin ang php function na json_encode. Pagkatapos ng recoding, ang json ay ipinadala sa pamamagitan ng php means, partikular na ang pagtawag sa echo.

Mayroon akong istraktura ng URL na may string ng query at isang parameter na tinatawag na posisyon.

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

Mayroon din akong dropdown na piliin ang form na may posisyong piliin ang pangalan ng form.

Piliin ang Occupation Administrator Piliin ang Posisyon Network Administrator

Kapag pumili ang user, ipinapadala nito ang mga value ng parameter sa attribute ng aksyon na may select name="position" bilang parameter na gagamitin sa query string.

Ang tanong ko ay paano ko maa-access ang mga halaga ng pagpili ng form nang hiwalay mula sa mga halaga ng string ng query?

Gumagamit ako ng _GET na paraan upang tumawag ng isang halaga mula sa isang query string parameter.

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

Malinaw na nakukuha nito ang halaga nito mula sa istraktura ng URL, hindi sa elemento ng form. O baka naman, hindi sigurado. Ngunit sa pagsubok nito, tila ako ay dumating sa konklusyon na ito ay nakukuha ito sa pamamagitan ng URL at hindi sa pamamagitan ng form.

Paano ko maa-access ang piling halaga ng form kapag naghahambing sa aking PHP?

Update

Mayroon akong problema sa canonical URL na tinukoy sa header.

Ganyan dapat

ang pagkakaiba lang ay ang - at + sa query string.

Hindi lahat ng aking query string ay may +. Meron ang iba -. Ngunit nagpapakita ako ng nilalaman sa parehong mga URL, hindi alintana kung mayroon itong - o +. Sa alinmang paraan, ang parehong mga URL ay tumatanggap ng parehong nilalaman ng pahina.

Ngunit dahil dynamic na nilikha ang canonical mula sa URI at hindi mula sa value ng elemento ng form, mayroong 2 magkaibang canonical na character sa parehong pahina ng nilalaman.

Ang paggamit ng _Get('value') ay kinukuha ang value mula sa query string sa halip na ang form na elemento. Alam ko ito dahil ang halaga ng elemento ng form ay may puwang sa pagitan ng administrator ng network na urlencoded kapag isinumite ang form bilang network+administrator. Kaya kung maikukumpara ko ang halaga ng elemento ng form, maaari kong itakda ang tamang kanonikal.