Vigezo kutoka kwa ombi la kupata php. Kujifunza kufanya kazi na GET na maombi ya POST. Kufanya Maombi ya GET na PHP

Nina muundo wa URL na kamba ya hoja na parameta inayoitwa msimamo.

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

Pia nina menyu kunjuzi ya kuchagua na fomu select name position .

Mtumiaji anapofanya uteuzi, hutuma thamani za kigezo kwa sifa ya kitendo na kuchagua jina = "nafasi" kama kigezo cha kutumia kwenye kamba ya hoja.

Swali langu ni jinsi gani ninaweza kupata maadili ya uteuzi wa fomu kando na maadili ya kamba ya hoja?

Ninatumia njia ya _GET kuita thamani kutoka kwa kigezo cha kamba ya hoja.

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

Ni wazi kwamba hii inapata thamani yake kutoka kwa muundo wa URL, sio kipengele cha fomu. Au labda ni, sina uhakika. Lakini kuipima, inaonekana nimefikia hitimisho kwamba inaipata kwa URL na sio kwa fomu.

Ninawezaje kupata thamani iliyochaguliwa ya fomu wakati nikilinganisha katika PHP yangu?

Sasisha

Nina shida na URL ya kisheria iliyoainishwa kwenye kichwa.

Hivyo ndivyo inavyopaswa kuwa

tofauti pekee ni - na + kwenye kamba ya hoja.

Sio kamba zangu zote za hoja zina +. Baadhi wana -. Lakini ninaonyesha yaliyomo kwenye URL zote mbili, bila kujali ikiwa ina - au +. Vyovyote vile, URL zote mbili hupokea maudhui ya ukurasa sawa.

Lakini kwa kuwa kanuni imeundwa kwa nguvu kutoka kwa URI na sio kutoka kwa thamani ya kipengele cha fomu, kuna herufi 2 tofauti za kisheria kwenye kurasa zote za maudhui.

Kutumia _Get('value') hurejesha thamani kutoka kwa kamba ya hoja badala ya kipengele cha fomu. Ninajua hili kwa sababu thamani ya kipengele cha fomu ina nafasi kati ya msimamizi wa mtandao ambayo hupata msimbo fomu inapowasilisha kama network+administrator . Kwa hivyo nikiweza kulinganisha na thamani ya kipengele cha fomu naweza kuweka ile sahihi ya kisheria.

Kwa hivyo, tunaendelea tena kusoma misingi ya PHP na katika nakala hii tutafahamiana na njia za kupitisha anuwai katika PHP, ambayo ni pamoja na. Mbinu za GET na POST. Kila mmoja wao ana faida na hasara zake, na hutumiwa katika hali zinazofaa, ambazo zitajadiliwa katika makala hii. Pia tutaangalia mifano ya misimbo inayoonyesha jinsi mbinu za POST na GET zinavyofanya kazi.

Kupitisha Vigezo Kwa Kutumia Mbinu ya GET

Njia hii ya kupitisha tofauti hutumiwa katika PHP kupitisha vigeu kwenye faili kwa kutumia upau wa anwani. Hiyo ni, vigezo vinapitishwa mara moja kupitia bar ya anwani ya kivinjari. Mfano unaweza kuwa, kwa mfano, kiunga cha nakala katika WordPress bila kutumia CNC (SEF), ambayo inaonekana kama hii:

Https://site/?p=315

Hiyo ni, katika kesi hii, kutofautiana kwa $ p na thamani 315. Sasa hebu tuangalie njia ya GET kwa undani zaidi kwa kutumia mfano. Hebu tuseme tunahitaji kupitisha vigezo vitatu $a, $b na $c kwenye faili GET mbinu na kuonyesha jumla yao kwenye skrini. Unaweza kutumia nambari ifuatayo kwa hili.

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

Kwa kuwa vigezo vyote vitawekwa ndani safu ya kimataifa GET(), kisha tunapeana vigeu vyetu kwanza maadili ya vitu vinavyolingana vya safu ya GET. Tunafanya hivyo mwanzoni ili kuepuka makosa mbalimbali wakati wa kupitisha vigezo. Ifuatayo, ili kuonyesha kazi, tunaandika formula ya kiholela na kuonyesha matokeo kwenye skrini.

Ili kujaribu mbinu ya GET, ongeza tu alama ya kuuliza "?" kwenye kiungo cha faili. na kupitia ampersand "&" kuorodhesha vigezo na maadili yao. Wacha tuwe na faili pata.php, ambayo iko kwenye mzizi wa tovuti. Ili kuhamisha vigezo kwenye faili, andika tu zifuatazo kwenye upau wa anwani.

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

Kama unaweza kuona kutoka kwa mfano, kwanza tunaongeza alama ya swali mara baada ya jina la faili. Ifuatayo, tunasajili kutofautisha na kuonyesha thamani yake kwa kutumia sawa. Baada ya hayo, tunaorodhesha vigezo vingine kwa njia sawa kupitia ampersand. Sasa, tunapofuata kiungo hiki, tutaona jumla ya vigezo $a, $b na $c.

Njia hii ni rahisi sana na hauhitaji kuundwa kwa faili za ziada. Data zote muhimu huja moja kwa moja kupitia bar ya anwani ya kivinjari.

Kweli, sasa wacha tuendelee kwenye njia ya pili ya kupitisha anuwai katika PHP - kwa njia ya POST.

Kupitisha Vigeu kwa PHP Kwa Kutumia Njia ya POST

Njia hii inakuwezesha kuhamisha kwa siri vigezo kutoka faili moja hadi nyingine. Kama ulivyoelewa tayari, faili mbili kawaida hutumiwa kwa madhumuni haya. Ya kwanza ina fomu ya kuingiza data ya awali, na ya pili ina faili ya utendaji ambayo inakubali vigezo. Kwa maonyesho, hebu tuangalie nambari ifuatayo.

Msimbo wa faili ya kwanza iliyo na fomu ya kuwasilisha data. Hebu tupe jina post-1.php

  • hatua - taja faili ambayo vigezo vitahamishiwa.
  • njia - njia ya kupitisha vigezo. Kwa upande wetu, hii ndiyo njia ya POST.
  • jina - jina la fomu. Wakati huo huo, kutofautiana kwa jina moja kutahamishiwa kwenye faili.

Sehemu za maandishi:

  • jina - majina tofauti. Kwa upande wetu, hii ni jina la kwanza na la mwisho (jina na vigezo vya jina la mwisho).
  • aina - aina ya uwanja. Kwa upande wetu, hii ni uwanja wa maandishi.
  • jina - jina la kifungo na kutofautiana ambayo itapitishwa pamoja na vigezo vingine.
  • aina - aina ya kifungo. Kwa upande wetu, hii ni kifungo cha kutuma data.
  • thamani - maandishi kwenye kitufe.

Nambari ya faili ya pili, ambayo itatumika kama mpokeaji tofauti. Hebu tuite post-2.php

$jina = $_POST; $ jina la mwisho = $_POST; echo "Maadili ya vigezo vilivyopitishwa na njia ya POST ni $name na $lastname";

Kama ilivyo kwa njia ya GET, kwanza tunapeana maadili ya vitu vinavyolingana kwa anuwai safu ya kimataifaPOST. Ifuatayo, kwa uwazi, tunaonyesha vigezo hivi kwenye skrini kwa kutumia.

Sasa tunapopakia faili ya kwanza, fomu itapakia. Baada ya kuingiza data, bonyeza kitufe cha "Wasilisha", kama matokeo ambayo ukurasa ulio na faili ya pili utafungua kwenye kichupo kipya, ambacho kitaonyesha maadili yaliyoandikwa katika fomu kwenye ukurasa uliopita. Hiyo ni, maadili ya vigezo kutoka kwa faili ya kwanza yatahamishiwa kwenye faili ya pili.

Hii inahitimisha kifungu hiki kuhusu kupitisha vigeu katika PHP. Ikiwa hutaki kukosa kuonekana kwa makala nyingine kwenye blogu, napendekeza kujiandikisha kwenye jarida kwa njia yoyote rahisi katika sehemu ya "Usajili" au kutumia fomu hapa chini.

Ni hayo tu. Bahati nzuri na mafanikio katika kusimamia misingi ya PHP.

Huenda umegundua kuwa kwenye tovuti nyingi unaweza kuona anwani zifuatazo:

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

Hapa, hata bila kujua php, unaweza kukisia kuwa tunapata faili index.php Lakini watu wachache wanajua kinachokuja baada ya alama ya swali. Ni rahisi sana: ?blog=2 Hili ni tamko la tofauti ya kimataifa "$_GET["blog"]" yenye thamani "2". Kwa hivyo, mimi hupitisha kutofautisha kwenye hati ambayo inawajibika kwa kuonyesha habari kutoka kwa hifadhidata. Wacha tuandike hati ndogo ambayo unaweza kuona kila kitu wazi:

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

Tunatumia if() opereta wa hali na laini ifuatayo inatumika kama hali:

Isset($_GET["blog"])

isset() hukuruhusu kujua ikiwa utofauti uliobainishwa kwenye mabano upo, ambayo ni, hali ambayo nilielezea kwenye nambari inasikika kama hii: Ikiwa tofauti $_GET["blog"] ipo, basi onyesha yaliyomo kwenye utaftaji huu. kwenye skrini. Hiki ndicho kilichotokea:

Nadhani ni wazi Tofauti ya kimataifa imeundwa $_GET na kitambulisho ambacho tulitangaza kwenye upau wa anwani ( katika kesi hii na kitambulisho "blogi")

Sasa nataka kufafanua jambo moja. Tuseme tunahitaji kutangaza vigezo viwili, jinsi ya kufanya hivyo? Tofauti ya kwanza inatangazwa baada ya alama ya swali "?" Tofauti ya pili inatangazwa baada ya ishara "&" ( Kuwa waaminifu, sijui ishara hii ni nini), hapa kuna tamko la mfano la anuwai tatu:

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

Hapa kuna nambari ya pato:

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

Hali inasikika kama hii:

Ikiwa kuna tofauti ya kimataifa $_GET["a"] na lahaja ya kimataifa $_GET["b"] na lahaja ya kimataifa $_GET["c"] basi ionyeshe kwenye skrini., haya ndio matokeo:

Fomu

Kabla hatujafika chapisho maombi, unahitaji kuelewa ni fomu gani? Kwa nini ni lazima? Kwa sababu tofauti ya kimataifa $_POST[""] imeundwa kupitia fomu. Fomu ni nini? Hizi ni sehemu za mtumiaji kuingiza habari fulani. Kuna mashamba ya mstari mmoja, mashamba makubwa, na pia vifungo vya redio na masanduku ya kuangalia. Wacha tuchukue kila kitu kwa mpangilio ...

Fomu ni lebo:


vipengele vya fomu

Fomu ina sifa, nitaorodhesha zile za kawaida zaidi:

Wacha tutengeneze fomu:


vipengele vya fomu

Niliweka faili kama faili ya kushughulikia test.php kwa kuwa ndani yake nakuandikia mifano. Niliweka njia ya kutuma kutuma kwa sababu hizi ndizo njia zinazotumiwa katika 99.9% ya kesi. Pia niliipa fomu yetu jina - fomu

Sasa hebu tuzame kwenye ulimwengu wa vipengele vya fomu. Jambo la kwanza unahitaji kuelewa ni kwamba karibu vipengele vyote ni tag tofauti ni katika sifa pekee aina kwenye vitambulisho hivi. Acha niorodheshe vitu vya fomu vilivyotumika:

Nina hakika umeona sehemu kama hizi zaidi ya mara moja, kwa hivyo hii ndio wanasema: "hakuna maoni"

Sasa hebu tuunde dodoso ndogo ya mafunzo, ambayo tutafanya kazi nayo zaidi. Kazi yetu ni kuunda dodoso ndogo ambayo itatuambia jina la mtu anayeijaza, jinsia, anatoka nchi gani, rangi ya kupenda na uwanja wa maandishi ambapo mtumiaji anaweza kuongeza kitu kujihusu. Hivi ndivyo nilipata:

Jina lako la mwisho Jina la kwanza Patronymic:

Jinsia yako ni nini:
M
NA

Unatoka nchi gani



Rangi unazopenda:

Nyeusi:
Nyekundu:
Nyeupe:
Nyingine:

Kuhusu mimi:




Kumbuka kuwa karibu kila lebo ina sifa thamani, ni ya nini? Hurekodi data ambayo utahamisha hadi ukurasa mwingine. Natumai iko wazi

Sasa ikiwa tutaendesha nambari hii kwenye kivinjari, tutaona yafuatayo:

Kwa fomu nilitumia sifa kitendo yenye maana test.php hii inamaanisha, kama nilivyokwisha sema, kwamba data kutoka kwa fomu itahamishiwa kwenye faili ya test.php.

POST ombi

Sasa hebu tuandike msimbo wa PHP ambao utaturuhusu kuona habari tuliyoingiza. Data imehifadhiwa wapi? Kwa upande wa ombi la kupata, data yetu ilikuwa katika mabadiliko ya kimataifa $_GET[""]. Unapotuma ombi la chapisho, data itahifadhiwa katika tofauti ya kimataifa $_POST[""]. Katika mabano ya mraba, lazima uandike, kama ilivyo kwa ubadilishaji wa kimataifa pata, kitambulisho. Swali ni je, ninaweza kupata wapi kitambulisho hiki? Ndio maana tunahitaji sifa ya jina kwenye vipengele vya fomu! Ni majina haya ambayo hutumika kama ufunguo wetu katika safu ya machapisho ya kimataifa. Kweli, wacha tuanze kuelezea hati:

if(isset($_POST["submit"])) (
mwangwi "Jina kamili: ".$_POST["fio"]."
";
echo "Jinsia: ".$_POST["sex"]."
";
echo "Nchi ya makazi: ".$_POST["mji"]."
";

Echo "Rangi Uzipendazo:
";
echo $_POST["color_1"]."
";
echo $_POST["color_2"]."
";
echo $_POST["color_3"]."
";
echo $_POST["color_4"]."
";
mwangwi "Kukuhusu: ".$_POST["kuhusu"]."


";
}
?>

Hali kama tuliyoandika inasema: Ikiwa kuna tofauti ya kimataifa $_POST["submit"] basi tunaonyesha data kwenye skrini. Tofauti hii ya kimataifa inaundwa ikiwa tutabofya kwenye kitufe cha kuwasilisha, ndiyo sababu sifa ya jina katika kifungo inahitajika katika mfano huu. Unaweza kuwa unashangaa kwa nini sifa ya jina la kitufe ni ya hiari? Ni rahisi sana. Kwa kawaida, programu haifuatilii kubonyeza kitufe, lakini inafuatilia data iliyotumwa. Kwa uendeshaji sahihi wa, kwa mfano, fomu ya mawasiliano, ni muhimu kufuatilia sio kubofya kifungo, lakini usahihi wa habari iliyoingia, na kujua ikiwa habari hii iliingizwa kabisa. Katika mfano wetu, hatukuangalia data iliyotumwa, lakini tulifuatilia tu bonyeza ya kifungo, ili kurahisisha mfano ... Hii ndiyo tuliyopata:

Hitimisho

Kweli, leo tuliangalia njia mbili za kuhamisha data kati ya hati, na pia tulifahamiana na fomu. Natumai sana kwamba habari hii itakuwa na manufaa kwako angalau mahali fulani. Ikiwa una maswali au mawazo, andika maoni. Bahati nzuri kwako, ni hayo tu kwa leo!

P.S.: Je, ungependa michezo ya kompyuta iwe ya kweli zaidi? directx 11 kwa windows 7 inaweza kupakuliwa bure kwenye windows in! Kufurahia graphics ajabu!

kutoka kupata (9)

Ni njia gani ya "msimbo mdogo" wa kupata vigezo kutoka kwa kamba ya hoja ya URL ambayo imeundwa kama hii?

www.mysite.com/category/subcategory?myqueryhash

Pato linapaswa kuwa: myqueryhash

Ninajua kuihusu:

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

Majibu

Nambari hii na nukuu sio yangu. Evan K anatatua kazi yenye thamani nyingi ya jina moja na chaguo la kukokotoa lililofafanuliwa na mtumiaji;) iliyochukuliwa kutoka:

Matokeo ya mfano hapo juu:

Habari Hannes!

Ikiwa unataka kupata safu nzima ya hoja:

$_SERVER["QUERY_STRING"]

Pia, ikiwa unatafuta jina la faili la sasa pamoja na kamba ya hoja, unahitaji tu zifuatazo

Jina la msingi($_SERVER["REQUEST_URI"])

Hii itakupa habari kama mfano ufuatao

file.php? arg1 = thamani & arg2 = thamani

Na ikiwa pia unahitaji njia kamili ya faili kuanzia kwenye mzizi kama /folder/folder2/file.php?arg1=val&arg2=val basi ondoa tu kazi ya basename() na utumie tu mwingiliano.

$_SERVER["REQUEST_URI"]

Asante @K. Shahzad Hii husaidia unapotaka kuandika upya kamba ya hoja bila nyongeza zozote za kuandika upya. Hebu sema unaandika upya /jaribu/? X = y katika index.php? Q = test & x = y na unataka kupata kamba ya hoja.

Kazi get_query_string())( $arr = explode("?",$_SERVER["REQUEST_URI"]); ikiwa (hesabu($arr) == 2)( rudisha ""; )else( return "?".mwisho( $ arr)."
"; ) ) $query_string = get_query_string();

Njia ya PHP ya kufanya hivyo ni kutumia kitendakazi uchanganua_url, ambayo huchanganua URL na kurudisha vijenzi vyake. Ikiwa ni pamoja na mfuatano wa hoja.

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

Hapa kuna kazi yangu ya kurejesha sehemu mistari ombi MWELEKEZAJI .

Ikiwa ukurasa wa kupiga simu tayari ulikuwa na mfuatano wa hoja ndani yake , na unahitaji kurudi kwenye ukurasa huo na kutaka kutuma baadhi, sio zote, kati ya hizo $_GET (k.m. nambari ya ukurasa).

Mfano: mfuatano wa hoja ya Mrejeleaji ulikuwa?foo=1&bar=2&baz=3 ukiita refererQueryString("foo" , "baz") hurejesha foo=1&baz=3" :

Kirejeleo cha utendakaziQueryString(/* var args */) ( //Rudisha kamba tupu ikiwa hakuna kielekezi au hakuna vielelezo vya $_GET vinavyopatikana: ikiwa (!isset($_SERVER["HTTP_REFERER"]) || tupu($_SERVER["HTTP_REFERER) " "]) || empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) ( rudisha ""; ) //Pata URL ya hoja ya mrejeleaji (kitu kama "threadID=7&page=8") $refererQueryString = parse_url ( urldecode($_SERVER["HTTP_REFERER")]), PHP_URL_QUERY); //Je, ungependa kutoa maadili gani? (Ulipitisha majina yao kama vigeu.) $args = func_get_args(); //Toa masharti "" of referer" s URL: $pairs = explode("&",$refererQueryString); //String utarudi baadaye: $return = ""; //Chambua kamba zilizorejeshwa na utafute zile zinazokuvutia: foreach ($pairs as $pair ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Ikiwa ulipitisha jina kama arg, ambatisha jozi ya sasa ili kurudisha kamba : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Hizi ni jozi zako za "key=value" zilizorejeshwa zilizounganishwa pamoja na "& ": return ltrim($return,"&"); ) //Kama mrejeleaji wako alikuwa "page.php?foo=1&bar=2&baz=3" //na unataka kurudisha kichwa() kwenye "page.php?foo=1&baz=3" //(hakuna "bar", foo na baz pekee), kisha utumie: kichwa("Mahali: page.php?".refererQueryString("foo","baz"));

Usaidizi wa Microsoft unasema: "Urefu wa juu wa URL ni vibambo 2083 katika Internet Explorer."

IE imekuwa na matatizo na URL kwa muda mrefu. Firefox inaonekana kufanya kazi vizuri na > herufi 4k.