Հարցումները փակցնում են եւ ստացեք այլը: Սովորել աշխատել ստացման եւ փոստային պահանջների հետ

Գոյություն ունեն երկու հասկացություն, որոնք տարածված են գրեթե բոլոր ծրագրերի համար. Սա մուտքային տվյալների եւ ելքային արտադրանքի վերամշակումն է: Այս էջում մենք կենտրոնանում ենք CGI ծրագրի մուտքի վերամշակման վրա: Նախ, որտեղ մուտքային տվյալները գալիս են, եւ, երկրորդը, քանի որ մուտքային տվյալները փոխանցվում են սերվերին: CGI- ի արդյունավետ ծրագրեր գրելու համար դուք պետք է հստակ պատկերացում ունենաք այս բաների մասին:

Մի քիչ http- ի մասին:

Սերվերը ստանում է երեք տեսակի հարցում, ստացեք, փակցրեք եւ գլուխ: Ծրագրի հայցը վեբ սերվերին հետեւյալն է.

Ստացեք /index.html http / 1.0

Առաջին մասը Այս դեպքը Ստացեք հարցման մեթոդը, երկրորդը, index.html, պահանջվող URL- ն է, երրորդ, http / 1.0, հաճախորդի կողմից օգտագործվող արձանագրություն:

Հարցման երկու հիմնական մեթոդներն են ստանում եւ փակցնում: Սրանք այն մեթոդներն են, որոնք ձեզ հասանելի են ձեւ ստեղծելիս: Գլխի մեթոդը հազվադեպ է օգտագործվում զննարկչի կողմից, քանի որ այն պահանջում է միայն պատասխան վերնագիր, եւ արձագանքման մարմինը այդ դեպքում չի փոխանցվում: Օրինակ, ստուգելու համար, թե էջը չի փոխվել, զննարկիչը կարող է տիտղոս պահանջել, բայց այն չի առաջացնում լիարժեք տվյալների փոխանակում:

Ստացեք մեթոդ

Լռելյայն, ստացման մեթոդը օգտագործվում է պահանջելիս: Փոստի մեթոդը օգտագործվում է միայն այն դեպքում, երբ այն հստակ նշված է ձեւի պահանջով: CGI ծրագրավորողի համար շատ կարեւոր է հասկանալ, որ ստացող մեթոդը պահանջելիս այս ձեւերը URL- ի հետ միասին փոխանցվում են սերվերին: CGI- ի աջակցության վեբ սերվերները պատճենում են այս տվյալները շրջակա միջավայրի փոփոխականին, որը կոչվում է Query_String: Դրանից հետո շրջակա միջավայրի փոփոխականից տվյալներ ստանալու մտահոգությունը եւ դրանց վերամշակումը նշանակվում է CGI ծրագրին:

Հարցման տողից URL- ն այսպիսին է.

Http://www.doman-name.com/login.pl?nick\u003dmaks&psw\u003dparol

Նշան? Առանձնացնում է հարցման տողը `ռեսուրսից url- ից. Nick and PSW - Սերվերին փոխանցված փոփոխականներ, համապատասխանաբար, իրենց արժեքները:

Փոստի մեթոդ

Փոստի մեթոդը օգտագործվում է այն դեպքում, երբ այն հստակորեն նշված է մեթոդի ձեւի հատկանիշում: Ի տարբերություն ստացող մեթոդի, տեղադրում է տվյալները ոչ թե URL- ում, այլ հարցման մարմնում: Հետադարձ հարցումը հիմնականում նման է HTTP պատասխանին: Առաջին տողը ստանդարտ է Հարցում http.որի մեջ նշված է փոստային մեթոդը: Դա կարող է ունենալ անհրաժեշտ լրացուցիչ վերնագրեր `պահանջի մարմնից առանձնացված դատարկ տողի միջոցով:

Հարցման մարմինը, երբ փոստային մեթոդը օգտագործելիս ծրագիրը փոխանցվում է որպես ստանդարտ մուտքային հոսք:

Ընտրություն ստանալու եւ փակցնելու միջեւ

Հասկանալի է, որ CGI ծրագրավորողի առջեւ ձեւեր մշակելիս հարցը հետեւյալն է. Այս մեթոդներից որ մեկն է կիրառվում: Շատ դեպքերում երկու մեթոդները կիրառելի են, եւ երկուսն էլ լավ կաշխատեն: Այնուամենայնիվ, կան իրավիճակներ, երբ մեկ կամ մեկ այլ մեթոդի օգտագործումը որոշակի առավելություններ է տալիս:

