Գոյություն ունեն երկու հասկացություն, որոնք տարածված են գրեթե բոլոր ծրագրերի համար. Սա մուտքային տվյալների եւ ելքային արտադրանքի վերամշակումն է: Այս էջում մենք կենտրոնանում ենք 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 ֆայլ հետեւյալ կերպ.
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 էջում:
Մուտքագրեք ցանկացած արժեք, ձեւի դաշտերում եւ կտտացրեք «Ներկայացրեք» կոճակը: Browser- ի կոճակը սեղմելուց հետո բացում է մեկ այլ էջ (սցենարիստ.ֆ.ա), եւ ձեր մուտքագրված տվյալները կցուցադրվեն զննարկչի պատուհան: Կարծում եմ, պարզ է, թե ինչու. Զննարկիչը տվյալները կփոխանցի սցենարի սցենարի սցենարին: Այս տվյալները մշակվելու եւ ցուցադրվելու են:
Փոստի մեթոդՀիմա եկեք դիտենք, թե ինչպես է գործում մեթոդը Գրառումը:.
Այս մեթոդները ուղարկելու համար Գրառումը: Դուք պետք է օգտագործեք HTML ձեւ: Ինչպես հիշում ենք, որ տվյալների ուղարկման եղանակը պատասխանում է մեթոդի հատկանիշով Պիտակի ձեւ , Հետեւաբար, դուք պետք է նշեք փոստային արժեքը մեթոդի հատկանիշում: Հակառակ դեպքում ձեւը կարող է լինել նույնը, ինչ ստացված մեթոդի համար: Մենք կփոխենք մեր ձեւը, որը մենք արդեն օգտագործել ենք տվյալները փոխանցելու մեթոդին փոխանցելու մեթոդին փոխանցելու մեթոդին:
Ինչպես տեսնում եք, ձեւը մնում է նույնը, բացառությամբ մեթոդի եւ գործողությունների ատրիբուտների: Այժմ տվյալները կփոխանցվեն Script_post.php սցենարին: Տեղադրեք մեր ձեւը forma_post.php էջում:
Այժմ դուք պետք է գրեք սցենար, որը կվերամշակի մեր ձեւի տվյալները:
Տվյալների սցենարում փոխանցվող մեթոդ ստանալու համար Գրառումը: անհրաժեշտ է օգտագործել ներկառուցված զանգված $ _Post., Այս զանգվածի ստեղները կլինեն պարամետրերի անունները: Մեր դեպքում հարկավոր է օգտագործել $ _Post [«num»], $ _post ["TYPE"], $ _ POST ["V"], Այս զանգվածի տարրերը պարունակում են փոխանցվող տվյալների արժեքներ: Ինչպես տեսնում եք, ստացված մեթոդը օգտագործելու տարբերությունը, այն միայն արտահայտվում է միայն զանգվածի $ _post- ի օգտագործման մեջ: Հետեւաբար, մենք դժվար չենք լինի գրել script_post.php ֆայլ:
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ամբողջովին անհասկանալի է), ինչ է, մի անհանգստացեք, մենք շուտով կվերադառնանք այս խնդրին:
- Ստացեք - Ուղարկելով ձեւի տվյալներ հասցեի բարում:
Պիտակ - Նշում է տիպի հատկանիշով սահմանված ձեւը.
- «Տեքստի» արժեքը սահմանում է մեկ տող մուտքի դաշտ
- «Ներկայացրեք» արժեքը սահմանում է կոճակը, երբ ձեւը սեղմվում է սերվերի վրա
Հնարավոր են այլ արժեքներ (եւ - ոչ մի միակ պիտակը, որը նշում է ձեւի տարրը):
Այսպիսով, ինչ է պատահում, երբ մենք սեղմում ենք «OK» կոճակը:
- Զննարկիչը զննում է ձեւի մեջ ներառված տարրերը եւ առաջացնում է նրանց անունից եւ արժեքի վերագրում այս ձեւերը: Ենթադրենք, Վասիա անունը ներդրվել է: Այս դեպքում այս ձեւերը `անուն \u003d Vasya & Okbutton \u003d OK
- Զննարկիչը միացում է հաստատում սերվերի հետ, հարցում է ուղարկում գործողությունների պիտակի հատկանիշում նշված սերվերին
- Սերվերը վերլուծում է ստացված հարցումը, ձեւավորում է պատասխան, այն ուղարկում է զննարկիչ եւ փակում կապը
- Զննարկիչը ցուցադրում է սերվերից ստացված փաստաթուղթը:
Նույն հարցումը ձեռքով ուղարկելը (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- ն կամ կտտացնելով հղումը: Թեթլ
8-12 տողերի ձեւը պարունակում է երկու իրեր, անուն եւ Օկբուտթոն: Մեթոդի ատրիբուտը սահմանում է փոստի ձեւի մեթոդը, գործողությունների հատկանիշը, որը ցույց է տալիս URL- ն, որին ուղարկվում է ձեւը, լցված է PHP_ Serven Server- ի փոփոխական արժեքով `այս պահին սցենարի հասցեն:
=$_SERVER["PHP_SELF"]?> - ձայնագրման կրճատ ձեւ echo $_SERVER["PHP_SELF"]; ?> .
Ենթադրենք, անունով դաշտում մենք մտանք Վասայի արժեքը, իսկ 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-րդ տողում հնարավոր կլինի գրել նույն հաջողությամբ
Այստեղ ոչ մի նոր տեխնիկա չի օգտագործվում: Դիտարկեք, կատարեք ծածկագիրը, փորձեք փոփոխել ...
Փոխեք վերջին օրինակը, որպեսզի օգտագործողը պետք չէ վերաձեւակերպել դաշտերը: Դա անելու համար լրացրեք ձեւի տարրերի արժեքի հատկանիշները պարզապես մուտքագրված արժեքներ:
$ 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»]: