Mantener datos al enviar formulario

¿Has visto alguna vez formularios que al enviar los datos te devuelve un mensaje indicando que te hace falta llenar uno de sus campos? Seguramente, sí. Y ¿has visto que existen formularios que al indicar que te hace falta llenar uno de sus campos vacíos, te devuelve en blanco los otros campos que habías llenado?

Hoy voy a compartir contigo una forma sencilla -en PHP- para evitar que hagas perder tiempo a la gente y si le vas a pedir que llene los campos que tú necesitas, pues al menos le hagas el favor de conservar la información que ya te mandó.

Básicamente, el truco está en el value, donde lo que debes hacer es:
input type="text" name="nombre_campo" value="< ?php if (isset($_POST['nombre_campo'])) echo $_POST['nombre_campo']; ?/>"

Lo que hace ese PHP es revisar que si la variable se ha enviado por el método post y ya tiene un valor asignado, la imprime.

Es sencillo, no requiere de ciencias ocultas, pero a más de uno servirá.
Éxito y a estudiar mucho para aprender a hacer bien las cosas ;)

74 Responses to “Mantener datos al enviar formulario”

  1. 1
    Jesús Says:

    genial tip.. grax!!!

    saludetes

  2. 2
    Jc Says:

    Sabes que necesito insertar esos campos en una base de datos, ¿será necesario llamar a esa misma página para insertar los datos?, si lo hago de esa forma, ¿qué inconvenientes tendría?, de echo la manera que vos propones esta buena, pero, ¿qué pasaría si hago un refresh y suponiendo que los datos los haya llenado correctamente?

  3. 3
    Pedro Says:

    Saludos,
    1.- No se usa refresh…
    2.- Yo reviso en una sóla página, tres estados:
    a.- Normal, el formulario
    b.- la forma sometida y con datos llenos o vacíos
    c.- si la forma está bien, manda los datos a la base…

    Le ves la lógica? Sólo necesitas un poquito de imaginación, saber usar los if else y listo!

    Éxito!

  4. 4
    Jc Says:

    Hermano, lo que te digo que no es conveniente que tengas esa validación sobre la misma página, suponiendo que los datos estén bien, si haces un refresh podrías duplicar datos en la base de datos, en resumidas cuentas, no es recomendable llamar a ese mísma página para ingresar los datos, tenes que llamar a otra de procesos para que te haga el proceso de inserción y depués caer sobre la misma en caso de todo bien o a otra no sé. Sabes vos no sos el que vas a utilizar la página son tus usuarios, si ellos por casualidad hacen un refresh podría originarte problemas.

    En tales casos lo más recomendable es que almecenes esos datos en una variable de sesión en caso de que haya falla, únicamente el arreglo $_POST lo serializas mediante serialize y se lo asignas a la varible sesión, lo redireccionas a la página de datos del formulario y ahí deserializas la variable de sesión, de la forma $array = unserialize($_SESSION[error]) y si if(in_array(ponervariblecajatexto,”")) y encontras ese campo requerido únicamente lo marcas con un gif o lo que sea.

    Te saludo pedro.

  5. 5
    Pedro Says:

    Gracias Jc,
    Tiene sentido lo que planteas. Es una de las bondades del PHP. Tienes una y mil maneras de hacer las cosas.

  6. 6
    federico Says:

    pablo me resulto optimo el eljemplo de mantener datos,pero ahora quisiera saber si en otro boton submit a la vez, puedo limpiar los imput type text
    AGRADEZCO TU RESPUESTA

  7. 7
    Luz Dary Says:

    Buenos días, mi problema es que cuando monto la apliacación en un servidor Web, esta funciona, pero cuando la monto en otro, ya no funciona. Lo que pasa es que hay campos donde el usuario no escribe datos y debo hacer un update a la base de datos SQL server 2000, en uno de los servidores, estos datos vacios los llena como Null, pero en el otro no, entonces me sale error de sintaxis y se cae la aplicación. Alguien me puede ayudar?

  8. 8
    ismael Says:

    Jc, en realidad no es necesario serializar antes de guardar en session: PHP invoca a serialize() internamente cuando guardas algo en la session. Por otro lado, el problema es más sencillo. Manda los datos al archivo que valida y guarda los datos en la DB, y despues usa

    header(“location:pagina_exito.php”);

    para redireccionarl el browser a la página de “gracias por enviar formulario” (o algo así).
    De esta manera evitas el problema del refresh.

  9. 9
    Carlos V Says:

    mi consulta es la siguiente:

    necesito saber como mantener los datos en un formulario de una cadena completa, ya que si ingreso en el campo la cadena “hola mundo”, me muestra en éste solo “hola”

  10. 10
    carlos sernaque Says:

    hola miago ojala me puedas ayudar lo q pasa es que quiero pasar variables en PHP si usar FROM osea con el click de boton en JAVA SCRIP para validar la pagina, entoces no se como pasar esas variable para esten en otra pagina como ejemplo “codigo”

    gracias amigaso …

  11. 11
    Jesus Says:

    tengo unas variables que extraigo de la base de datos las asigno a variables sesion $_sesion, pero cuando paso a la pagina que las muestra no se imprimen, no se ven en la sesion, pero si esta autenticado, no entiendo que pasa, una ayuda por favor.

  12. 12
    DAE Says:

    hola:
    Tengo una duda o mas bien una pregunta,como le hago para pasar unas variables a otra pagina mediante un botón, mi segunda pagina funcionaría como una vista preliminar de los datos q introduje en la pagina uno, les agradecería que me ayudaran, bye.

  13. 13
    Carlos Esquivel Says:

    Saludos.

    He pegado las lineas respectiva pero no me funciona estoy en un lio.

    Gracias

  14. 14
    Mildred Says:

    Hola Necesito Ayuda, Necesito mantener los valores de los campos cuando envio los datos, mi formulario(tengo el formulario en una pagina y en el action llama a la pagina que se encarga de guardar en BASE de Datos) guarda en la base de datos si los campos estan correctos, pero si existe algun error la pagina me devuel un mensaje el formulario de registro con header(“Location: registrar.php?errorusuario=si”);pero me borras los campos que llene antes de enviar al formulario, como hago para que estos valores pernazcan

  15. 15
    Pedro Says:

    Saludos Mildred, debes hacer exactamente lo que dije en el tema… a menos que estés enviando los datos por el método GET, pues entonces cambia el POST, por GET.

    Éxito!

  16. 16
    Mildred Says:

    Hola Pedro, muchas gracias! me sirvio el truco lo hice de la manera siguente: en vez de redireccionar la página cuando ocurria un error, lo que hice fue colocar el mensaje de error en la pagina que llama el formulario para guardar en la BD y luego copio el formulario nuevamente pero con el value= value=”". Ademas creo que el iguiente simbolo”/” esta demas porque nome funcionaba, luego lo borre y sirvió perfectamente

    “> y NOOOOOOO

    /”>

  17. 17
    Pedro Says:

    No Mildred, NO está de más… así se cierran las tags en XHTML, que es la forma en que trabajo.

    En fin, qué bien que te sirvió de algo el post ;)

  18. 18
    Mildred Says:

    Hola pedro, te escribo para ver si me puedes ayudar con esto: Necesito validar que se halla seleccionado una opcion de un combobox para poder enviar el formulario, Como puedo hacerlo?, es decir tengo un combobox con una lista de valores y no guardar en la bd hasta que haya un valor válido haya sido selecionado por el usuario en el combo, es decir que no me guarde un nulo, Gracias por tu ayuda

  19. 19
    Mildred Says:

    tengo este codigo en java script para validar que selecione una opcion en el combobox y no me funciona

    if (form.listipousuario.options[form.listipousuario.selectedIndex].value==”"){r=0;alert(“Por favor, seleccione una opcion valida”);form.listipousuario.focus()};

  20. 20
    Juan Gonzalez Says:

    Como mantengo los datos del formulario en asp-html

    gracias.

  21. 21
    JuanMatías Says:

    Hola!!! Estoy implementando un modulo de Circulares en PHP y MySql, donde tengo un formulario con su tabla para ingresar la circular, una tabla de estudiantes con codigo y nombres, una pagina que muestra la lista de circulares almacenadas con vinculo a detalle. hasta ahora no hay problema, todo funciona bien. La cuestion es que me toco crear una tabla de control de lectura que almacene ciertos datos como el codigo del usuario, el numero de la circular y la fecha, en el momento en que quiera visualisar dicha cirucular. no he podido y no tengo ni idea de como hacerlo,
    Ayuuudaaa Please!!!

  22. 22
    Silver Says:

    Hola…
    Muchas gracias me sirvio muchisimo de verdad, seguire navegando :P para ver que otra ayuda me puedes dar.

    Adios

  23. 23
    milena Says:

    Hola tengo un problema quiero Mantener datos al enviar formulario pero los datos no estan en un input si no en un text area y no me deja hacerlo asi ,,,, me podrias colaborar

  24. 24
    pedro Says:

    Mildred, yo habría resuelto la validación de un combobox, con la evaluación mediante array de PHP.

    Juan González, no manejo ASP, pero asumo que debe haber un equivalente al PHP que propongo.

    Juan Matías, busca acerca de tablas relacionadas y usa INNER JOIN en el SQL.

    Silver, gracias por tu visita y comentario. Para mí, el que le sirva a los demás, ya es ganancia, un agrado. Éxito!

    Milena, es lo mismo. Un input guarda los datos en value=”" pero el textarea lo hace entre las tags, así:

    [textarea name ="tu_textarea"]if $_POST['tu_textarea'] echo $_POST['tu_textarea'][/textarea]

    Éxito!
    P.D. En tu código HTML, debes substituir [ por < y ] por >, en el PHP, está bien.

  25. 25
    lourdes Says:

    bueno yo intente realizar un formulario, lleno los campos y al enviar los comentarios al correo no los puedo ver. Qué puedo hacer

  26. 26
    Nancy Says:

    Respondo a Juan González.
    Justo ayer pude solucionar el tema de la validacion de un combobox! Siempre y cuando tengas la primer opcion algo como “elija una opción” (que seria el index 0)
    entonces, donde usaste
    (form.listipousuario.options[form.listipousuario.selectedIndex].value==””){
    sólo preguntá Si(form.listipousuario.selectedIndex == 0) quiere decir que el usuario no optó. OK?

  27. 27
    yasferter Says:

    Estoy haciendo en php un scan con las funciones gethostbyaddr,gethostbyname y gethostbynamel. Necesito saber como en php, los valores que me devuelve el formulario pueda insertar en un textarea.

  28. 28
    Choku Says:

    Nesesito que me ayudes en un problemilla lo que pasa es que quiero que despues de escribir algo en un input de un form no me aparesca nada de historial de lo que ya he escrito. Por favor Gracias.

  29. 29
    Horacio Says:

    Lo que quiero hacer es justamente lo que tu haces en este form que llene. Validar los datos de mi form que puse en mi pagina.

    -validar que si email, nombre, empresa y tel estan vacios que no permita enviar el form.

    -Validar que el email sea coherente (direccion@servidor.dominio).

    Te agradeceria mucho si me echas la mano con esto, porque yo no tengo mucha practica en hacer paginas, gracias…

    Nombre:

    E-mail:

    Empresa:

    Estado:

    País:

    Cód de país:

    Lada:

    Tel:

    Cel:

    Preguntas y cotizaciones…

    –>

  30. 30
    johnnylee Says:

    HOLA. muy bueno el post.. que lastima no haberlo encontrado antes, por lo que me tocó inventar mi forma y es prácticamente la misma, solo que no uso la condicion if(isset($_POST['lavariable'])), sino que escribo en el parametro ‘value’ un:

    asi, si esta.. escribe el valor.. y si no está, omite el error.

    –respecto a lo de colocar la validación en la misma página, concuerdo con Jc en el sentido de que si hay una recarga de la página con todo el arreglo $_POST validado correctamente, la insercion se hace doble en la base de datos, si no has tomado contramedidas, como poner condiciones sobre variables $_SESSION que expiren o algo por el estilo.

    Sin embargo, he llegado al punto en el que mezclo técnicas como la de refrescar la página mediante código al estilo –> ‘header(…)’, incluir variables de $_SESSION que cuentan las veces que se refresca la pagina, y las condiciones para que no acceda a la parte donde actualiza.. y lo que hace es simplemente quedar estancado en un punto en el que lo unico que me queda es poner un mensaje al usuario para que haga clic y redireccione el mismo…

  31. 31
    elkin Says:

    no he podido crear un buzon de sujerencias para mi web

  32. 32
    Luz Says:

    como guardo en un array, datos tomados de un formulario y luego listarlos:
    t1 t2 tn
    b1 b2 bn
    f1 f2 fn
    los ej. q hay solo son p cargar constantes pero yo necesito q los vaya tomando del formulario las veces q los ingrese.

  33. 33
    albert Says:

    oye nesecito una yudidita sera que me ouedes atudar yo quiero baidar un formulario de email por dreanwacer y sql pero yo nose mucho deeso crear formularios quisiera saver si algiem me atuda a balidarlo hai les dejo mi coreo porfa ayudenme

  34. 34
    juan manuel Says:

    No puedo mantener el valor de una variable, aunque pongo $_get['nombre_variable']la pierdo.¿Como la tendria que pasar?
    Desde ya muchas gracias.

  35. 35
    Carol Says:

    Hola ese codigo estuvo excelente pero tengo un problemita. He tenido que salir de mi ?> para poder copiar ese codigo pero si tuviera:
    echo “”
    como podría corregir ese codigo porq sale error

  36. 36
    anderson Says:

    como hago para mantener los datos de mi formulario de forma que yo pueda acceder a ellos, es decir donde se guardan estos datos.

  37. 37
    Moy Says:

    Una pregunta ese ejemplo funciona si utilizo el metodo POST, pero si yo paso los valores en php atraves de un link Ej(pagina.php?var1=valorVar1&var2=ValorVar2 Tambien podria conservarlos? o como le haria?
    Te agradeceria mucho me respondieras

  38. 38
    Mercedes Says:

    Hola:

    Mi problema es que quiero mantener los datos de un formulario cuando mando datos de otro formulario

  39. 39
    Pedro Says:

    Moy, si pasas las variables por una URL, entonces recoge las variables con el método GET.

    anderson, si usas los métodos get o post, los puedes recoger en el siguiente paso nada más. Si deseas que estén disponibles en más de una página, te pueden servir las sesiones o las cookies.

  40. 40
    Guillermo Says:

    tengo un formulario de registro en una pagina inicio.php donde el susuario inserta sus datos. al enviarlos otra pagina llamada verifica.php verifica que los datos sean correctos. necesito que una vez isertados los datos en la BD se destruyan los datos del formulario, puesto que si alguien accede a verifica.php y actualiza, puede insertar los datos nuevamente

  41. 41
    Pedro Says:

    Pues una solución que se me ocurre, es que al meter los datos satisfactoriamente en la DB, hagas un redireccionamiento. No es complicado, nada más usas un par de if y listo.

    La otra que se me ocurre, es que metas el valor del submit en una sesión; luego verificas si ya se ha sometido antes el form, pues te dice que no puedes enviar dos veces el dato.

    Una cosa importante es que al inicio de verifica.php evalúes que si no está presente la variable submit, pues que haga un redireccionamiento a una página x.

    Éxito!

  42. 42
    Guillermo Says:

    Muchas Gracias Pedro. Esta informacion me ha sido muy
    util

  43. 43
    Cristian Says:

    Justo lo que estaba buscando… Es de agradecer el apoyo a novatillos como yo…Saludos desde México..

  44. 44
    jessica Says:

    hola me gustaria aprender como hago para pasar los datos de una base de datos a una tabla utizando javascript

  45. 45
    jessica Says:

    me gustaria tambien como hacer q cuando yo este llenando un campo para numeros en el monmento en q yo este ingresando letras a este campo el teclado no responda pero cuando es numeros si me deje ingrsarlos, lo mismo en caso contrario gracias te agradeceria mucho
    chaoo

  46. 46
    main52 Says:

    todo lo que comentan esta a todo dar, pero se haria mas practico y si se pusiera un ejemplo aunque sea pequeño.
    no creen?

    sobre todo de sesiones que es donde no he podido conciliar

  47. 47
    Gricel Says:

    Hola, soy nueva en PHP y estoy tratando de realizar una pagina de captura, mi problema empieza en las validaciones, debo verificar en la BD que el valor que se introduzca a traves de los inputs en el formulario no este repetido, si es asi enviar el mensaje y dejar el cursor en donde se capturo la informacion repetida sin borrar la pantalla, lo he intentado con una funcion java pero no me funciona manda el error y la pantalla queda en blanco o bien regresa pero me borra la información introducida antes de la validacion, y realmente es mucho lo que hay que capturar y la validacion es casi el final de la pantalla, agradeceria me ayudaran.

  48. 48
    andrea Says:

    Me has hecho una reina! Mil gracias.No era nada dificil,pero no había caído.

  49. 49
    John Says:

    En mi codigo me funcionó ok. Muchas gracias.

  50. 50
    falher Says:

    aqui ps pasaba por aqui y llenar mis neuronas de algo mas sobre PHP , suerte a todos y vamos con PHP

  51. 51
    oruga Says:

    hola!, ando teniendo un problemilla, quiero saber si me pueden quitar la duda. Tengo un formulario que no lo puedo redireccionar
    espero que me puedan decir en que estoy fallando

    Formulario

  52. 52
    Alejandra Says:

    Hola, buenos días; lo que sucede es que tengo un problemilla con la vinculacion de unos datos a una BD; lo que pasa es que tengo dos formularios, en el primero la persona se registra con su nombre, nuemro de cedula y demás, y estos datos se almacenana en la base de datos perfectamente y tengo redireccionado el segundo formulario para que me lo cargue inmediatamente; y de igual manera el usuario diligencia el segundo formulario que es un test, hasta ahi normal.. el problema radica en que tengo que vincular las tablas de las bases de datos, ya cree en la segunda tabla la llave foranea, pero no se como pasar del primer forumario el dato cedula al segundo formulario para guardarlo en la segunda tabla.. si alguien me peude ayudar lo agradezco inmensamente.
    Gracias Aleja

  53. 53
    Pedro Says:

    Recuerda que mysql_indert_id es una función que te devuelve el ID del registro más reciente que has guardado. Entonces, para traer los datos de ese ID, pues haces un query de select donde el ID es el mysql_insert_id metido en una variable.

    Eso es todo.

  54. 54
    laura Says:

    Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in …..

    es el error que me muestra al colocar lo suguerido..

    echo “= 180){ alert(‘Has superado el tamaño máximo permitido’); return false; }\”>if(isset($_POST['textito']) echo $_POST['textito']“;

    Algun comentario, para poder continuar… lo agradezco.

  55. 55
    ezequiel Says:

    no se que estoy haciendo mal, lo copie tal cual pero lo que pasa es que en vez de que aparezca el dato que introduje aparece el codigo php, o sea en campo de texto aparece

  56. 56
    Juan Says:

    gracias

  57. 57
    Tania Says:

    necesito saber que estoy haciendo mal en este query, porfavor!

    insert into mcerve1_paraempleados.mcerve1_bvcbvc.mbPuntos
    values (
    select id,idEmp,orden,clave,cantidad,puntos,fecha from mcerve1_paraempleados.dbo.mbpuntos_prueba where idEmp in
    (select mbEmp_Id
    from mcerve1_paraempleados.mcerve1_bvcbvc.mbEmpleados)
    )

  58. 58
    maria Says:

    Hola, ando como loca buscando un formulario gratuito que me mande los comentarios que me hagan a mi url, y si pasa por el correo mejor, claro, por si hiciera falta una criba. Gracias

  59. 59
    Pedro Says:

    Saludos María, intentaste en HotScripts?

  60. 60
    claudia Says:

    hola yo quisiera saber como hacer que si un usuario le da clik en guardar en un formulario si hay campos vacios le mande un error

  61. 61
    Pedro Says:

    Lo puedes hacer con PHP (tal como arriba se indica) o con javascript. En ambos casos evaluando las variables vacías enviadas.

  62. 62
    Celin Says:

    he aprendido muchas cosas aqui,….es un sitio muy educativo…por otro lado quiero saber como puedo traer datos de una base de datos a una caja de texto o input )es un reporte y quiero hacer el codigo para traer datos a un formulario y luego imprimirlos en una impresora….necesito ayuda urgente….me estan midiendo el rendimiento y mis conocimientos….debo demostrar que los tengo…..

  63. 63
    Pedro Says:

    Saludos Celin,

    No es complicado lo que quieres hacer. Lo que puedo decir es que:
    1.- Necesitarás hacer la consulta a la base de datos con un SELECT
    2.- Sacar los datos específicamente que necesitas con haciendo un WHERE al ID de los registros que necesitas imprimir en pantalla
    3.- Imprimirlo en papel será más fácil con javascript

    No es complejo. En caso que te midan por conocimientos y/o rendimiento, recomiendo comiences a leer y practicar MUCHO hasta conseguir el nivel deseado.

    Éxito!

  64. 64
    Margot Gonzalez Aguilar Says:

    miren mi pregunta es la siguiente quiero que la informacion que yo meta en un formulario se vaya a mi correo electronico no a mi servidor. me podrian enviar un codigo php o un script para poder hacer esto

  65. 65
    lili Says:

    hola
    alguen me puede decir como vaciar un registro de una base de datos a una caja de texto en un jsp:

    este es mi codigi jsp
    <imput type = "text" name = "carrera" value="">
    eso quiero hacerlo pero junto con el demas conjunto de datos

    solo que aki clave corresponde a una variable int en donde almaceno el valor que tiene clave en la bd
    pero me marca error en”como vacio el dato al input type

  66. 66
    Cesar Says:

    Como puedo hacer para que los datos de un formulario se almacenen en una base de datos.o que el comentario que pongas acerca de una pagina aparezca en la misma pagina. por ejemplo los metros y ese tipo de cosas.

  67. 67
    GDM Says:

    Alguien sabe como dejar los datos en un formulario cuando manda error pero de un select o textarea o sea una lista desplegable… ayuda please…. gracias.

  68. 68
    Charlie Says:

    Saludos! Luego de tanto y tanto buscar en la web, tu linea de codigo me resolvio un gran problema. Gracias!

  69. 69
    cainzer0 Says:

    Eso solamente sirve si tu action es a la misma pagina, pero si tu action es a un php diferente que haga la validacion la cosa cambia

  70. 70
    kaka22 Says:

    hola que tal, soy nuevo en esto de PHP y quisiera saber si hay alguien que me pueda ayudar. necesito poner un boton que me genere un numero aleatorio y al dar clic sobre este me mande a un nuevo formulario pero en la misma página, en éste se pretende capturar un número tecleado y compararlo con el aleatorio y al presionar otro boton me mande a otra pantalla, pero nuevamente en la misma pagina donde los compare haciéndome saber cuál de ellos es mayor. Necesito hacer esto varias veces, en un ciclo, hasta que ambos numeros sean iguales y mostrar en pantalla el número de intentos.

    para ello necesitaria que cada vez que se refresque la página no se genere un nuevo número aleatorio, sino solamente regrese al 2o formulario para teclear un nuevo numero y compararlo nuevamente.

    estaba utilizando algo como esto:

    if (!isset($_POST['submit']) )
    {…}
    else {…}

    pero solo me funciona solo hasta el 2o formulario, si lo pongo nuevamente me regresa al boton que genera el numero y no a la 3er pantalla de los resultados.

    Tambien quisiera saber si me sirve, y como usar lo siguiente:

    print <META HTTP-EQUIV=”refresh” CONTENT=”3; URL=xxxx.php”

    les agradecería mucho su ayuda!

  71. 71
    darling Says:

    Justo lo que estaba buscando!! mil gracias!!

  72. 72
    Paul Says:

    Excelente, estaba buscando un control sencillo para evitar que los visitantes tengan que llenar de nuevo los campos. Me sirvió. Gracias

  73. 73
    Jairo Says:

    Hombre, gracias por el tip, muy sencillo y eficaz, me sirvio 100%

  74. 74
    Brahyan Says:

    hola pedro… 5 años despues de tu aporte… pero me salvaste la vida… de verdad que estaba como un loco hasta que di con tu post.

    Gracias

Leave a Reply