Դիտարկենք մի քանի իրավիճակներ, երբ իմաստ ունի նախընտրել ստացողը կամ փոստային մեթոդը:

  • Եթե \u200b\u200bցանկանում եք, որ ձեր ծրագիրը կանչվի հղումով, ապա նախապատվությունը պետք է տրվի ստացման մեթոդը:
  • Եթե \u200b\u200bդուք չեք ցանկանում ձեր ծրագրով փոխանցվող փաստարկները, որոնք գրանցվելու են սերվերի հաշվետվության ֆայլում, օգտագործեք փոստային մեթոդը: Օրինակ, եթե ձեւը պահանջում է հստակեցնել օգտվողի անունը եւ գաղտնաբառը, դժվար թե ցանկանաք, որ անուններն ու գաղտնաբառերը պահվեն զեկույցի ֆայլում: Բացի այդ, խելամիտ չէ գաղտնաբառը փոխանցել որպես URL- ի մաս:
  • Եթե \u200b\u200bձեր ձեւը ունի էական չափեր, այն տեքստային տուփ չէ, նոտաներով եւ մեկնաբանություններով, ապա պետք է օգտագործվի փոստային մեթոդը: Ընդհանրապես, դա հնարավոր է, եւ այս դեպքում օգտագործեք ստացման մեթոդը, բայց այդ դեպքում կարող եք հանդիպել սահմանափակումների վրա `տարբեր տարբերակներով Օպերացիոն համակարգեր եւ զննարկիչներ (սահմանափակումների փոփոխականների չափի պատճառով): Ավելի հեշտ է օգտագործել փոստային մեթոդը:
  • Եթե \u200b\u200bձեր ձեւը պարունակում է ֆայլի դաշտ, օգտագործեք փոստային մեթոդը: Բացի այդ, այս դեպքում անհրաժեշտ է տեղադրել բազմապրոֆի վերամբառնի արժեքը բազմակողմանի / ձեւաթղթերում:

Զննարկչի հաճախորդները կարող են տեղեկատվություն ուղարկել վեբ սերվերին:

Նախքան զննարկիչը տեղեկատվություն է ուղարկում, այն կոդավորում է այն, օգտագործելով URL կոդավորումը կոչվող սխեման: Այս զույգ սխեմայում անունը / արժեքը զուգորդվում է հավասար նշանների հետ, եւ տարբեր զույգեր բաժանվում են ամպերսանդի կողմից:

Name1 \u003d Value1 & Name2 \u003d Value2 & Name3 \u003d Value3

Տեղերը հանվում եւ փոխարինվում են + խորհրդանիշով, եւ ոչ ալֆա թվային ցանկացած այլ կերպարներ փոխարինվում են վեցանկյուն արժեքներով: Տեղեկատվությունը կոդավորվելուց հետո այն գնում է սերվերի:

Ստացեք մեթոդ

Ստացող մեթոդը ուղարկում է կոդավորված օգտվողի տեղեկատվություն, որն ավելացվում է էջի պահանջին: Էջերը եւ կոդավորված տեղեկատվությունը առանձնացված են միմյանցից: ստորագրել հարց:

http://www.test.com/index.htm?name1\u003dvalue1&name2\u003dvalue2.

  • Ստացող մեթոդը ստեղծում է երկար տող, որը ցուցադրվում է ձեր սերվերի տեղեկամատյաններում զննարկչի «գտնվելու վայր» դաշտում:
  • Ստացող մեթոդը սահմանափակվում է միայն 1024 նիշ ուղարկելու համար:
  • Երբեք օգտագործեք ստացված մեթոդը, եթե ունեք գաղտնաբառ կամ այլ գաղտնի տեղեկատվություն Ուղարկել սերվերին:
  • Ստացեք հնարավոր չէ օգտագործել երկուական տվյալներ փոխանցելու համար, ինչպիսիք են պատկերները կամ տեքստային փաստաթղթերը սերվերին:
  • Ստացող մեթոդով ուղարկված տվյալների հասանելիությունը կարելի է ձեռք բերել, օգտագործելով Query_String միջավայրի փոփոխականը:
  • PHP- ն ապահովում է Associative $ _get զանգված, մուտքագրման մեթոդը օգտագործելու համար:

Եթե \u200b\u200b($ _ ստացեք [«name»] || $ _get [«Բարի գալուստ»: $ _get ["name"]; «Դու»: Ելք () ;)

Անուն: Տարիք:

Փոստի մեթոդ

Մեթոդ Գրառումը: Տեղեկատվություն է ուղարկում HTTP վերնագրերի միջոցով: Տեղեկատվությունը կոդավորված է, ինչպես նկարագրված է մեթոդի դեպքում Ստացեքեւ տեղադրված է վերնագրում Query_string..

  • Հետընտրական մեթոդը սահմանափակումներ չունի այն տվյալների չափի վրա, որը ցանկանում եք ուղարկել:
  • Հետընտրական եղանակը կարող է օգտագործվել ASCII ուղարկելու, ինչպես նաեւ երկուական տվյալներ ուղարկելու համար:
  • Post Method- ի կողմից ուղարկված տվյալները անցնում են HTTP- ի վերնագրի միջոցով, ուստի անվտանգությունը կախված է HTTP արձանագրությունից: Օգտագործելով անվտանգ HTTP, դուք կարող եք համոզվել, որ ձեր տեղեկատվությունը պաշտպանված է:
  • PHP- ն ապահովում է Associative $ _post զանգված, մուտք գործելու համար բոլոր ուղարկված տեղեկությունները `օգտագործելով փոստային մեթոդը:

Փորձեք հետեւյալ օրինակը `աղբյուրի կոդը տեղադրելով test.php սցենարի մեջ:

Եթե \u200b\u200b($ _ post [«name»] || $ _post [«Տարիքը»]) (եթե (preg_match (»[^ a-za-z» -] »(Անվան") («Անվավեր անունն ու անունը պետք է լինեն ալֆա»);) echo «Ողջույն»: $ _post [«Անուն»]: $ _); Ելք ();

Անուն: Տարիք:

Փոփոխական $ _request

PHP փոփոխական $ _Request. Պարունակում է բովանդակություն, ինչպես $ _Get., $ _Post., Այսպիսով ես. $ _Cookie., Մենք կքննարկենք փոփոխականը $ _Cookie.Երբ մենք պատմում ենք թխուկների մասին:

PHP $ _request փոփոխականը կարող է օգտագործվել ստացված եւ փակցնելու մեթոդների միջոցով ուղարկված ձեւի տվյալներից արդյունքի արդյունքի ձեռքբերման համար:

Ընդհանուր առմամբ նրանց միջեւ, այն փաստը, որ նրանք հավասարապես աշխատում են: Նրանց միջեւ տարբերությունը տեխնիկապես ոչ: Բայց կա գաղափարական տարբերություններ:

Ես նրանց մասին կպատմեմ PHP- ի համատեքստում: Խնդրում ենք նկատի ունենալ, որ HTTP արձանագրություն PHP- ն ունի անուղղակի վերաբերմունք, քանի որ այն ստեղծվել է փոխանակման համար hTML էջեր Եվ PHP- ն պարզապես ընդլայնում է հնարավորությունները, իսկ մյուսը:

Ստացեք հարցում օգտագործվում է տվյալների հաղորդագրություն ուղարկելու համար: (Ես հիշեցնում եմ, որ տեխնիկապես հավասարապես աշխատում է հավասարապես):

Հետեւաբար, PHP- ի համատեքստում, հապաղելով այս գաղափարախոսությանը հետեւյալ կերպ.
1. Ամեն անգամ PHP- ն գործարկվում է, SuperGlobal Arrays- ը ($ _get, $ _post) ստեղծվում է լռելյայն:
2. Եթե հարցման տողի մեջ կա հարցական նշան (?): Դրանից հետո ամեն ինչ համարվում է դրանից հետո Պարամետրեր Ստացեք հարցում, դրանք ներկայացված են «Հիմնական» ձեւաչափով \u003d «Արժեք» եւ ամպերդի ստորագրությունը (&) օգտագործվում է որպես բաժանարար
Օրինակ:
Ստացեք /index.php?Name\u003dandrey&surname\u003dhalkin
Սա հարցման տող է, այստեղ 2 պարամետր: Այս պարամետրերը կընկնեն $ _get զանգվածի մեջ:
3. $ _post- ը լցված է մեկ այլ եղանակով: Այս զանգվածի բովանդակությունը լրացվում է «Հայցի վերնագրերից»: Այսինքն, աչքերից թաքնված տեղից բացահայտորեն: Նման վերնագրեր ստեղծելու ամբողջ ռեժիմը զննարկիչ է գրավում: Չնայած երբեմն ինչ-որ բան վերնագրերում խմբագրվում է ձեռնարկի մեջ:

Ամենից հաճախ, գրառման հարցումը օգտագործվում է ձեւերով (տվյալներ ուղարկելու համար):

Օրինակ, մենք ունենք ձեւ, որը պետք է մուտք գործի 2 դաշտային մուտք եւ գաղտնաբառ:

Պատկերացրեք, որ մենք օգտագործում ենք ստացման մեթոդը: Այնուհետեւ, ձեւ ուղարկելիս մենք դիմում ենք հետեւյալ հասցեին /login.php?login\u003dandrey&password\u003d123 Համաձայնեք, որ դա անվտանգ չէ նման տեղեկատվությունը փոխանցելու համար: Յուրաքանչյուրը կարող է բացել ձեր զննարկիչը եւ սկսել մուտքագրել կայքի հասցեն: Այն կարող է տեսնել ձեր գաղտնաբառերը եւ մուտք գործել:

Բայց եթե մենք նշեցինք հետագա մեթոդով, ապա մենք կստանային հետեւյալ պահանջը.
Post /Login.php (Մուտք \u003d Անդրեյ եւ գաղտնաբառ \u003d 123) Ինչ է փակագծերում թաքնված եւ չի պահպանվելու զննարկիչը:

Ընդհանուր առմամբ, ամփոփիչ.
Ստանալ հատուկ էջը հատուկ ձեւով ստանալն է (տեսակավորումը, ընթացիկ էջ Օրագիր, որոնման լար եւ այլն):
Post - Mandrel- ի տվյալների համար, որոնք չեն ազդում էջի ցուցադրման վրա, այն ձեւով, երբ այս տվյալները ազդում են միայն սցենարի կատարման արդյունքի վրա (մուտք, գաղտնաբառեր, վարկային քարտի համարներ, հաղորդագրություններ եւ այլն):

Եվ օրինակ, եւս մեկ լավ լուր կարող է համակցվել
Post / index.php?page\u003dLogin (Մուտք \u003d Անդրեյ եւ գաղտնաբառ \u003d 123) Կարծում եմ, որ արդեն բացատրել եմ, որ ստացվում է, եւ ինչ պարամետրեր կընկնեն:

Ժամանակակից վեբ ռեսուրսները ոչ միայն տեղեկատվություն են տրամադրում այցելուին, այլեւ շփվում են դրա հետ: Օգտագործողի հետ շփվելու համար հարկավոր է դրանից ստանալ որոշ տեղեկություններ: Տվյալների ձեռքբերման մի քանի մեթոդներ կան, շատ տարածված մեթոդներ: Ստացեք մի քանազոր Գրառումը:, Եւ համապատասխանաբար Բ. PHP. Այս տվյալների փոխանցման այս մեթոդներին կա աջակցություն Ստացեք մի քանազոր Գրառումը:, Տեսնենք, թե ինչպես են գործում այս մեթոդները:
Ստացեք մեթոդՏվյալներ Ստացեք Փոխանցվում է դրանք ավելացնելով կոչվող սցենարի URL հասցեին, որը նախատեսված է ստացված տեղեկատվության մշակման համար: Բացատրության համար Այս մեթոդը Հասցեի բարում հավաքեք ռեսուրսային URL- ը հասցեների բարում եւ առաջին հերթին ավելացրեք հարցի նշանը (?), Իսկ հետո համարը num \u003d 10: օրինակ

http: //domure.ru/script.php? num \u003d 10


Եթե \u200b\u200bդուք ունեք Տեղական սերվեր, ապա սովորաբար տիրույթը կլինի տեղական, եւ այնուհետեւ կանդրադառնա նախորդ գրառումը

http: //localhost/script.php? num \u003d 10


Այս դեպքում մենք NUM պարամետրը փոխանցում ենք 10-ի: Հետեւյալ պարամետրերը ավելացնելու համար պետք է օգտագործվի սցենարը `ամապտացուցիչ (&), օրինակ

http: //domure.ru/script.php? Num \u003d 10 & Type \u003d New & V \u003d տեքստ


Այս դեպքում մենք փոխանցեցինք երեք պարամետրեր սցենարին. Թվարկեք 10 արժեքով, մուտքագրեք «նոր» եւ V արժեքը «տեքստի» արժեքով:
Այս պարամետրերը սցենարում ստանալու համար հարկավոր է օգտագործել ներկառուցված զանգված: $ _Get. $ _Get [«Num»], $ _get ["TYPE"], $ _ Ստացեք ["V"], Այս զանգվածի տարրերը պարունակում են փոխանցվող պարամետրերի արժեքներ: Այս օրինակը ցուցադրելու համար ստեղծեք Script.php ֆայլ հետեւյալ կերպ.



