2011-08-10 6 views
17

फॉर्म को रीफ्रेश करने के बाद भी फॉर्म को पिछले इनपुट या उपयोगकर्ता के वर्तमान इनपुट को याद रखने के लिए क्या करना है?रीफ्रेश पृष्ठ के बाद भी फ़ॉर्म में इनपुट डेटा को कैसे याद रखें?

मुझे क्या करना चाहिए,

  <div class="row"> 
      <label>Contact Messenger </label> 
      <input type="text" name="messenger" id="messenger" size="50" maxlength="50" value="<?php echo $_SESSION['messenger']; ?>"/> 
      </div> 

या

  <div class="row"> 
      <label>Contact Messenger </label> 
      <input type="text" name="messenger" id="messenger" size="50" maxlength="50" value="<?php echo $_POST['messenger']; ?>"/> 
      </div> 

या

वहाँ यह करने के लिए एक चाल है? .. कैसे?

उत्तर

11
पेज जहाँ आपके प्रपत्र इस

session_start(); 
    $_SESSION['data'] = $_POST['data']; 
    $_SESSION['data_another'] = $_POST['data_another']; 

की तरह कुछ करने के प्रस्तुत करने पर

और आप जहां इस

session_start(); // this should be at the top of the page before any html load 
    <input type="text" name="name" value="<?php echo $_SESSION['data'];?>"/> 

की तरह किसी भी उन सत्र चर का उपयोग कर सकते इस तरह सफलता कॉल पर अपने पेज को ताज़ा से

 $.ajax({ 
      type: "POST", 
      url: "yourfile.php", 
      data: 'data='+ data, 
      success: function(){ 
       location.reload(); 
      } 
     }); 
+0

यदि आप AJAX के माध्यम से अपना फॉर्म सबमिट कर रहे हैं, तो उसे सत्र चर के काम के लिए रीफ्रेश करने की आवश्यकता होगी। –

+0

हां, फॉर्म AJAX के माध्यम से सबमिट किया गया है .. क्या आप AJAX सबमिशन के माध्यम से पेज रीफ्रेश का नमूना दे सकते हैं? – sasori

2

यह इस बात पर निर्भर करता है कि फ़ील्ड में डेटा कहां से आ रहा है। यदि आपका परिदृश्य यह है कि आप एक खाली फॉर्म पेश कर रहे हैं, तो उपयोगकर्ता कुछ डेटा दर्ज करता है और फिर इसे सबमिट किए बिना, पृष्ठ को रीफ्रेश करता है, ऐसा कुछ भी नहीं है जो आप कर सकते हैं। यह ब्राउज़र को संभालने के लिए है।

आप वहां कुछ अजीब जावास्क्रिप्ट हैकिंग करने में सक्षम हो सकते हैं, लेकिन मैं इसका सुझाव नहीं दूंगा।

दूसरी तरफ, यदि आपका डेटा पिछले पृष्ठ से आ रहा है या ऐसा कुछ है, तो यह एक अलग कहानी है। लेकिन फिर आपको हमें यह बताना होगा कि डेटा कहां से आ रहा है, इसलिए मैं आपको एक उचित उत्तर दे सकता हूं।

+0

यह एक खाली फॉर्म है, जब उपयोगकर्ता लॉग-इन या पंजीकरण नहीं करता है और वह सबमिट बटन दबाता है, एक jquery modal pops-up और वहां से, वह पंजीकरण कर सकता है, एक बार जब वह मोडल से पंजीकृत हो जाता है, तो वह लॉग- स्वचालित रूप से, पृष्ठ स्वचालित रूप से रीफ्रेश होता है और उसका उपयोगकर्ता नाम दिखाता है .. और वह उस फॉर्म पर वापस लौटने में सक्षम होना चाहिए जिसे उसने jquery modal के पीछे छोड़ा था .. ऐसा करने के लिए कैसे? क्योंकि जब मैं पृष्ठ को रीफ्रेश करता हूं, तो इनपुट डेटा – sasori

+0

चला जाता है यह प्राप्त करने के लिए कि आपको अपने डेटा फॉर्म के साथ मूल रूप से सभी डेटा फॉर्म भेजना होगा। फिर लॉगिन स्क्रिप्ट उस सत्र चर में सहेज सकती है और जब आप इसे फिर से उत्पन्न करते हैं तो आप उस डेटा के साथ फ़ॉर्म भर सकते हैं। – Chronial

1

यदि आपका मतलब है, फॉर्म फ़ील्ड भरना और रीफ्रेश पर क्लिक करना, तो डेटा सबमिट नहीं होने पर कोई प्रत्यक्ष तरीका नहीं है। उस तरह का व्यवहार ब्राउज़र पर निर्भर है।

केवल एक चीज जो आप कर सकते हैं वह है AJAX के माध्यम से डेटा को आपके सर्वर पर वापस पोस्ट करें क्योंकि फ़ील्ड बदलते हैं। डेटा प्राप्त करने वाली आपकी PHP स्क्रिप्ट कुछ सत्र चर सेट करेगी। जब फॉर्म लोड होता है, तो आप अपने डिफ़ॉल्ट मान उचित सत्र मानों पर सेट करेंगे।

शायद ही इस तरह के व्यवहार की आवश्यकता है। आपके सर्वर पर आगे और भेजे गए कई अनुरोध होंगे।

0

आपके कोई भी सुझाव आपको ताज़ा करने के बाद डेटा को याद रखने में मदद करेगा (कार्रवाई जो सर्वर को डेटा नहीं भेजती)। आपको जावास्क्रिप्ट के माध्यम से डेटा को पकड़ना है (शायद ऑनकीप इवेंट प्रकार के साथ) और कुकीज़ का उपयोग करके इसे पकड़ो। Jquery के साथ बहुत आसान है।

+0

नमूना कृपया? – sasori

+0

@ सोसोरी: क्षमा करें, नमूना के लिए कोई समय नहीं, मुझे यह पसंद आएगा लेकिन मैं नहीं कर सकता। [इस प्लगइन के साथ कुकी का उपयोग करना आसान है] (https://github.com/carhartl/jquery-cookie) –

0

सत्र डेटा स्टोर और याद रखने का एक अच्छा तरीका है लेकिन क्यों comp चीजें लाइसेंस? इस बात पर विचार करें कि फ़ॉर्म में कई फ़ील्ड हैं, डेवलपर को सत्र में बहुत से मूल्यों को स्टोर करना होगा। क्यों न केवल प्रिंट या गूंज।

उदाहरण:

फार्म इनपुट ssName और के मूल्य के साथ छिपी हुई फ़ील्ड ssAct साथ प्रस्तुत किया जाता है

भेज हो जाओ ssName और ssAct फार्म पर

$ssAct=$_REQUEST["ssAct"]; 
$ssName=$_REQUEST["ssName"]; 

और फ़ॉर्म सबमिट

<input type="text" name="ssName" value="<?php if($ssAct=='send' && $ssName!='') { echo "$ssName"; } ?>"> 
<input type="hidden" name="ssAct" value="send"> 

जमा करने पर नाम सबमिट किए जाने पर प्रतिबिंबित किया जाएगा और नहीं था खाली।

+0

मैंने जो सरल php echo विधि वर्णित की है वह ताज़ा करने के बाद भी काम करेगी (Ctrl + ताज़ा नहीं)। क्योंकि फॉर्म फिर से मूल्यों के साथ पोस्ट किया जाएगा। यह सही समाधान नहीं है, लेकिन इसके आसपास का सरल काम है। –

3

मुझे अपने प्रोजेक्ट में से एक में एक ही समस्या थी इसलिए मैंने कुकीज़ का उपयोग करके इसे संभालने के लिए कुछ जेएस लिखा। सबसे पहले मैं सेट और कुकीज़ मूल्यों को प्राप्त करने के लिए दो सरल कार्यों पाया:

function saveValue(input) { 
    var name = input.attr('name'); 
    var value = input.val(); 
    setCookie(name,value); 
} 

function getValue(input) { 
    var name = input.attr('name'); 
    var value = getCookie(name); 
    if(value != null && value != "") { 
     return value; 
    } 
} 

और jQuery का उपयोग कर रहा के लिए उपयोगकर्ता के इनपुट मूल्य को बचाने:

function setCookie(c_name, value, exdays) { 
    var exdate = new Date(); 
    exdate.setDate(exdate.getDate() + exdays); 
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString()); 
    document.cookie = c_name + "=" + c_value; 
} 

function getCookie(c_name) { 
    var c_value = document.cookie; 
    var c_start = c_value.indexOf(" " + c_name + "="); 
    if (c_start == -1) { 
     c_start = c_value.indexOf(c_name + "="); 
    } 
    if (c_start == -1) { 
     c_value = null; 
    } else { 
     c_start = c_value.indexOf("=", c_start) + 1; 
     var c_end = c_value.indexOf(";", c_start); 
     if (c_end == -1) { 
      c_end = c_value.length; 
     } 
     c_value = unescape(c_value.substring(c_start, c_end)); 
    } 
    return c_value; 
} 

से मैं सेट और इनपुट मूल्यों को प्राप्त करने के लिए दो अन्य कार्यों लिखा था सत्र कुकी

$('input[type=text]').each(function(){ 
    var value = getValue($(this)); 
    $(this).val(value); 
}).on('blur', function(){ 
    if($(this).val() != '') { 
     saveValue($(this)); 
    } 
}); 

मुझे आशा है कि यह मदद करेंगे;)

+0

यह मेरे लिए काम करता है, धन्यवाद! –

0

विशेषता autocomplete कोशिश, शायद यह कुछ ब्राउज़रों पर काम करेंगे ...

<input type="text" autocomplete="on" /> 

आप एक form भी लिए स्वत: पूर्ण उपयोग कर सकते हैं।

1) हस्ताक्षर के प्रति सचेत रहें:

0

ताज़ा या किसी ईवेंट हैंडलर के बाद दिखाई देते क्रम डेटा प्राप्त करने के लिए जाँच करने के लिए कुछ मुख्य मुद्दों कर रहे हैं। यह विधि शामिल होना चाहिए = "पोस्ट" विशेषता इस प्रकार है:

<form method="post"/> 
बाकी

$ _POST [ 'दूत'] का उपयोग करते हुए काम नहीं करेगा।

फ़ॉर्म में विधि विशेषता का डिफ़ॉल्ट मान प्राप्त होता है।

<form> equals to <form method="get"> 

2) कई प्रोग्रामर विशेषताओं आईडी बनाम नाम के बीच मिश्रण। सही विशेषता का उपयोग करने के बारे में जागरूक रहें। $ _POST सहयोगी सरणी डेटा प्राप्त करने के लिए नाम का उपयोग कर रहा है।यही कारण है कि अगले उदाहरण सही ढंग से काम नहीं करेगा:

<input type="text" name="data" id="data" value="<?php echo isset($_POST['data']) ? $_POST['data'] : "")?/>" 

गुड लक

0
:

<input type="text" id="data" value="<?php echo isset($_POST['data']) ? $_POST['data'] : "")?/>" 

यह काम सही आप विशेषता नाम = "डाटा" इस प्रकार जोड़ना होगा प्राप्त करने के लिए

आप नीचे दिए गए कोड जैसे सत्र के बिना भी कर सकते हैं:

<input type="text" name="Fname" value="<?php if(isset($_POST['Fname'])){ echo $_POST['Fname']; } ?>" /><br/> 

यह टाइप किए गए डेटा को इनपुट बॉक्स के अंदर रखेगा!

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