entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Duda Como No Perder los Datos de un Formulario al refresh la Pagina Web PHP

Hola amigos tengo un problema espero me ayuden tengo un formulario con cajas input type="text" donde escribimos datos para enviarlos pero al refrescar la pagina se pierden los datos ya escritos en las cajas de texto como es un cuestionario un poco extenso aveces no queremos llenar los campos otravez como puedo evitar ese problemas para ciertos campos de texto? SALUDOS!! espero me ayuden.

0voto

Leonardo-Tadei comentado

El usuario refresca la página manualmente? O tienen un proceso que recarga la página cada X segundos? O te referís a que al enviar los datos, querés que vuelvan a aparecer los que estaban cargados antes?

Te consulto el mecanismo del refresco porque son 3 escenarios diferentes con soluciones diferentes.

0voto

Alan comentado

ola Leonardo lo q pasa es q la pagina tiene un proceso que recarga cada cierto tiempo automaticamente para actualizar una caja de texto un input type text q necesito actualizar pero los demas input pierden los datos al refrescar la pagina asi q necesito q los datos q coloquen en las cajas de texto del formulario sin enviar todabiar ala ora q se refresque la pagina no se pierdan te agradeceria mucho amigo si cuentas con un ejemlo?

ejemplo del input:

<input  type="text"  name="nombre_campo"  value="<?php echo  $dato["campo"];?>" >

0voto

carlossevi comentado

¿Y no es mejor solución refrescar ese valor que necesitas actualizar por JS en lugar de refrescar la página entera y hacer que se conserven todos los demás datos? ¿Lo has descartado por algo o no lo habías valorado?

0voto

Alan comentado

Hola carlossevi me gusta tu idea pero como ago eso amigo no tendras un ejemplo para poder comprender como acerlo ?

0voto

carlossevi comentado

Precisamente dairon te ha dado la respuesta =)

3 Respuestas

2votos

dairon Puntos17140

Bueno para hacer eso que mencionas existen un millon de formas de hacerse, por ejemplo primero viendo de que forma programas y como llamas a la vista, pues puedes pasarle los datos con php y cargarlos en el value de los input de tipo text con la linea <?php echo $nombrevariable; ?> otra forma es cargando los datos de un fichero tanto con php o con javascript sino quieres usar php, cargas los datos con javascript y cuando se levante la página le asignas el valor a cada input, ya sea leyendo los datos de fichero o consumiendo un REST con JSON, bueno para JavaScript muchos prefieren JQuery que te aría la vida muy facíl y rápida de programar.
Creo que lo primero sería que comentaras que lenguaje de servidor usas o si no usas, y como quieres hacerlo según lo que te expliqué aquí.
Saludos Dairon
con JQuery solo basta poner:

$(document).ready(function() {
   //y cuando la página se cargue ejecutará todo lo que implementes aquí tal como 
   $("#nombreAlumno").val("Alumno Número 1");
});

Mira este ejemplo que es con AJAX:
yo hago algo parecido con ajax y solamente me altera el id que le defino

setInterval('ajax("1","notif_container","../../ajax/coment/gettotal",true,"GET")',10000);

cada 10 segundos el sitio hace la peticion ajax y llena con el resultado que devuelve el metodo getatotal metiendolo dentro de la tag de id=notif_container el método ajax lo puse en git podrías poner un div y dentro del método escribir el input esto hará que cada vez que se haga la petición ajax se te escriba el input exactamente con el valor y como lo definias, yo lo uso en este caso para mostrar un icono de mensajes con un numero con la cantidad de mensajes nuevos.
Saludos Dairon

0voto

Alan comentado

lo q pasa es q la pagina tiene un proceso que recarga cada cierto tiempo automaticamente para actualizar una caja de texto un input type text q necesito actualizar pero los demas input pierden los datos al refrescar la pagina asi q necesito q los datos q coloquen en las cajas de texto del formulario sin enviar todabiar ala ora q se refresque la pagina no se pierdan te agradeceria mucho amigo si cuentas con un ejemlo?

ejemplo del input q tengo
input type="text" name="nombre_campo" value="?php echo $dato[">" >

1voto

dairon comentado

yo hago algo parecido con ajax y solamente me altera el id que le defino

setInterval('ajax("1","notif_container","../../ajax/coment/gettotal",true,"GET")',10000);

cada 10 segundos el sitio hace la peticion ajax y llena con el resultado que devuelve el metodo getatotal metiendolo dentro de la tag de id=notif_container el método ajax lo puse en git podrías poner un div y dentro del método escribir el input esto hará que cada vez que se haga la petición ajax se te escriba el input exactamente con el valor y como lo definias, yo lo uso en este caso para mostrar un icono de mensajes con un numero con la cantidad de mensajes nuevos.
Saludos Dairon

0voto

Alan comentado

ola dairon para acer lo q dices tengo q descargar la libreria ?

0voto

dairon comentado

no mano, el código lo hice lo más sencillo posible
solo copias el código de git y usando el jemplo haces la llamada a una página que devuelva algo y ese algo te lo insertara dentro del id del tag que le pasaste por parametro

0voto

Alan comentado

Muxas gracias amigo a todos por resolver mi duda !!SALUDOS

1voto

white Puntos75880

Si el formulario es enviado por el usuario:

obten los campos con el metodo de peticion de tu formulario $_GET | $_POST. Sanitizalos por seguridad e imprimelos en el formulario en el atributo value=""

<?php

    $campos = array(
        'campo_1' => null
    );

    function escape( &$input )
    {
        return htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
    }

    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        $campos = $_POST;
        array_walk_recursive($campos, 'escape');
    }

    echo '
        <form method="POST">
            <input type="text" name="campo_1" value="' . $campos['campo_1'] . '">
            <input type="submit">
        </form>';

Si el usuario hace refresh sin enviar el formulario o sale de la pagina:

Como opción podrías enviar por ajax cada x tiempo los datos en el formulario y guardarlos en una sesion.

<?php
    session_start();

    if (isset($_POST['save_draft']))
    {
        $_SESSION['draft'] = $_POST;
        die();
    }

    $campos = array(
        'campo_1' => null
    );

    if (isset($_SESSION['draft']))
    {
        foreach ( $campos as $nombre => $valor )
        {
            if (isset($_SESSION['draft'][$nombre]))
            {
                $campos[$nombre] = htmlspecialchars($_SESSION['draft'][$nombre], ENT_QUOTES, 'UTF-8');
            }
        }
    }

    echo '
        <form method="POST">
            <input type="text" name="campo_1" value="' . $campos['campo_1'] . '">
            <input type="submit">
        </form>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
        <script type="text/javascript">
            var save_draft = function() {

                    var inputs = {
                        save_draft : 1
                    };

                    $("form input[name]").each(function() {

                        if( $(this).val() == "" )
                            return;

                        inputs[$(this).attr("name")] = $(this).val();
                    });

                    $.ajax({
                        "method" : "POST",
                        "data" : inputs,
                        "url" : "draft.php",
                        "success" : function(){}
                    });

                    setTimeout(save_draft, 30000);
                }

                save_draft();
        </script>';

aca se envia a draft.php los valores del formulario cada 30 segundos, guardandolos en una variable de sesion.

1voto

Leonardo-Tadei Puntos227320

Hola @Alan,

adhiero a la solución de @carlossevi: podrías actualizar los valores de los 2 INPUT solamente vía AJAX, de forma tal que no haya que recargar la página.

Otra solución a mitad de camino sería poner los 2 INPUT que se refrescan en un IFRAME y que sea solametne este IFRAME el que se refresque, demanera tal que no se pierda lo que se esté escribiendo en el formulario.

No es una buena estrategia refrescar toda una página en la que el usaurio tiene que escribir datos... se me ocurre alguna solución chapucera para mantenerlos, pero tiene muchas contras y además mientras se refresca el operador verá un desconcertante parpadeo de la pantalla (o demoras en una conexión lenta)

Saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta