Busqué mucho para encontrar una solución para esto, y finalmente tuve que darme cuenta (como otros antes que yo) de que un formulario siempre se restablecerá a los valores con los que está cargado.
Entonces, mi solución es cargar el formulario con valores vacíos y luego usar Javascript puro para actualizar los valores de otras entradas ocultas. Requiere una entrada oculta y una línea de JS para cada entrada de usuario. Mi ejemplo a continuación muestra el código para una sola entrada. Cualquier otra entrada sigue el mismo patrón.
La entrada (he omitido la etiqueta para mayor claridad):
<li> <input type="text" name="firstname" id="firstname" value='' tabindex="1" size="45" /> </li>La entrada oculta:
<input type = 'hidden' id = 'jfn' name = 'jfn' value = '<?php echo $firstname; ?>' />El Javascript (en la función 'onload' o (si jQuery está disponible, 'documento listo')':
document.getElementById('firstname').value = document.getElementById('jfn').value;Cuando se envía el formulario, las entradas (en $_POST) se guardan en SESSION, desde donde se pueden recuperar mientras dure la SESIÓN:
foreach ($_POST as $name=>$value) { $_SESSION['email'][$name] = $value; }y luego recuperado:
if (!empty($_SESSION['email'])) { extract ($_SESSION['email']); }Cuando/si se vuelve a cargar el formulario, los valores de entrada están inicialmente vacíos. Los valores ingresados previamente se cargan en las entradas ocultas. Después de que la página se haya recargado, esos valores se transfieren a las entradas (visibles). El botón 'Restablecer' ahora borrará el formulario.