Php को सभी पैरामीटर मिलते हैं। बाहरी चर (PHP के बाहर के चर)। POST विधि का उपयोग करके PHP में वेरिएबल पास करना

PHP POST अनुरोध करने की पहली विधि file_get_contents का उपयोग करना है। दूसरी विधि कुछ अन्य कार्यों के साथ संयोजन में फ़्रेड का उपयोग करेगी। आवश्यक अनुरोध हेडर फ़ील्ड भरने के लिए दोनों विकल्प स्ट्रीम_कॉन्टेक्स्ट_क्रिएट फ़ंक्शन का उपयोग करते हैं।

कोड स्पष्टीकरण

$sPD वैरिएबल में स्थानांतरित किया जाने वाला डेटा शामिल है। यह HTTP अनुरोध स्ट्रिंग प्रारूप में होना चाहिए, इसलिए कुछ विशेष वर्णों को एन्कोड किया जाना चाहिए।

File_get_contents फ़ंक्शन और फ़्रेड फ़ंक्शन दोनों में हमारे पास दो नए पैरामीटर हैं। पहला है use_include_path । चूँकि हम एक HTTP अनुरोध कर रहे हैं, यह दोनों उदाहरणों में गलत होगा। जब स्थानीय संसाधन को पढ़ने के लिए सही पर सेट किया जाता है, तो फ़ंक्शन include_path पर फ़ाइल की तलाश करेगा।

दूसरा पैरामीटर संदर्भ है, जो स्ट्रीम_कॉन्टेक्स्ट_क्रिएट के रिटर्न मान से भरा हुआ है, जो $aHTTP सरणी का मान लेता है।

POST अनुरोध करने के लिए file_get_contents का उपयोग करना

PHP में file_get_contents का उपयोग करके POST अनुरोध भेजने के लिए, आपको हेडर फ़ील्ड को मैन्युअल रूप से भरने के लिए Stream_context_create का उपयोग करना होगा और निर्दिष्ट करना होगा कि किस "रैपर" का उपयोग करना है - इस मामले में HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // पोस्ट यूआरएल $sPD = "नाम=जैकब&बेंच=150"; // POST डेटा $aHTTP = array("http" => // रैपर जिसका उपयोग किया जाएगा array("method" => "POST", // अनुरोध विधि // अनुरोध हेडर "हेडर" => "सामग्री" के नीचे सेट किए गए हैं - प्रकार: एप्लिकेशन/x-www-form-urlencoded", "content" => $sPD)); $संदर्भ = स्ट्रीम_कॉन्टेक्स्ट_क्रिएट($aHTTP); $सामग्री = file_get_contents($sURL, गलत, $संदर्भ); प्रतिध्वनि $सामग्री;

POST अनुरोध निष्पादित करने के लिए फ़्रेड का उपयोग करना

आप POST अनुरोध करने के लिए फ़्रेड फ़ंक्शन का उपयोग कर सकते हैं। निम्नलिखित उदाहरण आवश्यक HTTP अनुरोध हेडर लिखने के लिए Stream_context_create का उपयोग करता है:

$sURL = "http://brugbart.com/Examples/http-post.php"; // पोस्ट यूआरएल $sPD = "नाम=जैकब&बेंच=150"; // POST डेटा $aHTTP = array("http" => // रैपर जिसका उपयोग किया जाएगा array("method" => "POST", // अनुरोध विधि // अनुरोध हेडर "हेडर" => "सामग्री" के नीचे सेट किए गए हैं - प्रकार: एप्लिकेशन/x-www-form-urlencoded", "content" => $sPD)); $संदर्भ = स्ट्रीम_कॉन्टेक्स्ट_क्रिएट($aHTTP); $हैंडल = fopen($sURL, "r", गलत, $संदर्भ); $सामग्री = ""; जबकि (!feof($handle)) ($contents .= fread($handle, 8192); ) fclose($handle); प्रतिध्वनि $सामग्री;

PHP के साथ GET अनुरोध बनाना

अब हम HTTP और HTTPS के माध्यम से इंटरनेट से सामग्री डाउनलोड करने के लिए fread और file_get_contents का उपयोग करने पर ध्यान केंद्रित करेंगे। इस आलेख में वर्णित विधियों का उपयोग करने के लिए, आपको फॉपेन रैपर विकल्प को सक्षम करना होगा। ऐसा करने के लिए, आपको php.ini फ़ाइल में follow_url_fopen पैरामीटर को चालू पर सेट करना होगा।

PHP में POST और GET अनुरोध निष्पादित करने का उपयोग वेबसाइटों में लॉग इन करने, वेब पेज सामग्री पुनर्प्राप्त करने, या एप्लिकेशन के नए संस्करणों की जांच करने के लिए किया जाता है। हम देखेंगे कि सरल HTTP अनुरोध कैसे करें।

इंटरनेट पर फ़ाइलें डाउनलोड करने या प्राप्त करने के लिए फ़्रेड का उपयोग करना

याद रखें कि वेब पेज पढ़ना पैकेट के सुलभ हिस्से तक ही सीमित है। इसलिए आपको फ़ाइल के अंत तक सामग्री को छोटे टुकड़ों में पढ़ने के लिए स्ट्रीम_गेट_कंटेंट्स फ़ंक्शन (फ़ाइल_गेट_कंटेंट्स के समान) या थोड़ी देर के लूप का उपयोग करने की आवश्यकता है:

PHP POST अनुरोध को संसाधित करने के इस मामले में, फ़्रेड फ़ंक्शन का अंतिम तर्क टुकड़े के आकार के बराबर है। नियमानुसार यह 8192 (8*1024) से अधिक नहीं होना चाहिए।

प्राप्त से(9)

इस तरह स्वरूपित यूआरएल क्वेरी स्ट्रिंग से पैरामीटर प्राप्त करने का "कम कोड" तरीका क्या है?

www.mysite.com/category/subcategory?myqueryhash

आउटपुट होना चाहिए: myqueryhash

मुझे इसके बारे में पता है:

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

जवाब

यह कोड और नोटेशन मेरा नहीं है. इवान के उपयोगकर्ता-परिभाषित फ़ंक्शन के साथ एक ही नाम की बहु-मूल्यवान नौकरी का समाधान करता है;) से लिया गया:

उपरोक्त उदाहरण आउटपुट:

नमस्ते हेंस!

यदि आप संपूर्ण क्वेरी स्ट्रिंग प्राप्त करना चाहते हैं:

$_सर्वर["QUERY_STRING"]

साथ ही, यदि आप क्वेरी स्ट्रिंग के साथ वर्तमान फ़ाइल नाम ढूंढ रहे हैं, तो आपको बस निम्नलिखित की आवश्यकता है

बेसनाम($_SERVER["REQUEST_URI"])

यह आपको निम्नलिखित उदाहरण की तरह जानकारी देगा

फ़ाइल.php? arg1 = मान और arg2 = मान

और यदि आपको रूट से शुरू होने वाली फ़ाइल का पूरा पथ भी चाहिए जैसे /folder/folder2/file.php?arg1=val&arg2=val तो बस बेसनेम() फ़ंक्शन को हटा दें और ओवरले का उपयोग करें

$_सर्वर["REQUEST_URI"]

धन्यवाद @के. शहजाद यह तब मदद करता है जब आप क्वेरी स्ट्रिंग को बिना किसी पुनर्लेखन के फिर से लिखना चाहते हैं। मान लीजिए कि आप /परीक्षण/फिर से लिखते हैं? Index.php में X = y? Q = परीक्षण और x = y और आप क्वेरी स्ट्रिंग प्राप्त करना चाहते हैं।

