HTTP հարցման պարամետրերի փոխանցում և մշակում PHP-ի միջոցով: PHP-ով հարցումների մշակում php-ով http հարցումների մշակում

(Դենվերի բաշխում) և դուք սովորել եք, թե ինչպես գրել պարզ PHP ծրագրեր, ժամանակն է սովորելու, թե ինչպես բրաուզերը (հաճախորդը) կարող է հարցումներ կատարել սերվերին և ստանալ համապատասխան պատասխաններ: Օգտագործելով պարզ HTML ձևի ստեղծման օրինակը, մենք կուսումնասիրենք նման փոխազդեցության հիմնական սկզբունքները:

Եթե ​​դուք արդեն լավ տիրապետում եք Դենվերի դիրեկտորիաներին, կարող եք ստեղծել ցանկացած PHP ֆայլ ձեզ համար հարմար գրացուցակում և անմիջապես անցնել կոդը գրելուն: Նրանց, ովքեր դեռ վստահ չեն իրենց ուժերի վրա, խորհուրդ եմ տալիս անել հետևյալը. տնային թղթապանակում գտնվող Denver-ով (սովորաբար դա Z է) վիրտուալ սկավառակի վրա ստեղծել թղթապանակ դասեր։ Հաջորդը, այս թղթապանակում ստեղծեք մեկ այլ թղթապանակ - www . Դա քոնն է աշխատանքային թղթապանակնախագիծը, որը հասանելի կլինի բրաուզերի հասցեի տողից: Վերագործարկեք Դենվերը, որպեսզի ստեղծված հոսթը գրանցվի համակարգում։ Վերջապես, www թղթապանակում ստեղծեք index.php ֆայլ: Սա կլինի ձեր կոդով հիմնական ֆայլը:

Ինչպես տեսնում եք, սա սովորական HTML նշում է, բայց մենք ֆայլը անվանել ենք index.php, ինչը նշանակում է, որ այժմ մենք կարող ենք ցանկացած PHP հրահանգ տեղադրել փաստաթղթում:

Եթե ​​այժմ այցելեք http://lessons/ բրաուզերում, կտեսնեք հետևյալ արդյունքը.

Լրացրեք դաշտերը (օրինակ՝ անունը՝ Վասյա, ծննդյան տարեթիվը՝ 1990 թ.) և սեղմեք «ուղարկել» կոճակը։ Ինչ ես դու տեսնում? Բայց ոչինչ! Կրկին նույն ձևը, միայն դատարկ: Այնուամենայնիվ, մի շտապեք տխրել. նայեք բրաուզերի հասցեի տողին: Այն փոխվել է և այժմ այսպիսի տեսք ունի.

Http://lessons/index.php?user_name=Vasya&user_year=1990&submit_form=submit

Եվ սա նշանակում է, որ սերվերը դեռ ստացել է ձեր տվյալները:

Եկեք հիմա պարզենք:

GET մեթոդ

Նախ, ինչ է, այնուամենայնիվ, HTML ձևը: Սա ինտերֆեյս է, որը թույլ է տալիս հաճախորդի բրաուզերից ցանկացած տվյալ ուղարկել սերվեր: Նայեք ձեր ձևի հատկանիշներին.

Գործողությունների հատկանիշը պատասխանատու է ուղարկված տվյալների ստացողի հասցեի համար: Մեր դեպքում ձևը ուղարկվում է նույն հասցեով, այսինքն. դասերում/index.php.

Հատուկ ուշադրության է արժանի մեթոդի հատկանիշը, որը սահմանում է հարցումը սերվեր ուղարկելու եղանակը։ Կան մի քանի նման մեթոդներ, բայց ամենատարածված (և գործնական) մեթոդներն են GET և POST: Այժմ մեզ կհետաքրքրի GET մեթոդը։

GET հարցումը նշանակում է, որ տվյալները կուղարկվեն սերվերին անմիջապես հասցեի տողի միջոցով: Դուք արդեն համոզվել եք դրանում՝ ներկայացնելով ձևը. որոշակի տվյալներ ավելացվել են հասցեագոտում: Որտեղի՞ց են այս տվյալները գալիս: Ուշադրություն դարձրեք մուտքագրված պիտակներին HTML ձևով: Նրանք բոլորն ունեն name հատկանիշ, որը սահմանում է տվյալ դաշտի անվանումը։

GET մեթոդով հիմնական հասցեին ավելացվում է «?» նիշը: (հարցական նշան), որպեսզի սերվերը հասկանա, որ որոշ տվյալներ են հասել: «?»-ից հետո: տվյալներն ինքնին գնում են անմիջապես name=value ձևով: Եթե ​​այդպիսի մեկից ավելի տվյալներ կան, ապա դրանք բաժանվում են միության «&» նշանով։ Ներկայացրեք ձևը տարբեր դաշտի արժեքներով և ստուգեք այն:

Ժամանակն է սովորել, թե ինչպես «բռնել» և մշակել ստացված տվյալները։ Քանի որ գործողության հատկանիշը մատնանշում է ընթացիկ ֆայլ index.php, այնպես որ տվյալները գալիս են այստեղ, այսպես նույն ֆայլում մենք կգրենք GET հարցումների մշակման կոդը.

Այսպիսով, պիտակից անմիջապես հետո ավելացնել այս PHP կոդը.

Պահպանեք ֆայլը, կրկին այցելեք http://lessons/, ներկայացրեք ձևը և վա՜յ: - Ինչ եք դուք տեսնում?

Հենց հիմա, ձևը ներկայացնելուց հետո սերվերը ստացվել և մշակվելստացել է տվյալներ և ուղարկել դրա պատասխանը բրաուզերին:

Դիտարկենք մեր նախագծի PHP կոդը, որը պայման է.

Եթե ​​(isset($_GET["submit_form"])) ( )

Սերվերը ստուգում է, արդյոք ստացվել է GET հարցման փոփոխական, որը կոչվում է submit_form: Այսինքն, պարզ ասած, ձևն ընդհանրապես ներկայացվե՞լ է։ Եթե ​​այո, ապա սերվերի կողմից php կոդը ուղարկում է նոր HTML նշում՝ իր պատասխանով անմիջապես օգտվողի բրաուզերին՝ օգտագործելով echo հայտարարությունը: Եթե ​​ուշադիր ուսումնասիրեք գրավոր մշակողի կոդը, ապա ամեն ինչ անմիջապես պարզ կդառնա ձեզ համար:

Այս GET մեթոդը հետաքրքիր է: Փոխեք հասցեի տողը, օրինակ, հետևյալով.

http://lessons/index.php?user_name=myname&user_year=1900&submit_form=submit

և սեղմեք «Enter» կոճակը: Սերվերը նորից կպատասխանի ձեզ՝ արդեն ընդունելով այլ տվյալներ: Կարծում եմ՝ այս ամենը պարզ է։

GET մեթոդի թերություններն այն են, որ, նախ, կա փոխանցվող տվյալների քանակի սահմանափակում, և երկրորդ՝ այս մեթոդը բաց է, և ցանկացած տեղեկություն կարող է գաղտնալսվել: Ահա թե ինչու օգտագործողի անձնական տվյալները(մուտք, անուն, գաղտնաբառ և այլն) երբեք չպետք է փոխանցվի հասցեագոտով:

POST մեթոդ

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

Փոփոխեք ձեր ֆայլը՝ $_GET փոփոխականների անունները PHP կոդում փոխարինելով $_POST-ով և ձևի մեջ գրեք մեթոդ=POST։ Թարմացրեք էջը և նորից ուղարկեք ձևը։ Այնուամենայնիվ, արդյունքը կլինի նույնը, ինչ GET մեթոդով հասցեի բարմնացել է անփոփոխ, ինչը նշանակում է, որ տվյալները ապահով կերպով ուղարկվել են հենց հարցման մարմնում:

Նյութը համախմբելու համար մենք կստեղծենք փոքրիկ վեբ հավելված, որը կպահանջի օգտանուն և գաղտնաբառ՝ կայք մուտք գործելու համար: Օրինակի կոդը համեմատաբար բարդ կլինի և պահանջում է ձեր ուշադրությունն ու ցանկությունը՝ հասկանալու PHP ծրագրի ֆունկցիոնալությունը:

index.php ֆայլ:

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

Դիտարկենք այս տեխնոլոգիայի ներդրումը:

Խնդրում ենք նկատի ունենալ, որ մենք ուղղակիորեն չենք ցուցադրում HTML ձևի ամբողջ կոդը, այլ այն պահում ենք $form փոփոխականում:

Զգույշ եղեք չակերտներից: Ամբողջ HMTL կոդը գտնվում է միայնակ չակերտների ներսում, ուստի դրա ներքին չակերտները պետք է լինեն կրկնակի չակերտներ: Եթե ​​գրել ես

$form = «...ձեր կոդը...»,

ապա ներքին ծածկագիրը կպարունակի հակառակը` միայնակ չակերտներ:

Հաջորդը, տող 27-ը ստուգում է, թե արդյոք ձևը ներկայացվել է (նկար 1-ին պայմանը), եթե ոչ, ապա ցուցադրվում է HTML ձևը և սցենարը դադարում է աշխատել die() ֆունկցիան է: Բրաուզերում այլ բան, բացի ձևից, չի ցուցադրվում:

Եթե ​​տվյալները ստացվել են, ապա POST փոփոխականները ստուգվում են նշվածների հետ համապատասխանության համար (նկար 2 պայման): Եթե ​​դրանք չեն համընկնում, ցուցադրվում է նախազգուշական հաղորդագրություն, HTML մուտքի ձև և սկրիպտը նորից դուրս է գալիս ( die() ):

Եթե ​​երկրորդ պայմանը կատարվում է, ապա սցենարը բաց է թողնում բոլորը այլ հայտարարություններև գնում է հիմնական էջը ցուցադրելու համար: (անցում 3-ում նկարում):

Սա ամենապարզ օրինակը. Բնականաբար, իրական նախագծերում նման ուղղակի ստուգումներ չեն իրականացվում. մուտքն ու գաղտնաբառը պահվում են գաղտնագրված ձևով ֆայլերում կամ տվյալների բազայում: Հետևաբար, հոդվածը նկարագրում է հաճախորդի և սերվերի միջև փոխգործակցության տեխնոլոգիան՝ հիմնված GET և POST հարցումների վրա: Լրիվ հավելվածներ ստեղծելու համար անհրաժեշտ է տվյալների բազաների և օբյեկտի վրա հիմնված ծրագրավորման հիմնավոր իմացություն: Այս մասին ավելի շատ հաջորդ հոդվածներում:

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

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

Անուն1=արժեք1&անուն2=արժեք2&անուն3=արժեք3

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

GET մեթոդ

GET մեթոդը ուղարկում է կոդավորված օգտվողի տեղեկատվությունը, որը կցված է էջի հարցումին: Էջերն ու կոդավորված տեղեկատվությունը իրարից առանձնացվա՞ծ են: հարցական նշան.

http://www.test.com/index.htm?name1=value1&name2=value2

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

if($_GET["name"] || $_GET["տարիք"]) (echo "Welcome ". $_GET["name"]; echo "Դու ". $_GET["տարիք"]. " տարեկան ."; ելք ();) Անուն: Տարիք:

POST մեթոդ

Մեթոդ ՓՈՍՏփոխանցում է տեղեկատվություն HTTP վերնագրերի միջոցով: Տեղեկատվությունը կոդավորված է, ինչպես նկարագրված է մեթոդի դեպքում ՍՏԱՆԱԼ, և տեղադրվում է վերնագրի մեջ QUERY_STRING.

  • POST մեթոդը սահմանափակումներ չունի ուղարկվող տվյալների չափի վրա:
  • POST մեթոդը կարող է օգտագործվել ASCII, ինչպես նաև երկուական տվյալներ ուղարկելու համար:
  • POST մեթոդով ուղարկված տվյալները անցնում են HTTP վերնագրի միջով, ուստի անվտանգությունը կախված է HTTP արձանագրությունից: Օգտագործելով Secure HTTP, դուք կարող եք ապահովել, որ ձեր տեղեկատվությունը անվտանգ է:
  • PHP-ն տրամադրում է $_POST ասոցիատիվ զանգվածը՝ POST մեթոդով ուղարկված բոլոր տեղեկություններին մուտք գործելու համար:

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

if($_POST["անուն"] || $_POST["տարիքը"]) (if (preg_match("[^A-Za-z"-]",$_POST["անուն"])) ( die (" Անվավեր անունը և անունը պետք է լինի ալֆա"); ) echo "Բարի գալուստ ". $_POST["name"]; echo "Դուք ". $_POST["տարիք"]. "տարեկան"; exit(); )

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

Փոփոխական $_REQUEST

PHP փոփոխական $_ՀԱՅՑպարունակում է նման բովանդակություն $_GET, $_POST, և $_COOKIE. Մենք կքննարկենք փոփոխականը $_COOKIEերբ խոսում ենք թխուկների մասին:

$_REQUEST PHP փոփոխականը կարող է օգտագործվել GET և POST մեթոդներով ներկայացված ձևի տվյալներից արդյունք ստանալու համար:

POST մեթոդի համար

Ձևի բովանդակությունը կոդավորվում է այնպես, ինչպես GET մեթոդը (տես վերևում), բայց URL-ին տող ավելացնելու փոխարեն հարցման բովանդակությունը ուղարկվում է որպես տվյալների բլոկ՝ որպես POST գործողության մաս: Եթե ​​առկա է ACTION հատկանիշը, ապա այնտեղ հայտնաբերված URL-ի արժեքը որոշում է, թե որտեղ պետք է ուղարկել տվյալների այս բլոկը: Այս մեթոդը, ինչպես արդեն նշվել է, խորհուրդ է տրվում մեծ տվյալների բլոկներ փոխանցելու համար:

Օգտագործողի կողմից մուտքագրված և POST մեթոդով սերվերին ուղարկված տեղեկատվությունը տրամադրվում է որպես ստանդարտ մուտքագրում գործողության հատկանիշում նշված ծրագրին կամ ընթացիկ սկրիպտին, եթե այս հատկանիշը բաց թողնված է: Վերբեռնված ֆայլի երկարությունը փոխանցվում է CONTENT_LENGTH միջավայրի փոփոխականով, իսկ տվյալների տեսակը՝ CONTENT_TYPE փոփոխականով:

Դուք կարող եք տվյալներ ուղարկել միայն POST մեթոդով, օգտագործելով HTML ձևը, քանի որ տվյալները փոխանցվում են հարցումի մարմնում, և ոչ վերնագրում, ինչպես GET-ում: Համապատասխանաբար, դուք կարող եք փոխել պարամետրերի արժեքը միայն ձևի մեջ մուտքագրված արժեքը փոխելով: POST-ն օգտագործելիս օգտատերը չի տեսնում սերվերին փոխանցված տվյալները:

POST հարցումների հիմնական առավելությունը նրանց ավելի մեծ անվտանգությունն ու ֆունկցիոնալությունն է՝ համեմատած GET հարցումների հետ։ Հետեւաբար, POST մեթոդը ավելի հաճախ օգտագործվում է փոխանցելու համար կարեւոր տեղեկություններ, ինչպես նաև մեծ ծավալի տեղեկատվություն։ Այնուամենայնիվ, դուք չպետք է ամբողջովին ապավինեք այս մեխանիզմի անվտանգությանը, քանի որ POST հարցման տվյալները կարող են նաև կեղծվել, օրինակ՝ ձեր մեքենայի վրա ստեղծելով html ֆայլ և լրացնելով այն անհրաժեշտ տվյալներով: Բացի այդ, ոչ բոլոր հաճախորդները կարող են օգտագործել POST մեթոդը, որը սահմանափակում է դրա օգտագործման դեպքերը:

Ցանկացած եղանակով սերվերին տվյալներ ուղարկելիս փոխանցվում են ոչ միայն օգտագործողի մուտքագրած տվյալները, այլ նաև մի շարք փոփոխականներ, որոնք կոչվում են միջավայրի փոփոխականներ, որոնք բնութագրում են հաճախորդին, նրա պատմությունը, ֆայլի ուղիները և այլն: Ահա շրջակա միջավայրի որոշ փոփոխականներ.

  • REMOTE_ADDR – հարցումն ուղարկող հոսթի (համակարգչի) IP հասցեն;
  • REMOTE_HOST - հոսթի անուն, որից ուղարկվել է հարցումը.
  • HTTP_REFERER - էջի հասցեն, որը վերաբերում է ընթացիկ սկրիպտին.
  • REQUEST_METHOD - մեթոդը, որն օգտագործվել է հարցումն ուղարկելիս;
  • QUERY_STRING - հարցական նշանից հետո URL-ում հայտնաբերված տեղեկատվությունը.
  • SCRIPT_NAME - վիրտուալ ուղի դեպի ծրագիր, որը պետք է կատարվի;
  • HTTP_USER_AGENT - Տեղեկություններ բրաուզերի մասին, որն օգտագործում է հաճախորդը

Առայժմ մենք միայն նշել ենք, որ հաճախորդի հարցումները մշակվում են սերվերում՝ օգտագործելով հատուկ ծրագիր. Փաստորեն, մենք կարող ենք ինքներս գրել այս ծրագիրը, այդ թվում՝ PHP-ում, և այն կանի այն, ինչ ուզում ենք ստացված տվյալների հետ։ Այս ծրագիրը գրելու համար անհրաժեշտ է ծանոթանալ PHP-ի կողմից այս նպատակով առաջարկվող որոշ կանոնների և գործիքների։



PHP սկրիպտի շրջանակներում կան մի քանի եղանակներ մուտք գործելու հաճախորդի կողմից HTTP-ով ուղարկված տվյալներ: Մինչև PHP 4.1.0-ը նման տվյալների մուտքն իրականացվում էր անցած փոփոխականների անուններով (հիշենք, որ տվյալները փոխանցվում են «փոփոխական անուն, նշան «=», փոփոխական արժեք» զույգերի տեսքով): Այսպիսով, եթե, օրինակ, first_name=Nina փոխանցվել է, ապա սկրիպտի ներսում հայտնվում է $first_name փոփոխականը՝ Nina արժեքով։ Եթե ​​անհրաժեշտ էր տարբերակել, թե ինչ մեթոդով են փոխանցվել տվյալները, ապա օգտագործվել են $HTTP_POST_VARS և $HTTP_GET_VARS ասոցիատիվ զանգվածները, որոնց բանալիները փոխանցված փոփոխականների անուններն էին, իսկ արժեքները՝ դրանց արժեքները։ փոփոխականներ, համապատասխանաբար: Այսպիսով, եթե first_name=Nina զույգը փոխանցվում է GET մեթոդով, ապա $HTTP_GET_VARS["first_name"]="Nina":

Անվտանգ է անցած փոփոխականների անուններն ուղղակիորեն ծրագրում օգտագործելը: Հետևաբար, սկսած PHP 4.1.0-ից, որոշվեց օգտագործել հատուկ զանգված՝ $_REQUEST՝ HTTP հարցումների միջոցով փոխանցված փոփոխականներին մուտք գործելու համար: Այս զանգվածը պարունակում է POST և GET մեթոդներով, ինչպես նաև HTTP թխուկների միջոցով փոխանցված տվյալները։ Սա սուպերգլոբալ ասոցիատիվ զանգված է, այսինքն. դրա արժեքները կարելի է ստանալ ծրագրում ցանկացած վայրում՝ օգտագործելով համապատասխան փոփոխականի անունը (ձևի տարր) որպես բանալի:

Օրինակ 4.2.Ենթադրենք, մենք ձևաթուղթ ենք ստեղծել հեռակա ծրագրավորման դպրոցում մասնակիցների գրանցման համար, ինչպես վերը նշված օրինակում: Այնուհետև 1.php ֆայլում, որը մշակում է այս ձևը, կարող եք գրել հետևյալը.

";$str .="Դուք ընտրել եք դասընթացը սովորելու ".$_REQUEST["kurs"];echo $str;?> հասցեով:

Այնուհետև, եթե ձևաթղթում մուտքագրենք «Վասյա» անունը, «Պետրով» ազգանունը և բոլոր դասընթացներից ընտրենք PHP դասընթացը, բրաուզերի էկրանին կստանանք հետևյալ հաղորդագրությունը.

$_REQUEST զանգվածի ներդրումից հետո $HTTP_POST_VARS և $HTTP_GET_VARS զանգվածները վերանվանվեցին $_POST և $_GET, համապատասխանաբար, միատեսակության համար, բայց նրանք իրենք չանհետացան օգտագործումից՝ հետ համատեղելիության պատճառով։ նախորդ տարբերակները PHP. Ի տարբերություն իրենց նախորդների, $_POST և $_GET զանգվածները դարձել են սուպերգլոբալ, այսինքն. հասանելի է ուղղակիորեն և գործառույթների և մեթոդների շրջանակներում:

Բերենք այս զանգվածների օգտագործման օրինակ։ Ենթադրենք, որ մենք պետք է մշակենք մի ձև, որը պարունակում է մուտքային տարրեր՝ first_name, last_name, kurs (օրինակ՝ form.html ձևը վերևում)։ Տվյալները փոխանցվել են POST մեթոդով, և մենք չենք ցանկանում մշակել այլ մեթոդներով փոխանցված տվյալները: Սա կարելի է անել այսպես.

";$str .= "Դուք ընտրել եք դասընթաց ". $_POST["kurs"];echo $str;?> թեմայով

Այնուհետև բրաուզերի էկրանին, եթե մուտքագրենք «Վասյա» անունը, «Պետրով» ազգանունը և բոլոր դասընթացների մեջ ընտրենք PHP դասընթացը, կտեսնենք հաղորդագրություն, ինչպես նախորդ օրինակում.

Բարև Վասյա Պետրով: Դուք ընտրել եք սովորել PHP դասընթացը

Որպեսզի ավելի երկար պահպանվի սկրիպտները մշակելու հնարավորությունը վաղ տարբերակները PHP 4.1.0-ից սկսած, ներմուծվել է register_globals դիրեկտիվը, որը թույլ է տալիս կամ մերժում մուտք գործել փոփոխականներ ուղղակիորեն իրենց անուններով: Եթե ​​PHP կարգավորումների ֆայլում register_globals=On պարամետրը, ապա GET և POST մեթոդներով սերվեր փոխանցված փոփոխականները կարող են մուտք գործել պարզապես իրենց անուններով (այսինքն՝ կարող եք գրել $first_name): Եթե ​​register_globals=Անջատված է, ապա դուք պետք է գրեք $_REQUEST["first_name"] կամ $_POST["first_name"], $_GET["first_name"], $HTTP_POST_VARS["first_name"], $HTTP_GET_VARS["first_name"]: Անվտանգության տեսանկյունից ավելի լավ է անջատել այս հրահանգը (այսինքն register_globals=Off): Երբ register_globals հրահանգը միացված է, վերը թվարկված զանգվածները նույնպես կպարունակեն հաճախորդի կողմից ներկայացված տվյալները:

Երբեմն անհրաժեշտ է իմանալ շրջակա միջավայրի փոփոխականի արժեքը, օրինակ՝ հարցումն ուղարկելու համար օգտագործվող մեթոդը կամ հարցումն ուղարկած համակարգչի IP հասցեն: Այս տեղեկատվությունը կարող եք ստանալ՝ օգտագործելով getenv() ֆունկցիան: Այն վերադարձնում է շրջակա միջավայրի փոփոխականի արժեքը, որի անունը փոխանցվում է որպես պարամետր:

Ինչպես արդեն ասացինք, եթե օգտագործվում է GET մեթոդը, ապա տվյալները փոխանցվում են՝ ռեսուրսի URL-ում ավելացնելով հարցման տող «variable_name = value» զույգերի տեսքով։ Այն ամենը, ինչ գրված է URL-ում հարցական նշանից հետո, կարելի է ստանալ հրամանի միջոցով

getenv ("QUERY_STRING");

Դրա շնորհիվ հնարավոր է տվյալներ փոխանցել այլ ձևով՝ օգտագործելով GET մեթոդը: Օրինակ, նշեք միայն գումարած նշանով առանձնացված մի քանի պարամետրերի արժեքները և վերլուծեք հարցման տողը մասերի սկրիպտում, կամ կարող եք փոխանցել ընդամենը մեկ պարամետրի արժեքը: Այս դեպքում $_GET զանգվածում կհայտնվի դատարկ տարր, որն ունի այս արժեքին հավասար բանալի (ամբողջ հարցման տողը), և հարցման տողում հայտնաբերված «+» նշանը կփոխարինվի «_» ընդգծմամբ:

POST մեթոդով տվյալները փոխանցվում են միայն ձևաթղթերի միջոցով, և օգտատերը (հաճախորդը) չի տեսնում, թե ինչպիսի տվյալներ են ուղարկվում սերվերին: Դրանք տեսնելու համար հաքերը պետք է մեր ձևը փոխարինի իր ձևով։ Այնուհետև սերվերը սխալ ձևի մշակման արդյունքները կուղարկի սխալ տեղ: Դրանից խուսափելու համար կարող եք ստուգել այն էջի հասցեն, որտեղից ուղարկվել են տվյալները։ Սա կարելի է նորից անել getenv() ֆունկցիայի միջոցով.

getenv ("HTTP_REFERER");

Հիմա ժամանակն է լուծել դասախոսության սկզբում ձեւակերպված խնդիրը։

Նման տվյալների մուտքն իրականացվել է փոխանցված փոփոխականների անուններով (հիշեցնենք, որ տվյալները փոխանցվում են զույգերի « փոփոխականի անուն , « = նշան, փոփոխական արժեք »): Այսպիսով, եթե, օրինակ, first_name=Nina փոխանցվեր, ապա սկրիպտի ներսում կհայտնվեր $first_name փոփոխականը՝ Nina արժեքով։ Եթե ​​պահանջվում էր տարբերակել, թե ինչ մեթոդով են փոխանցվել տվյալները, ապա օգտագործվում էին ասոցիատիվ զանգվածներ $HTTP_POST_VARSԵվ $HTTP_GET_VARS, որոնց բանալիներն էին անցած փոփոխականների անունները, իսկ արժեքները՝ համապատասխանաբար այս փոփոխականների արժեքները։ Այսպիսով, եթե first_name = Nina զույգը փոխանցվի մեթոդին ՍՏԱՆԱԼ, ապա $ HTTP_GET_VARS["first_name"]="Նինա".

Անվտանգ է անցած փոփոխականների անուններն ուղղակիորեն ծրագրում օգտագործելը: Հետևաբար, որոշվեց, սկսած PHP 4.1.0-ից, օգտագործել հատուկ զանգված՝ HTTP հարցումների միջոցով փոխանցվող փոփոխականներին մուտք գործելու համար. $_ՀԱՅՑ. Այս զանգվածը պարունակում է մեթոդներով փոխանցված տվյալները ՓՈՍՏԵվ ՍՏԱՆԱԼ, ինչպես նաև օգտագործելով HTTP թխուկներ: Սա սուպերգլոբալ ասոցիատիվ զանգված է, այսինքն. դրա արժեքները կարելի է ստանալ ծրագրում ցանկացած վայրում՝ օգտագործելով համապատասխան փոփոխականի անունը (ձևի տարր) որպես բանալի:

Օրինակ 4.2. Ենթադրենք, մենք ձևաթուղթ ենք ստեղծել հեռակա ծրագրավորման դպրոցում մասնակիցների գրանցման համար, ինչպես վերը նշված օրինակում: Այնուհետև 1.php ֆայլում, որը մշակում է այս ձևը, կարող եք գրել հետևյալը.

Այնուհետև, եթե ձևաթղթում մուտքագրենք «Վասյա» անունը, «Պետրով» ազգանունը և բոլոր դասընթացներից ընտրենք PHP դասընթացը, բրաուզերի էկրանին կստանանք հետևյալ հաղորդագրությունը.

Զանգված ներկայացնելուց հետո $_ՀԱՅՑզանգվածներ $HTTP_POST_VARSԵվ $HTTP_GET_VARSվերանվանվել է հետևողականության համար $_POSTԵվ $_GETհամապատասխանաբար, բայց նրանք իրենք չեն անհետացել օգտագործումից PHP-ի նախորդ տարբերակների հետ համատեղելիության պատճառով: Ի տարբերություն իր նախորդների, զանգվածներ $_POSTԵվ $_GETդարձել են սուպերգլոբալ, այսինքն. հասանելի է ուղղակիորեն և գործառույթների և մեթոդների շրջանակներում:

Բերենք այս զանգվածների օգտագործման օրինակ։ Ենթադրենք, մենք պետք է մշակենք մի ձև, որը պարունակում է մուտքային տարրեր՝ first_name , last_name , kurs (օրինակ՝ վերևի ձևը.html): Տվյալները փոխանցվել են մեթոդով ՓՈՍՏ, և մենք չենք ցանկանում մշակել այլ մեթոդներով փոխանցված տվյալները: Սա կարելի է անել այսպես.

Այնուհետև բրաուզերի էկրանին, եթե մուտքագրենք «Վասյա» անունը, «Պետրով» ազգանունը և բոլոր դասընթացների մեջ ընտրենք PHP դասընթացը, կտեսնենք հաղորդագրություն, ինչպես նախորդ օրինակում.

Որպեսզի պահպանվի PHP 4.1.0-ից ավելի վաղ սցենարներ մշակելու հնարավորությունը, հրահանգը register_globals, թույլ տալով կամ մերժելով փոփոխականների մուտքը ուղղակիորեն իրենց անուններով: Եթե ​​PHP-ի կարգավորումներում ֆայլի պարամետրը register_globals =Միացված է, ապա մեթոդներով սերվերին փոխանցված փոփոխականներին ՍՏԱՆԱԼԵվ ՓՈՍՏ, դուք կարող եք պարզապես հիշատակել նրանց իրենց անուններով (այսինքն՝ կարող եք գրել $first_name ): Եթե register_globals=Անջատված, ապա պետք է գրել $ _ՀԱՐՑՈՒՄ [«first_name»]կամ $ _POST["first_name"], $ _ՍՏԱՆԵԼ ["first_name"], $ HTTP_POST_VARS[«first_name»], $ HTTP_GET_VARS[«first_name»]. Անվտանգության տեսանկյունից ավելի լավ է անջատել այս հրահանգը (այսինքն. register_globals=Անջատված) Երբ հրահանգը միացված է register_globalsվերը թվարկված զանգվածները կպարունակեն նաև հաճախորդի կողմից ներկայացված տվյալները:

Երբեմն անհրաժեշտ է դառնում իմանալ որոշների իմաստը շրջակա միջավայրի փոփոխական, օրինակ՝ հարցումն ուղարկելու համար օգտագործվող մեթոդը կամ հարցումն ուղարկած համակարգչի IP հասցեն: Այս տեղեկատվությունը կարող եք ստանալ՝ օգտագործելով գործառույթը getenv (). Այն վերադարձնում է արժեք շրջակա միջավայրի փոփոխական, որի անունը փոխանցվում է որպես պարամետր։

Օրինակ 4.3. Օգտագործելով getenv()

Ինչպես արդեն ասել ենք, եթե մեթոդը կիրառվում է ՍՏԱՆԱԼ, ապա տվյալները փոխանցվում են՝ ավելացնելով հարցման տող «variable_name=value» զույգերի տեսքով ռեսուրսի URL-ում։ Այն ամենը, ինչ գրված է URL-ում հարցական նշանից հետո, կարելի է ստանալ հրամանի միջոցով

getenv ("QUERY_STRING");

Դրա շնորհիվ հնարավոր է, ըստ մեթոդի ՍՏԱՆԱԼտվյալների փոխանցում այլ ձևով: Օրինակ, նշեք միայն գումարած նշանով առանձնացված մի քանի պարամետրերի արժեքները և վերլուծեք հարցման տողը մասերի սկրիպտում, կամ կարող եք փոխանցել ընդամենը մեկ պարամետրի արժեքը: Այս դեպքում զանգվածում $_GETկհայտնվի դատարկ տարր՝ այս արժեքին հավասար բանալիով (ամբողջ հարցման տողը )՝ հարցման տողում հանդիպող « +» նիշը փոխարինված « _» ընդգծմամբ:

Մեթոդ ՓՈՍՏտվյալները ներկայացվում են միայն ձևաթղթերի միջոցով, և օգտատերը (հաճախորդը) չի տեսնում, թե ինչ տվյալներ են ուղարկվում սերվերին: Դրանք տեսնելու համար հաքերը պետք է մեր ձևը փոխարինի իր ձևով։ Այնուհետև սերվերը սխալ ձևի մշակման արդյունքները կուղարկի սխալ տեղ: Դրանից խուսափելու համար կարող եք ստուգել այն էջի հասցեն, որտեղից ուղարկվել են տվյալները։ Դա կարելի է նորից անել՝ օգտագործելով ֆունկցիան getenv ():

getenv ("HTTP_REFERER");

Հիմա ժամանակն է լուծել դասախոսության սկզբում ձեւակերպված խնդիրը։

PHP հարցումների մշակման օրինակ

Հիշենք, թե որն էր խնդիրը և պարզաբանենք դրա ձևակերպումը։ Հարկավոր է գրել ծրագրավորման հեռակա դպրոցում մասնակիցների գրանցման ձև և գրանցվելուց հետո հաղորդագրություն ուղարկել մասնակցին։ Մենք այս ուղերձն անվանել ենք համընդհանուր նամակ, բայց այն մի փոքր կտարբերվի նախորդ դասախոսության մեր գրած նամակից: Այստեղ մենք նաև ոչինչ չենք ուղարկի էլ. Մենք արդեն տվել ենք վերևում գրանցման ձևի նախնական տարբերակը: Մենք կփոխենք այն, որպեսզի յուրաքանչյուր գրանցված կարողանա ընտրել այնքան դասընթացներ, որքան ցանկանում է մասնակցել, և մենք չենք հաստատի գրանցման ձևի ստացումը:

Ուսանողների գրանցման ձևը

Անուն

Ազգանունը

Էլ

Ընտրեք դասընթացը, որին կցանկանայիք մասնակցել.
PHP
Լիսպ
Պերլ
Յունիքս

Ի՞նչ եք ուզում, որ մենք իմանանք ձեր մասին:

Ցուցակ 4.4. form_final.html

Այստեղ ամեն ինչ բավականին պարզ է և պարզ: Միակ բանը, որ պետք է նշել, վանդակի տարրի արժեքների փոխանցման եղանակն է: Երբ մենք գրում ենք kurs տարրի անվան մեջ, դա նշանակում է, որ առաջին ստուգված վանդակի տարրը կգրվի զանգվածի առաջին տարրում՝ kurs , երկրորդ նշագրված վանդակը կգրվի զանգվածի երկրորդ տարրի վրա և այլն։ Դուք, իհարկե, կարող եք պարզապես տարբեր անուններ տալ վանդակի տարրերին, բայց դա կբարդացնի տվյալների մշակումը, եթե դասընթացները շատ լինեն:

Սկրիպտը, որը կվերլուծի և կմշակի այս ամենը, կոչվում է 1.php (ձևը վերաբերում է այս ֆայլին, որը գրված է դրա հատկանիշում. գործողություն) Լռելյայն մեթոդն ուղարկելն է ՍՏԱՆԱԼ, բայց մենք նշել ենք ՓՈՍՏ. Գրանցված անձից ստացված տեղեկատվության համաձայն՝ սցենարը առաջացնում է համապատասխան հաղորդագրություն։ Եթե ​​մարդ ընտրել է որոշ դասընթացներ, ապա նրան հաղորդագրություն է ցուցադրվում դրանց վարման ժամանակի և դրանք կարդացած դասախոսների մասին: Եթե ​​անձը ոչինչ չի ընտրել, ապա հաղորդագրություն է ցուցադրվում ծրագրավորողների նամակագրության դպրոցի (ZSHP) հաջորդ հանդիպման մասին:

"14.30","Lisp"=>"12.00", "Perl"=>"15.00","Unix"=>"14.00"); $lectors = array("PHP"=>"Vasili Vasilievich", "Lisp"=>"Ivan Ivanovich", "Perl"=>"Peter Petrovich", "Unix"=>"Semyon Semyonovich"); define("SIGN","Հարգանքներով, ադմինիստրացիա"); // սահմանել նամակի ստորագրությունը որպես հաստատուն սահմանում ("MEETING_TIME","18.00"); // սահմանել ուսանողական հանդիպման ժամը $date = "May 12"; // սահմանել դասախոսությունների ամսաթիվը // սկսել հաղորդագրության տեքստը կազմել $str = "Բարև, սիրելիս" . $_POST["first_name"]: «». $_POST["last_name"]."!
"; $str .="
Տեղեկացնում ենք ձեզ, որ "; $kurses = $_POST["kurs"]; // պահպանել ընտրված դասընթացների ցանկը այս փոփոխականում, եթե (!isset($kurses)) ( // եթե դասընթաց ընտրված չէ $event = " հաջորդիվ ուսանողական հանդիպում"; $str .= "$event տեղի կունենա $date"-ին։ MEETING_TIME ։
"; ) else ( // եթե ընտրված է առնվազն մեկ դասընթաց $event = "Ձեր ընտրած դասախոսությունները տեղի կունենան $date

    "; //count ֆունկցիան հաշվարկում է $lect = "" զանգվածի տարրերի քանակը; ($i=0;$i) համար $k դասախոսություն $times[$k]-ում; // կազմել $lect հաղորդագրությունը .= " (Ձեր դասախոսը, $lectors[$k])"; ) $event = $event . $lect . "
"; $str .= "$event"; ) $str .= "
«. SIGN; // ավելացնել ստորագրությունը echo $str; // տպել հաղորդագրությունը էկրանին?> Ցուցակ 4.5. Script 1.php մշակում է form_final.html ձևը

Եզրակացություն

Եկեք ամփոփենք. Մենք սովորել ենք տարբերակել հաճախորդը սերվերից, իսկ համակարգիչը՝ սերվերից սերվերային ծրագրեր, ծանոթացավ տվյալների սերվեր փոխանցելու հիմնական մեթոդներին, ուսումնասիրեց PHP լեզվի կողմից առաջարկվող գործիքները հաճախորդների հարցումների մշակման համար և փորձարկեց դրանք գործնականում։ Սկզբունքորեն սա բավական է հաճախորդ-սերվեր հավելվածներ ստեղծելու համար։

Այս և հաջորդ բաժինները համառոտ կներկայացնեն, թե ինչպես ստեղծել պարզ վեբ հավելվածներ օգտագործելով PHP. Այն, ինչ նկարագրված էր բաժնում, ակնհայտորեն բավարար չէ, որպեսզի ձեր հավելվածը հաղորդակցվի օգտագործողի և ձևի հետ՝ կախված նրա կատարած գործողություններից կամ մուտքագրված պարամետրերից: Իսկ ի՞նչն է պակասում։ Գիտելիքների պակաս կա, թե ինչպես կազմակերպել օգտվողի մուտքագրումը և փոխանցել այս տվյալները սերվերին: Դե, դուք արդեն պետք է ունենաք հիմնական գիտելիքներ, թե ինչպես ծրագրավորել սերվերում ստացված տեղեկատվությունը:

HTTP հարցման մեթոդները և դրանց պարամետրերը

Ցանկացած դինամիկ վեբ հավելված առաջացնում է պատասխան օգտվողին` համաձայն նրա մուտքագրած պարամետրերի կամ հաճախորդի կողմից կատարված գործողությունների: Սերվերին ուղղված հարցումն ամենից հաճախ իջնում ​​է երկու տեսակի հարցումների՝ օգտագործելով GET մեթոդը կամ POST մեթոդը: Մի քանի խոսք այս երկու տեսակի հարցումների տարբերությունների մասին։

GET մեթոդ.

    Պարամետրերը փոխանցվում են HTTP հարցման վերնագրում, ուստի դրանք տեսանելի են հրամանի տող, և նման հարցումը կարող է էջանշվել: Քանի որ վերնագրի ընդհանուր երկարությունը սահմանափակ է, GET-ի միջոցով փոխանցված պարամետրերի քանակը և երկարությունը նույնպես սահմանափակ են:

    Ենթադրվում է, որ անընդմեջ կատարվող մի քանի նույնական GET հարցումների արդյունքները պետք է լինեն նույնը:

POST մեթոդ.

    Հարցման պարամետրերը փոխանցվում են HTTP հարցման մարմնում, ուստի դրանք հրամանի տողում չեն: Պարամետրերի քանակը և չափը անսահմանափակ են:

    Ենթադրվում է, որ մի քանի նույնական POST հարցումների արդյունքները կարող են վերադառնալ տարբեր իմաստներքանի որ նրանք կարող են փոխել թիրախային օբյեկտի հատկությունները:

GET մեթոդը պետք է օգտագործվի բովանդակություն ստանալու համար տեղեկատվական ռեսուրսըստ պարամետրերի, երբ անհրաժեշտ չէ փոփոխություններ կատարել թիրախային ռեսուրսի տվյալների կառուցվածքներում, և իմաստ ունի էջանշել հարցումը (URL): GET մեթոդի կատարման արագությունը կարող է ավելի արագ լինել, քան POST մեթոդի օգտագործմամբ նմանատիպ հարցումները:

POST մեթոդը պետք է օգտագործվի, երբ անհրաժեշտ է թաքցնել սերվերին փոխանցված պարամետրերը URL-ից: Այս մեթոդը պետք է օգտագործվի նաև թիրախային ռեսուրսի բովանդակության փոփոխության հարցումներում՝ պարամետրերում (հարցման մարմնում) փոխանցելով այս նույն փոփոխությունների նկարագրությունը:

Ճանապարհ դեպի ռեսուրս: parameter1=value1¶meter2=value2&…

Եթե ​​դուք չունեք հատուկ HTML ձևերպարամետրերը լրացնելու համար կարող եք վրիպազերծել ձեր PHP հավելվածը՝ անցնելով թեստային պարամետրեր անմիջապես բրաուզերի հրամանի տողում, օրինակ՝

http://website/php-samples/sql.php?sql=ընտրել * d_staff-ից

Սերվերի կողմից հարցման պարամետրեր մուտք գործելու համար օգտագործեք գլոբալ զանգվածներ $_GETԵվ $_POSTհամապատասխանաբար. Եթե ​​ձեր հավելվածին չի հետաքրքրում, թե որ մեթոդով է մուտք գործել, ապա դուք պետք է օգտագործեք զանգված $_ՀԱՅՑ, որը միավորում է $_GET և $_POST զանգվածների տվյալները, օրինակ, այսպես.

