** कुछ पृष्ठभूमि: क्रेडिट उत्कृष्ट उत्कृष्टता के लिए ब्रूस (sqlwork.com) पर जाता है।
इस वेब पेज को आपके द्वारा पहले दर्ज किए गए डेटा की आवश्यकता होती है ताकि ठीक से प्रदर्शित किया जा सके। आप इस डेटा को फिर से भेज सकते हैं, लेकिन ऐसा करके आप इस पृष्ठ को पहले किए गए किसी भी क्रिया को दोहराएंगे। उस डेटा को पुनः भेजने और इस पृष्ठ को प्रदर्शित करने के लिए रीलोड दबाएं।
वेब डेवलपर्स के मैला कोडिंग प्रथाओं के कारण ब्राउज़र को इस संदेश को जोड़ने के लिए मजबूर होना पड़ा।
1) उपयोगकर्ता प्रपत्र में भर जाता है और (पदों फार्म) 2) सर्वर प्रक्रिया के बाद डेटा सबमिट करता है और) एक नया पृष्ठ (पुष्टि के साथ प्रतिक्रिया के रूप में चिह्नित नहीं संचित करने योग्य 3) उपयोगकर्ता नेविगेट करता है: परिदृश्य इस प्रकार है एक नए पेज पर। 4) उपयोगकर्ता वापस दबाएं:
ब्राउज़र के लिए चरण 2 में पृष्ठ प्रदर्शित करने के लिए, क्योंकि इसकी चिह्नित नो-कैश है, इसे सर्वर से अनुरोध करना होगा, दूसरे शब्दों में डेटा के दोबारा करें (करें चरण 1)। यहां पर मैला कोडिंग आया था, अगर यह क्रेडिट कार्ड चार्ज था, और रिपोस्ट डिटेक्शन सर्वर पर नहीं था, तो कार्ड से दो बार शुल्क लिया जाता है। यह एक समस्या है (एस) इतनी आम है कि ब्राउज़र को इसका पता लगाना था और उपयोगकर्ताओं को चेतावनी देना था।
सबसे अच्छा फ़िक्स चरण दो में है, सर्वर पुष्टि पृष्ठ पर रीडायरेक्ट भेजता है। तब जब उपयोगकर्ता इतिहास या पीछे के माध्यम से पुष्टि का उपयोग करता है, तो उसे एक अनुरोध प्राप्त होता है, एक पोस्ट अनुरोध नहीं है और चेतावनी नहीं दिखाएगा।
नोट: वेबफॉर्म का पोस्टबैक मॉडल स्वयं को इस समस्या के लिए उधार देता है। सर्वर स्थानान्तरण से भी बचें।
मेरे समाधान
$ _SESSION [ 'घर'] मुख पृष्ठ पर किसी भी त्रुटि के स्टोर करने के लिए इस्तेमाल किया।
$ _SESSION ['tempEmail'] php रूप पर मूल्य गूंजने के लिए उपयोग किया जाता है।
नोट: प्रत्येक पृष्ठ के लिए एक अद्वितीय सत्र चर का उपयोग करें जिसमें त्रुटि प्रबंधन के लिए HTML फॉर्म है और HTML फॉर्म पर प्रतिबिंबित प्रत्येक मान के लिए कोई सत्र चर भी है।
<?php
session_start();
//Initialize variables not initialized without overwriting previously set variables.
if(!isset($_SESSION['home'])) {
$_SESSION['home']="";
$_SESSION['tempEmail']="";
}
वैकल्पिक - अगर प्रवेश किया था, (यदि नहीं पहले किया) $ _SESSION [ 'tempEmail'] चर करने के लिए ईमेल पता असाइन HTML प्रपत्र पूर्व भरने के लिए।
if(isset($_POST['Submit'])){
---your code---
//Error message(s) examples
$_SESSION['home'] = "Email and Password do not match, please try again.";
header("Location: " . $_SERVER['REQUEST_URI']);
$_SESSION['home'] = "Email address format is invalid. Please recheck.";
header("Location: " . $_SERVER['REQUEST_URI']);
//success
unset ($_SESSION['home']); //optional, unset to clear form values.
header ("location: nextpage.php");
---or---
header("Location: " . $_SERVER['REQUEST_URI']); //re-post to same page with the $_SESSION['home'] success message.
}
?>
<body>
त्रुटि बॉक्स
<span><strong class="error"><?php echo $_SESSION['home'] ?></strong></span>
HTML प्रपत्र
<form action="#" name="loginform" method="post" >
<input type="text" name="userEmail" maxlength="50" title="Enter Your email" autocomplete="off" value="<?php echo htmlspecialchars($_SESSION['tempEmail']); ?>" placeholder="enter email" required/>
<input type="submit" name="Submit" value="Submit">
</form>
</body>
, भुगतान पृष्ठ पर उपयोग उपरोक्त चर्चा देखने के लिए अनुशंसित नहीं है। फ़ायरफ़ॉक्स, क्रोम, सफारी, और आईई 9 में परीक्षण किया गया। बैक बटन का उपयोग करते समय कष्टप्रद संदेश चले गए हैं। हेडर चेतावनियों से बचने के लिए सुनिश्चित करें कि आउटपुट बफरिंग आपके php स्क्रिप्ट या php.ini में "चालू" हो गई है। आप निम्न के लिए अपनी php.ini फ़ाइल देख सकते हैं;
output_buffering=On
आप एक सर्वर का उपयोग करने के लिए खुले हैं अंत डेटा भंडारण? MySQL, Redis? सर्वर पर डेटा को स्टोर करने का सबसे अच्छा तरीका है क्योंकि उपयोगकर्ता आसपास घूमता है। –
और इसके द्वारा आप का मतलब है कि मुझे उपयोगकर्ता के सत्र के दौरान सबमिट किए गए फॉर्मों से सभी मूल्यों को स्टोर करने की आवश्यकता है? क्या मैं इसके लिए सत्र भंडारण का उपयोग कर सकता हूं? –
आप सत्र भंडारण का उपयोग कर सकते हैं, लेकिन यह बहुत स्केल-सक्षम नहीं है और यह जाने का गलत तरीका बन जाता है कि डेटा की मात्रा थोड़ा सा से थोड़ा अधिक हो जाती है या नहीं। मैं कहूंगा कि होमवर्क सत्र भंडारण ठीक है, उत्पादन के लिए यह पर्याप्त नहीं है। –