Foros del Web » Creando para Internet » HTML »

formulario

Estas en el tema de formulario en el foro de HTML en Foros del Web. Hola a todos!! Estoy intentando terminar un formulario, me falta una cosilla y es que cuando envio el formulario si falta algun campo obligatorio pues ...
  #1 (permalink)  
Antiguo 28/12/2012, 04:44
Avatar de pampa_  
Fecha de Ingreso: mayo-2006
Mensajes: 334
Antigüedad: 18 años, 6 meses
Puntos: 1
formulario

Hola a todos!!

Estoy intentando terminar un formulario, me falta una cosilla y es que cuando envio el formulario si falta algun campo obligatorio pues que salga un mensaje advirtiendolo y no envie el formulario me deje el formulario relleno.

El mensaje lo saco con javascript pero siempre me lleva a la pagina de tratamiento del formulario.

me explico un poco mejor.

Mi formulario esta en una pagina llamada subir-anuncio.php en ella mediante METHOD=POST envio los datos del formulario a validar-anuncio.php

Dentro de validar-anuncio.php lo que hago es comprobar si los campos estan correctos y hago el tratamiento.

Como puedo hacer para que si algo me falta por rellenar no me borre los datos ya introducidos??

He estado leyendo por google, y por este foro y me terminan las soluciones.

Gracias
  #2 (permalink)  
Antiguo 28/12/2012, 05:43
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 7 meses
Puntos: 839
Respuesta: formulario

Si ya tienes la validación con Javascript, solo tienes que cancelar la acción por defecto del evento:
Código Javascript:
Ver original
  1. if (event.preventDefault) {
  2.     event.preventDefault();
  3. } else {
  4.     event.returnValue = false;
  5. }
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 28/12/2012, 06:59
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: formulario

Si estás validando con javascript lo lógico sería que lances la funcion que valida con el evento onsubmit

Código HTML:
Ver original
  1. <form action="x.php" onsubmit="return validar();" method="post">

y que dicha función deuelva false si no se cumple la validación. con lo que el form no se procesará

Pero por lo visto también estás validando en el php, que por cierto es lo más indicado (una validación solo con javascript puede ayudar a la usabilidad por parte del usuario, pero es completamente precaria, por lo tanto lo ideal es que envies el formulario con ajax y muestres los mensajes pertinentes en caso de error

SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #4 (permalink)  
Antiguo 02/01/2013, 04:48
Avatar de pampa_  
Fecha de Ingreso: mayo-2006
Mensajes: 334
Antigüedad: 18 años, 6 meses
Puntos: 1
Respuesta: formulario

Yo tenia entendido que en una pagina haces el formulario y mandas los datos a otra pagina donde haces el tratamiento.

Una parte del codigo de la pagina que recoge las variables.... comprueba todo esto y al final que no lo he puesto hay un else y hace otras cosas...

Código Javascript:
Ver original
  1. if (isset($_POST["nombre"])) {
  2.          //print_r($_POST);
  3.         $username = $_POST["nombre"];
  4.         $telefono = $_POST["telefono"];
  5.         $password = $_POST["password"];
  6.         $password2 = $_POST["password2"];
  7.         $email = $_POST["email"];
  8.         $email2 = $_POST["email2"];
  9.         if($_POST["ocultar"]=="on"){
  10.             $what=1;
  11.           }else{
  12.             $what=0;           
  13.         }
  14.      }  
  15.         // Hay campos en blanco
  16.         if($username==NULL | $password==NULL | $password2==NULL | $email==NULL){
  17.             //echo "un campo est&aacute; vacio.";
  18.             ?>
  19.                 <script language="javascript" type="text/javascript">          
  20.                         alert("Un campo obligatorio esta vacio.")
  21.                         window.location="./subir-anuncio.php";
  22.                     </script>
  23.                     <?php
  24.         }elseif($password!=$password2){// ¿Coinciden las contrase&ntilde;as?
  25.                    
  26.                    
  27.                     ?>
  28.                     <script language="javascript" type="text/javascript">          
  29.                             alert("Las contraseñas no coinciden.\nRevise las contraseñas.")
  30.                             window.location="./subir-anuncio.php";
  31.                         </script>
  32.                         <?php
  33.                     //echo "Las contrase&ntilde;as no coinciden";
  34.                    
  35.         }elseif($email!=$email2) {
  36.                     //echo "Los email no coinciden";
  37.                     ?>
  38.                     <script language="javascript" type="text/javascript">
  39.                             alert("Los email no coinciden.\nRevise los emails.")
  40.                             window.location="./subir-anuncio.php";
  41.                         </script>
  42.                         <?php
  43.        }

Este seria el codigo donde trato las variables recibidas
  #5 (permalink)  
Antiguo 03/01/2013, 07:16
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: formulario

Sobre tener el form y el php que lo procesa en una sóla página, también es posible.
El error en lo que estás haciendo es otro (bueno, no un error necesariamente porque podría funcionarte), es más bien una falla conceptual.
En primer lugar hay que entender que cualquier validación en "serio" debe llevarse a cabo en el servidor por dos motivos fundamentales,
Javascript puede ser desactivado
Javascript se ejecuta del lado del cliente y se implementa a través del DOM y los navegadores actuales tienen herramientas que permiten manipularlo al antojo del usuario

Es cierto que el usuario normal ó promedio, no va a estar desactivando javascript ó manipulando el html. Y si uno valida por seguiridad, no hay que pensar en los miles de personas que navegan tu sitio en forma "normal", sin en ese único que quiera violarla.

Pero entonces, para que se valida con javascript, bueno, basicamente para mejorar la experiencia y velocidad de quien navega, porque podrías, si los datos ingresados no se ajustan a ciertas características, evitar que tener que ejecutar el php.

Teniendo en cuenta lo previo, el fallo en tu sistema, es que validás por javascript, pero necesitando ejecutar el php

Supongo que con un ejemplo se apreciará mejor, es un ejemplo muy básico, con una validación muy precaria, pero que te permite verificar que si no se pasa la validación por javascript, el php no se ejecuta.
Código PHP:
Ver original
  1. <!DOCTYPE html>
  2. <html lang="es-ar">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Form básico - demo</title>
  6.  
  7. <script type="text/javascript">
  8. //<![CDATA[
  9. function validar(){
  10. var elNombre = document.getElementById('nombre2');
  11. if(elNombre.value == ''){
  12. document.getElementById('error_nombre').innerHTML = "Falta nombre";
  13. return false;
  14. }
  15. }
  16. //]]>
  17. </script>
  18. </head>
  19. <body>
  20. <?php
  21. if(!isset($_POST['procesando'])){
  22.     // mostramos el form
  23. ?>
  24. <h1>Formulario básico sin validación javascript</h1>
  25. <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
  26. <p>
  27. <label for="nombre">Nombre</label>
  28. <input type="text" value="" id="nombre" name="nombre" autocomplete="off" /><br /><br />
  29. <input type="submit" value="procesar" name="procesando" />
  30. </p>
  31. </form>
  32.  
  33. <h1>Formulario básico + validación javascript</h1>
  34. <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post" onsubmit="return validar();">
  35. <p>
  36. <label for="nombre">Nombre</label>
  37. <input type="text" value="" id="nombre2" name="nombre" autocomplete="off" /> <span id="error_nombre"><!-- mensaje de error --></span><br /><br />
  38. <input type="submit" value="procesar" name="procesando" />
  39. </p>
  40. </form>
  41.  
  42. <?php
  43. }else{
  44. // mostramos el procesamiento
  45.  
  46. $usuario = $_POST['nombre'];
  47.  
  48. if(isset($usuario)){
  49. echo "<p>Se envió \$_POST['nombre']</p>\n";
  50. }
  51.  
  52. if($usuario == null){
  53. echo "<p>el usuario es NULL</p>\n";
  54. // realizar acción
  55. }
  56.  
  57. if(empty($usuario)){
  58. echo "<p>el usuario es empty</p>\n";
  59. // realizar acción
  60. }
  61.  
  62. if($usuario == ''){
  63. echo "<p>el usuario es vacio</p>\n";
  64. $usuario = "vacio";
  65. // realizar acción
  66. }
  67.  
  68. echo "El usuario es: <b>" . $usuario . " </b>\n";
  69.  
  70. echo "<p><a href='form-basico-javascript.php'>Enviar otra vez</a></p>";
  71. }
  72. ?>
  73.  
  74. </body>
  75. </html>

Como se vé, también estoy integrando el html del form y el php que lo recibe, en una misma página.

Hay una alternativa más, que es el uso de Ajax, pero en definitiva Ajax es javascript.
Así que por el momento sería bueno que te limites a analizar este caso

Este tema es tratado frecuentemente en FDW, pero nunca está de más repasar el concepto.

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #6 (permalink)  
Antiguo 04/01/2013, 09:32
Avatar de pampa_  
Fecha de Ingreso: mayo-2006
Mensajes: 334
Antigüedad: 18 años, 6 meses
Puntos: 1
Respuesta: formulario

Creo que lo he entendido mas o menos.

En el primer caso lo que haces es validarlo en el PHP.
Y en el segundo primero lo comprueba con JavaScript y despues lo trata con el PHP.

Etiquetas: formulario, php
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 22:16.