PHP अगले पृष्ठ पर परिवर्तनशील है


196

यह बहुत आसान लगता है, लेकिन मुझे इसे करने का एक अच्छा तरीका नहीं मिला।

पहले पृष्ठ में कहें कि मैं एक चर बनाता हूं

$myVariable = "Some text";

और उस पेज के लिए फॉर्म की कार्रवाई "Page2.php" है। तो Page2.php में, मैं उस चर तक कैसे पहुंच सकता हूं? मुझे पता है कि मैं इसे सत्रों के साथ कर सकता हूं लेकिन मुझे लगता है कि यह एक साधारण स्ट्रिंग के लिए बहुत अधिक है, और मुझे केवल एक साधारण स्ट्रिंग (एक फ़ाइल नाम) पास करने की आवश्यकता है।

इसे कैसे प्राप्त किया जा सकता है?

धन्यवाद!


चरों को पास करने के लिए सबसे अच्छी और आसान बात यह है कि मैंने इसे यहाँ कैसे समझाया: stackoverflow.com/questions/14465464/…
Jaro

जवाबों:


450

HTML / HTTP स्टेटलेस है, दूसरे शब्दों में, आपने पिछले पेज पर जो किया / देखा, वह वर्तमान पेज से पूरी तरह से जुड़ा नहीं है। सिवाय अगर आप सत्र, कुकीज़ या GET / POST चर जैसे कुछ का उपयोग करते हैं। सत्र और कुकीज़ का उपयोग करना काफी आसान है, सत्र कुकीज़ की तुलना में कहीं अधिक सुरक्षित है। अधिक सुरक्षित, लेकिन पूरी तरह से सुरक्षित नहीं।

सत्र:

//On page 1
$_SESSION['varname'] = $var_value;

//On page 2
$var_value = $_SESSION['varname'];

सरणी session_start();तक पहुंचने का प्रयास करने से पहले इन दोनों पृष्ठों पर कथन को चलाना याद रखें $_SESSION, और इससे पहले कि ब्राउज़र में कोई आउटपुट भेजा जाए।

कुकी:

//One page 1
$_COOKIE['varname'] = $var_value;

//On page 2
$var_value = $_COOKIE['varname'];

सत्र और कुकीज़ के बीच बड़ा अंतर यह है कि चर का मूल्य सर्वर पर संग्रहीत किया जाएगा यदि आप सत्र का उपयोग कर रहे हैं, और यदि आप कुकीज़ का उपयोग कर रहे हैं तो क्लाइंट पर। मैं सत्रों के बजाय कुकीज़ का उपयोग करने के किसी भी अच्छे कारण के बारे में नहीं सोच सकता, सिवाय इसके कि यदि आप सत्रों के बीच डेटा को बनाए रखना चाहते हैं, लेकिन तब भी शायद इसे डीबी में संग्रहीत करना बेहतर है, और इसे उपयोगकर्ता नाम या आईडी के आधार पर पुनर्प्राप्त करें।

प्राप्त करें और पोस्ट करें

आप अगले पृष्ठ में लिंक में चर जोड़ सकते हैं:

<a href="page2.php?varname=<?php echo $var_value ?>">Page2</a>

यह एक GET वैरिएबल बनाएगा।

दूसरा तरीका यह है कि एक छिपे हुए क्षेत्र को एक ऐसे रूप में शामिल किया जाए जो पृष्ठ दो को प्रस्तुत करता है:

<form method="get" action="page2.php">
    <input type="hidden" name="varname" value="var_value">
    <input type="submit">
</form>

और फिर पेज दो पर:

//Using GET
$var_value = $_GET['varname'];

//Using POST
$var_value = $_POST['varname'];

//Using GET, POST or COOKIE.
$var_value = $_REQUEST['varname'];

postयदि आप इसे पोस्ट के माध्यम से करना चाहते हैं तो फॉर्म के लिए विधि को बदल दें । दोनों समान रूप से असुरक्षित हैं, हालांकि जीईटी को हैक करना आसान है।

तथ्य यह है कि प्रत्येक नया अनुरोध, सत्र डेटा को छोड़कर, स्क्रिप्ट का एक बिल्कुल नया उदाहरण मुझे पकड़ा गया जब मैंने पहली बार PHP में कोडिंग शुरू की थी। एक बार जब आपको इसकी आदत हो जाती है, तो यह काफी सरल है।


2
इसकी मदद से धन्यवाद, समस्या यह थी कि मेरे पास पहले पृष्ठ में चर का एक गुच्छा था, इसलिए मैंने जो किया वह उन सभी चर के साथ एक सरणी बना रहा था और इसे सत्रों का उपयोग करके अगले पृष्ठ पर भेजना था।
कार्लो

श्वेत :) खुशी है कि मैं मदद कर सकता हूँ।
Jrgns

4
Nitpick: PHP में सत्र आमतौर पर कुकीज़ द्वारा भी नियंत्रित किए जाते हैं। सत्र कुकी एक स्थायी कुकी नहीं है और आमतौर पर केवल सत्र आईडी रखती है। लेकिन यह अभी भी एक कुकी है।
दिक्बलर

मेरी अपनी टिप्पणी पर विस्तार से कारण यह है, क्योंकि, जैसा कि आपने कहा, HTTP स्टेटलेस है। इसके बाद भी PHP को सत्र की पहचान करने का एक तरीका चाहिए। यह सत्र आईडी के साथ क्लाइंट पर कुकी संग्रहीत करके किया जाता है। यदि कुकीज़ अक्षम क्लाइंटसाइड हैं, तो PHP कभी-कभी सत्र आईडी को पृष्ठों के बीच लिंक करने के लिए $ _GET संस्करण का उपयोग करती है। लेकिन यह आमतौर पर असुरक्षित माना जाता है, और आमतौर पर अधिकांश वेबसर्वर (php.ini) से अक्षम होता है।
दिक्बलर

@fireeyedboy PHP सत्र को GET और POST चर का उपयोग करके भी प्रचारित किया जा सकता है। दिन के अंत में, सत्र एक पृष्ठ से दूसरे पृष्ठ पर स्थानांतरित करने के लिए डेटा का केवल एक टुकड़ा होने से चर को सरल करता है: सत्र आईडी। उस सत्र आईडी का उपयोग पहले सहेजे गए डेटा को पुनः प्राप्त करने के लिए किया जाता है।
Jrgns

30

उपरोक्त उत्तर के लिए धन्यवाद। यहाँ मैंने इसे कैसे किया, मुझे आशा है कि यह उन लोगों की मदद करता है जो अनुसरण करते हैं। मैं एक पृष्ठ से दूसरे पृष्ठ पर पंजीकरण संख्या पास करना चाह रहा हूँ, इसलिए regName और regValue :

अपना पहला पृष्ठ बनाएं, इसे set_reg.php पर कॉल करें :

<?php

session_start();

$_SESSION['regName'] = $regValue;

?>

<form method="get" action="get_reg.php">
    <input type="text" name="regName" value="">
    <input type="submit">
</form>

अपना दूसरा पेज बनाएँ, इसे get_reg.php कहें :

<?php

session_start();

$regValue = $_GET['regName'];

echo "Your registration is: ".$regValue.".";

?>

<p><a href="set_reg.php">Back to set_reg.php</a>

यद्यपि उपरोक्त उत्तर के रूप में व्यापक नहीं है, मेरे उद्देश्यों के लिए यह सरल फैशन में विभिन्न तत्वों के बीच संबंध दिखाता है।


13
आपका उदाहरण सत्रों के बिना भी काम करता है और वास्तव में सत्र-तंत्र (get_reg.php में) के माध्यम से डेटा प्राप्त नहीं कर रहा है। आप Jrgns द्वारा बताए गए तरीके के साथ एक फॉर्म के माध्यम से RegName भेज रहे हैं। चर इस प्रकार $ _GET सरणी के माध्यम से get_reg.php पृष्ठ पर सुलभ है।
मेटाट्रॉन

16

अनुरोध में डेटा पास करना

आप इसे अपने प्रपत्र में एक छिपे हुए क्षेत्र के रूप में एम्बेड कर सकते हैं, या इसे अपने प्रपत्र क्रिया URL में जोड़ सकते हैं

 echo '<input type="hidden" name="myVariable" value="'.
     htmlentities($myVariable).'">';

या

echo '<form method="POST" action="Page2.php?myVariable='.
    urlencode($myVariable).'">";

नोट यह भी htmlentities और urlencode के उपयोग को दिखाता है जब चारों ओर डेटा गुजर रहा है।

सत्र में डेटा पास करना

यदि डेटा को क्लाइंट की ओर से पास करने की आवश्यकता नहीं है, तो सत्र अधिक उपयुक्त हो सकते हैं। बस प्रत्येक पृष्ठ की शुरुआत में session_start () कॉल करें , और आप $ _SESSION सरणी में डेटा प्राप्त और सेट कर सकते हैं।

सुरक्षा

चूंकि आप कहते हैं कि आपका मूल्य वास्तव में एक फ़ाइल नाम है, इसलिए आपको सुरक्षा नियमों के बारे में पता होना चाहिए। यदि क्लाइंट की ओर से फ़ाइल नाम आ गया है, तो मान लें कि उपयोगकर्ता ने मूल्य के साथ छेड़छाड़ की है। वैधता के लिए इसे जांचें! जब उपयोगकर्ता एक महत्वपूर्ण सिस्टम फ़ाइल, या उनके नियंत्रण में एक फ़ाइल को पथ से गुजरता है तो क्या होता है? क्या आपकी स्क्रिप्ट का उपयोग उन फाइलों के सर्वर को "जांचने" के लिए किया जा सकता है जो मौजूद हैं या नहीं हैं?

जैसा कि आप स्पष्ट रूप से बस यहां शुरू कर रहे हैं, इसकी याद दिलाने लायक है कि यह किसी भी डेटा के लिए जाता है जो $ _GET, $ _POST या $ _COOKIE में आता है - मान लीजिए कि आपके सबसे बुरे दुश्मन ने उन सरणियों की सामग्री तैयार की है, और तदनुसार कोड!


9

Php में मान पास करने के लिए तीन विधि हैं।

  • डाक द्वारा
  • प्राप्त करके
  • सत्र चर बनाकर

इन तीन तरीकों का उपयोग विभिन्न उद्देश्य के लिए किया जाता है। उदाहरण के लिए, यदि हम अगले पृष्ठ पर अपना मूल्य प्राप्त करना चाहते हैं, तो हम 'पोस्ट' ($ _POST) विधि का उपयोग कर सकते हैं: -

$a=$_POST['field-name'];

यदि हमें सत्र चर का उपयोग करने की तुलना में एक से अधिक पृष्ठ पर चर के मूल्य की आवश्यकता होती है: -

$a=$_SESSION['field-name];

SESSION वैरिएबल बनाने के लिए इस सिंटैक्स का उपयोग करने से पहले हमें सबसे पहले अपने php पेज की शुरुआत में इस टैग को जोड़ना होगा

session_start(); 

GET विधि का उपयोग आमतौर पर उसी पृष्ठ पर डेटा प्रिंट करने के लिए किया जाता है जो उपयोगकर्ता से इनपुट लेने के लिए उपयोग किया जाता है। इसका सिंटैक्स इस प्रकार है:

$a=$_GET['field-name'];

POST विधि आम तौर पर GET की तुलना में अधिक सुरक्षित होती है क्योंकि जब हम Get विधि का उपयोग करते हैं तो वह URL बार में डेटा प्रदर्शित कर सकती है। यदि डेटा पासवर्ड की तरह अधिक संवेदनशील डेटा है तो यह इंगर्जिस हो सकता है।


7

सत्र एकमात्र अच्छा तरीका होगा, आप GET / POST का भी उपयोग कर सकते हैं लेकिन यह संभावित असुरक्षित होगा।


6

इस कोड को आज़माएं

छिपे हुए फ़ील्ड का उपयोग करके हम php varibale को दूसरे पेज पर भेज सकते हैं

page1.php

<?php $myVariable = "Some text";?>
<form method="post" action="page2.php">
 <input type="hidden" name="text" value="<?php echo $myVariable; ?>">
 <button type="submit">Submit</button>
</form>

छिपे हुए फ़ील्ड मान के लिए php वैरिएबल पास करें ताकि आप इस वैरिएबल को दूसरे पेज पर एक्सेस कर सकें

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>

1
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

पृष्ठ 2

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}

1

सत्र एकमात्र अच्छा तरीका होगा, आप GET / POST का भी उपयोग कर सकते हैं लेकिन यह संभावित असुरक्षित होगा।

सत्र में डेटा पास करना यदि क्लाइंट-साइड में डेटा को पास करने की आवश्यकता नहीं है, तो सत्र अधिक उपयुक्त हो सकते हैं। बस प्रत्येक पृष्ठ की शुरुआत में session_start () कॉल करें, और आप $ _SESSION सरणी में डेटा प्राप्त और सेट कर सकते हैं।

सुरक्षा चूंकि आप अपने मूल्य को वास्तव में एक फ़ाइल नाम के रूप में बताते हैं, इसलिए आपको सुरक्षा नियमों के बारे में पता होना चाहिए। यदि क्लाइंट-साइड से फ़ाइल नाम आ गया है, तो मान लें कि उपयोगकर्ता ने मूल्य के साथ छेड़छाड़ की है। वैधता के लिए इसे जांचें! क्या होता है जब उपयोगकर्ता एक महत्वपूर्ण सिस्टम फ़ाइल या उनके नियंत्रण में एक फ़ाइल के लिए मार्ग से गुजरता है? क्या आपकी स्क्रिप्ट का उपयोग उन फाइलों के सर्वर को "जांचने" के लिए किया जा सकता है जो मौजूद हैं या नहीं हैं?

जैसा कि आप स्पष्ट रूप से सिर्फ यहां शुरू कर रहे हैं, यह याद रखने योग्य है कि यह किसी भी डेटा के लिए जाता है जो $ _GET, $ _POST या $ _COOKIE में आता है - मान लीजिए कि आपके सबसे बुरे दुश्मन ने उन सरणियों की सामग्री तैयार की है, और तदनुसार कोड!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.