PHP- ում ստացված մեթոդը ստուգելը


echo ($ _get [«Num»] »:
");
echo ($ _get ["Type"]:
");
echo ($ _get ["v"]);
?>


Եվ հիմա այս ֆայլը զանգահարեք զննարկիչում

http: //at/Script.php? Num \u003d 10 & Type \u003d New & V \u003d տեքստ


Եվ կտեսնեք փոխանցվող պարամետրերը զննարկչի պատուհանում: Բայց եթե այս ֆայլը անվանում եք առանց Լրացուցիչ պարամետրեր http: ////Script.php, կտեսնեք սխալներ, որոնք կտան թարգմանիչ PHP.Որ զանգվածի նման տարրեր չկան: Օգտագործողի այս տվյալները ստուգելը կարող է կարեւորվել ոչ մի հոդված, այնպես որ այս հոդվածում ես չեմ շոշափելու այս պահը:
Ինչպես հավանաբար հասկանում եք, օգտագործողին ստիպել օգտվողի հասցեների բարը հավաքելը շատ լավ եւ լիովին անհարմար չէ: Հետեւաբար, օգտագործողից տվյալներ ստանալու համար հարկավոր է օգտագործել HTML ձեւ: Գրեք պարզ HTML -form:


Մուտքագրեք համարը

Դուք ունեք համակարգիչ:

Ձեր մեկնաբանությունը:





Մեկնաբանում եմ ստեղծված ձեւը: Ձեւաթղթերը ստեղծվում են ձեւի պիտակի կողմից: Ձեւաթղթի դաշտերը ստեղծվում են մուտքագրմամբ, ընտրեք, տեքստարային պիտակներով (կարող եք ավելին կարդալ): Ձեւի պիտակում սցենարի URL- ն նշված է գործողությունների հատկանիշում, որը կստանա այս ձեւերը: Մեր դեպքում մենք արդեն նշել ենք արդեն իսկ գոյություն ունեցող Script.php ֆայլը: Մեթոդի ատրիբուտը սահմանում է տվյալների ուղարկման եղանակը: Մենք նշեցինք մեթոդը Ստացեք, Հիմա մենք գիտենք, թե այս ֆայլը ինչ ֆայլ է փոխանցվելու, եւ որ եղանակով մնում է պարզել, թե որտեղ փնտրել դրանք:
Այս ձեւի տվյալները կփոխանցվեն վեբ ռեսուրսների զննարկչին `դրանք ավելացնելով URL- ին. Առաջին հերթին կլինի հարցական նշան (?), Ապա պարամետրերը բաժանվում են Ampersant- ի (&): Պարամետրերի անունը կվերցվի անվան հատկանիշից, որը պետք է ուղղագրվի ցանկացած դաշտային դաշտից: Պարամետրի արժեքը կախված կլինի դաշտի տեսակից: Եթե \u200b\u200bդաշտը տեքստային է, օգտագործողի կողմից մուտքագրված տեքստը կլինի օգտագործողը: Եթե \u200b\u200bդաշտը կլինի ցուցակ, անջատիչների կամ դրոշների խումբ, ապա ընտրված նյութի արժեքի արժեքի արժեքը կլինի պարամետրը: Ես կբացատրեմ մեր ձեւի օրինակով: Եթե \u200b\u200bօգտագործողը մուտքային դաշտում մուտք է գործում 10 համարը, ապա պարամետրի անունը կլինի համարը (մուտքի պիտակի անվան հատկանիշի արժեքը), եւ արժեքը կլինի արժեքը (օգտագործողի մուտքագրված համարը): Ըստ այդմ, զննարկիչը կկազմի «Num \u003d 10» մի զույգ: Եթե \u200b\u200bցուցակից օգտագործողը ընտրում է «Այո» տարբերակը, ապա պարամետրը կլինի տեսակը (Անվան պիտակի ընտրության արժեքի հատկանիշը կլինի արժեքը (արժեքի պիտակի տարբերակի արժեքը) ): Ըստ այդմ, զննարկիչը կկազմի մի զույգ «տիպ \u003d այո»:
Այժմ այս ձեւը կտեղադրվի Forma.php էջում:



Տվյալների փոխանցման ձեւը `օգտագործելով ստացեք եւ PHP



Մուտքագրեք համարը

Դուք ունեք համակարգիչ:

Ձեր մեկնաբանությունը:







Մուտքագրեք ցանկացած արժեք, ձեւի դաշտերում եւ կտտացրեք «Ներկայացրեք» կոճակը: Browser- ի կոճակը սեղմելուց հետո բացում է մեկ այլ էջ (սցենարիստ.ֆ.ա), եւ ձեր մուտքագրված տվյալները կցուցադրվեն զննարկչի պատուհան: Կարծում եմ, պարզ է, թե ինչու. Զննարկիչը տվյալները կփոխանցի սցենարի սցենարի սցենարին: Այս տվյալները մշակվելու եւ ցուցադրվելու են:
Փոստի մեթոդՀիմա եկեք դիտենք, թե ինչպես է գործում մեթոդը Գրառումը:.
Այս մեթոդները ուղարկելու համար Գրառումը: Դուք պետք է օգտագործեք HTML ձեւ: Ինչպես հիշում ենք, որ տվյալների ուղարկման եղանակը պատասխանում է մեթոդի հատկանիշով Պիտակի ձեւ , Հետեւաբար, դուք պետք է նշեք փոստային արժեքը մեթոդի հատկանիշում: Հակառակ դեպքում ձեւը կարող է լինել նույնը, ինչ ստացված մեթոդի համար: Մենք կփոխենք մեր ձեւը, որը մենք արդեն օգտագործել ենք տվյալները փոխանցելու մեթոդին փոխանցելու մեթոդին փոխանցելու մեթոդին:


Մուտքագրեք համարը

Դուք ունեք համակարգիչ:

Ձեր մեկնաբանությունը:





Ինչպես տեսնում եք, ձեւը մնում է նույնը, բացառությամբ մեթոդի եւ գործողությունների ատրիբուտների: Այժմ տվյալները կփոխանցվեն Script_post.php սցենարին: Տեղադրեք մեր ձեւը forma_post.php էջում:



Փոստային եւ PHP տվյալների փոխանցման ձեւ



Մուտքագրեք համարը

Դուք ունեք համակարգիչ:

Ձեր մեկնաբանությունը:







Այժմ դուք պետք է գրեք սցենար, որը կվերամշակի մեր ձեւի տվյալները:
Տվյալների սցենարում փոխանցվող մեթոդ ստանալու համար Գրառումը: անհրաժեշտ է օգտագործել ներկառուցված զանգված $ _Post., Այս զանգվածի ստեղները կլինեն պարամետրերի անունները: Մեր դեպքում հարկավոր է օգտագործել $ _Post [«num»], $ _post ["TYPE"], $ _ POST ["V"], Այս զանգվածի տարրերը պարունակում են փոխանցվող տվյալների արժեքներ: Ինչպես տեսնում եք, ստացված մեթոդը օգտագործելու տարբերությունը, այն միայն արտահայտվում է միայն զանգվածի $ _post- ի օգտագործման մեջ: Հետեւաբար, մենք դժվար չենք լինի գրել script_post.php ֆայլ:



PSP- ի հետագա մեթոդի ստուգում


echo ($ _post [«num»] »:
");
echo ($ _post [«Տեսակը»] »:
");
echo ($ _post ["v"]);
?>


Այժմ բրա ձեւավորեք Forma_post.php ֆայլը զննարկիչում: Մուտքագրեք որոշ տվյալներ ձեւի դաշտում եւ սեղմեք «Ներկայացրեք» կոճակը: Այժմ, հավանաբար, դուք նկատեցիք, որ «Ստացեք» փոստի մեթոդի միջեւ տարբերությունը. Այս ձեւերը չեն հայտնվել զննարկչի հասցեով: Տվյալների մեթոդ Գրառումը: Դուք չեք կարող անցնել զննարկչի հասցեով: Այս էական տարբերությունը պետք է հիշել:
Մեջ PHP. Անկախության մեջ որ մեթոդի տվյալներն են ուղարկվել `փոստային եղանակով կամ ստացված մեթոդով` տվյալների միջոցով տվյալների օգտագործմամբ տվյալների միջոցով: Ստացողի եւ փոստային մեթոդների համեմատությունՍտացված մեթոդը օգտագործելիս տվյալները փոխանցվում են `ավելացնելով URL- ին: Այսպիսով, դրանք տեսանելի կլինեն օգտագործողի համար, որ անվտանգության առումով միշտ չէ, որ լավն է: Նաեւ փոխանցված տվյալների առավելագույն չափը կախված կլինի զննարկիչից `զննարկչի հասցեների բարի կերպարների առավելագույն թույլատրելի թվից:
Փոստի մեթոդը օգտագործելիս տվյալները տեսանելի չեն լինի օգտագործողի համար (չի ցուցադրվում զննարկչի հասցեի բարում): Եվ, հետեւաբար, դրանք ավելի պաշտպանված են, եւ, հետեւաբար, այս տվյալներն ավելի պաշտպանված են անվտանգության առումով: Նաեւ փոխանցվող տվյալների քանակը գործնականում սահմանափակ չէ:
Տվյալների փոխանցման եղանակ ընտրելիս անհրաժեշտ է հաշվի առնել տրվող հատկությունները եւ կանգ առնել առավել ընդունելի մեթոդով:

HTML ձեւ: Arrays $ _post եւ $ _get

HTML ձեւ: Տվյալներ սերվերին ուղարկելու մեթոդներ

HTML ձեւերով, հավանաբար, արդեն հանդիպել եք.

Մուտքագրեք ձեր անունը:

Խնայելով այս ծածկագիրը HTML ֆայլում եւ դիտելով այն ձեր նախընտրած զննարկչի միջոցով, կտեսնեք սովորական HTML ձեւը.

Պիտակ

ունենալով զույգ վերջնական պիտակ
, Իրականում, հարցնում է ձեւը: Նրա ատրիբուտները կամընտիր են.

  • Գործողություն - ցույց է տալիս URL- ն (լրիվ կամ հարաբերական), որին ուղարկվելու է ձեւը: Եթե \u200b\u200bայս հատկանիշը չի նշում, զննարկիչների մեծ մասը (ավելի ճշգրիտ ասած, ինձ համար հայտնի բոլոր զննարկիչները) ձեւ են ուղարկում ընթացիկ փաստաթղթին, այսինքն, «իրենց վրա»: Սա հարմար նվազում է, բայց HTML ստանդարտի համաձայն, անհրաժեշտ է գործողությունների հատկանիշ:
  • Մեթոդը ձեւ ուղարկելու միջոց է: Դրանցից երկուսն են:
    • Ստացեք - Ուղարկելով ձեւի տվյալներ հասցեի բարում:
      Կարող եք նկատել ներկայությունը «» խորհրդանիշի URL- ի վերջում: Եւ հետեւյալ տվյալները ձեւաչափի պարամետրով \u003d արժեք: Այստեղ «պարամետրը» համապատասխանում է ձեւի տարրերի անվան հատկանիշի արժեքին (տես ներքեւում Teg- ի մասին ), եւ «արժեքը» `արժեքի հատկանիշի բովանդակությունը (դրա մեջ, օրինակ, պարունակում է օգտագործողի մուտքագրում նույն պիտակի տեքստի դաշտում ).
      Օրինակ, փորձեք ինչ-որ բան փնտրել Yandex- ում եւ ուշադրություն դարձնել զննարկչի հասցեների բարին: Սա ստացման մեթոդ է:
    • Post - Mould սրանք ուղարկվում են հարցման մարմնում: Եթե \u200b\u200bայն ամբողջովին պարզ չէ (կամ այն \u200b\u200bամբողջովին անհասկանալի է), ինչ է, մի անհանգստացեք, մենք շուտով կվերադառնանք այս խնդրին:
    Եթե \u200b\u200bմեթոդի ատրիբուտը նշված չէ. Ստացողը նախատեսված է:

Պիտակ - Նշում է տիպի հատկանիշով սահմանված ձեւը.

  • «Տեքստի» արժեքը սահմանում է մեկ տող մուտքի դաշտ
  • «Ներկայացրեք» արժեքը սահմանում է կոճակը, երբ ձեւը սեղմվում է սերվերի վրա

Հնարավոր են այլ արժեքներ (եւ - ոչ մի միակ պիտակը, որը նշում է ձեւի տարրը):

Այսպիսով, ինչ է պատահում, երբ մենք սեղմում ենք «OK» կոճակը:

  1. Զննարկիչը զննում է ձեւի մեջ ներառված տարրերը եւ առաջացնում է նրանց անունից եւ արժեքի վերագրում այս ձեւերը: Ենթադրենք, Վասիա անունը ներդրվել է: Այս դեպքում այս ձեւերը `անուն \u003d Vasya & Okbutton \u003d OK
  2. Զննարկիչը միացում է հաստատում սերվերի հետ, հարցում է ուղարկում գործողությունների պիտակի հատկանիշում նշված սերվերին
    Օգտագործելով եղանակի հատկանիշում նշված ուղարկման մեթոդը (այս դեպքում `ստացեք), տվյալները փոխանցելով հարցումում:
  3. Սերվերը վերլուծում է ստացված հարցումը, ձեւավորում է պատասխան, այն ուղարկում է զննարկիչ եւ փակում կապը
  4. Զննարկիչը ցուցադրում է սերվերից ստացված փաստաթուղթը:

Նույն հարցումը ձեռքով ուղարկելը (Telnet- ի օգնությամբ) այսպիսին է թվում (ենթադրենք, որ Տիրույթի անունը Կայքը - www.example.com):

Telnet www.example.com 80 ստացեք /CGI-BIN/form_handler.cgi?name\u003dvasya&okbutton\u003dok http / 1.0 \\ r \\ n Հաղորդագրություն: www.example.com \\ r \\ n \\ r \\ n

Ինչպես դուք, ամենայն հավանականությամբ, արդեն կռահել եք, «Ստացեք» ուղարկելու եղանակով ձեւով սեղմելով ներկայացման կոճակը, որը դիտարկվում է համապատասխան URL- ի (հարցական նշանով եւ վերջում ձեւավորել տվյալներ) Բար:

Http://www.example.com/cgi-bin/form_handler.cgi?name\u003dvasya&okbutton\u003dok

Փաստորեն, ստացող մեթոդը միշտ օգտագործվում է սերվերից փաստաթուղթ պահանջելուց, պարզապես մուտքագրելով դրա URL- ն կամ կտտացնելով հղումը: Թեթլ URL- ն ուղղակիորեն ավելացնում է հարցի նշան եւ ձեւավորում տվյալներ:

Թերեւս այս բոլոր տեխնիկական մանրամասներն ու վարժությունները Telnet-Oh- ի հետ կապված են թվում աներեւակայելի ձանձրալի եւ նույնիսկ անտեղի («եւ ինչ ունեն PHP»): Եւ ապարդյուն: :) Սրանք HTTP արձանագրության վրա աշխատանքի հիմունքներն են, որոնք դուք պետք է իմանաք յուրաքանչյուր վեբ ծրագրավորողի համար, եւ սա տեսական գիտելիք չէ. Այս ամենը գործնականում օգտակար է:

Այժմ մեր ձեւի առաջին տողը փոխարինեք հետեւյալին.

Մենք մատնանշեցինք «փոստի» ուղարկման եղանակը: Այս դեպքում տվյալներն ուղարկվում են սերվերին մի քանի այլ եղանակով.

Telnet www.example.com 80 post /cgi-bin/form_handler.cgi http / 1.0 \\ r \\ n Հյուրընկալող: www.example.com \\ r \\ n բովանդակություն \\ r \\ N բովանդակություն-երկարություն, 41263 \\ r \\ n \\ r \\ n name \u003d Vasya & Okbutton \u003d OK

Փոստի մեթոդը օգտագործելիս այս ձեւերը ուղարկվում են «երկու մտնումից» հետո `հարցման մարմնում: Վերեւում նշված ամեն ինչ իրականում հարցման վերնագիրն է (եւ երբ մենք օգտագործեցինք ստացման մեթոդը, այդ ձեւերը ուղարկվել են վերնագրում): Որպեսզի սերվերը իմանա, թե ինչպես ավարտել հարցման մարմինները կարդալուն, վերնագիրը առկա է բովանդակության երկարությամբ. Նույնի մասին, որ ձեւի տվյալները կփոխանցվեն պարամետրով 1 \u003d Value1 & Parameter2 \u003d Value2 ..., եւ արժեքները փոխանցվում են որպես urlencode, բայց Server- ի դեպքում Հաղորդում է բովանդակության վերնագիր -type. Դիմում / X-www-form-urlencoded.

Փոստի մեթոդի առավելությունը լարային երկարության սահմանի բացակայությունն է `ձեւի տվյալներով:

Փոստի մեթոդը օգտագործելիս անհնար է ձեւ ուղարկել, պարզապես «հղում գնալը», ինչպես ստացվում էր:

Հետխորհուրդ օգտագործելիս իր գործողության հատկանիշում կարող եք նշել հարցի նշանը եւ պարամետրերը ստանալուց հետո: Այսպիսով, հետագա մեթոդը ներառում է ինչպես ստացման մեթոդը:

Arrays $ _get եւ $ _post

Այսպիսով, ձեւերը վեբ սերվերի եւ զննարկչի միջեւ տվյալներ փոխանակելու հիմնական միջոցն են, այսինքն `փոխգործակցություն ապահովել օգտվողի հետ` իրականում, որի համար անհրաժեշտ է վեբ ծրագրավորում:

Դիտարկենք մի պարզ օրինակ.



Եթե \u200b\u200b($ _server [«Հայց_մեթոդ»] \u003d\u003d «Փոստ») (
Echo »

Բարեւ, "$ _Post [" name "]."

!" ;
}
?>
">
Մուտքագրեք ձեր անունը:




8-12 տողերի ձեւը պարունակում է երկու իրեր, անուն եւ Օկբուտթոն: Մեթոդի ատրիբուտը սահմանում է փոստի ձեւի մեթոդը, գործողությունների հատկանիշը, որը ցույց է տալիս URL- ն, որին ուղարկվում է ձեւը, լցված է PHP_ Serven Server- ի փոփոխական արժեքով `այս պահին սցենարի հասցեն:

- ձայնագրման կրճատ ձեւ .

Ենթադրենք, անունով դաշտում մենք մտանք Վասայի արժեքը, իսկ OK կոճակը սեղմվեց: Միեւնույն ժամանակ, զննարկիչը ուղարկում է փոստային սերվերին: Հարցման մարմին. Անուն \u003d Vasya & Okbutton \u003d OK. PHP- ն ավտոմատ կերպով լրացնում է $ _ Խոստային զանգվածը.

$ _Post ["name"] \u003d "Vasya"
$ _Post [Okbutton] \u003d "OK"

Փաստորեն, «Վասիա» -ի արժեքը զննարկիչ է ուղարկվում urlencode-form- ում. Windows- 1251 կոդավորման համար այս արժեքը կարծես% C2% E0% F1% FF է: Բայց, քանի որ PHP- ն ինքնաբերաբար կատարում է անհրաժեշտ վերծանումը, մենք կարող ենք «մոռանալ» այս հատկության մասին. Մինչեւ ձեռքով աշխատեք HTTP հարցումների միջոցով:

Քանի որ հարցման մարմնում նշվում են միայն անուններ եւ արժեքներ, բայց ոչ ձեւի տարրերի տեսակները, PHP- ն գաղափար չունի, համապատասխանում է $ _ Post [«Անուն»: Բայց այս տեղեկատվությունը, ընդհանուր առմամբ, բացարձակապես անհրաժեշտ չէ: :)

Քանի որ դուք գիտեք, թե ինչ է գրված «Ներկայիս» կոճակի վրա, մենք ընտրովի ենք, 11-րդ տողում կարող եք ջնջել ներքեւի նկարագրությունը , Այս դեպքում զննարկիչը կուղարկի անունը \u003d vasya-vasya:

Եվ հիմա `նույնը, բայց ստանալու համար.



Եթե \u200b\u200b(ISSET ($ _ ստացեք [անունը »)) (
Echo »

Բարեւ, "$ _Get [" name "]:

!" ;
}
?>
">
Մուտքագրեք ձեր անունը:





8-րդ տողում հնարավոր կլինի գրել նույն հաջողությամբ

: Ստացեք `լռելյայն մեթոդը: Այս անգամ զննարկիչը ուղարկում է ստանալու հարցումը, որը համարժեք է Հասցեի հասցեի սանդղակի մուտքագրմանը. HTTP: //ադեսիա. //ADRIST.Php? Անուն \u003d Vasya.

Get- ի ձեւերով php մտնում է նույն կերպ, ինչպես գրառումը, այն տարբերությամբ, որ $ _get զանգվածը լցված է:

Կարդինալ տարբերությունը գծի մեջ է 4. Քանի որ դիտարկչի տողի հասցեի պարզ մուտքը ստացվում է, ստուգեք, եթե ($ _method "] \u003d\u003d« Ստացեք ») Հետեւաբար, մենք դիմում ենք ISSET () դիզայնի, որը ճիշտ է վերադառնում, եթե սահմանված է այս փոփոխականը (այսինքն, դա նշանակվել է արժեք, եթե փոփոխականը սահմանված չէ: Եթե \u200b\u200bձեւը լցվել է, ինչպես արդեն հասկացել եք, PHP- ն ինքնաբերաբար տալիս է $ _get [«Անուն»] համապատասխան արժեքը:

Ստուգումը օգտագործվում է ISSET () - Universal, այն կարող է օգտագործվել հետխորհրդի համար: Ավելին, նախընտրելի է, քանի որ այն թույլ է տալիս պարզել, թե ձեւի որ ոլորտներն են լցված:

Մի փոքր ավելի բարդ օրինակ:




Echo »Նշեք անունը:
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
Էխո:
"
;
) Ուրիշ (

" ;

Էխո »դու: $ Տարիքի. «Տարիներ
" ;
}
Echo »


" ;
}
?>
">
Մուտքագրեք ձեր անունը:


Մուտքագրեք ձեր ծննդյան տարին.





Այստեղ ոչ մի նոր տեխնիկա չի օգտագործվում: Դիտարկեք, կատարեք ծածկագիրը, փորձեք փոփոխել ...

Փոխեք վերջին օրինակը, որպեսզի օգտագործողը պետք չէ վերաձեւակերպել դաշտերը: Դա անելու համար լրացրեք ձեւի տարրերի արժեքի հատկանիշները պարզապես մուտքագրված արժեքներ:



$ Name \u003d ISSET ($ _ POST [«Անուն»])? $ _Post [«name»]: "";
$ տարի \u003d ISSET ($ _ Post [«Տարեթիվ»])? $ _Post [«Տարի»]. "";

Եթե \u200b\u200b(ISSET ($ _ post [«name»], $ _post [«Տարվա»])) (
Եթե \u200b\u200b($ _post [«name»] \u003d\u003d "») (
Echo »Նշեք անունը:
" ;
Այլապես, եթե ($ _post [«տարի»]< 1900 || $_POST [ "year" ] > 2004 ) {
Էխո: «Նշեք ծննդյան տարեթիվը: Վավեր արժեքների տիրույթ. 1900..2004
"
;
) Ուրիշ (
Էխո «Բարեւ»: $ _Post [«name»]: «!
" ;
$ Տարիքը \u003d 2004 - $ _post [«Տարեթիվ»];
Էխո »դու: $ Տարիքի. «Տարիներ
" ;
}
Echo »


" ;
}
?>
">
Մուտքագրեք ձեր անունը:


Մուտքագրեք ձեր ծննդյան տարին.





Մի քանի անհասկանալի գծեր 4 եւ 5. Ամեն ինչ շատ պարզ է. 4-րդ գիծը կարելի է արձանագրել այսպես.

եթե (isset ($ _ post [«name»]))
$ name \u003d $ _post ["name"];
Այլապես
$ Name \u003d "";

Կարող է առաջանալ հարց. Ինչու չփչացնել տողերը 4-5 եւ չգրավել.

Մուտքագրեք ձեր անունը: ">

Մուտքագրեք ձեր ծննդյան տարին. ">

Փաստն այն է, որ եթե այդ պաշտոնները չսահմանվեն, եւ կլինի, եթե ձեւը դեռ չի լրացվել, - PHP- ն նախազգուշացումներ կտա անհասանելի փոփոխականների օգտագործման մասին (եւ, ինչպես հիմնադրված է. Գտեք կոշտորեն ամրացված տիպերը փոփոխական անուններով, ինչպես նաեւ նախազգուշացնում են կայքում հնարավոր «անցքերի» մասին): Դուք, իհարկե, կարող եք կոդը թողնել մուտքով ուղղակիորեն ձեւի մեջ, բայց պարզվում է, որ շատ ծանր է:

Հասկացա? Եվ հիմա փորձեք սխալ գտնել ներքեւի կոդում: Դե, ոչ այնքան սխալ, այլ թերություններ:

hTMLSPECIALCHARS ()

Չեք գտել: Ես ձեզ կասեմ: Մուտքագրեք, օրինակ, «Անուն» դաշտում կրկնակի մեջբերումներ եւ որոշ տեքստ, օրինակ, VA "SIA. Ուղարկեք ձեւ եւ դիտեք ստացված էջի աղբյուրի կոդը: Չորրորդ գծում նման կլինի :

Մուտքագրեք ձեր անունը:

Այսինքն `ոչ մի լավ բան: Եվ եթե խորամանկ օգտագործողը մտավ JavaScript կոդ:

Այս խնդիրը լուծելու համար անհրաժեշտ է օգտագործել HTMLSpecialchars () գործառույթը, որը կփոխարինի սպասարկման նիշերը իրենց HTML ներկայացուցչության վրա (օրինակ, մեջբերումներ - շարունակվում է).



$ Name \u003d ISSET ($ _ POST [«Անուն»])? HTMLSPECIALCHARS ($ _post [«Անուն»]): "";
$ տարի \u003d ISSET ($ _ Post [«Տարեթիվ»])? HTMLSPECIALCHARS ($ _post [«Տարի»]). "";

Եթե \u200b\u200b(ISSET ($ _ post [«name»], $ _post [«Տարվա»])) (
Եթե \u200b\u200b($ _post [«name»] \u003d\u003d "») (
Echo »Նշեք անունը:
" ;
Այլապես, եթե ($ _post [«տարի»]< 1900 || $_POST [ "year" ] > 2004 ) {
Էխո: «Նշեք ծննդյան տարեթիվը: Վավեր արժեքների տիրույթ. 1900..2004
"
;
) Ուրիշ (
Էխո «Բարեւ»: $ Name. «!
" ;
$ Տարիքը \u003d 2004 - $ _post [«Տարեթիվ»];
Էխո »դու: $ Տարիքի. «Տարիներ
" ;
}
Echo »


" ;
}
?>
">
Մուտքագրեք ձեր անունը:


Մուտքագրեք ձեր ծննդյան տարին.





Կրկնեք փորձը եւ համոզվեք, որ HTML կոդն այժմ ճիշտ է:

Հիշեք. HTMLSPECIALCHARS () գործառույթը միշտ պետք է օգտագործվի, երբ ցուցադրվում է այն փոփոխականի բովանդակությունը, որում ցուցադրվում է HTML հատուկը:

phpinfo ()

Phpinfo () գործառույթը PHP- ի ամենակարեւորներից մեկն է: Այն տեղեկատվություն է ցուցաբերում PHP պարամետրերի մասին, բոլոր տեսակի կազմաձեւման փոփոխականների արժեքները ...

Ինչու եմ նշում նրան հոդվածում ձեւերի վերաբերյալ: Phpinfo () - ավելի հարմարավետ կարգաբերման գործիք: Phpinfo (), ի թիվս այլ բաների, ցուցադրում է բոլոր $ _get, $ _post եւ $ _server փոփոխականների արժեքները: Այսպիսով, եթե «կորցրած» ձեւերը, հայտնաբերելու ամենահեշտ ձեւը, որն է դեպքը, օգտագործեք phpinfo () գործառույթը: Որպեսզի գործառույթը ցուցադրել միայն փոփոխականների արժեքները (եւ դուք ստիպված չեք լինում անցնել տասնյակ էջեր), այն պետք է կոչվի հետեւյալ կերպ. Phpinfo (info_variables); , կամ - դա բացարձակապես նույնն է `Phpinfo (32);



">
Մուտքագրեք ձեր անունը:


phpinfo (32);
?>

Կամ, օրինակ, այս իրավիճակը. Դուք ցանկանում եք իմանալ այցելուի IP հասցեն: Հիշում եք, որ համապատասխան փոփոխականը պահվում է $ $ _Server, բայց - դա բավարար չէ. Նրանք մոռացան, թե ինչպես է կոչվում փոփոխականը: Կրկին զանգահարեք phpinfo (32); , Մենք փնտրում ենք ձեր IP հասցեն ափսեի մեջ եւ գտնում ենք, որ $ _Server լարային [«Remote_addr»]: