Php-ն ստանում է բոլոր ստանալ պարամետրերը: Արտաքին փոփոխականներ (PHP-ից դուրս փոփոխականներ): Փոփոխականների փոխանցում PHP-ին՝ օգտագործելով POST մեթոդը

PHP POST հարցումը կատարելու առաջին մեթոդը file_get_contents օգտագործելն է: Երկրորդ մեթոդը կօգտագործի fread-ը մի քանի այլ գործառույթների հետ համատեղ: Երկու տարբերակներն էլ օգտագործում են stream_context_create ֆունկցիան՝ պահանջվող հարցման վերնագրի դաշտերը լրացնելու համար:

Կոդի բացատրություն

$sPD փոփոխականը պարունակում է փոխանցվող տվյալները: Այն պետք է լինի HTTP հարցման տողի ձևաչափով, ուստի որոշ հատուկ նիշեր պետք է կոդավորված լինեն:

Թե file_get_contents ֆունկցիայի և թե fread ֆունկցիայի մեջ մենք ունենք երկու նոր պարամետր: Առաջինը use_include_path է: Քանի որ մենք կատարում ենք HTTP հարցում, երկու օրինակներում էլ այն կեղծ կլինի: Տեղական ռեսուրսը կարդալու համար «true»-ի սահմանման դեպքում ֆունկցիան կփնտրի ֆայլը include_path-ում:

Երկրորդ պարամետրը համատեքստն է, որը լցված է stream_context_create-ի վերադարձի արժեքով, որն ընդունում է $aHTTP զանգվածի արժեքը։

Օգտագործելով file_get_contents՝ POST հարցումներ կատարելու համար

PHP-ում file_get_contents-ի միջոցով POST հարցում ուղարկելու համար դուք պետք է օգտագործեք stream_context_create-ը, որպեսզի ձեռքով լրացնեք վերնագրի դաշտերը և նշեք, թե որ «փաթաթան» օգտագործել, այս դեպքում՝ HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST տվյալներ $aHTTP = զանգված ("http" => // Փաթաթում, որը կօգտագործվի զանգված ("method" => "POST", // Հարցման մեթոդ // Հարցման վերնագրերը դրված են ստորև "header" => "Բովանդակություն" - տեսակը՝ դիմում/x-www-form-urlencoded», «content» => $sPD)); $context = stream_context_create ($aHTTP); $contents = file_get_contents ($sURL, false, $context); echo $բովանդակություն;

Օգտագործելով fread՝ POST հարցումները կատարելու համար

Դուք կարող եք օգտագործել fread ֆունկցիան POST հարցումներ կատարելու համար: Հետևյալ օրինակը օգտագործում է stream_context_create՝ անհրաժեշտ HTTP հարցումների վերնագրերը կազմելու համար.

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST տվյալներ $aHTTP = զանգված ("http" => // Փաթաթում, որը կօգտագործվի զանգված ("method" => "POST", // Հարցման մեթոդ // Հարցման վերնագրերը դրված են ստորև "header" => "Բովանդակություն" - տեսակը՝ դիմում/x-www-form-urlencoded», «content» => $sPD)); $context = stream_context_create ($aHTTP); $handle = fopen($sURL, "r", false, $context); $contents = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $բովանդակություն;

PHP-ով GET հարցումների կատարում

Այժմ մենք կկենտրոնանանք fread-ի և file_get_contents-ի օգտագործման վրա՝ ինտերնետից բովանդակություն ներբեռնելու համար HTTP-ի և HTTPS-ի միջոցով: Այս հոդվածում նկարագրված մեթոդներն օգտագործելու համար դուք պետք է միացնեք fopen wrappers տարբերակը: Դա անելու համար php.ini ֆայլում պետք է սահմանել allow_url_fopen պարամետրը On:

PHP-ում POST և GET հարցումների կատարումն օգտագործվում է կայքեր մուտք գործելու, վեբ էջի բովանդակությունը առբերելու կամ հավելվածների նոր տարբերակները ստուգելու համար: Մենք կքննարկենք, թե ինչպես կատարել պարզ HTTP հարցումներ:

Օգտագործելով fread-ը՝ ինտերնետից ֆայլեր ներբեռնելու կամ ստանալու համար

Հիշեք, որ վեբ էջի ընթերցումը սահմանափակվում է փաթեթի հասանելի մասով: Այսպիսով, դուք պետք է օգտագործեք stream_get_contents ֆունկցիան (նման է file_get_contents-ին) կամ մի քիչ հանգույց՝ բովանդակությունը փոքր կտորներով կարդալու համար, մինչև ֆայլի ավարտը հասնի:

PHP POST հարցումը մշակելու դեպքում fread ֆունկցիայի վերջին արգումենտը հավասար է հատվածի չափին։ Որպես կանոն, այն չպետք է մեծ լինի 8192-ից (8*1024)։

ստանալից (9)

Ո՞րն է այսպես ձևավորված URL հարցման տողից պարամետրեր ստանալու «ավելի քիչ կոդ» միջոցը:

www.mysite.com/category/subcategory?myqueryhash

Արդյունքը պետք է լինի՝ myqueryhash

Ես գիտեմ դրա մասին.

www.mysite.com/category/subcategory?q=myquery

Պատասխանները

Այս կոդը և նշումը իմը չեն: Էվան Ք-ն լուծում է նույնանուն բազմարժեք աշխատանք՝ օգտատիրոջ կողմից սահմանված գործառույթով;) վերցված՝

Վերոնշյալ օրինակի արդյունքները.

Բարև Հաննես:

Եթե ​​ցանկանում եք ստանալ հարցման ամբողջ տողը.

$_SERVER[«QUERY_STRING»]

Բացի այդ, եթե փնտրում եք ընթացիկ ֆայլի անունը հարցման տողի հետ միասին, ձեզ պարզապես անհրաժեշտ է հետևյալը

Հիմնական անունը ($_SERVER["REQUEST_URI"])

Սա ձեզ տեղեկատվություն կտա, ինչպիսին է հետևյալ օրինակը

file.php? arg1 = արժեք & arg2 = արժեք

Եվ եթե ձեզ նույնպես անհրաժեշտ է ֆայլի ամբողջական ուղին, որը սկսվում է արմատից, ինչպես օրինակ /folder/folder2/file.php?arg1=val&arg2=val, ապա պարզապես հեռացրեք basename() ֆունկցիան և պարզապես օգտագործեք ծածկույթը:

$_SERVER["REQUEST_URI"]

Շնորհակալություն @K. Shahzad Սա օգնում է, երբ ցանկանում եք վերաշարադրել հարցման տողը առանց որևէ վերագրման հավելումների: Ենթադրենք, դուք նորից եք գրում /test/? X = y index.php-ում: Q = test & x = y և ցանկանում եք ստանալ հարցման տողը:

Get_query_string()) ($arr = պայթել("?",$_SERVER["REQUEST_URI"]); if (count($arr) == 2)( return ""; )else( return "?".end( $ arr)»:
";) ) $query_string = get_query_string();

Դա անելու PHP եղանակն է օգտագործել parse_url ֆունկցիան, որը վերլուծում է URL-ը և վերադարձնում դրա բաղադրիչները: Ներառյալ հարցման տողը:

$url = "www.mysite.com/category/subcategory?myqueryhash"; echo parse_url ($url, PHP_URL_QUERY); # ելք «myqueryhash»

Ահա իմ գործառույթը՝ վերականգնելու REFERRER հարցման տողի մասերը:

Եթե ​​կանչող էջն արդեն ուներ հարցումների տող ինքնուրույն, և դուք պետք է վերադառնաք այդ էջ և ցանկանում եք ուղարկել այդ $_GET տառերից մի քանիսը, ոչ բոլորը (օրինակ՝ էջի համարը):

Օրինակ՝ Referrer հարցման տողը եղել է?foo=1&bar=2&baz=3 կանչող refererQueryString("foo" , "baz") վերադարձնում է foo=1&baz=3" :

RefererQueryString ֆունկցիան (/* var args */) ( //Վերադարձրեք դատարկ տողը, եթե հղում չկա կամ չկա $_GET vars հղումում. if (!isset($_SERVER["HTTP_REFERER"]) || դատարկ ($_SERVER["HTTP_REFERER" " "]) || դատարկ (parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) (վերադարձեք ""; ) //Ստացեք հղումի URL հարցումը (ինչ-որ բան, ինչպիսին է "threadID=7&page=8") $refererQueryString = parse_url ( urldcode ($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Ո՞ր արժեքներն եք ուզում հանել: (Դուք փոխանցել եք դրանց անունները որպես փոփոխականներ): $args = func_get_args (); //Ստացեք «» տողերը: հղումի URL-ի URL՝ $pairs = explode("&",$refererQueryString); //Տող, որը դուք կվերադարձնեք ավելի ուշ՝ $return = ""; //Վերլուծեք առբերված տողերը և փնտրեք հետաքրքրողները՝ foreach ($pairs որպես $pair ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Եթե անունը փոխանցել եք որպես arg, կցեք ընթացիկ զույգը վերադարձվող տողի համար : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Ահա ձեր վերադարձված «key=value» զույգերը՝ սոսնձված «&»-ով։ ": return ltrim($return,"&"); ) //Եթե ձեր հղումը եղել է «page.php?foo=1&bar=2&baz=3» //և ցանկանում եք վերնագիր() վերադառնալ «page.php?foo=1&baz=3» //(առանց «բար», միայն foo և baz), ապա կիրառեք՝ header("Location: page.php?".refererQueryString("foo","baz"));

Microsoft Support-ը նշում է. «URL-ի առավելագույն երկարությունը Internet Explorer-ում 2083 նիշ է»:

IE-ն երկար ժամանակ խնդիրներ ունի URL-ների հետ: Firefox-ը, կարծես, լավ է աշխատում >4k նիշերի հետ:

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

Այստեղ մենք մանրամասն չենք խոսի HTTP արձանագրության մեխանիզմի մասին, որը պատասխանատու է զննարկիչից տվյալները սերվեր և հետ հասցնելու համար, հատուկ բաժին է հատկացված այս PHP-ին և HTTP-ին: Խորությամբ քննարկվում են նաև HTML ձևերի հետ աշխատելու սկզբունքները։

Այժմ այս մեխանիզմները կդիտարկենք միայն կիրառական տեսանկյունից՝ չխորանալով տեսության մեջ։

Օգտատերերից տվյալներ ստանալու համար մեզ անհրաժեշտ է ինտերակտիվ փոխազդեցություն նրանց հետ:

Այժմ եկեք փորձենք գրել մի սկրիպտ, որն ընդունում է օգտվողի անունը որպես պարամետրեր և ելքեր.

"Բարեւ Ձեզ, !".

Նախ, եկեք նայենք սկրիպտին անուն փոխանցելու ամենապարզ ձևին. այն ուղղակիորեն մուտքագրելով այն URL-ում ? - օրինակ՝ name=name ձևաչափով: Ահա մի օրինակ.

http://localhost/script.php?name=name

Մեր սցենարը պետք է ճանաչի անվան պարամետրը: Այսինքն, պարզ ասած, սցենարը (սկրիպտը) պետք է ընդունի անվան պարամետրը անվան փոփոխականի տեսքով, այնուհետև օգտագործողի դիտարկիչում ցուցադրի «Բարև, !» տողը: Դուք կարող եք դա անել այս կերպ.

Մենք գրում ենք սկրիպտ, որը վերցնում է անվան պարամետրը և արդյունքը ցուցադրում օգտվողի բրաուզերում, այնուհետև այն պահպանում է script.php անվան տակ:

Մեր օրինակում մենք օգտագործեցինք կանխորոշված ​​$_GET["name"] փոփոխականը՝ անվանման պարամետրը «ստանալու»: Այժմ, անցնելով name=Sasha պարամետրը GET հարցման միջոցով, մենք կստանանք հետևյալ արդյունքը.

Բարև Սաշա:

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


Անուն:

Այժմ եկեք պահենք այս HTML փաստաթուղթը մեր թեստային սերվերում (localhost) send.html անվան տակ՝ նույն գրացուցակում, որտեղ մենք արդեն պահել ենք script.php սկրիպտը:

Այժմ մենք գործարկում ենք HTML փաստաթուղթը բրաուզերում.

http://localhost/send.html

Մուտքագրեք անունը դաշտում և սեղմեք «GO!» կոճակը: Ձևը անվանման պարամետրը կփոխանցի մեր script.php-ին GET հարցման միջոցով: Եթե ​​ամեն ինչ ճիշտ եք արել, և ձեր վեբ սերվերը նորմալ է աշխատում, ապա ձևի դաշտում կտեսնեք ձեր մուտքագրած անունը: Բրաուզերի հասցեի տողում կտեսնեք անցած ուղին և անվան պարամետրը:

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

Այսպիսով, մեզ անհրաժեշտ է սկրիպտը, որպեսզի դուրս բերենք հետևյալը.

«Բարև, դու ծեր ես»:

Այսինքն՝ սցենարին պետք է փոխանցենք 2 պարամետր՝ անուն և տարիք։

Այժմ մենք կգրենք script.php, որը վերցնում է երկու պարամետր՝ անուն և տարիք, ինչպես նաև HTML փաստաթուղթ՝ ձևով, որը կփոխանցի այս երկու պարամետրերը մեր նոր սցենարին.

Եվ ահա send.html HTML փաստաթուղթը, որով մենք անունը և տարիքային պարամետրերը կփոխանցենք մեր սկրիպտին.



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

Մուտքագրեք տարիքը.



Այժմ մեր սցենարը վերցնում է երկու պարամետր անուն և տարիք և արդյունքը ցուցադրում է զննարկիչում ձևաչափով. «Բարև, ծեր ես»:

Ուշադրություն դարձրեք բրաուզերի հասցեի տողին՝ պարամետրերը սկրիպտին փոխանցելուց հետո, այն նման տեսք կունենա (առանց կիրիլյան URL կոդավորման).

http://localhost/script.php?name=Sasha&age=23

Կախված ձեր թարգմանչի կարգավորումներից՝ ձեր HTML ձևերից տվյալներ մուտք գործելու մի քանի եղանակ կա: Ահա մի քանի օրինակներ.

//Ձևում, օգտագործելով get մեթոդը, մենք ուղարկում ենք 1 արժեքը թաքնված դաշտի միջոցով Ուղարկել հարցում

get.php ֆայլ

Php հարցումի գրառում

Php գրառման հարցումն ուղարկվում է նաև ձևի միջոցով, միայն ձևի պիտակի հատկանիշը կլինի մեթոդ=«փոստ» ։ Իսկ նշված ֆայլի տվյալները կստանանք $_POST[«որոնում»] փոստի զանգվածից և անմիջապես օրինակ կտանք։

Առաջադրանք՝ ուղարկել տվյալները index.php-ից՝ օգտագործելով POST մեթոդը, սերվերին get.php ֆայլում և հետ ստանալ այն, եթե տվյալների ուղարկման դաշտը դատարկ է, ցուցադրեք հաղորդագրություն դատարկ դաշտի մասին: Սկսենք լուծումը index.php-ով

Որոնման հարցում

Լրացրեք հարցման դաշտը

Մուտքագրված հարցումը՝

Հարցում ուղարկել

get.php ֆայլ

AJAX զանգվածի անցում

Եկեք կատարենք նույն խնդիրը ajax-ի միջոցով: Իրականում ajax-ը javascript-ի հետ կապված տեխնոլոգիա է, բայց որպես սերվեր տվյալների փոխանցման մասին նշումի մաս, մենք կանդրադառնանք նաև այս տեխնոլոգիային։ Իհարկե, ajax-ը առանձին հոդվածի թեմա է։ Հարցման գործընթացում մենք կցուցադրենք նաև բեռնման ցուցիչի gif: Մենք ունենք նաև երկու ֆայլ index.php և get.php: Index.php ֆայլ: Մի մոռացեք միացնել jquery-ն: Խնդրում ենք նկատի ունենալ, որ gif-ը թաքցնելու համար, երբ էջը առաջին անգամ բեռնվում է, նշեք ոճի ցուցադրումը. ոչ մեկը տուփի բլոկին:

$(document).ready(function())( //մենք կցում ենք իրադարձություն ուղարկելու կոճակին $(".submit").click(function())($.ajax(( //ինչպես ենք փոխանցելու տվյալների տեսակը «GET», / /որտեղ մենք փոխանցում ենք url: «get.php», //ինչ տվյալներ ենք փոխանցում տվյալներ. (դրոշակ՝ 1), //իրադարձություն նախքան ajax ուղարկելը ուղարկելուց առաջ՝ ֆունկցիան())( //ցուցադրել gif $(".box").ցուցադրել( ); ), //իրադարձություն պատասխան ստանալուց հետո, //ստացեք զանգված տվյալների հաջողության մեջ. function(data)( //hide the gif $(".box").թաքցնել (); var html = ""; //f- i JSON.parse-ը json-ի տվյալները թարգմանում է առարկայի մեջ var dt=JSON.parse(data); for (var i = 0; i

Get.php ֆայլը: Մենք ստանում ենք տվյալներ get array-ից ֆայլի մեջ և զանգվածը փոխանցում php-ից javascript: Զանգվածը php-ին js փոխանցելու համար այն պետք է փոխարկվի json ձևաչափի: Դա անելու համար մենք օգտագործում ենք php json_encode ֆունկցիան։ Վերակոդավորումից հետո json-ն ուղարկվում է php միջոցների միջոցով, մասնավորապես զանգահարելով echo:

Ես URL-ի կառուցվածք ունեմ հարցման տողով և պարամետրով, որը կոչվում է դիրք:

Http://computerhelpwanted.com/jobs/?occupation=administrator&position=network+administrator

Ես նաև ունեմ ձևի ընտրության բացվող ցանկ՝ ձևի ընտրության անվան դիրքի հետ:

Ընտրեք Զբաղմունք ադմինիստրատոր Ընտրեք Պաշտոն Ցանցի ադմինիստրատոր

Երբ օգտատերը ընտրություն է կատարում, այն ուղարկում է պարամետրի արժեքները գործողության հատկանիշին՝ ընտրելով անունը==դիրքորոշումը որպես հարցման տողում օգտագործելու պարամետր։

Իմ հարցն այն է, թե ինչպես կարող եմ մուտք գործել ձևի ընտրության արժեքները հարցման տողի արժեքներից առանձին:

Ես օգտագործում եմ _GET մեթոդը՝ հարցման տողի պարամետրից արժեք կանչելու համար:

$position = isset($_GET["դիրք"]) ? ($_GET["position"]): "";

Ակնհայտ է, որ սա ստանում է իր արժեքը URL կառուցվածքից, այլ ոչ թե ձևի տարրից: Կամ գուցե այդպես է, վստահ չեմ: Բայց փորձարկելով այն, ես կարծես եկել եմ այն ​​եզրակացության, որ այն ստանում է URL-ով և ոչ թե ձևով:

Ինչպե՞ս կարող եմ մուտք գործել ձևի ընտրված արժեքը իմ PHP-ում համեմատելիս:

Թարմացնել

Ես խնդիր ունեմ վերնագրում նշված կանոնական URL-ի հետ:

Այդպես էլ պետք է լինի

միակ տարբերությունը հարցման տողում - և +-ն է:

Իմ հարցումների ոչ բոլոր տողերն ունեն +: Ոմանք ունեն -. Բայց ես ցուցադրում եմ բովանդակություն երկու URL-ների վրա, անկախ նրանից, թե այն ունի - կամ +: Ամեն դեպքում, երկու URL-ները ստանում են նույն էջի բովանդակությունը:

Բայց քանի որ կանոնականը դինամիկ կերպով ստեղծվում է URI-ից և ոչ թե ձևի տարրի արժեքից, երկու բովանդակության էջերում կան 2 տարբեր կանոնական նիշ:

Օգտագործելով _Get('value') արժեքը հարցման տողից ստացվում է ձևի տարրի փոխարեն: Ես դա գիտեմ, քանի որ ձևի տարրի արժեքը ունի տարածություն ցանցի ադմինիստրատորի միջև, որը urlencod է ստանում, երբ ձևը ներկայացվում է որպես ցանց+ադմինիստրատոր: Այսպիսով, եթե ես կարողանամ համեմատել ձևի տարրի արժեքի հետ, կարող եմ սահմանել ճիշտ կանոնականը: