Paraqitni imagjinar php. Format HTML: forma php - dërgoni një kërkesë në të njëjtën faqe. Si të shmangni problemet me PHP _SELF

Kalova një kohë të gjatë duke menduar se çfarë titulli t'i jepja këtij artikulli dhe nuk mund të gjeja asgjë më të mirë. Ky është i vetmi titull që të paktën pasqyron disi thelbin e asaj që thuhet. Për të qenë i sinqertë, nuk e di se si quhet saktë, kështu që e emërova artikullin në të njëjtën mënyrë që u përpoqa të gjeja të paktën disa informacione në një motor kërkimi për këtë temë.

Në një nga faqet, më duhej të përdorja dy butona dërgimi në një formë, të cilat do t'i dërgonin të dhënat e mbushura te "trajtues" të ndryshëm PHP, në varësi të kohës kur shtypej butoni. Google nuk më është përgjigjur asgjë të arsyeshme, me sa duket thjesht nuk e pyeta në mënyrën e duhur, kështu që më duhej ta zgjidhja vetë.

Kështu që unë e parashtrova për shqyrtimin tuaj.

Thelbi i problemit

Pasi e zbatova vetë, gjeta ende disa zgjidhje që bazoheshin në përdorimin e butonave të rregullt në të cilët ishte vidhosuar JS.

Unë zbatova planin tim pothuajse në të njëjtën mënyrë, por përdora llojin standard të paraqitjes. Gjithçka duket se po funksionon dhe për mendimin tim zgjidhja ime është më e saktë logjikisht.

Kjo zgjidhje do të funksionojë po aq mirë si në pritjen falas, ashtu edhe nëse zgjidhni një pritje profesionale. Kjo metodë zbatohet tërësisht në anën e klientit dhe nuk duhet të ngadalësojë serverin.

Për ta bërë më të lehtë të kuptoj se çfarë dua dhe si funksionon, këtu është një shembull vërtet funksional, në formën e një formulari që ka 2 dërgesa që dërgojnë të dhëna në faqe të ndryshme.

Një nga gjërat më të mira të PHP-së është mënyra se si funksionon me format HTML. Gjëja kryesore këtu është që çdo element i formës bëhet automatikisht i disponueshëm për programet tuaja PHP. Për informacion të detajuar rreth përdorimit të formave në PHP, lexoni seksionin. Këtu është një shembull i formës HTML:

Shembulli #1 Forma më e thjeshtë HTML

Emri juaj:

Mosha juaj:

Nuk ka asgjë të veçantë në këtë formë. Ky është një formë e rregullt HTML pa ndonjë etiketë të veçantë. Kur përdoruesi të plotësojë formularin dhe të klikojë butonin dërgo, do të thirret faqja action.php. Ky skedar mund të ketë diçka si:

Shembulli #2 Shfaqja e të dhënave të formularit

Përshëndetje, .
Ti je i vjeter.

Shembull i prodhimit të këtij programi:

Përshëndetje Sergej. Ju jeni 30 vjeç.

Nëse nuk merrni parasysh pjesët e kodit me htmlspecialchars() dhe (int), parimi i funksionimit të këtij kodi duhet të jetë i thjeshtë dhe i kuptueshëm. htmlspecialchars() siguron që karakteret "speciale" HTML janë të koduara siç duhet në mënyrë që HTML ose Javascript keqdashëse të mos futen në faqen tuaj. Fusha e moshës, të cilën e dimë se duhet të jetë një numër, thjesht mund ta shndërrojmë në një numër të plotë, i cili automatikisht do të heqë qafe karakteret e padëshiruara. PHP gjithashtu mund ta bëjë këtë automatikisht duke përdorur shtesën e filtrit. Ndryshoret $_POST["emri"] dhe $_POST["mosha"] vendosen automatikisht për ju nga PHP. Më parë kemi përdorur variablin superglobal $_SERVER, por këtu përdorim edhe variablin superglobal $_POST, i cili përmban të gjitha të dhënat POST. vini re, se mënyra e dërgimit(metoda) e formës sonë është POST. Nëse do të përdornim metodën MARR, atëherë informacioni ynë i formës do të ishte në variablin superglobal $_GET. Përndryshe, mund të përdorni variablin $_REQUEST nëse burimi i të dhënave nuk ka rëndësi. Kjo variabël përmban një përzierje të të dhënave GET, POST, COOKIE.

15 vjet më parë

Sipas specifikimeve HTTP, duhet të përdorni metodën POST kur përdorni formularin për të ndryshuar gjendjen e diçkaje në fund të serverit. Për shembull, nëse një faqe ka një formular për të lejuar përdoruesit të shtojnë komentet e tyre, si kjo faqe këtu, formulari duhet të përdorë POST. Nëse klikoni "Rifresko" ose "Rifresko" në një faqe që keni arritur përmes një POST, është pothuajse gjithmonë një gabim -- nuk duhet të postoni të njëjtin koment dy herë -- kjo është arsyeja pse këto faqe nuk janë të shënuara apo të memorizuara.

Ju duhet të përdorni metodën GET kur forma juaj është, mirë, duke hequr diçka nga serveri dhe në fakt nuk ndryshon asgjë. Për shembull, formulari për një motor kërkimi duhet të përdorë GET, pasi kërkimi i një faqe interneti nuk duhet të ndryshojë asgjë që mund t'i interesojë klientit dhe shënimi ose ruajtja në memorie e rezultateve të një pyetjeje të motorit të kërkimit është po aq e dobishme sa shënimi ose ruajtja në memorie. një faqe statike HTML.

2 vite më parë

Vlen të sqarohet:

POST nuk është më i sigurt se GET.

Arsyet për zgjedhjen e GET vs POST përfshijnë faktorë të ndryshëm si qëllimi i kërkesës (a po "paraqisni" informacion?), madhësia e kërkesës (ka kufizime për sa kohë mund të jetë një URL dhe parametrat GET dërgohen në URL), dhe sa lehtë dëshironi që Veprimi të jetë i ndashëm -- Shembull, Kërkimet në Google janë GET sepse e bën të lehtë kopjimin dhe ndarjen e pyetjes së kërkimit me dikë tjetër thjesht duke ndarë URL-në.

Siguria është vetëm një konsideratë këtu për faktin se një GET është më e lehtë për t'u ndarë sesa një POST. Shembull: ju nuk dëshironi që një fjalëkalim të dërgohet nga GET, sepse përdoruesi mund të ndajë URL-në që rezulton dhe të ekspozojë pa dashje fjalëkalimin e tij.

Sidoqoftë, një GET dhe një POST janë po aq të lehta për t'u kapur nga një person keqdashës i vendosur mirë nëse nuk vendosni TLS/SSL për të mbrojtur vetë lidhjen e rrjetit.

Të gjithë formularët e dërguar përmes HTTP (zakonisht porta 80) janë të pasigurt dhe sot (2017), nuk ka shumë arsye të mira që një faqe interneti publike të mos përdorë HTTPS (që në thelb është HTTP + Siguria e Shtresës së Transportit).

Si bonus, nëse përdorni TLS, ju minimizoni rrezikun që përdoruesit tuaj të marrin kodin (AD) të injektuar në trafikun tuaj që nuk është vendosur nga ju.

Metodat POST dhe GET përdoren kryesisht për transferimin e parametrave nga forcat. Dallimi kryesor midis metodave POST dhe GET është mënyra se si transferohet informacioni. Në metodën GET, parametrat kalohen përmes shiritit të adresave (URL), d.m.th. në kokën e kërkesës HTTP, ndërsa në metodën POST parametrat transmetohen përmes trupit të kërkesës HTTP dhe nuk pasqyrohen në shiritin e adresave.

1. Butonat - Etiketa

Etiketa krijon butona në një faqe interneti dhe veprimi i tij i ngjan rezultatit të marrë duke përdorur etiketën (me parametrin type="button | reset | submit"). Ndryshe nga ky etiketë, ai ofron opsione të avancuara për krijimin e butonave. Për shembull, në një buton të tillë mund të vendosni çdo element HTML, duke përfshirë imazhet. Duke përdorur stilet, mund të përcaktoni pamjen e një butoni duke ndryshuar fontin, ngjyrën e sfondit, madhësinë dhe parametra të tjerë.

Në teori, etiketa duhet të vendoset brenda formës së vendosur nga elementi. Megjithatë, shfletuesit nuk shfaqin një mesazh gabimi dhe punojnë saktë me etiketën nëse haset vetë. Sidoqoftë, nëse duhet të dërgoni rezultatin e klikimit të butonit në server, ai duhet të vendoset në një enë. Kërkohet etiketa mbyllëse.

Opsione:

i çaktivizuar - bllokon aksesin dhe modifikimin e elementit.

lloji - lloji i butonit

vlera - Vlera e butonit që do të dërgohet në server ose do të lexohet duke përdorur sprits.

Butoni me tekst

Parametri DISABLED Bllokon aksesin dhe modifikimin e butonit. Në këtë rast, ai shfaqet gri dhe nuk mund të aktivizohet nga përdoruesi. Për më tepër, një buton i tillë nuk mund të përqendrohet duke shtypur tastin Tab, duke përdorur miun ose ndryshe. Megjithatë, kjo gjendje e butonit mund të ndryshohet përmes skripteve.

Butoni aktiv Butoni joaktiv

Parametri TYPE Përcakton llojin e butonit, i cili vendos sjelljen e tij në formë. Llojet e ndryshme të butonave nuk ndryshojnë në pamje në asnjë mënyrë, por secili buton ka funksionet e veta. Vlera e parazgjedhur: butoni.

Argumentet:

butoni - Butoni i rregullt.

rivendosja - Një buton për pastrimin e të dhënave të formularit të futur dhe kthimin e vlerave në gjendjen e tyre origjinale.

Submit - Butoni për dërgimin e të dhënave të formularit në server.

Pastro formularin Dërgo formularin

Parametri VALUE Përcakton vlerën e butonit që do t'i dërgohet serverit. Një çift "emër=vlerë" dërgohet në server, ku emri specifikohet nga parametri i emrit të etiketës dhe vlera specifikohet nga parametri i vlerës. Kuptimi ose mund të përkojë me tekstin në buton ose të jetë i pavarur. Parametri i vlerës përdoret gjithashtu për të hyrë në të dhëna përmes skripteve.

Paraqisni formularin

1.1. Butoni (lloji i hyrjes=buton) 1.2. Butoni me një imazh (lloji i hyrjes = imazh) Butoni me një foto

Butonat me imazhe janë të ngjashëm në veprim me butonin Submit, por ato përfaqësojnë një foto. Për ta bërë këtë, vendosni type=image dhe src="image.gif" .

Kur përdoruesi klikon kudo në imazh, formulari përkatës do të dërgohet në server me dy variabla shtesë - sub_x dhe sub_y. Ato përmbajnë koordinatat e përdoruesit që klikon në imazh. Programuesit me përvojë mund të vërejnë se emrat e variablave të dërguar nga shfletuesi në të vërtetë përmbajnë një pikë dhe jo një nënvizim, por PHP automatikisht e konverton pikën në një nënvizim.

1.3. Butoni i paraqitjes së formularit (lloji i hyrjes=submit)

Shërben për të dorëzuar formularin në skenar. Kur krijoni një buton për të dorëzuar një formular, duhet të specifikoni 2 atribute: type="submit" dhe value="Button text" . Атрибут name необходим, если кнопка не одна, а несколько и все они созданы для разных операций, например кнопки "Сохранить", "Удалить", "Редактировать" и т.д. После нажатия на кнопку сценарию передается строка имя=текст кнопки.!}

Nuk kërkohet skript PHP.

1.4. Një grup butonash (paraqisni) për zgjedhjen e opsionit të veprimit 2. Butoni i rivendosjes së formularit (Rivendosja)

Kur klikoni butonin e rivendosjes, të gjithë elementët e formularit do të vendosen në gjendjen që është specifikuar në atributet e paracaktuara dhe formulari nuk do të dorëzohet.

Nuk kërkohet skript PHP.

3. Kutia e kontrollit

Kutitë e kontrollit i paraqesin përdoruesit një numër opsionesh dhe lejojnë zgjedhje arbitrare (asnjë, një ose më shumë prej tyre).

E bardha
E gjelbër
Blu
E kuqe
E zezë

// grupi i parë i butonave
// grup i dytë i butonave
// grupi i tretë i butonave

5. Fusha e tekstit (tekst)

Kur krijoni një fushë të rregullt teksti me madhësinë e madhësisë dhe gjatësinë maksimale të lejuar të karaktereve të gjatësisë maksimale, atributi tip merr vlerën e tekstit . Nëse specifikohet parametri i vlerës, fusha do të shfaq vlerën e specifikuar në variabël. Kur krijoni një fushë, mos harroni të specifikoni emrin e fushës, sepse... ky atribut kërkohet.

6. Fusha e fjalëkalimit

Pikërisht njësoj si një fushë teksti, me përjashtim të faktit që karakteret e shtypura nga përdoruesi nuk do të shfaqen në ekran.

7. Fusha e tekstit të fshehur (e fshehur)

Ju lejon të kaloni disa informacione shërbimi në skript pa e shfaqur atë në faqe.

8. Lista rënëse (zgjidh)

Një etiketë është një listë rënëse ose e zgjeruar, dhe një ose më shumë rreshta mund të zgjidhen në të njëjtën kohë. Por vlera do të kalojë në butonin e fundit të zgjedhur.

Lista fillon me etiketat e çiftuara. Etiketat ju lejojnë të përcaktoni përmbajtjen e listës, dhe parametri i vlerës përcakton vlerën e vargut. Nëse parametri i zgjedhur është specifikuar në etiketë, atëherë rreshti do të zgjidhet fillimisht. Parametri i madhësisë përcakton se sa rreshta do të zërë lista. Nëse madhësia është 1, atëherë lista do të jetë një dropdown. Nëse specifikohet atributi i shumëfishtë, atëherë mund të zgjidhen disa elementë nga lista. Por kjo skemë praktikisht nuk përdoret, dhe me madhësi = 1 nuk ka kuptim.

E bardhë E gjelbër Blu E kuqe E zezë

Nëse keni nevojë të krijoni një drop-down me një sekuencë të parashikueshme. Për shembull, një listë me vite nga 2000 deri në 2050. Më pas përdoret teknika e mëposhtme.

9. Fusha e futjes së tekstit me shumë rreshta (textarea)

Një fushë e futjes së tekstit me shumë rreshta ju lejon të dërgoni jo vetëm një rresht, por disa në të njëjtën kohë. Nëse është e nevojshme, mund të specifikoni atributin vetëm për lexim, i cili ndalon redaktimin, fshirjen dhe ndryshimin e tekstit, d.m.th. teksti do të jetë vetëm për lexim. Nëse është e nevojshme që teksti fillimisht të shfaqet në një fushë hyrëse me shumë rreshta, atëherë ai duhet të vendoset midis etiketave.

Ekziston një parametër i mbështjelljes - vendosja e mbështjelljes së linjës. Vlerat e mundshme:

off - çaktivizon mbështjelljen e linjës;

virtuale - tregon ndërprerje të rreshtave, por e dërgon tekstin ashtu siç është futur;

fizike - ndërprerjet e vijave lihen në formën e tyre origjinale.

Si parazgjedhje, etiketa krijon një fushë bosh me gjerësi 20 karaktere dhe përbëhet nga 2 rreshta.


Në mënyrë që një fushë teksti me shumë rreshta të përputhet me formatimin html (mbështjellja e rreshtit duke përdorur etiketën
ose
), pastaj përdorni funksionin nl2br():

Rreshti i futur fillimisht 1 Rreshti i futur fillimisht 2 Rreshti 3 i futur fillimisht

10. Butoni për ngarkimin e skedarëve (shfleto)

Shërben për të zbatuar ngarkimin e skedarëve në server. Kur krijoni një fushë teksti, duhet gjithashtu të specifikoni llojin e fushës si "skedar".

Ngarko skedarin:

MËNYRAT E KOMUNIKIMIT TË SHfletuesit ME SERVER

Ka pak metoda të ofruara nga protokolli HTTP. Ky është informacion i rëndësishëm. Nuk ka rrugë të tjera. Në praktikë, përdoren dy: GET është kur të dhënat transferohen në shiritin e adresave, për shembull, kur përdoruesi klikon një lidhje. POST - kur ai klikon një buton në formular.

Metoda GET

Për të transferuar të dhëna duke përdorur metodën GET, nuk keni nevojë të krijoni një formular në një faqe HTML (askush nuk ju ndalon të përdorni formularë për kërkesa duke përdorur metodën GET - por kjo është marrëzi) - vetëm një lidhje me dokumentin me shtimin e një varg pyetjesh që mund të duket si një variabël=value çiftet kombinohen duke përdorur një ampersand & dhe vargu i shtohet URL-së së faqes duke përdorur një pikëpyetje “? "

Por nuk duhet të përdorni çifte key=value nëse duhet të kaloni vetëm një ndryshore; për ta bërë këtë, duhet të shkruani VALUE (jo emrin) e ndryshores pas pikëpyetjes.

Avantazhi i kalimit të parametrave në këtë mënyrë është se klientët që nuk mund të përdorin metodën POST (për shembull, motorët e kërkimit) ende mund t'i kalojnë parametrat në skript duke ndjekur lidhjen dhe të marrin përmbajtjen.

Ana negative është se thjesht duke ndryshuar parametrat në shiritin e adresave, përdoruesi mund ta kthejë skriptin në një mënyrë të paparashikueshme, kjo krijon një vrimë të madhe sigurie kur kombinohet me variabla të papërcaktuar dhe register_globals ose dikush mund të zbulojë vlerën e një ndryshoreje të rëndësishme. (si ID e sesionit) thjesht duke parë në ekranin e monitorit.

Për të hyrë në faqet publike duke kaluar parametra (funksionalitet i rritur)

Transferimi i informacionit që nuk ndikon në nivelin e sigurisë

Për të hyrë në faqet e mbrojtura me parametra të kaluar

Për të transmetuar informacione që ndikojnë në nivelin e sigurisë

Për të transmetuar informacione që nuk mund të modifikohen nga përdoruesi (disa transmetojnë tekstin e pyetjeve SQL.

Metoda POST

Ju mund të dërgoni të dhëna duke përdorur metodën POST vetëm duke përdorur një formular në një faqe HTML. Dallimi kryesor midis POST dhe GET është se të dhënat nuk transmetohen në kokën e kërkesës, por në trup, prandaj përdoruesi nuk i sheh ato. Mund të modifikohet vetëm duke ndryshuar vetë formën.

Avantazhi:

Siguri dhe funksionalitet më i madh për kërkesat që përdorin formularët POST.

E metë:

Më pak disponueshmëri.

Për çfarë duhet ta përdorni:

Për të transmetuar një sasi të madhe informacioni (tekst, skedarë..);

Për të transmetuar çdo informacion të rëndësishëm;

Për të kufizuar aksesin (për shembull, përdorni vetëm formularin për navigim - një opsion që nuk disponohet për të gjitha programet robotike ose grabitësit e përmbajtjes).

Për çfarë nuk duhet të përdoret:

Asnjë kufizim.

Ngarkimi i skedarëve duke përdorur metodën POST

PHP është në gjendje të pranojë një skedar të shkarkuar duke përdorur çdo shfletues. Kjo bën të mundur ngarkimin e skedarëve tekst dhe binar. I kombinuar me autentifikimin PHP dhe funksionet e sistemit të skedarëve, ju keni kontroll të plotë se kush lejohet të ngarkojë skedarë dhe çfarë të bëjë me skedarin pasi të jetë ngarkuar.

Faqja e ngarkimit të skedarit mund të zbatohet duke përdorur një formë të veçantë që duket diçka si kjo:

//Formulari për ngarkimin e skedarëve Dërgo këtë skedar:

Në shembullin e mësipërm, "_URL_" duhet të zëvendësohet me një lidhje në skriptin PHP. Fusha e fshehur MAX_FILE_SIZE (vlera duhet të specifikohet në bajt) duhet t'i paraprijë fushës së përzgjedhjes së skedarit dhe vlera e saj është madhësia maksimale e lejuar e skedarit për t'u pranuar. Gjithashtu duhet të siguroheni që të specifikoni enctype="multipart/form-data" në atributet e formës, përndryshe skedarët nuk do të ngarkohen në server.

Kujdes

Opsioni MAX_FILE_SIZE është një rekomandim i shfletuesit, edhe nëse PHP do të kontrollonte gjithashtu këtë gjendje. Anashkalimi i këtij kufizimi në anën e shfletuesit është mjaft i lehtë, kështu që nuk duhet të mbështeteni në këtë veçori për të bllokuar të gjithë skedarët më të mëdhenj. Megjithatë, nuk ka asnjë mënyrë për të anashkaluar kufizimin maksimal të madhësisë së PHP. Gjithsesi, duhet të shtoni një variabël të formës MAX_FILE_SIZE, pasi i pengon përdoruesit të presin me ankth gjatë transferimit të skedarëve të mëdhenj, vetëm për të zbuluar se skedari është shumë i madh dhe transferimi në të vërtetë dështoi.

Si të përcaktoni një metodë kërkese?

Direkt:

Getenv("REQUEST_METHOD");

do të kthehet GET ose POST.

Cila metodë duhet përdorur?

Nëse formulari përdoret për të kërkuar disa informacione, për shembull gjatë një kërkimi, atëherë ai duhet të dërgohet duke përdorur metodën GET. Për të qenë në gjendje të përditësoni faqen, mund ta shënoni atë dhe ose t'ia dërgoni lidhjen një miku.

Nëse, si rezultat i paraqitjes së një formulari, të dhënat regjistrohen ose ndryshohen në server, atëherë ato duhet të dërgohen duke përdorur metodën POST, dhe pas përpunimit të formularit, është e domosdoshme të ridrejtoni shfletuesin duke përdorur metodën GET. Gjithashtu, POST mund të nevojitet nëse një sasi e madhe e të dhënave duhet të transferohet në server (për GET është shumë e kufizuar), dhe gjithashtu nëse të dhënat e transferuara nuk duhet të shfaqen në shiritin e adresave (kur futni një hyrje dhe fjalëkalim, për shembull).

Në çdo rast, pas përpunimit të POST-it, gjithmonë duhet të ridrejtoni shfletuesin në ndonjë faqe, qoftë edhe e njëjta, por pa të dhënat e formularit, në mënyrë që kur faqja të rifreskohet, ato të mos regjistrohen më.

Si të transferoni të dhënat në një skedar tjetër direkt nga trupi i një programi PHP duke përdorur metodat GET dhe POST? Një shembull për të demonstruar dërgimin e të dhënave duke përdorur metodat POST dhe GET njëkohësisht dhe marrjen e një përgjigje nga serveri.

Ky artikull diskuton përdorimin e ndryshores PHP _SELF në detaje.

Çfarë është ndryshorja PHP _SELF?

Ndryshorja PHP _SELF kthen emrin dhe shtegun e skedarit aktual (në lidhje me rrënjën e dokumentit). Ju mund ta përdorni këtë variabël në atributin e veprimit të formularit. Ka edhe disa nuanca që duhet të dini. Natyrisht, nuk mund t'i injorojmë këto nuanca.

Le të shohim disa shembuj.

Echo $_SERVER["PHP_SELF"];

1) Le të supozojmë se skedari juaj php ndodhet në adresën e mëposhtme:

Http://www.yourserver.com/form-action.php

Në këtë rast, ndryshorja PHP _SELF do të përmbajë:

"/form-action.php"

2) Le të supozojmë se skedari juaj php ndodhet në këtë adresë:

Http://www.yourserver.com/dir1/form-action.php

PHP_SELF do të jetë:

"/dir1/form-action.php"

PHP _SELF në atributin e veprimit të formës. Pse ishte e nevojshme ajo atje?

Zakonisht ndryshorja PHP _SELF përdoret në atributin e veprimit të etiketës së formës. Atributi i veprimit specifikon adresën në të cilën do të dërgohet përmbajtja e formularit pas konfirmimit (përdoruesi klikon në butonin me type="submit"). Si rregull, kjo është e njëjta faqe nga e cila u largua formulari.

Megjithatë, nëse riemërtoni skedarin e referuar nga formulari, do t'ju duhet të riemërtoni emrin e skedarit në atributin e veprimit, përndryshe formulari nuk do të funksionojë.

Ndryshorja PHP _SELF do t'ju shpëtojë nga korrigjimet e panevojshme, pasi adresa e faqes do të gjenerohet automatikisht bazuar në emrin e skedarit.

Le të themi se keni një skedar formulari të quajtur form-action.php dhe dëshironi që formulari të dorëzohet në të njëjtin skedar pas konfirmimit. Zakonisht ata shkruajnë kështu:

Por ju mund të përdorni variablin PHP _SELF në vend të form-action.php. Në këtë rast, kodi do të duket si ky: