दिलचस्प पोस्ट
एन्कोड और पायसपार्क में कई विशेषताएं इकट्ठा करें जावा विभाजन () विधि अंत में खाली तार स्ट्रिप्स? अधिकतम स्मृति जो malloc आवंटित कर सकते हैं URL क्वेरी स्ट्रिंग प्राप्त करें कर्ल के साथ $ _POST मान पासिंग किसी संख्या को अल्पविराम के रूप में फ्लोट में दशमलव बिंदु के रूप में परिवर्तित करना PHP के माध्यम से एक जावास्क्रिप्ट फाइल पार्स करें जावास्क्रिप्ट में सटीक वित्तीय गणना गोच क्या हैं? "लॉक प्रतीक्षा अवधि समाप्त हो रही है; लेनदेन फिर से शुरू करने की कोशिश "हालांकि मैं एक लेनदेन का उपयोग नहीं कर रहा हूँ एएसपी.नेट: इस विधि को एप्लिकेशन के प्री-स्टार्ट आरंभीकरण चरण के दौरान नहीं बुलाया जा सकता सी # त्रुटि: अभिभावक में कोई ऐसा कन्स्ट्रक्टर नहीं होता है, जो 0 तर्कों को लेता है Xcode के तहत आर्किटेक्चर x86_64 के लिए डुप्लिकेट प्रतीकों कितने सबप्रोसेस को समाप्त करने के लिए बाइट में इंतजार करना और निकास कोड वापस करने के लिए! = 0 जब कोई सबप्रोसेस कोड के साथ समाप्त होता है! = 0? सी कोड में त्रुटि संभाल मैं गिट को अपनी पसंद के संपादक का उपयोग करने के लिए कैसे करूं?

पृष्ठ का एक ताज़ा करने के कारण सबमिट करने से बचने का सर्वोत्तम तरीका

मुझे लगता है कि यह समस्या अक्सर वेब अनुप्रयोग पर होती है लेकिन मैं अपनी परेशानियों को ब्योरा देगा।

मैं यह जानना चाहता हूं कि इस व्यवहार से छुटकारा कैसे प्राप्त होगा, उदाहरण के लिए जब मेरे पास ऐसा कोड होता है:

<? if (isset($_POST['name'])) { ... operation on database, like to insert $_POST['name'] in a table ... echo "Operation Done"; die(); } ?> <form action='page.php' method='post' name="myForm"> <input type="text" maxlength="50" name="name" class="input400" /> <input type="submit" name="Submit" /> </form> 

जब मैं फ़ॉर्म सबमिट करता हूं, तो मैं डाटाबेस पर डेटा डालने देता हूं, और मुझे संदेश ऑपरेशन किया गया । से, अगर मैं पेज को ताज़ा करता हूं, तो डेटा फिर से असंकित होगा।

मैं इस स्थिति से कैसे बच सकता हूं? कोई सुझाव अच्छा होगा 🙂

वेब के समाधान से एकत्रित समाधान "पृष्ठ का एक ताज़ा करने के कारण सबमिट करने से बचने का सर्वोत्तम तरीका"

अपने निर्माण कार्य के बाद प्रतिक्रिया न दिखाएं; इसके बजाय क्रिया पूर्ण होने के बाद किसी अन्य पृष्ठ पर रीडायरेक्ट करें। अगर कोई ताज़ा करता है, तो वह उस अनुरोध किए गए पेज को रीफ्रेश कर रहे हैं जिस पर आप पुनर्निर्देशित हैं।

 // submit // set success flash message (you are using a framework, right?) header('Location: /path/to/record'); exit; 

एक सत्र में एक यादृच्छिक संख्या सेट करें जब प्रपत्र प्रदर्शित होता है, और उस नंबर को किसी छिपे हुए क्षेत्र में भी डाल दिया जाता है। अगर पोस्ट की गई संख्या और सत्र संख्या का मिलान, सत्र को हटा दें, क्वेरी चलाएं; यदि वे ऐसा नहीं करते हैं, तो फ़ॉर्म को फिर से डिस्प्ले करें और एक नया सत्र संख्या बनाएं। यह XSRF टोकन का बुनियादी विचार है, आप उनके बारे में अधिक पढ़ सकते हैं, और यहां सुरक्षा के लिए उनका उपयोग कर सकते हैं: http://en.wikipedia.org/wiki/Cross-site_request_forgery

यहाँ एक उदाहरण है:

 <?php session_start(); if (isset($_POST['formid']) && isset($_SESSION['formid']) && $_POST["formid"] == $_SESSION["formid"]) { $_SESSION["formid"] = ''; echo 'Process form'; } else { $_SESSION["formid"] = md5(rand(0,10000000)); ?> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> <input type="hidden" name="formid" value="<?php echo htmlspecialchars($_SESSION["formid"]); ?>" /> <input type="submit" name="submit" /> </form> <?php } ?> 

इस कदर:

 <?php if(isset($_POST['uniqid']) AND $_POST['uniqid'] == $_SESSION['uniqid']){ // can't submit again } else{ // submit! $_SESSION['uniqid'] = $_POST['uniqid']; } ?> <form action="page.php" method="post" name="myForm"> <input type="hidden" name="uniqid" value="<?php echo uniqid();?>" /> <!-- the rest of the fields here --> </form> 

मुझे लगता है कि यह सरल है,

page.php

 <?php session_start(); if (isset($_POST['name'])) { ... operation on database, like to insert $_POST['name'] in a table ... $_SESSION["message"]="Operation Done"; header("Location:page.php"); exit; } ?> <html> <body> <div style='some styles'> <?php //message here echo $_SESSION["message"]; ?> </div> <form action='page.php' method='post'> <!--elements--> </form> </body> </html> 

मैंने सत्र चर का उपयोग करने पर विचार किया था जैसा कि दूसरों ने यहां सुझाया है, लेकिन यह एक दर्द हो सकता है जब सत्र चर एक समय समाप्त होने के कारण साफ़ हो जाता है तब यह मेरे आवेदन में मेरे पास आया कि मेरे उद्देश्य के लिए एक बहुत आसान समाधान था। इसके लिए जांच के बजाय समस्या से छुटकारा पाएं नीचे का समाधान आम तौर पर मेरे लिए काम करता है क्योंकि मैं आमतौर पर अपने <html> … </ html> में डंप करने से पहले अपने सभी php की प्रक्रिया करता हूं।

 <?php // PROCESS STUFF FOR YOUR PAGE HOWEVER YOU LIKE // SAVE BACKUP COPIES OF _REQEUST _POST & _GET VARS IF NECESSARY FOR SOME REASON $SAVED_REQUEST = $_REQEUST; $SAVED_POST = $_POST; $SAVED_GET = $_GET; // FINALLY, IN YOUR LAST LINE ERASE THE PROBLEM VARIABLES... $_REQUEST = $_POST = $_GET = NULL; ?> <html> <!-- PUT YOUR HTML HERE, ECHOING VARIABLES THAT WERE PROCESSES ABOVE --> </html> 

यह केवल इसलिए काम करता है क्योंकि मैं आमतौर पर इसे अपने एचटीएमएल से जितना संभव हो उतना मेरे php को अलग करने का एक बिंदु बना देता हूं। जाहिर है, इसे पूरी तरह से अलग नहीं किया जा सकता है, लेकिन "जुदाई" मेरे हल को एक संभावना बना देती है और पीएचपी को पढ़ने में आसान बनाता है क्योंकि यह एक ही स्थान पर है, और यह एचटीएमएल भी आसान पढ़ता है क्योंकि यह लगभग नहीं है के रूप में कोड के साथ तोड़ा मुझे लगता है कि आप सिद्धांत में केवल निम्नलिखित के रूप में अपने पृष्ठ के अंत में भी डाल सकते हैं।

 <?php $_REQUEST = $_POST = $_GET = NULL; ?> 

इसलिए, मुझे इसके लिए क्या जरूरी है यह क्या काम करता है

उपर्युक्त सभी समाधानों के आधार पर यह मुझे एक फार्म से दूसरे प्रपत्र में जाने की अनुमति देता है, और n ^ फॉर्म पर, जब तक कोई पेज रिफ्रेश किया गया हो, तब तक उसी डेटा को "सहेजे" होने से रोकने के लिए और (और नए पेज पर लिंजर से पहले डेटा पोस्ट करें)।

जिन लोगों ने अपना हल पोस्ट किया, उनके लिए धन्यवाद ने मुझे अपने दम पर आगे बढ़ाया।

 <?php //Check if there was a post if ($_POST) { //Assuming there was a post, was it identical as the last time? if (isset($_SESSION['pastData']) AND $_SESSION['pastData'] != $_POST) { //No, Save } else { //Yes, Don't save } } else { //Save } //Set the session to the most current post. $_session['pastData'] = $_POST; ?> 

हम वेब एप्लिकेशन पर काम करते हैं, जहां हम पीएचपी फॉर्म की संख्या तैयार करते हैं। डेटा पाने के लिए और प्रत्येक फॉर्म के लिए इसे जमा करने के लिए अन्य पृष्ठ लिखने के लिए हेक है। पुन: प्रस्तुत करने से बचने के लिए, प्रत्येक तालिका में हमने एक 'random_check' फ़ील्ड बनाया है जिसे 'अद्वितीय' के रूप में चिह्नित किया गया है।

पृष्ठ लोड होने पर एक यादृच्छिक मूल्य उत्पन्न होता है और इसे किसी टेक्स्ट फ़ील्ड में संग्रहीत करता है (जो स्पष्ट रूप से छिपा हुआ है)।

अपने टेबल में 'random_check' फ़ील्ड में इस यादृच्छिक पाठ मान को सबमिट करें पर सबमिट करें। पुन: प्रस्तुत करने के प्रश्न के मामले में त्रुटि के कारण यह डुप्लिकेट मान सम्मिलित नहीं कर सकता है।

उसके बाद आप त्रुटि की तरह प्रदर्शित कर सकते हैं

 if ( !$result ) { die( '<script>alertify.alert("Error while saving data OR you are resubmitting the form.");</script>' ); } 

पुनर्निर्देशित करने की कोई आवश्यकता नहीं …

die(); बदलें die(); साथ में

 isset(! $_POST['name']); 

, isset को $ _POST ['नाम'] के समान नहीं जारी करने के लिए सेट करना है, इसलिए जब आप इसे रीफ्रेश करेंगे, तो यह आपके डेटाबेस में अब और नहीं जोड़ पाएगा, जब तक कि आप फिर से सबमिट बटन पर क्लिक न करें

 <? if (isset($_POST['name'])) { ... operation on database, like to insert $_POST['name'] in a table ... echo "Operation Done"; isset(! $_POST['name']); } ?> <form action='page.php' method='post' name="myForm"> <input type="text" maxlength="50" name="name" class="input400" /> <input type="submit" name="Submit" /> </form> 

यह ताज़ा होने पर बस के कारण यह आपके अनुरोध को दोबारा सबमिट करेगा।

इसलिए इस मुद्दे को हल करने का विचार कारण की जड़ का इलाज कर रहा है।

मेरा मतलब है कि हम फॉर्म के अंदर एक सत्र वैरिएबल सेट कर सकते हैं और इसे अपडेट कर सकते हैं।

 if($_SESSION["csrf_token"] == $_POST['csrf_token'] ) { // submit data } //inside from $_SESSION["csrf_token"] = md5(rand(0,10000000)).time(); <input type="hidden" name="csrf_token" value=" htmlspecialchars($_SESSION["csrf_token"]);">