फ़ंक्शन get_query_string())( $arr = विस्फोट("?",$_SERVER["REQUEST_URI"]); यदि (गिनती($arr) == 2)( वापसी ""; )अन्यथा( वापसी "?".end( $ एआरआर)।"
"; ) ) $query_string = get_query_string();

ऐसा करने का PHP तरीका parse_url फ़ंक्शन का उपयोग करना है, जो URL को पार्स करता है और उसके घटकों को लौटाता है। क्वेरी स्ट्रिंग सहित.

$url = "www.mysite.com/category/subcategory?myqueryhash"; इको पार्स_यूआरएल($url, PHP_URL_QUERY); # आउटपुट "myqueryhash"

यहां रेफरर क्वेरी स्ट्रिंग के हिस्सों को पुनर्प्राप्त करने का मेरा कार्य है।

यदि कॉलिंग पेज में पहले से ही एक क्वेरी स्ट्रिंग है, और आपको उस पेज पर वापस लौटने की जरूरत है और उन $_GET वर्जन (जैसे पेज नंबर) में से सभी नहीं, बल्कि कुछ भेजना चाहते हैं।

उदाहरण: रेफरर क्वेरी स्ट्रिंग थी?foo=1&bar=2&baz=3 कॉलिंग रेफररक्वेरीस्ट्रिंग("foo" , "baz") रिटर्न foo=1&baz=3" :

फ़ंक्शन रेफ़ररक्वेरीस्ट्रिंग(/* var args */) ( //यदि कोई रेफ़रर नहीं है या रेफ़रर में कोई $_GET वर्र्स उपलब्ध नहीं है, तो खाली स्ट्रिंग लौटाएं: यदि (!isset($_SERVER["HTTP_REFERER"]) || खाली($_SERVER["HTTP_REFERER " "]) || खाली(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) ( return ""; ) //रेफ़रर की URL क्वेरी प्राप्त करें (कुछ इस तरह "threadID=7&page=8") $refererQueryString = parse_url (urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //आप कौन से मान निकालना चाहते हैं? (आपने उनके नाम वेरिएबल के रूप में पारित किए हैं।) $args = func_get_args(); //"" स्ट्रिंग प्राप्त करें रेफरर का यूआरएल: $pairs = विस्फोट("&",$refererQueryString); //स्ट्रिंग आप बाद में लौटाएंगे: $return = ""; //प्राप्त स्ट्रिंग्स का विश्लेषण करें और रुचि के स्ट्रिंग्स की तलाश करें: foreach ($pairs) $pair के रूप में) ( $keyVal = विस्फोट('',$pair); $key = &$keyVal; $val = urlencode($keyVal); //यदि आपने नाम को arg के रूप में पारित किया है, तो वर्तमान जोड़ी को रिटर्न स्ट्रिंग में संलग्न करें : if( in_array($key,$args)) ( $return .= "&". $key . "= .$val; ) ) // यहां आपके लौटाए गए "key=value" जोड़े "&" के साथ चिपके हुए हैं ": रिटर्न एलट्रिम($रिटर्न,"&"); ) //यदि आपका रेफरर "page.php?foo=1&bar=2&baz=3" था //और आप हेडर() को वापस "page.php?foo=1&baz=3" //(कोई "बार" नहीं चाहते हैं, केवल foo और baz), फिर लागू करें: हेडर("स्थान: page.php?".refererQueryString("foo","baz"));

Microsoft समर्थन कहता है: "इंटरनेट एक्सप्लोरर में अधिकतम URL लंबाई 2083 वर्ण है।"

IE को लंबे समय से URL के साथ समस्या हो रही है। फ़ायरफ़ॉक्स >4k वर्णों के साथ ठीक काम करता प्रतीत होता है।

अधिकांश भाग के लिए वेब प्रोग्रामिंग केवल उपयोगकर्ता द्वारा दर्ज किए गए विभिन्न डेटा की प्रोसेसिंग है - यानी, HTML फॉर्मों को प्रोसेस करना।
संभवतः PHP जैसी कोई अन्य भाषा नहीं है जो आपके लिए प्रोसेसिंग और पार्सिंग के कार्य को इतना आसान बना दे, यानी। वेरिएबल जो (उपयोगकर्ता के ब्राउज़र से) आए हैं। तथ्य यह है कि सभी आवश्यक क्षमताएं PHP भाषा में निर्मित होती हैं, इसलिए आपको HTTP प्रोटोकॉल की विशेषताओं के बारे में सोचने की ज़रूरत नहीं है और यह सोचने की ज़रूरत नहीं है कि POST फॉर्म कैसे भेजें और प्राप्त करें या फ़ाइलें कैसे डाउनलोड करें। PHP डेवलपर्स के पास है हर चीज़ के लिए प्रावधान किया गया।

यहां हम HTTP प्रोटोकॉल के तंत्र पर विस्तार से ध्यान नहीं देंगे, जो ब्राउज़र से सर्वर तक और वापस डेटा पहुंचाने के लिए जिम्मेदार है; एक विशेष खंड इस PHP और HTTP के लिए समर्पित है। HTML फॉर्म के साथ काम करने के सिद्धांतों पर भी गहराई से चर्चा की गई है।

अब हम इन तंत्रों पर सिद्धांत में पड़े बिना, केवल व्यावहारिक दृष्टिकोण से ही विचार करेंगे।

उपयोगकर्ताओं से डेटा प्राप्त करने के लिए, हमें उनके साथ इंटरैक्टिव इंटरैक्शन की आवश्यकता है।

आइए अब एक स्क्रिप्ट लिखने का प्रयास करें जो उपयोगकर्ता नाम को पैरामीटर और आउटपुट के रूप में लेती है:

"नमस्ते, !"।

सबसे पहले, आइए किसी स्क्रिप्ट में नाम भेजने का सबसे सरल तरीका देखें - इसे सीधे यूआरएल में ? के बाद टाइप करना। - उदाहरण के लिए, प्रारूप name=name में। यहाँ एक उदाहरण है:

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

हमारी स्क्रिप्ट को नाम पैरामीटर को पहचानने की आवश्यकता है। यानी, सीधे शब्दों में कहें तो, स्क्रिप्ट (स्क्रिप्ट) को नाम चर के रूप में नाम पैरामीटर को स्वीकार करना होगा, और फिर उपयोगकर्ता के ब्राउज़र में "हैलो,!" स्ट्रिंग प्रदर्शित करनी होगी। आप इसे इस प्रकार कर सकते हैं:

हम एक स्क्रिप्ट लिखते हैं जो नाम पैरामीटर लेती है और उपयोगकर्ता के ब्राउज़र में परिणाम प्रदर्शित करती है, और फिर इसे स्क्रिप्ट.php नाम के तहत सहेजती है:

हमारे उदाहरण में, हमने नाम पैरामीटर को "प्राप्त" करने के लिए पूर्वनिर्धारित वेरिएबल $_GET["name"] का उपयोग किया। अब, पैरामीटर नाम = साशा को GET अनुरोध के माध्यम से पास करके, हमें निम्नलिखित परिणाम मिलेगा:

नमस्ते साशा!

आइए अब नाम पैरामीटर को ब्राउज़र क्वेरी स्ट्रिंग से नहीं, बल्कि HTML फॉर्म के माध्यम से पास करने का प्रयास करें। हम निम्नलिखित सामग्री के साथ एक HTML दस्तावेज़ बनाते हैं:


नाम:

आइए अब इस HTML दस्तावेज़ को अपने परीक्षण सर्वर (लोकलहोस्ट) पर उसी निर्देशिका में भेजें.html नाम से सहेजें जहां हमने पहले से ही स्क्रिप्ट.php स्क्रिप्ट को सहेजा है।

अब हम ब्राउज़र में HTML दस्तावेज़ लॉन्च करते हैं:

http://localhost/send.html

फ़ील्ड में नाम दर्ज करें और "जाओ!" बटन दबाएँ। फॉर्म GET अनुरोध के माध्यम से नाम पैरामीटर को हमारी स्क्रिप्ट स्क्रिप्ट.php में भेज देगा। यदि आपने सब कुछ सही ढंग से किया है और आपका वेब सर्वर सामान्य रूप से काम कर रहा है, तो आपको फॉर्म फ़ील्ड में आपके द्वारा दर्ज किया गया नाम दिखाई देगा! ब्राउज़र के एड्रेस बार में आपको पथ और आपके द्वारा पास किया गया नाम पैरामीटर दिखाई देगा।

अब हमें यह समझने की जरूरत है कि हम कई मापदंडों को कैसे पार कर सकते हैं, शुरुआत में कम से कम दो को।

इसलिए, हमें निम्नलिखित आउटपुट के लिए स्क्रिप्ट की आवश्यकता है:

"हैलो! आप बूढ़े हैं!"

यानी, हमें स्क्रिप्ट में 2 पैरामीटर पास करने होंगे: नाम और उम्र।

अब हम एक स्क्रिप्ट.php लिखेंगे जो दो पैरामीटर लेती है: नाम और उम्र, साथ ही एक फॉर्म वाला HTML दस्तावेज़ जो इन दो पैरामीटर को हमारी नई स्क्रिप्ट में पास करेगा:

और यहां HTML दस्तावेज़ sent.html है, जिसके साथ हम अपनी स्क्रिप्ट में नाम और आयु पैरामीटर पास करेंगे:



अपना नाम दर्ज करें:

आयु दर्ज करें:



अब हमारी स्क्रिप्ट दो पैरामीटर नाम और उम्र लेती है और परिणाम को ब्राउज़र में इस प्रारूप में प्रदर्शित करती है: "हैलो,! क्या आप बूढ़े हैं!"

स्क्रिप्ट में पैरामीटर पास करने के बाद ब्राउज़र एड्रेस बार पर ध्यान दें, यह कुछ इस तरह दिखेगा (सिरिलिक यूआरएल एन्कोडिंग के बिना):

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

आपकी दुभाषिया सेटिंग्स के आधार पर, आपके HTML फॉर्म से डेटा तक पहुंचने के कई तरीके हैं। यहां कुछ उदाहरण दिए गए हैं:

//फॉर्म में, गेट विधि का उपयोग करके, हम एक छिपे हुए फ़ील्ड के माध्यम से मान 1 भेजते हैं एक अनुरोध भेजें

get.php फ़ाइल

पीएचपी अनुरोध पोस्ट

Php पोस्ट अनुरोध भी एक फॉर्म के माध्यम से भेजा जाता है, फॉर्म टैग में केवल विशेषता विधि = "पोस्ट" होगी। और हम पोस्ट $_POST["search"] ऐरे से निर्दिष्ट फ़ाइल में डेटा प्राप्त करेंगे और तुरंत एक उदाहरण देंगे।

कार्य: POST विधि का उपयोग करके get.php फ़ाइल में सर्वर पर Index.php से डेटा भेजें और इसे वापस प्राप्त करें, यदि डेटा भेजने वाला फ़ील्ड खाली है, तो खाली फ़ील्ड के बारे में एक संदेश प्रदर्शित करें। आइए समाधान की शुरुआत Index.php से करें

प्रश्न खोजना

अनुरोध फ़ील्ड भरें

दर्ज की गई क्वेरी:

अनुरोध भेजा

get.php फ़ाइल

AJAX ऐरे पासिंग

आइए अजाक्स का उपयोग करके वही कार्य पूरा करें। दरअसल, अजाक्स जावास्क्रिप्ट से संबंधित एक तकनीक है, लेकिन सर्वर पर डेटा स्थानांतरित करने पर नोट के हिस्से के रूप में, हम इस तकनीक पर भी बात करेंगे। बेशक, अजाक्स एक अलग लेख का विषय है। अनुरोध प्रक्रिया के दौरान, हम लोडिंग संकेतक का एक GIF भी प्रदर्शित करेंगे। हमारे पास दो फ़ाइलें Index.php और get.php भी हैं। Index.php फ़ाइल. jquery कनेक्ट करना न भूलें. कृपया ध्यान दें कि पेज पहली बार लोड होने पर GIF को छिपाने के लिए, बॉक्स ब्लॉक में स्टाइल डिस्प्ले: कोई नहीं असाइन करें

$(document).ready(function())( //हम सबमिट बटन पर एक ईवेंट संलग्न करते हैं $("।submit").click(function())( $.ajax(( //हम डेटा प्रकार को कैसे प्रसारित करेंगे : "प्राप्त करें", // जहां हम यूआरएल पास करते हैं: "get.php", // हम कौन सा डेटा पास करते हैं डेटा: (ध्वज: 1), // अजाक्स भेजने से पहले की घटना भेजें: फ़ंक्शन ()) ( // एक GIF प्रदर्शित करें $("।box").show( ); ), //प्रतिक्रिया प्राप्त करने के बाद घटना, //डेटा में एक सरणी प्राप्त करें सफलता: फ़ंक्शन(डेटा)( //gif छुपाएं $("।box").hide (); var html = ""; //f- i JSON.parse किसी ऑब्जेक्ट में json डेटा का अनुवाद करता है var dt=JSON.parse(data); for (var i = 0; i

Get.php फ़ाइल. हम फ़ाइल में प्राप्त ऐरे से डेटा प्राप्त करते हैं और ऐरे को php से जावास्क्रिप्ट में पास करते हैं। किसी ऐरे को php से js में पास करने के लिए, इसे json फॉर्मेट में बदलना होगा। ऐसा करने के लिए, हम php फ़ंक्शन json_encode का उपयोग करते हैं। रीकोडिंग के बाद, json को php माध्यम से भेजा जाता है, विशेष रूप से इको को कॉल करके।

मेरे पास एक क्वेरी स्ट्रिंग और स्थिति नामक पैरामीटर के साथ एक यूआरएल संरचना है।

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

मेरे पास फॉर्म चयन नाम स्थिति के साथ एक फॉर्म चयन ड्रॉपडाउन भी है।

व्यवसाय प्रशासक का चयन करें स्थिति नेटवर्क प्रशासक का चयन करें

जब उपयोगकर्ता चयन करता है, तो यह क्वेरी स्ट्रिंग में उपयोग करने के लिए पैरामीटर के रूप में चयन नाम = "स्थिति" के साथ एक्शन विशेषता पर पैरामीटर मान भेजता है।

मेरा प्रश्न यह है कि मैं प्रपत्र चयन मानों को क्वेरी स्ट्रिंग मानों से अलग से कैसे एक्सेस करूं?

मैं क्वेरी स्ट्रिंग पैरामीटर से मान कॉल करने के लिए _GET विधि का उपयोग कर रहा हूं।

$स्थिति = जारी($_GET["स्थिति"])? ($_GET["स्थिति"]) : "";

जाहिर है इसका मूल्य यूआरएल संरचना से मिलता है, फॉर्म तत्व से नहीं। या शायद ऐसा है, निश्चित नहीं। लेकिन इसका परीक्षण करते हुए, मैं इस निष्कर्ष पर पहुंचा हूं कि यह यूआरएल द्वारा प्राप्त हो रहा है, न कि फॉर्म द्वारा।

मैं अपने PHP में तुलना करते समय फ़ॉर्म के चयन मान तक कैसे पहुँच सकता हूँ?

अद्यतन

मुझे हेडर में निर्दिष्ट कैनोनिकल यूआरएल से समस्या है।

इसे ऐसा होना चाहिए

क्वेरी स्ट्रिंग में केवल - और + का अंतर है।

मेरी सभी क्वेरी स्ट्रिंग में + नहीं है। कुछ के पास है -। लेकिन मैं दोनों यूआरएल पर सामग्री दिखा रहा हूं, भले ही इसमें - या + हो। किसी भी तरह, दोनों URL को समान पृष्ठ सामग्री प्राप्त होती है।

लेकिन चूंकि कैनोनिकल यूआरआई से गतिशील रूप से बनाया गया है, न कि फॉर्म तत्व के मूल्य से, दोनों सामग्री पृष्ठों पर 2 अलग-अलग कैनोनिकल वर्ण हैं।

_Get('value') का उपयोग करने से प्रपत्र तत्व के बजाय क्वेरी स्ट्रिंग से मान पुनर्प्राप्त होता है। मुझे यह पता है क्योंकि फॉर्म एलिमेंट वैल्यू में नेटवर्क एडमिनिस्ट्रेटर के बीच एक जगह होती है जो फॉर्म को नेटवर्क+एडमिनिस्ट्रेटर के रूप में सबमिट करने पर urlencoded हो जाती है। इसलिए अगर मैं फॉर्म एलिमेंट वैल्यू के साथ तुलना कर सकता हूं तो मैं सही कैनोनिकल सेट कर सकता हूं।