2011-08-10 21 views
17

¿qué hacer para que el formulario recuerde la entrada anterior o la entrada actual del usuario incluso después de que haya actualizado la página?cómo recordar datos de entrada en los formularios incluso después de la página de actualización?

debo hacer,

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

o

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

o

hay un truco para hacerlo? .. ¿cómo?

Respuesta

11

en la página donde su forma es la presentación de hacer algo como esto

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

y que se puede acceder a las variables de sesión en cualquier lugar como éste

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

refrescar la página de guardia éxito como éste

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

si envía su formulario a través de ajax, necesitará una actualización de la página para que funcionen las variables de la sesión. –

+0

sí, el formulario se envía a través de ajax..puede proporcionar una muestra de actualización de página a través de ajax? – sasori

2

Eso depende de dónde provengan los datos en los campos. Si su caso es que está presentando un formulario en blanco, el usuario ingresa algunos datos y luego, sin enviarlo, actualiza la página, no hay nada que pueda hacer. Eso depende del navegador.

Es posible que pueda hacer un hackeo de JavaScript muy raro allí, pero no lo sugeriría.

Por otro lado, si sus datos provienen de una página anterior o algo así, esa es una historia diferente. Pero luego debe indicarnos de dónde provienen los datos, para poder darle una respuesta razonable.

+0

es un formulario en blanco, cuando el usuario no ha iniciado sesión o se ha registrado y ha pulsado el botón de enviar, una ventana emergente modal jquery y, a partir de ahí, puede registrarse, una vez registrado desde el modal, se registra en forma automática, la página se actualiza automáticamente y muestra su nombre de usuario ... y debería poder volver al formulario que dejó detrás del modal jquery ... ¿cómo hacer eso? porque cuando actualizo la página, los datos de entrada se han ido – sasori

+0

Para lograr eso, tendrá que enviar todos los datos del formulario original junto con su formulario de inicio de sesión. Entonces, el script de inicio de sesión puede guardarlo en una variable de sesión y puede llenar el formulario con esa información cuando la genere nuevamente. – Chronial

1

Si se refiere a rellenar los campos del formulario y hacer clic en Actualizar, no hay forma directa, ya que los datos no se envían. Ese tipo de comportamiento depende del navegador.

Lo único que podría hacer es publicar los datos a través de AJAX en su servidor a medida que cambian los campos. Su script PHP que recibe los datos establecería algunas variables de sesión. Cuando se carga el formulario, debe establecer sus valores predeterminados a los valores de sesión apropiados.

Rara vez existe la necesidad de este tipo de comportamiento. Habrá muchas solicitudes enviadas de ida y vuelta a su servidor.

0

Ninguna de sus sugerencias lo ayudará a "recordar" los datos después de una actualización (acción que no envía datos al servidor). Lo que necesita es tomar datos a través de javascript (tal vez con el tipo de eventos onkeyup) y tomarlo usando cookies. Con jquery es muy fácil.

+0

muestra por favor? – sasori

+0

@sasori: Lo siento, no hay tiempo para una muestra, me gustaría pero no puedo. [la cookie es fácil de usar con este complemento] (https://github.com/carhartl/jquery-cookie) –

0

La sesión es una buena manera de almacenar y recordar datos, pero ¿por qué comp ¿Liquetear cosas? Considere si el formulario tiene muchos campos, el desarrollador tiene que almacenar muchos valores en sesión. ¿Por qué no simplemente imprimir o hacer eco?

Ejemplo:

formulario se envía con ssName entrada y SSAct campo oculto con el valor de enviar

Obtener el ssName y SSAct en forma someten

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

y la forma

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

El nombre del envío se repetirá si se envió y no fue vacío.

+0

El método simple de php echo que he descrito funcionará incluso después de la actualización (no Ctrl + refresh). Porque el formulario se publicará de nuevo con los valores. No es una solución perfecta, pero es un trabajo simple. –

3

Tuve un problema similar en uno de mis proyectos, así que escribí algunas js para manejar esto usando cookies. En primer lugar me encontré con dos funciones simples para establecer y obtener valores de galletas:

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

Que he escrito otras dos funciones para establecer y obtener valores de entrada:

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

Y utilizando jQuery ahorro valor de entrada de usuario cookie de sesión

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

espero que va a ayudar;)

+0

Esto funciona para mí, gracias! –

0

tratar el atributo autocomplete, tal vez funcione en algunos navegadores ...

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

Puede utilizar la función de autocompletar una form también.

0

hay algunas cuestiones principales para comprobar con el fin de obtener los datos aparecen después de refresco o cualquier controlador de eventos:

1) Sea consciente de la firma. debe contener el method = "post" atributo de la siguiente manera:

<form method="post"/> 

de lo contrario el uso de los $ _POST [ 'mensajero'] no funcionará.

El valor predeterminado del atributo de método en el formulario es get.

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

2) Muchos programadores se mezclan entre los atributos id vs nombre. Tenga cuidado al usar el atributo correcto. La matriz asociativa $ _POST está utilizando el nombre para obtener datos del mismo.Es por ello que el siguiente ejemplo no funcionará correctamente:

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

Para conseguir que salga bien debe agregar el nombre del atributo = "datos" de la siguiente manera:

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

Buena suerte

0

También podría hacerlo sin sesión como el siguiente código:

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

¡Esto mantendrá los datos escritos dentro del cuadro de entrada!

Cuestiones relacionadas