2011-08-10 17 views
17

co zrobić, aby formularz zapamiętał poprzednie dane wejściowe lub bieżące dane wejściowe użytkownika nawet po odświeżeniu strony?jak zapamiętać dane wejściowe w formularzach nawet po odświeżeniu strony?

należy zrobić,

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

lub

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

lub

istnieje trik to zrobić? .. jak?

Odpowiedz

11

na stronie, gdzie forma jest złożenie zrobić coś takiego

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

i nie można uzyskać dostęp do tych zmiennych sesji w każdym miejscu jak ten

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'];?>"/> 

odświeżyć swoją stronę na wezwanie sukcesu jak ta

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

jeśli przesyłasz swój formularz przez ajax, to będzie wymagało odświeżenia strony, aby zmienne sesji zadziałały. –

+0

tak, formularz jest przesłany za pośrednictwem ajax..możesz dać próbkę odświeżenia strony za pośrednictwem przesyłania ajax? – sasori

2

To zależy od tego, skąd pochodzą dane w polach. Jeśli Twój scenariusz polega na tym, że przedstawiasz pusty formularz, użytkownik wprowadza pewne dane, a następnie nie przesyłając go, odświeża stronę, nic nie możesz zrobić. To zależy od obsługi przeglądarki.

Możliwe, że będziesz w stanie zrobić bardzo dziwne hakowanie JavaScriptu, ale nie sugerowałbym tego.

Z drugiej strony, jeśli dane pochodzą z poprzedniej strony lub czegoś podobnego, to inna historia. Ale musisz nam powiedzieć, skąd pochodzą dane, więc dam ci rozsądną odpowiedź.

+0

to pusty formularz, gdy użytkownik nie jest zalogowany lub rejestruje się i kliknął przycisk przesyłania, modalne wyskakujące okienko, a stamtąd może się zarejestrować, po zarejestrowaniu się z modala, zostaje zarejestrowany- w trybie automatycznym strona automatycznie odświeża i pokazuje swoją nazwę użytkownika ... i powinna mieć możliwość powrotu do formularza, który pozostawił za modą jquery ... jak to zrobić? ponieważ po odświeżeniu strony dane wejściowe zniknęły – sasori

+0

Aby to osiągnąć, będziesz musiał wysłać wszystkie dane z oryginalnego formularza wraz z formularzem logowania. Następnie skrypt logowania może zapisać to w zmiennej sesji i możesz wypełnić formularz tymi danymi, gdy wygenerujesz je ponownie. – Chronial

1

Jeśli masz na myśli, wypełniając pola formularza i klikając odświeżenie, to nie ma bezpośredniej drogi, ponieważ dane nie są przesyłane. Takie zachowanie zależy od przeglądarki.

Jedyną rzeczą, którą można zrobić, to opublikować dane za pośrednictwem AJAX na swoim serwerze, gdy pola ulegną zmianie. Twój skrypt PHP otrzymujący dane ustawiłby kilka zmiennych sesji. Po załadowaniu formularza ustawisz wartości domyślne na odpowiednie wartości sesji.

Rzadko jednak istnieje potrzeba takiego zachowania. Będzie wiele żądań wysłanych do twojego serwera.

0

Żadna z twoich sugestii nie pomoże ci "zapamiętać" danych po odświeżeniu (akcja, która nie wysyła danych do serwera). Musisz pobrać dane przez javascript (może z typem zdarzeń onkeyup) i pobrać je za pomocą plików cookie. Z jquery jest bardzo proste.

+0

proszę o próbkę? – sasori

+0

@sasori: Niestety, nie ma czasu na próbkę, chciałbym, ale nie mogę. [ciasteczko jest łatwe w użyciu z tą wtyczką] (https://github.com/carhartl/jquery-cookie) –

0

Sesja to dobry sposób na przechowywanie i zapamiętywanie danych, ale dlaczego komp licate rzeczy? Zastanów się, czy formularz ma wiele pól, programista musi przechowywać wiele wartości w sesji. Dlaczego nie po prostu wydrukować lub echo.

Przykład:

formularz jest składany z ssName wejściowej i ukrytej ssAct pole z wartością wysłać

Uzyskać ssName i ssAct na formularzu złożyć

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

oraz formularz

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

Po przesłaniu nazwy zostanie wysłane echo, jeśli zostało przesłane i nie było pusty.

+0

Opisana przeze mnie prosta metoda php echo zadziała nawet po odświeżeniu (nie Ctrl + odśwież). Ponieważ formularz zostanie ponownie opublikowany z wartościami. To nie jest doskonałe rozwiązanie, ale proste w obsłudze. –

3

Miałem podobny problem w jednym z moich projektów, więc napisałem js do obsługi tego przy użyciu plików cookie. Najpierw znalazłem dwie proste funkcje do ustawiania i dostać ciasteczka wartości:

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; 
} 

niż napisałem dwie inne funkcje, aby skonfigurować i uzyskać wartości wejściowe:

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; 
    } 
} 

i przy użyciu jQuery zapisać wartość wejściowego użytkownika do cookie sesji

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

mam nadzieję, że to pomoże;)

+0

To działa dla mnie, dzięki! –

0

wypróbować atrybut autocomplete, może to będzie działać na niektórych przeglądarkach ...

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

Można używać autouzupełniania dla form też.

0

Istnieje kilka głównych problemów, aby sprawdzić, aby uzyskać dane pojawiają się po odświeżeniu lub obsługi zdarzeń:

1) zdawać sobie sprawę z podpisem. musi zawierać metodę = „post” atrybut następująco:

<form method="post"/> 

przeciwnym razie korzystania z $ _POST [ „messenger”] nie będzie działać.

Domyślna wartość atrybutu method w formularzu to get.

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

2) Wielu programistów mieszać między atrybutami id vs nazwa. Należy pamiętać o używaniu poprawnego atrybutu. Tablica asocjacyjna $ _POST używa nazwy name, aby pobrać z niej dane.Dlatego kolejnym przykładem nie zadziała poprawnie:

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

Aby to działało w porządku należy dodać nazwę atrybutu = „Data” w następujący sposób:

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

Powodzenia

0

Można również obejść się bez sesji takiej jak poniższy kod:

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

Spowoduje to zachowanie wpisanych danych w polu wprowadzania danych!

Powiązane problemy