$sql = isset($_REQUEST["sql"]) ? $_REQUEST["sql"]: "";

Այս օրինակում ծրագիրը որոշում է, թե արդյոք «sql» պարամետրը փոխանցվել է. եթե այո, ապա այն վերագրում է դրա արժեքը համապատասխան փոփոխականին, իսկ եթե ոչ, ապա դատարկ արժեք է հատկացնում դրան։

HTTP հարցման պարամետրերի սահմանում HTML ձևի միջոցով

Իհարկե, այնքան էլ հարմար չէ պարամետրերը ձեռքով սահմանել անմիջապես բրաուզերի հրամանի տողում: Այս մեթոդը հարմար է վեբ հավելվածների միջև հաղորդակցվելու ժամանակ HTTP հարցումների ծրագրային կատարման համար: Հաճախորդի կողմից նախնական տվյալների վավերացում մուտքագրելու և իրականացնելու համար դուք պետք է օգտագործեք HTML ձևեր և . Ստորև բերված է ամենապարզ ձևի օրինակը, որի օգնությամբ մուտքագրվում է տեքստային պարամետր (արժեք ), որը հետագայում փոխանցվում է սերվերին՝ որպես POST մեթոդի պարամետր։

մեթոդ = "փոստ" գործողություն ='sql.php' > SQL:

Ձևի տարրի մեթոդ հատկանիշը սահմանում է այն մեթոդը, որը որոշում է, թե ինչպես են տվյալները ուղարկվում սերվերին (ստանալ կամ տեղադրել): Գործողությունների հատկանիշը նշում է php ֆայլ Նա, ով կմշակի հարցումը: Եթե ​​մշակողը պետք է լինի ընթացիկ ֆայլը, ապա գործողություն հատկանիշը պետք չէ ավելացնել: Բոլոր տարրերի համար, որոնց արժեքը պետք է փոխանցվի որպես HTTP հարցման պարամետր, պետք է սահմանվի անվան հատկանիշի եզակի արժեք: Դա հատկանիշի արժեքն է Անունկլինի ցուցանիշը$_GET, $_POST կամ $_REQUEST զանգվածներում (տես վերևի օրինակը): Սեղմելով կոճակի վրա ներկայացնելբոլոր մուտքագրված արժեքներով ձևը ներկայացնում է սերվերին: