Ver Mensaje Individual
  #22 (permalink)  
Antiguo 04/08/2011, 09:11
iovan
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Evitar envio de formulario con checkbox marcado con otro campo input vacio

Hola amigo, verifica si esto ya te funciona un saludo

Código PHP:
Ver original
  1. <?php
  2. /* Creamos un metodo que se realiza en caso de que se cumpla las condiciones:
  3.  * Puede ser el envio del formulario, por ejemplo.
  4.  */
  5. $cond1 = FALSE;
  6. $cond2 = FALSE;
  7. $cond3 = FALSE;
  8. $cond4 = FALSE;
  9. $contCondiciones=0;
  10. $contCheckBox=0;
  11.  
  12. function enviarForm() {
  13.     echo "Se ha mandado el formulario";
  14. }
  15.  
  16. //Primero verifico si se ha precionado el boton enviar
  17. if (isset($_POST['submit'])) {
  18.  
  19.     if (!empty($_POST['importe-rotura']) && $_POST['importe-rotura'] != "Incompleto") {
  20.         $cond1 = TRUE;
  21.     }
  22.     if (!empty($_POST['importe-daños']) && $_POST['importe-daños'] != "Incompleto") {
  23.         $cond2 = TRUE;
  24.     }
  25.     if (!empty($_POST['importe-derrumbe']) && $_POST['importe-derrumbe'] != "Incompleto") {
  26.         $cond3 = TRUE;
  27.     }
  28.     if (!empty($_POST['importe-todo-riesgo']) && $_POST['importe-todo-riesgo'] != "Incompleto") {
  29.         $cond4 = TRUE;
  30.     }
  31.  
  32.     //Verifico la primer condicion (check1 - check4)
  33.     for ($i = 1; $i <= 4; $i++) {
  34.         if (isset($_POST['check' . $i]))
  35.             $contCheckBox++;
  36.     }
  37.  
  38.     if ($cond1) {
  39.         $contCondiciones++;
  40.     }
  41.     if ($cond2) {
  42.         $contCondiciones++;
  43.     }
  44.     if ($cond3) {
  45.         $contCondiciones++;
  46.     }
  47.     if ($cond4) {
  48.         $contCondiciones++;
  49.     }
  50.  
  51.     //Validamos todo
  52.     if ($contCheckBox >= 1 && $contCondiciones == 4) {
  53.         //Si se cumple la condicion envio el form
  54.         enviarForm();
  55.     } else {
  56.         /* Si alguno de los checkbox no esta marcado, paso a validar cual es y mostrar
  57.          * cierto mensaje de error.
  58.          * hay muchas formas que se me ocurre, por ejemplo:
  59.          */
  60.         for ($i = 1; $i <= 4; $i++) {
  61.             //Valido los checkbox
  62.             if (!isset($_POST['check' . $i]))
  63.                 echo "<p> El checkBox " . $i . " no se selecciono </p>";
  64.         }
  65.  
  66.         if (!$cond1) {
  67.             echo "<p> Error en la condicion1</p>";
  68.         }
  69.         if (!$cond2) {
  70.             echo "<p> Error en la condicion2</p>";
  71.         }
  72.         if (!$cond3) {
  73.             echo "<p> Error en la condicion3</p>";
  74.         }
  75.         if (!$cond4) {
  76.            echo "<p> Error en la condicion4</p>";
  77.         }
  78.     }
  79. }
  80. ?>
  81.  
  82.  
  83.  
  84. <!DOCTYPE html>
  85. <html>
  86.     <head>
  87.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  88.         <title></title>
  89.     </head>
  90.     <body>
  91. <?php
  92. // put your code here
  93. ?>
  94.         <form action="" method="post">
  95.             <p><input type="checkbox" name="check1" value="" /> check1
  96.                 <input type="text" name="importe-rotura" value="Incompleto"/></p>
  97.  
  98.             <p><input type="checkbox" name="check2" value="" /> check2
  99.                 <input type="text" name="importe-daños" value="Incompleto"/></p>
  100.  
  101.             <p><input type="checkbox" name="check3" value="" /> check3
  102.                 <input type="text" name="importe-derrumbe" value="Incompleto"/></p>
  103.  
  104.             <p><input type="checkbox" name="check4" value="" /> check4
  105.                 <input type="text" name="importe-todo-riesgo" value="Incompleto"/></p>
  106.  
  107.             <input type="submit" name="submit">
  108.         </form>    
  109.     </body>
  110. </html>

P.d: Ando un poco a prisas no me da tiempo de explicarte el codigo en este momento, al ratito nos vemos. Saludos.
___________________________-

Bueno entonces aqui estoy xD.

De la linea 19 a la 30, se válida las condiciones de que los textfield no esten vacios y el valor interno sea diferente de "Incompleto"

>>> Yo te recomiendo hacer un !strcasecmp($_POST['campo'], "Incompleto"); para no hacer distincion entre mayusculas y minusculas

De las lineas 32 a la 36 vemos un ciclo for, con esto nos ahorramos un pedazo de código.

En el caso de la 38 a la 49, no se puede hacer un ciclo para asignar el valor del indice concatenado al nombre de variable ($cond.$i), asi que las condicionales deben ser de ésta forma.

En la linea 52 se cumple la condicion

Si check 1, check 2, check3 y check4 estan marcados y a la vez se cumple si check1 o check2 o check3 o check4, esto porque si alguno de los checks estan marcados el contador tendrá un valor de 1. Y si todos los contadores es igual a 4, tambien se cumple está condición.

bueno es todo un saludo.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Última edición por iovan; 04/08/2011 a las 11:02