Si tengo este formulario donde tengo un checkbox (en este caso checkbox2 por ejemplo) y a su vez tiene un campo de texto que hay que completar si el checbox se marca, ¿como puedo evitar que no se haga el envio?
El formulario ejemplo es este:
Código HTML:
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post"> <fieldset> <legend>Datos personales</legend> <!-- TEXT --> <label for="nombre">Nombre:</label> <input type="text" id="nombre" name="nombre" <?php incompleto($_POST['nombre']);?> /><br /> <label for="coberturas">Coberturas (Seleccione al menos una):</label><br /> <br /> <input type="checkbox" value="Asistencia complementaria familiar con Asistencia dental" name="check1" <?php if (isset($_POST['check1']) && $_POST['check1'] =="Asistencia complementaria familiar con Asistencia dental") { echo " checked='checked'"; }?> /> Asistencia complementaria familiar con Asistencia dental.<br /> <input type="checkbox" value="Asistencia complementaria familiar con Hospitalización diaria por enfermedad o accidente" name="check2" <?php if (isset($_POST['check2']) && $_POST['check2'] =="Asistencia complementaria familiar con Hospitalización diaria por enfermedad o accidente") { echo " checked='checked'"; }?> /> Asistencia complementaria familiar con Hospitalización diaria por enfermedad o accidente. Introducir importe diario : 6- 60 eur <input type="text" id="importe-diario" name="importe-diario"<?php if($_POST['enviar'])// Preparo para hacer el envio { // marcado if (isset($_POST['check2'])) // Si existe check2 { // Si existe importe diario y el campo está vacio o indica Incompleto if (isset($_POST['importe-diario']) && $_POST['importe-diario'] == "" || $_POST['importe-diario'] == "Incompleto" ) // Aviso de Incompleto {echo "value=\"Incompleto\""; echo ' class="aviso-formulario"'; } // Si existe importe diario y el campo no está vacio y es distinto a Incompleto elseif (isset($_POST['importe-diario']) && $_POST['importe-diario'] != "" && $_POST['importe-diario'] != "Incompleto") // Muestro o mantengo el valor actual de prestación diaria {echo "value=".$_POST['importe-diario']."";}// Corrección de comillas dobles y variable post para imprimir directo } // Si no está marcado el check box dejar el campo importe diario como vacio elseif (isset($_POST['check2']) == "" && $_POST['importe-diario'] != "") {echo 'value=""';} } ?> /> </fieldset> <input type="hidden" name="cantidad" value="2"> <input type="submit" value="Enviar" name="enviar" /> </form>
Código PHP:
Ver original
<?php { // Si check 2 no está vacio // Si check 1 o check 2 no están vacios if( $_POST['check1'] != "" or $_POST['check2'] != "" && $_POST['nombre'] != "" && $_POST['nombre'] != "Incompleto") //{echo "Está vacio";} // Si nombre no están vacio //if($_POST['nombre'] != "" && $_POST['nombre'] != "Incompleto") // Se envia { //------------------ Aquí preparo el envio $para = 'emailcualquiera@...' . ','; $para .= 'emailcualquiera@...' . ','; // asunto $asunto = 'Formulario de contacto - Salud'; // mensaje $mensaje = "Nombre: " .$_POST['nombre']. "\n"; //$mensaje .= "Coberturas: "; for($i=1; $i<=$_POST['cantidad']; $i++) { $key= "check".$i; //echo $_POST[$key]."\n"; {$mensaje .= "Coberturas: $_POST[$key]. \n";} } // Si check2 existe { // Si existe importe diario y el campo no está vacio o indica Incompleto if ($_POST['importe-diario'] != "" && $_POST['importe-diario'] != "Incompleto") { $mensaje .= "Importe diario de Asistencia complementaria familiar con Hospitalización diaria por enfermedad o accidente. : " .$_POST['importe-diario']. "\n"; } } //---------------------------- if($enviando_datos==true) { } else { //El Mensaje no se pudo enviar } //------------------ Aquí cierro el envio de email } if($_POST['check2'] != "" && $_POST['nombre'] != "" && $_POST['nombre'] != "Incompleto" && $_POST['importe-diario'] != "" && $_POST['importe-diario'] != "Incompleto") //{echo "Está vacio";} // Si nombre no están vacio //if($_POST['nombre'] != "" && $_POST['nombre'] != "Incompleto") // Se envia { //------------------ Aquí preparo el envio $para = 'emailcualquiera@...' . ','; $para .= 'emailcualquiera@...' . ','; // asunto $asunto = 'Formulario de contacto - Salud'; // mensaje $mensaje = "Nombre: " .$_POST['nombre']. "\n"; //$mensaje .= "Coberturas: "; for($i=1; $i<=$_POST['cantidad']; $i++) { $key= "check".$i; //echo $_POST[$key]."\n"; {$mensaje .= "Coberturas: $_POST[$key]. \n";} } // Si check2 existe { // Si existe importe diario y el campo no está vacio o indica Incompleto if ($_POST['importe-diario'] != "" && $_POST['importe-diario'] != "Incompleto") { $mensaje .= "Importe diario de Asistencia complementaria familiar con Hospitalización diaria por enfermedad o accidente. : " .$_POST['importe-diario']. "\n"; } } //---------------------------- if($enviando_datos==true) { } else { //El Mensaje no se pudo enviar } //------------------ Aquí cierro el envio de email } // Cierro el envio total } ?>
¿Como puedo evitar que se envíe teniendo marcado checkbox2 y vacio el campo $_POST['importe-diario'] o como "Incompleto"? Esta es la condición que le pongo pero no me frena el envio.
Código PHP:
Ver original
if($_POST['check2'] != "" && $_POST['nombre'] != "" && $_POST['nombre'] != "Incompleto" && $_POST['importe-diario'] != "" && $_POST['importe-diario'] != "Incompleto")
Saludos.