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 ձևը: Սա ինտերֆեյս է, որը թույլ է տալիս հաճախորդի բրաուզերից ցանկացած տվյալ ուղարկել սերվեր: Նայեք ձեր ձևի հատկանիշներին.
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 (). Այն վերադարձնում է արժեք շրջակա միջավայրի փոփոխական, որի անունը փոխանցվում է որպես պարամետր։
echo getenv("REQUEST_METHOD"); // возвратит использованный метод echo getenv ("REMOTE_ADDR"); // выведет IP-адрес пользователя, // пославшего запрос?> Օրինակ 4.3. Օգտագործելով getenv()
Ինչպես արդեն ասել ենք, եթե մեթոդը կիրառվում է ՍՏԱՆԱԼ, ապա տվյալները փոխանցվում են՝ ավելացնելով հարցման տող «variable_name=value» զույգերի տեսքով ռեսուրսի URL-ում։ Այն ամենը, ինչ գրված է URL-ում հարցական նշանից հետո, կարելի է ստանալ հրամանի միջոցով
getenv ("QUERY_STRING");
Դրա շնորհիվ հնարավոր է, ըստ մեթոդի ՍՏԱՆԱԼտվյալների փոխանցում այլ ձևով: Օրինակ, նշեք միայն գումարած նշանով առանձնացված մի քանի պարամետրերի արժեքները և վերլուծեք հարցման տողը մասերի սկրիպտում, կամ կարող եք փոխանցել ընդամենը մեկ պարամետրի արժեքը: Այս դեպքում զանգվածում $_GETկհայտնվի դատարկ տարր՝ այս արժեքին հավասար բանալիով (ամբողջ հարցման տողը )՝ հարցման տողում հանդիպող « +» նիշը փոխարինված « _» ընդգծմամբ:
Մեթոդ ՓՈՍՏտվյալները ներկայացվում են միայն ձևաթղթերի միջոցով, և օգտատերը (հաճախորդը) չի տեսնում, թե ինչ տվյալներ են ուղարկվում սերվերին: Դրանք տեսնելու համար հաքերը պետք է մեր ձևը փոխարինի իր ձևով։ Այնուհետև սերվերը սխալ ձևի մշակման արդյունքները կուղարկի սխալ տեղ: Դրանից խուսափելու համար կարող եք ստուգել այն էջի հասցեն, որտեղից ուղարկվել են տվյալները։ Դա կարելի է նորից անել՝ օգտագործելով ֆունկցիան getenv ():
getenv ("HTTP_REFERER");
Հիմա ժամանակն է լուծել դասախոսության սկզբում ձեւակերպված խնդիրը։
PHP հարցումների մշակման օրինակ
Հիշենք, թե որն էր խնդիրը և պարզաբանենք դրա ձևակերպումը։ Հարկավոր է գրել ծրագրավորման հեռակա դպրոցում մասնակիցների գրանցման ձև և գրանցվելուց հետո հաղորդագրություն ուղարկել մասնակցին։ Մենք այս ուղերձն անվանել ենք համընդհանուր նամակ, բայց այն մի փոքր կտարբերվի նախորդ դասախոսության մեր գրած նամակից: Այստեղ մենք նաև ոչինչ չենք ուղարկի էլ. Մենք արդեն տվել ենք վերևում գրանցման ձևի նախնական տարբերակը: Մենք կփոխենք այն, որպեսզի յուրաքանչյուր գրանցված կարողանա ընտրել այնքան դասընթացներ, որքան ցանկանում է մասնակցել, և մենք չենք հաստատի գրանցման ձևի ստացումը:
Ուսանողների գրանցման ձևը
Ցուցակ 4.4. form_final.htmlԱյստեղ ամեն ինչ բավականին պարզ է և պարզ: Միակ բանը, որ պետք է նշել, վանդակի տարրի արժեքների փոխանցման եղանակն է: Երբ մենք գրում ենք kurs տարրի անվան մեջ, դա նշանակում է, որ առաջին ստուգված վանդակի տարրը կգրվի զանգվածի առաջին տարրում՝ kurs , երկրորդ նշագրված վանդակը կգրվի զանգվածի երկրորդ տարրի վրա և այլն։ Դուք, իհարկե, կարող եք պարզապես տարբեր անուններ տալ վանդակի տարրերին, բայց դա կբարդացնի տվյալների մշակումը, եթե դասընթացները շատ լինեն:
Սկրիպտը, որը կվերլուծի և կմշակի այս ամենը, կոչվում է 1.php (ձևը վերաբերում է այս ֆայլին, որը գրված է դրա հատկանիշում. գործողություն) Լռելյայն մեթոդն ուղարկելն է ՍՏԱՆԱԼ, բայց մենք նշել ենք ՓՈՍՏ. Գրանցված անձից ստացված տեղեկատվության համաձայն՝ սցենարը առաջացնում է համապատասխան հաղորդագրություն։ Եթե մարդ ընտրել է որոշ դասընթացներ, ապա նրան հաղորդագրություն է ցուցադրվում դրանց վարման ժամանակի և դրանք կարդացած դասախոսների մասին: Եթե անձը ոչինչ չի ընտրել, ապա հաղորդագրություն է ցուցադրվում ծրագրավորողների նամակագրության դպրոցի (ZSHP) հաջորդ հանդիպման մասին:
// создадим массивы соответствий курс-время его
// проведения и курс-его лектор
$times = array("PHP"=>"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) համար
«. SIGN; // ավելացնել ստորագրությունը echo $str; // տպել հաղորդագրությունը էկրանին?> Ցուցակ 4.5. Script 1.php մշակում է form_final.html ձևը
Եզրակացություն
Եկեք ամփոփենք. Մենք սովորել ենք տարբերակել հաճախորդը սերվերից, իսկ համակարգիչը՝ սերվերից սերվերային ծրագրեր, ծանոթացավ տվյալների սերվեր փոխանցելու հիմնական մեթոդներին, ուսումնասիրեց PHP լեզվի կողմից առաջարկվող գործիքները հաճախորդների հարցումների մշակման համար և փորձարկեց դրանք գործնականում։ Սկզբունքորեն սա բավական է հաճախորդ-սերվեր հավելվածներ ստեղծելու համար։
Այս և հաջորդ բաժինները համառոտ կներկայացնեն, թե ինչպես ստեղծել պարզ վեբ հավելվածներ օգտագործելով PHP. Այն, ինչ նկարագրված էր բաժնում, ակնհայտորեն բավարար չէ, որպեսզի ձեր հավելվածը հաղորդակցվի օգտագործողի և ձևի հետ՝ կախված նրա կատարած գործողություններից կամ մուտքագրված պարամետրերից: Իսկ ի՞նչն է պակասում։ Գիտելիքների պակաս կա, թե ինչպես կազմակերպել օգտվողի մուտքագրումը և փոխանցել այս տվյալները սերվերին: Դե, դուք արդեն պետք է ունենաք հիմնական գիտելիքներ, թե ինչպես ծրագրավորել սերվերում ստացված տեղեկատվությունը:
HTTP հարցման մեթոդները և դրանց պարամետրերը
Ցանկացած դինամիկ վեբ հավելված առաջացնում է պատասխան օգտվողին` համաձայն նրա մուտքագրած պարամետրերի կամ հաճախորդի կողմից կատարված գործողությունների: Սերվերին ուղղված հարցումն ամենից հաճախ իջնում է երկու տեսակի հարցումների՝ օգտագործելով GET մեթոդը կամ POST մեթոդը: Մի քանի խոսք այս երկու տեսակի հարցումների տարբերությունների մասին։
GET մեթոդ.Պարամետրերը փոխանցվում են HTTP հարցման վերնագրում, ուստի դրանք տեսանելի են հրամանի տող, և նման հարցումը կարող է էջանշվել: Քանի որ վերնագրի ընդհանուր երկարությունը սահմանափակ է, GET-ի միջոցով փոխանցված պարամետրերի քանակը և երկարությունը նույնպես սահմանափակ են:
Ենթադրվում է, որ անընդմեջ կատարվող մի քանի նույնական GET հարցումների արդյունքները պետք է լինեն նույնը:
Հարցման պարամետրերը փոխանցվում են 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 մեթոդի պարամետր։
Ձևի տարրի մեթոդ հատկանիշը սահմանում է այն մեթոդը, որը որոշում է, թե ինչպես են տվյալները ուղարկվում սերվերին (ստանալ կամ տեղադրել): Գործողությունների հատկանիշը նշում է php ֆայլ Նա, ով կմշակի հարցումը: Եթե մշակողը պետք է լինի ընթացիկ ֆայլը, ապա գործողություն հատկանիշը պետք չէ ավելացնել: Բոլոր տարրերի համար, որոնց արժեքը պետք է փոխանցվի որպես HTTP հարցման պարամետր, պետք է սահմանվի անվան հատկանիշի եզակի արժեք: Դա հատկանիշի արժեքն է Անունկլինի ցուցանիշը$_GET, $_POST կամ $_REQUEST զանգվածներում (տես վերևի օրինակը): Սեղմելով կոճակի վրա ներկայացնելբոլոր մուտքագրված արժեքներով ձևը ներկայացնում է սերվերին: