Foros del Web » Programando para Internet » PHP »

devolver el control al cliente despues de validar un formulario

Estas en el tema de devolver el control al cliente despues de validar un formulario en el foro de PHP en Foros del Web. Hola a todos y gracias por la ayuda que hasta ahora habéis prestado en el foro a un novatillo como yo. Siento el escándalo de ...
  #1 (permalink)  
Antiguo 27/02/2014, 03:45
 
Fecha de Ingreso: agosto-2013
Mensajes: 40
Antigüedad: 10 años, 8 meses
Puntos: 0
devolver el control al cliente despues de validar un formulario

Hola a todos y gracias por la ayuda que hasta ahora habéis prestado en el foro a un novatillo como yo.

Siento el escándalo de la pasada consulta con OCP001a, a todos pido disculpas e intentaré que no vuelva a pasar.

Tengo un problema que seguro está resuelto y se ha dado en muchas ocasiones.

º) EL usuari rellena un formulario se recogen los datos introducidos con jn post y se hace una consuta en una base de datos. Si la consulta arroja un valor nulo, no existe tal combinacion de valores en la bas de datos con un echo se lanza un mensaje que dice:

"Lo sentimos No existe tal 'elemento' registrado compruebe el dato introducido"

2º) Hata ese momento han interveniso dos URL, la primera :

2.1 http://locahost/nombreficheroformulario.php

donde nombreficheroformulario es el nombre del fichero php .que permite visualizar el formulario e introducir los datos,

2.2 La segunda http:/localhost/valordeaction.php

donde valordeaction es el fichero donde se recogen con un post los datos y se validan frente a los regsitros de la base de datos.

3º) Lo que no se es como desde valordeaction.php despues de visualizar mediante un echo que la consulta arrojal valor nulo:

3.1cerrar valordeaction.php
3.2 devolver el control al cliente y que aparezca en el exlorardor nombreformulario.php para que haga de nuevo la consulta.

Muchas gracias


.
  #2 (permalink)  
Antiguo 27/02/2014, 04:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: devolver el control al cliente despues de validar un formulario

Podrias hacerlo con una sola url, como dices, en relalidad con solo un fichero "formulario.php"

en la primera parte del fichero debes detectar si estas recibiendo datos,

Si recibes datos haces la validación en unfinc del resultado muestras un mesaju otro
-------No valida Lo indicas y muestras el formulario con los datos para su corrección
-------Valida lo indicas y muestras el formulario vacio
No recibes datos muestras el formulario vacio.

En el action del formulario debe ir el mismo fichero donde esta el formulario.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 27/02/2014, 11:48
 
Fecha de Ingreso: agosto-2013
Mensajes: 40
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: devolver el control al cliente despues de validar un formulario

antes de enviar el post los datos sevalidan con unsuceso.

El problema que tengo es otro, una vez recogidos se hace una consulta a la base de datos que puede arrojar resultado nulo.

recoger los datos enviados con el posty realizar esta consulta en la BD implica cambiar de url.

la question es como volver a la url originaria,en la que se introdujeron los datos ,cuando la consulta es nula.

eso es lo que no sehacer

saludos y gracias
  #4 (permalink)  
Antiguo 27/02/2014, 12:28
 
Fecha de Ingreso: agosto-2013
Mensajes: 40
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: devolver el control al cliente despues de validar un formulario

si te entendido mejor dices qe se puede usar como fichero de action el mismo que se está usando para recoger los datos , por ejemplo si elfichero en el que se están rcogiendo los datos es formulario.php:

1º) Se puede poner la cabecera del formuario así:

<form id = "formulario.php" name="formulario.php" action="formulario.php" method="POST" onsubmit = "return verificar1();" >

--------------------- el boton de submit

<input type="submit" value="enviar">

y recoger a continuación en el mismo fichero loscampos con $_POST:

$campo1=$_POST["CAMPO1"]


Es eso?

2º) meter los dos grupos de sentencias en un bucle DO...while y repetirlo tantas veces como sea necesario hasta que se rellene todo bien?

Te he entendido ahora?


Saludos
  #5 (permalink)  
Antiguo 27/02/2014, 12:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: devolver el control al cliente despues de validar un formulario

1) Si es eso.

Cita:
onsubmit = "return verificar1();"
No es estrictamente necesario puedes validar en el servidor....

En cuanto al id y el name del formulario no tiene porque ser el nombre del fichero....

2) No.... Si que acaba siendo un bucle pero no con un do ... while.

Para poder lanzar una consulta lo que necesitas es una petición al servidor, no una nueva url, es decir la petición la puedes hacer al mismo fichero... el servidor hara una cosa u otro si recibe o no por post los datos del formulario.... Y el "bucle" se producirá porque mientras no se hayan insertado datos correctos mostrarás los datos introducidos con el aviso de que hay algo mal.... en el momento que valide haras otra cosa y se saldrá del "bucle"....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 27/02/2014 a las 12:44
  #6 (permalink)  
Antiguo 27/02/2014, 12:48
Avatar de xpapachox  
Fecha de Ingreso: junio-2011
Mensajes: 77
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: devolver el control al cliente despues de validar un formulario

Desde valordeaction.php haces un Header para retornar al formulario inicial.

Código PHP:
   Header("Location:formulario.php");exit(); 
  #7 (permalink)  
Antiguo 27/02/2014, 15:27
 
Fecha de Ingreso: agosto-2013
Mensajes: 40
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: devolver el control al cliente despues de validar un formulario

Gracias xpapachox, si pongo Header("Location:formulario.php");exit();
al volver al formulario inicial recuperaria el valor de los campos o los perdería?

Gracias
  #8 (permalink)  
Antiguo 28/02/2014, 02:31
 
Fecha de Ingreso: agosto-2013
Mensajes: 40
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: devolver el control al cliente despues de validar un formulario

he hecho lo que me hs dicho xpapachox yme encuentro con dos dificultades:

1º)El valor de Los campos que se insertaron se pierde.

supongo que alespecificar la urlen header tb podrás pasar como parámetros los campos en esa url, sabes como?

2º) Desde valordeaction.php intento imprimir un echo diciendo que la consulta ha arrojado un valor nulo, pero el mensaje no se visualiza pq inmediatamente se redirecciona a la pagina especificada en el header y el usuario no tiene tiempo para decir ok. Supongo que tendré que cambiar a java y hacer un alert. Se te ocurre algo más elegante?.

Muchas gracias
  #9 (permalink)  
Antiguo 08/03/2014, 06:17
 
Fecha de Ingreso: agosto-2013
Mensajes: 40
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: devolver el control al cliente despues de validar un formulario

ho lo que me dices quimfv y entro en eun bucle infinito en el que el usuario nunca recupera el control para meter los datos.

1º) he definido una funcion que se llama "formularioinicial(&$a,&$b,$vf)" dentro del fichero bucleformulario.php.

donde:

$a es la matriz de los campos,$b la de los codigos de error, y $vf una matriz cuyos elementos valen uno o cero según el campo se a valido o no.Las tres matrices se inicializan a blanco y$vf a uno.

2º) La funcion:

-genera el formulario y rocoge los datos del usuario.
-Los manda por un post a el mismo fichero en el que se edita el formulario bucleformulario.
-Los datos son recogidos en el mismo fichero y se analiza si son válidos o no.
-cuando no son válidos los elementos de la matriz son cero sino uno.

después de su definicioón:

3º)He pensado la siguiente "teoría": la funcion se llama dentro de un for como tiene sus parametros precedidos de &, las matrices $a,$b y $vf te dan los campos y errores actualizados en cada paso del for.


$campos[1]="";
$campos[2]="";
settype($campos[2],"integer");
$errores[1]="";
$errores[2]="";
$vfc[1]=1;
$vfc[2]=1;
for($i=0;$i<1;){
formularioinicial($campos,$errores,$vfc);

if ($vfc[1]==0 or $vfc[2]==0) {$i=0;} else {$i=1;echo "I=1 ESTO ES EL FIN";}

}

si los campos son correctos $i se hace uno y el for se tendría que detener ,si algún campo tiene codigo de error cero(no valido) ,$i=o y el for se repite.

4º) La realidad es que aparece un bucle sin fin y no puedo meter ningún dato .

Me puedes decir como el usuario puede recuperar el control en cada interacción para introducir y en su caso corregir los datos?

Necisto ayuda urgente

gracias
  #10 (permalink)  
Antiguo 10/03/2014, 03:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: devolver el control al cliente despues de validar un formulario

Código PHP:
Ver original
  1. <?php
  2. $valorCampo="";
  3. if(isset($_POST['campo']){
  4.   $valorCampo=$_POST['campo'];
  5.   if (valido($_POST['campo']){
  6.      $valorCampo="";
  7.      echo "Totdo correcto!!!!<br />Inserta otro valor";
  8.   }else{
  9.       echo "Hay un error en ".$_POST['campo']." es demasiado corto<br />Intenatalo de nuevo";
  10.   }
  11. }
  12.  
  13. function valido($valor=""){
  14.    if(count($valor)>=10){
  15.        //Aqui ejecutariamos lo que haya que hacer con el valor:
  16.        //por ejemplo guardarlo en una bbdd.
  17.        return true;
  18.    }else{
  19.        return false;
  20.    }
  21. }
  22.  
  23. ?>
  24. <html>
  25. <head>
  26. <title>Formulario validado en servidor</title>
  27. <meta http-equiv="Content-Type" content="text/html; charset=utf8">
  28. </head>
  29. <body>
  30. <form action="formulario.php" method="post" name="formulario" id="formulario">
  31. <input name="campo" type="text" id="campo" value="<?php echo $valorCampo;?>"><br />
  32. <input name="botEnviar" type="submit" value="Enviar">
  33. </form>
  34. </body>
  35. </html>

Quizás un ejemplo te sirva, es muy simple pero el esquema te debería servir.

Se trata de un formulario en un fichero llamado "formulario.php" el formulario contiene un campo llamado "campo".

En el lado servidor:

- creamos una variable para guardar el dato recibido por post.
- comprobamos si se esta recibiendo algo
-- si lo recibimos validamos
--- si validamos a true
----- limpiamos el contenido de la variable
----- y felicitamos al usuario (se mostrara el form vacío)
--- si validamos a falso
----- NO limpiamos la variable
----- y advertimos al usuario (se mostrara el form con el valor erróneo)
-- si no recibimos no hacemos nada (se mostrara el form vacío)

La función de validación en este caso solo mira si el contenido de "campo" tiene una longitud igual o mayor a 10.

Para generalizar este ejemplo a un caso mas real con mas campos puedes passar $_POST entero a la función "valido" y recorrerlo validar cada campo segun convenga, puedes crear un array para guardar que campos han validado a true y cuales no, si todos validan a true la función retorna true y será igual que el ejemplo, si no, retorna false y deberás usar el array para por ejemplo cambiar el estilo de los imputs erroneos...

Un ejemplo con dos campos

Código PHP:
Ver original
  1. <?php
  2. $valorCampo1="";
  3. $valorCampo2="";
  4. $vValorCampo1=false;
  5. $vValorCampo2=false;
  6. $cValorCampo1="negro";
  7. $cValorCampo2="negro";
  8. if(isset($_POST['campo1']){
  9.   $valorCampo1=$_POST['campo1'];
  10.   $valorCampo2=$_POST['campo2'];
  11.   if (valido($_POST){
  12.      $valorCampo1="";
  13.      $valorCampo2="";
  14.      echo "Totdo correcto!!!!<br />Inserta otro valor";
  15.   }else{
  16.       echo "Hay errores<br />Intenatalo de nuevo";
  17.   }
  18. }
  19.  
  20. function valido($arrayPost){
  21.    //valido el campo1
  22.    if(count($arrayPost['campo1'])>=10){
  23.        $vValorCampo1=true;
  24.    }else{
  25.        $cValorCampo1="rojo";
  26.    }
  27.    //valido el campo2
  28.    if((int)$arrayPost['campo2'] % 2 ==0){
  29.        $vValorCampo2=true;
  30.    }else{
  31.        $cValorCampo1="rojo";
  32.    }
  33.    if($vValorCampo1 && $vValorCampo2){
  34.        //Aqui ejecutariamos lo que haya que hacer con el valor:
  35.        //por ejemplo guardarlo en una bbdd.
  36.        return true;
  37.    }else{
  38.        return false;  
  39.    }
  40. }
  41.  
  42. ?>
  43. <html>
  44. <head>
  45. <title>Formulario validado en servidor</title>
  46. <meta http-equiv="Content-Type" content="text/html; charset=utf8">
  47. <style type="text/css">
  48. <!--
  49. .rojo {
  50.     color: #FF0000;
  51. }
  52. .negro {
  53.     color: #000000;
  54. }
  55.  
  56. -->
  57. </style>
  58. </head>
  59. <body>
  60. <form action="formulario.php" method="post" name="formulario" id="formulario">
  61. <input name="campo" type="text" id="campo1" value="<?php echo $valorCampo1;?>" class="<?php echo $cValorCampo1; ?>"><br />
  62. <input name="campo" type="text" id="campo2" value="<?php echo $valorCampo2;?>" class="<?php echo $cValorCampo2; ?>"><br />
  63. <input name="botEnviar" type="submit" value="Enviar">
  64. </form>
  65. </body>
  66. </html>


LOS DOS EJEMPLOS ESTAN HECHOS AL VUELO, NO LOS HE EJECUTADO, PUEDEN CONTER ERRORES DE SINTAXIS Y SEGURO QUE SE PUEDE HACER LO MISMO DE OTRA FORMA MEJOR
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 10/03/2014 a las 04:13

Etiquetas: cliente, control, devolver, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:53.