Js pata vigezo kutoka kwa kamba. PHP na GET na njia za kuhamisha data za POST

Rasilimali za kisasa za mtandao sio tu kutoa habari kwa mgeni, lakini pia kuingiliana naye. Ili kuingiliana na mtumiaji, unahitaji kupokea habari fulani kutoka kwake. Kuna mbinu kadhaa za kurejesha data, mbinu za kawaida sana ni GET na POST. Na ipasavyo, PHP ina msaada kwa njia hizi za uhamishaji PATA data na POST. Wacha tuone jinsi njia hizi zinavyofanya kazi.
Data ya Mbinu ya GET huhamishwa kwa kutumia mbinu ya GET kwa kuiambatanisha na URL ya hati inayoitwa kuchakata taarifa iliyopokelewa. Kwa ufafanuzi njia hii piga simu upau wa anwani kivinjari URL ya rasilimali na uongeze kwanza alama ya kuuliza (?) na kisha mstari num=10 . Kwa mfano

http://domain.ru/script.php?num=10


Ikiwa unayo seva ya ndani basi kawaida kikoa kingekuwa localhost na kisha kiingilio cha awali kingeonekana kama

http://localhost/script.php?num=10


Katika kesi hii tunapitisha nambari ya parameter sawa na 10. Ili kuongeza vigezo vifuatavyo Hati inahitaji kutumia ampersand delimiter (&), kwa mfano

http://domain.ru/script.php?num=10&type=new&v=text


KATIKA kwa kesi hii tulipitisha vigezo vitatu kwa hati: num na thamani 10, chapa na thamani "mpya" na v na thamani "maandishi".
Ili kupata vigezo hivi katika hati, unahitaji kutumia safu iliyojengewa ndani $_GET $_GET["num"], $_GET["type"],$_GET["v"] . Vipengele hivi vya safu vitakuwa na maadili ya vigezo vilivyopitishwa. Ili kuonyesha mfano huu, unda faili ya script.php yenye maudhui yafuatayo



Kuthibitisha njia ya GET katika PHP





Na sasa piga faili hii kwenye kivinjari

http://path/script.php?num=10&type=new&v=text


na utaona vigezo vilivyopitishwa kwenye dirisha la kivinjari. Lakini ikiwa utaita faili hii bila vigezo vya ziada http://path/script.php , utaona makosa ambayo itatoa Mkalimani wa PHP, kwamba hakuna vipengele kama hivyo vya $_GET safu. Zaidi ya nakala moja inaweza kujitolea kuangalia data iliyopokelewa kutoka kwa mtumiaji, kwa hivyo katika nakala hii sitagusa hatua hii.
Kama unavyoelewa, kulazimisha mtumiaji kuandika data kwenye upau wa anwani wa kivinjari sio nzuri sana na haifai kabisa. Kwa hiyo, ili kupokea data kutoka kwa mtumiaji unahitaji kutumia fomu za html. Wacha tuandike fomu rahisi ya html.


Ingiza nambari

Je, una PC?
Ndiyo
Hapana


Maoni yako:





Acha nitoe maoni kidogo juu ya fomu iliyoundwa. Fomu huundwa kwa lebo ya fomu. Sehemu za fomu zinaundwa kwa kutumia pembejeo, chagua, vitambulisho vya maandishi (unaweza kusoma zaidi). Katika tag ya fomu sifa ya kitendo inabainisha URL ya hati ambayo itapokea data ya fomu. Kwa upande wetu, tulibainisha faili yetu iliyopo ya script.php. Sifa ya mbinu inabainisha mbinu ya kutuma data. Tulibainisha mbinu ya GET. Sasa tunajua ni faili gani data ya fomu itahamishiwa, na kwa njia gani, kilichobaki ni kujua wapi kuitafuta?!
Data ya fomu hii itapitishwa kwenye rasilimali ya wavuti na kivinjari kwa kuiambatanisha na URL: kwanza kutakuwa na alama ya kuuliza (?), kisha vigezo vitawasilishwa vikitenganishwa na ampersand (&). Jina la kigezo litachukuliwa kutoka kwa sifa ya jina, ambayo lazima ibainishwe kwa uga wa fomu yoyote. Thamani ya parameter itategemea aina ya shamba. Ikiwa sehemu ni sehemu ya maandishi, thamani itakuwa maandishi yaliyowekwa na mtumiaji. Ikiwa shamba ni orodha, kikundi cha vifungo vya redio au masanduku ya hundi, basi thamani ya parameter itakuwa thamani ya sifa ya thamani ya kipengele kilichochaguliwa. Acha nieleze kwa kutumia fomu yetu kama mfano. Ikiwa mtumiaji anaingia nambari 10 kwenye uwanja wa pembejeo, basi jina la parameter litakuwa num (thamani ya sifa ya jina la lebo ya pembejeo) na thamani itakuwa 10 (nambari iliyoingia na mtumiaji). Ipasavyo, kivinjari kitatoa jozi "num=10". Ikiwa mtumiaji anachagua chaguo la "Ndiyo" kutoka kwenye orodha, basi jina la parameter litakuwa aina (thamani ya sifa ya jina la tepe iliyochaguliwa) na thamani itakuwa ndiyo (thamani ya sifa ya thamani ya chaguo). tagi). Ipasavyo, kivinjari kitatoa jozi ya "aina=ndio".
Sasa tutaweka fomu hii kwenye ukurasa wa forma.php.



Fomu ya kusambaza data kwa kutumia mbinu za GET na PHP



Ingiza nambari

Je, una PC?
Ndiyo
Hapana


Maoni yako:







Ingiza maadili yoyote kwenye sehemu za fomu na ubofye kitufe cha "Wasilisha". Baada ya kubofya kitufe, kivinjari kitafungua ukurasa mwingine (script.php) na data uliyoingiza itaonyeshwa kwenye dirisha la kivinjari. Nadhani ni wazi kwa nini: kivinjari kitapitisha data kwa hati ya script.php, na katika hati data hii itashughulikiwa na kuonyeshwa kwenye skrini.
Njia ya POST Sasa hebu tuangalie jinsi njia ya POST inavyofanya kazi.
Ili kutuma data kwa kutumia mbinu ya POST, unahitaji kutumia fomu za HTML. Kama tunavyokumbuka, sifa ya mbinu ya lebo ya fomu inawajibika kwa njia ya kutuma data ya fomu. Kwa hiyo, unahitaji kutaja katika sifa ya njia ya lebo ya fomu Thamani ya POST. Vinginevyo, fomu inaweza kuwa sawa na kwa njia ya GET. Hebu tubadilishe fomu yetu, ambayo tayari tumetumia kusambaza data kwa kutumia mbinu ya GET, ili kusambaza kwa kutumia mbinu ya POST.


Ingiza nambari

Je, una PC?
Ndiyo
Hapana


Maoni yako:





Kama unaweza kuona, fomu inabaki sawa isipokuwa kwa njia na sifa za kitendo. Data sasa itapitishwa kwa hati ya script_post.php. Hebu tuweke fomu yetu kwenye ukurasa wa forma_post.php.



Fomu ya kusambaza data kwa kutumia njia za POST na PHP



Ingiza nambari

Je, una PC?
Ndiyo
Hapana


Maoni yako:







Sasa tunahitaji kuandika hati ambayo itashughulikia data yetu ya fomu.
Ili kupokea data kutoka kwa mbinu ya POST katika hati, unahitaji kutumia mkusanyiko wa $_POST uliojengewa ndani. Funguo za safu hii zitakuwa majina ya vigezo. Kwa upande wetu, tunahitaji kutumia $_POST["num"], $_POST["type"],$_POST["v"] . Vipengele hivi vya safu vitakuwa na maadili ya data iliyohamishwa. Kama unavyoona, tofauti kutoka kwa kutumia mbinu ya GET inaonyeshwa tu katika matumizi ya $_POST safu. Kwa hivyo, haitakuwa vigumu kwetu kuandika faili ya script_post.php:



Uchunguzi Mbinu ya POST katika PHP





Sasa fungua faili ya forma_post.php kwenye kivinjari chako. Ingiza data fulani kwenye sehemu za fomu na ubofye kitufe cha "Wasilisha". Sasa, labda umeona tofauti kati ya njia ya POST na njia ya GET - data ya fomu haikuonekana kwenye upau wa anwani wa kivinjari. Data haiwezi kutumwa kwa kutumia njia ya POST kupitia upau wa anwani wa kivinjari. Hii ni tofauti kubwa ya kukumbuka.
Katika PHP, bila kujali jinsi data ilitumwa - njia ya POST au mbinu ya GET - unaweza kupata data kwa kutumia safu $_REQUEST. Ulinganisho wa mbinu za GET na POST Unapotumia mbinu ya GET, data huhamishwa kwa kuambatanisha na URL. Kwa hivyo, wataonekana kwa mtumiaji, ambayo sio nzuri kila wakati kutoka kwa mtazamo wa usalama. Pia, kiwango cha juu cha data iliyohamishwa itategemea kivinjari - kwa idadi ya juu inayoruhusiwa ya wahusika kwenye upau wa anwani wa kivinjari.
Unapotumia njia ya POST, data haitaonekana kwa mtumiaji (haijaonyeshwa kwenye upau wa anwani wa kivinjari). Na kwa hiyo wao ni salama zaidi, na, kwa hiyo, usindikaji wa programu data hii inalindwa zaidi katika suala la usalama. Pia, kiasi cha data iliyopitishwa haina kikomo.
Wakati wa kuchagua njia ya uhamisho wa data, unahitaji kuzingatia vipengele hapo juu na kuchagua njia sahihi zaidi.

Karibu kila tovuti unaweza kuona viungo vilivyo na vigezo baada ya ishara "?", kwa mfano, http://some.site.com/?id=1. Kawaida hati ya seva hushughulikia usindikaji wa vigezo kama hivyo, lakini wakati mwingine kuna haja ya kujua vigezo hivi ndani ya JavaScript. Hadithi ya leo itakuambia jinsi ya kufanya hivyo.

Je, ni vigezo gani vinavyoitwa GET? Kwa kweli, hii ni safu ya anwani tu, lakini ni kawaida kwamba ikiwa herufi "?" inapatikana kwenye URL, basi herufi zote baada yake ni vigezo. Ufafanuzi wa vigezo ni wa kawaida: kwanza huja jina la kutofautiana, kisha "=" ishara, kisha thamani ya kutofautiana, vigezo vinatenganishwa na ishara "&". Unaweza kujua anwani ya sasa katika JavaScript kwa kusoma thamani ya window.location. Changanua mstari baada ya "?" itabidi uifanye kwa njia mbili: kwanza uivunje katika vikundi vya "variable=value", na kisha uivunje katika sehemu zake za sehemu.

Kugawanyika kwa kamba ya parameter kunafanywa rahisi na ukweli kwamba JavaScript ina kazi maalum ya kamba - split (), matokeo yake yatakuwa safu ya kamba. Ili kuitumia, kwanza unahitaji kuunda kitu cha Kamba, kwani kipengele hiki ni mbinu ya kitu hiki. Hii inafanywa kwa urahisi:

someVar = new String("some text");

Kisha tunagawanya kamba katika vifungu vidogo:

someArray = someVar.split("x");

Ambapo "x" ni ishara ya kugawanya kamba katika kamba ndogo. Ili kupata mhusika katika kamba, unahitaji kutumia nyingine kazi ya kamba- indexOf():

someVar.indexOf("?");

Utangulizi wa nadharia umekamilika. Hebu tuanze kufanya mazoezi. Niliamua kwamba anuwai zote za GET zinapaswa kuhifadhiwa katika sehemu mbili tofauti safu za kimataifa: majina ya duka moja, maadili mengine ya duka. Kwa bahati mbaya JavaScript haitumiki safu za ushirika, kwa hivyo wacha tutumie njia niliyoonyesha. Inahitajika pia kuokoa idadi ya anuwai ya GET. Kwa kweli, unaweza kupiga simu kazi kila wakati ili kuhesabu saizi ya safu, lakini kwa mtindo njia yangu ni bora. Na kwa hivyo, anuwai za ulimwengu na safu:

var_GET_Funguo; // Kwa sasa safu tupu var _GET_Values; var_GET_Count = 0; // hakuna vipengele bado var _GET_Default = ""

Maana ya _GET_Default variable itaelezwa baadaye. Ifuatayo, nitaunda kazi ya get_parseGET() ambayo itachanganua URLs na kuunda safu zilizo na anuwai. Hapo awali, kazi huunda kitu cha Kamba na huangalia uwepo wa "?" mhusika ndani yake:

l = kupata.urefu; pata = get.substr(x+1, l-x);

Sasa tunagawanya mstari katika vikundi vya "variable=value", hesabu jumla ya vigezo na uandae kuunda safu zinazohitajika:

l = get.split("&"); x = 0; _GET_Count = l.length; _GET_Keys = safu mpya(_GET_Count); _GET_Values ​​= safu mpya(_GET_Count);

Na hatimaye, tunagawanya vikundi vinavyotokana katika safu mbili na majina ya vigezo na maadili yao:

kwa(i katika l) ( get = l[i].split("="); _GET_Keys[x] = pata; _GET_Values[x] = pata; x++; )

KATIKA katika mfano huu kwa .. katika ujenzi hutumiwa, ambayo inarudia kupitia vipengele vyote vya safu. Syntax ya muundo huu ni:

kwa (ufunguo katika safu) (// Matendo yako)

ambapo ufunguo ni jina la ufunguo ambao utachaguliwa kutoka safu. Katika mwili wa kitanzi, kipengele cha sasa kinaweza kupatikana kwa safu.

Chaguo la kukokotoa la pili kutoka kwa maktaba, get_fetchVar(key), hukuruhusu kujua thamani ya kigezo fulani cha GET. Inafanya kazi kwa kurudia kwa urahisi juu ya safu ya _GET_Keys. Ikiwa ufunguo haupatikani, hurejesha _GET_Default thamani iliyotajwa hapo juu. Ningependa kutambua kuwa _GET_Default thamani SI lazima ibadilishwe kwenye maktaba yenyewe - ikiwa ni lazima, hii inaweza kufanywa katika nambari yako ya HTML:

_GET_Default="tra la la";

Mwishoni mwa hati kuna simu ya kupata_parseGET(); na hapa ndipo maktaba inapoishia.

Nzuri mbaya

    Karibu kila tovuti unaweza kuona viungo vilivyo na vigezo baada ya ishara "?", kwa mfano, http://some.site.com/?id=1. Kwa kawaida, inachakata vigezo hivyo...

    Kuna njia kadhaa za kuondoa kipengee cha safu katika JavaScript. Hizi ni pamoja na njia za pop na shift. njia ya pop huondoa kipengee cha kwanza kutoka kwa safu iliyotolewa. njia ya kuhama inafuta...

Sasa nitakuambia jinsi, kwa kutumia js, tunaweza kwa urahisi na kwa urahisi kuendesha URL kwenye kivinjari bila kupakia upya ukurasa. Kwa hili tutatumia kipengele kinachofuata: history.pushState(). Inafaa kuzingatia ukweli kwamba inafanya kazi tu na vivinjari vinavyoungwa mkono na html5! Ina vigezo 3 ambavyo kimsingi hatuwezi kupitisha chochote, yaani:

History.pushState("","","");

Katika njia ya kwanza tunapitisha hali ya kitu. Ya pili sio zaidi ya Jina (kwa njia, leo ni kupuuzwa ...). Na parameta ya tatu ni URL yenyewe.

Katika makala hii tutazingatia ya tatu tu.

Katika parameta ya URL, tunahitaji tu kupitisha kamba ambayo itabadilishwa katika URL kutoka kwa mzizi wa tovuti.

Hebu tuongeze URL

URL yetu yenyewe labda itakuwa rahisi zaidi: http://localhost/

Var newUrl = "/catalog/?login=myLogin&page=phone"; history.pushState("", "", newUrl);

Baada ya kutekeleza hati hii, utaona kwenye upau wa anwani: localhost/catalog/?login=myLogin&page=phone

Lakini kuwa makini. Kwa kuwa URL yetu imebadilika. Kisha unapobofya onyesha upya ukurasa, kivinjari kitajaribu kwenda kwenye URL mpya. Na ikiwa tovuti yako haina /katalogi/ sehemu, basi utaona kosa 404.

Hebu tubadilishe URL iliyopo

Mfano wa pili utaenda hapa: localhost/catalog/samsung/?login=myLogin&page=phone

Var arUrl = window.location.pathname.split("/"); var newUrl = "/bazar/"+arUrl+"/"+window.location.search; history.pushState("", "", newUrl);

Mstari wa 1: Pata njia inayohusiana na mwenyeji na utumie split kuigawanya katika safu
Mstari wa 2: Tunaunda URL mpya inayojumuisha neno "bazar" + ufunguo wa pili wa safu yetu, ambayo ina neno samsung, na mwishoni tuliongeza kupata yetu.
Mstari wa 3: Kweli uingizwaji wenyewe.

Baada ya kutekeleza hati hii, utaona kwenye upau wa anwani: localhost/bazar/samsung/?login=myLogin&page=phone

Kubadilisha vigezo vya GET

Hebu tuangalie mfano huo huo.

Var arUrl = window.location.search.split("&"); arUrl = arUrl.slice(1); var arr=; $.each(arUrl,function(i,elem)( arr[i] = elem.split("="); )); var newUrl = arr+"="+arr+"&"+arr+"="+arr; newUrl = window.location.pathname+"?"+newUrl; history.pushState("", "", newUrl);

Bila shaka hati hii ni maandamano na pengine rahisi zaidi. Baada ya utekelezaji wake, maadili ya vigezo vya GET yatabadilishwa kwenye upau wa anwani wa kivinjari. ?login=myLogin&page=phone itabadilika kuwa ?login=phone&page=myLogin. Naam, sasa, kwa utaratibu.

  • mstari: Tunapata safu ya vigezo vya mgawanyiko wa GET kwa kutumia & ishara
  • mstari: Kwa kuwa window.location.searche inarudi vigezo pamoja na kitenganishi -?, tunaiondoa.
  • mstari: Unda safu
  • mstari: Wacha tupitie safu yetu
  • mstari: Gawanya thamani ya funguo.
  • mstari: Kukusanya mstari mpya na vigezo.
    Bila shaka, hatua hii ingeweza kufanywa tofauti, lakini ndani ya mfumo wa somo tutafanya kwa njia rahisi zaidi.
  • mstari: Inakusanya URL mpya
  • line badala ya url
  • Baada ya kutekeleza hati, URL yetu ya zamani: localhost/catalog/samsung/?login=myLogin&page=phone
    itabadilishwa na mpya: localhost/catalog/samsung/?login=phone&page=myLogin

    Kwa kweli, hayo ndiyo yote nilitaka kukuambia leo. Acha maoni yako na usisahau kushiriki chapisho hili kwenye mitandao ya kijamii.