2011-05-30 16 views
8

मैं curl का उपयोग किए बिना एक पृष्ठ से दूसरे डेटा को डेटा अग्रेषित करने का प्रयास कर रहा हूं, क्या यह संभव है?PHP आगे डेटा पोस्ट

फिलहाल मैं

header('HTTP/1.1 307 Temporary Redirect'); 
header('Location: new-location.php'); 

यह अच्छी तरह से काम करता है की कोशिश की लेकिन एक मूर्ख पॉप अप बॉक्स, किसी भी अन्य तरीकों देता है?

मैंने कर्ल का उपयोग करने का प्रयास किया है लेकिन कुछ भी नहीं होता है, सुनिश्चित नहीं है कि यह मेरे सर्वर पर सक्षम है या नहीं!

+2

अग्रेषित डेटा? आपके द्वारा पोस्ट किए गए हेडर कॉल केवल रीडायरेक्ट करते हैं, और curl का उपयोग नहीं करते हैं। क्या मैं कुछ भूल रहा हूँ? – stefgosselin

+1

@stefgosselin: स्पष्ट रूप से "बिना" शब्द। –

+0

हाँ मुझे पता है कि वे एक साधारण रीडायरेक्ट करते हैं, लेकिन इसमें डेटा है। केवल समस्या यह है कि यह उपयोगकर्ता को सतर्क करने वाला एक बेवकूफ पॉपअप बॉक्स देता है – Lunar

उत्तर

11

मुझे लगता है कि निम्नलिखित, कि प्राप्त करने के लिए बजाय स्थान हेडर के साथ पुन: निर्देशित होने एकमात्र संभव तरीका है, इस एचटीएमएल भेजें: -

<!DOCTYPE html> 
<html> 
    <body onload="document.forms[0].submit()"> 
     <form action="new-location.php" method="post"> 
      <?php foreach($_POST as $key => $val): ?> 
       <input type="hidden" name="<?= htmlspecialchars($key, ENT_COMPAT, 'UTF-8') ?>" value="<?= htmlspecialchars($val, ENT_COMPAT, 'UTF-8') ?>"> 
      <?php endforeach; ?> 
     </form> 
    </body> 
</html> 
+0

जावास्क्रिप्ट फॉर्म सबमिट करने के लिए बहुत मजबूत नहीं है, इसके लिए सर्वर-साइड स्क्रिप्टिंग का बेहतर उपयोग करना। – stefgosselin

+3

@stefgosselin: तो POST डेटा को अग्रेषित करने के लिए PHP में लिखने का सुझाव क्या है? –

+0

@MarkcoDemaio - नीचे मेरा जवाब देखें। हालांकि मेरा जवाब कम हो गया था, लेकिन मैं रीडायरेक्ट के लिए सर्वर-साइड प्रोसेसिंग का पक्ष लेता हूं। – stefgosselin

-2

हो सकता है, बस हो सकता है आप इसे इस तरह की कोशिश कर सकते हैं:

header("Status: 200"); 
header("Location: new-location.php"); 
exit; 
+1

नहीं, डेटा नहीं भेजता है। – Lunar

+2

एक हेडर कॉल डेटा नहीं भेजेगा, जब तक कि आप अपने यूआरएल के अंत में चर सेट नहीं करते हैं, एक ला GET .. शीर्षलेख ("स्थान: नया-स्थान.एचपी? Var1 = $ var1 और var2 = $ var2"); बदसूरत लेकिन यह काम करेगा। आप सत्र का भी उपयोग कर सकते हैं। – stefgosselin

+2

फिर आपने प्रश्न का उत्तर नहीं दिया है। :) –

2

यदि मैं समस्या को सही ढंग से समझता हूं और आप mod_rewrite सक्षम के साथ अपाचे सर्वर पर काम कर रहे हैं, तो आप यूआरएल रीराइटिंग का उपयोग कर सकते हैं। आप एक शर्त के रूप अनुरोध विधि सेट कर सकते हैं और मूल URL पुनर्लेखन वैकल्पिक एक के लिए:

RewriteCond %{REQUEST_METHOD} ^POST 
RewriteRule ^index.php new-location.php [L] 
9

आप इस्तेमाल कर सकते हैं एक और यूआरएल के लिए पोस्ट डेटा अग्रेषित करने के लिए निम्नलिखित। ध्यान दें कि प्रतिक्रिया $ डेटा वैरिएबल में कैप्चर की जाती है, जिसके साथ आप जो चाहें कर सकते हैं।

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.domain.tld/urltopostto.php"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 100); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST)); 
$data = curl_exec($ch); 
curl_close($ch); 
+3

curl के बिना ... – Lunar

+1

क्या आप केवल 'डेटा वापस कर सकते हैं;' और प्रभावी रूप से पोस्ट कॉल को लपेट सकते हैं? –

1

curl या fopen() का उपयोग सामान्य सुझाव हैं, लेकिन न तो वास्तव में उपयोगकर्ता को दूसरे पृष्ठ पर "आगे"।

उपयोगकर्ता को $ _POST डेटा के साथ वास्तव में किसी अन्य पृष्ठ पर अग्रेषित करने के लिए, आप गतिशील रूप से एक मध्यवर्ती पृष्ठ बना सकते हैं जिसमें पोस्ट डेटा और जेएस कोड के साथ एक फॉर्म शामिल है जो तुरंत फॉर्म सबमिट करता है (सबमिट करने के लिए बटन या लिंक के साथ) फॉर्म यदि उपयोगकर्ता जेएस सक्षम नहीं है)।

फिर आप उपयोगकर्ता को उस मध्यवर्ती पृष्ठ पर अग्रेषित करते हैं, और यह उपयोगकर्ता को #_POST डेटा के साथ लक्षित पृष्ठ पर आगे बढ़ाता है। यदि मध्यवर्ती पृष्ठ में कोई दृश्य सामग्री नहीं है, तो उपयोगकर्ता को यह नहीं पता होगा कि यह वहां है।

लक्ष्य पृष्ठ मध्यवर्ती पृष्ठ को अनलिंक कर सकता है इसलिए पुनः सबमिट करने का कोई मौका नहीं है।

संबंधित मुद्दे