Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/07/2011, 08:53
Avatar de kahlito
kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Evitar envio de formulario con checkbox marcado con otro campo input vacio

Hola.

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> 
Y aquí intento hacer el envío al correo:

Código PHP:
Ver original
  1. <?php              
  2.             if(isset($_POST['enviar']))//Si pulso enviar
  3.             {
  4.                 // Si check 2 no está vacio
  5.                            
  6.                     // Si check 1 o check 2 no están vacios    
  7.                     if( $_POST['check1'] != "" or $_POST['check2'] != "" && $_POST['nombre'] != "" && $_POST['nombre'] != "Incompleto")
  8.                     //{echo "Está vacio";}
  9.                     // Si nombre no están vacio
  10.                     //if($_POST['nombre'] != "" && $_POST['nombre'] != "Incompleto")           
  11.                     // Se envia
  12.                     {      
  13.                     //------------------ Aquí preparo el envio
  14.                     $para  = 'emailcualquiera@...' . ',';                  
  15.                     $para  .= 'emailcualquiera@...' . ','; 
  16.                     // asunto
  17.                     $asunto = 'Formulario de contacto - Salud';
  18.                     // mensaje
  19.                     $mensaje = "Nombre: " .$_POST['nombre']. "\n";                                                         
  20.                         //$mensaje .= "Coberturas: ";
  21.                         for($i=1; $i<=$_POST['cantidad']; $i++)
  22.                         {
  23.                         $key= "check".$i;
  24.                         if(!empty($_POST[$key]))
  25.                         //echo $_POST[$key]."\n";
  26.                         {$mensaje .= "Coberturas: $_POST[$key]. \n";}
  27.                         }
  28.                             // Si check2 existe
  29.                             if (isset($_POST['check2']))                           
  30.                             {    
  31.                                 // Si existe importe diario y el campo no está vacio o indica Incompleto
  32.                                 if ($_POST['importe-diario'] != "" && $_POST['importe-diario'] != "Incompleto")                            
  33.                                 {
  34.                                 $mensaje .= "Importe diario de Asistencia complementaria familiar con Hospitalización diaria por enfermedad o accidente. : " .$_POST['importe-diario']. "\n";      
  35.                                 }
  36.                             }                              
  37.                                 //----------------------------
  38.                     $enviando_datos=mail($para, $asunto, $mensaje, $cabeceras);
  39.                     if($enviando_datos==true)
  40.                     {
  41.                     header("Location: http://www.webcualquiera.es/respuesta.php");
  42.                     }
  43.                     else
  44.                     {
  45.                     //El Mensaje no se pudo enviar
  46.                     }      
  47.                     //------------------ Aquí cierro el envio de email
  48.                 }                      
  49.                 if($_POST['check2'] != "" && $_POST['nombre'] != "" && $_POST['nombre'] != "Incompleto" && $_POST['importe-diario'] != "" && $_POST['importe-diario'] != "Incompleto")
  50.                     //{echo "Está vacio";}
  51.                     // Si nombre no están vacio
  52.                     //if($_POST['nombre'] != "" && $_POST['nombre'] != "Incompleto")           
  53.                     // Se envia
  54.                     {      
  55.                     //------------------ Aquí preparo el envio
  56.                     $para  = 'emailcualquiera@...' . ',';                  
  57.                     $para  .= 'emailcualquiera@...' . ','; 
  58.                     // asunto
  59.                     $asunto = 'Formulario de contacto - Salud';
  60.                     // mensaje
  61.                     $mensaje = "Nombre: " .$_POST['nombre']. "\n";                                                         
  62.                         //$mensaje .= "Coberturas: ";
  63.                         for($i=1; $i<=$_POST['cantidad']; $i++)
  64.                         {
  65.                         $key= "check".$i;
  66.                         if(!empty($_POST[$key]))
  67.                         //echo $_POST[$key]."\n";
  68.                         {$mensaje .= "Coberturas: $_POST[$key]. \n";}
  69.                         }
  70.                             // Si check2 existe
  71.                             if (isset($_POST['check2']))                           
  72.                             {    
  73.                                 // Si existe importe diario y el campo no está vacio o indica Incompleto
  74.                                 if ($_POST['importe-diario'] != "" && $_POST['importe-diario'] != "Incompleto")                            
  75.                                 {
  76.                                 $mensaje .= "Importe diario de Asistencia complementaria familiar con Hospitalización diaria por enfermedad o accidente. : " .$_POST['importe-diario']. "\n";      
  77.                                 }
  78.                             }                              
  79.                                 //----------------------------
  80.                     $enviando_datos=mail($para, $asunto, $mensaje, $cabeceras);
  81.                     if($enviando_datos==true)
  82.                     {
  83.                     header("Location: http://webcualquiera.es/respuesta.php");
  84.                     }
  85.                     else
  86.                     {
  87.                     //El Mensaje no se pudo enviar
  88.                     }      
  89.                     //------------------ Aquí cierro el envio de email
  90.                 }                                              
  91.             // Cierro el envio total
  92.             }          
  93. ?>

¿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
  1. if($_POST['check2'] != "" && $_POST['nombre'] != "" && $_POST['nombre'] != "Incompleto" && $_POST['importe-diario'] != "" && $_POST['importe-diario'] != "Incompleto")

Saludos.