Ver Mensaje Individual
  #16 (permalink)  
Antiguo 28/07/2011, 16:29
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
Respuesta: Evitar envio de formulario con checkbox marcado con otro campo input vacio

Hola de nuevo vgonga, la verdad es que he probado tal cual te puse poniendo inComPLeTo y me va bien, hasta ahora lo dejo como dos únicas opciones la de no estar vacío y no dejar el aviso automático "Incompleto". Esa opción de que nadie tampoco lo envée como inComPLeTo no la he tenido en cuenta por ahora, es como si alguien escribe inConVenio o algo asi y es aceptado por el cliente como envio del usuario, aun asi lo comentaré.

Gracias de nuevo



Buenas New.

En realidad este fragmento lo he sacado de otro formulario real que es mucho más grande y tiene dentro esos dos campos condicionados y que a la vez existe la posibilidad de no ser marcados... por eso todas estas pruebas.

Este mismo ejemplo lo tengo con más casillas pero solo me estoy basando como prueba en estos dos checkbox condicionados, este es el código:

Para enviar todo al correo:

Código PHP:
Ver original
  1. <?php
  2.     if(isset($_POST['enviar']))//Si pulso enviar   
  3.             {
  4.             if( isset($_POST['check2']) && isset($_POST['check3']) && !empty($_POST['importe_diario']) || $_POST['importe_diario'] !="Incompleto" && !empty($_POST['importe_diario3']) || $_POST['importe_diario3'] != "Incompleto" )
  5. $caso = 1; // Si check2 y check3 están marcados e importe diario e importe diario3 no están vacios o Incompleto.
  6.  
  7. else if( isset($_POST['check2']) && !empty($_POST['importe_diario']) || $_POST['importe_diario'] != "Incompleto")
  8. $caso = 2; // Si check2 está marcado e importe diario no está vacio o "Incompleto"
  9.  
  10. else if ( isset($_POST['check3']) && !empty($_POST['importe_diario3']) || $_POST['importe_diario3'] != "Incompleto" )
  11. $caso = 3;// Si check3 está marcado e importe diario3 no está vacio o "Incompleto" 
  12.          
  13. else if( empty($_POST['check2']) && empty($_POST['check3'] ))
  14. $caso = 4;// Si check2 y check 3 están vacios              
  15.             switch($caso){
  16.             case 1://código primer condicion
  17.             echo "Código primera condición";
  18.             break;
  19.             case 2://codigo segunda condicion
  20.             echo "Código segunda condición";
  21.             break;
  22.             case 3://código tercera condicion
  23.             echo "Código tercera condición";
  24.             break;
  25.             case 4://codigo cuarta condicion
  26.             echo "Código cuarta condición";
  27.             break;     
  28.             }      
  29.             // Cierro el envio total
  30.     }      
  31. ?>

Html del body y formulario:

Código HTML:
<h2>Su presupuesto</h2>
<?php
function incompleto($valor_input)
{
if(isset($valor_input) && $valor_input == "" || $valor_input == "Incompleto")
{echo "value=\"Incompleto\"";
echo ' class="aviso-formulario"';} 
else {echo "value=\"$valor_input\"";}
}
?>
<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=""';}        
	}	
?> 
/><br />
<input type="checkbox" value="Asistencia 3" name="check3" <?php
if (isset($_POST['check3']) && $_POST['check3'] =="Asistencia 3") { echo " checked='checked'"; }?>  />
Asistencia 3. introducir importe 3
<input type="text" id="importe-diario3" name="importe-diario3"<?php 
if($_POST['enviar'])// Preparo para hacer el envio
	{
	// marcado
	if (isset($_POST['check3'])) // Si existe check2
		{     
		// Si existe importe diario y el campo está vacio o indica Incompleto
		if (isset($_POST['importe-diario3']) && $_POST['importe-diario3'] == "" || $_POST['importe-diario3'] == "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-diario3']) && $_POST['importe-diario3'] != "" && $_POST['importe-diario3'] != "Incompleto")
		// Muestro o mantengo el valor actual de prestación diaria		
		{echo "value=".$_POST['importe-diario3']."";}// 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['check3']) == "" && $_POST['importe-diario3'] != "")
        {echo 'value=""';}        
	}	
?> 
/>





</fieldset>
<input type="hidden" name="cantidad" value="3">
<input type="submit" value="Enviar" name="enviar" />
</form> 

y luego la validación antes de enviar:

Código PHP:
Ver original
  1. <?php              
  2.             if(isset($_POST['enviar']))
  3.                 {
  4.                     if($_POST['nombre'] == "" or $_POST['nombre'] == "Incompleto")
  5.                     {echo "<p class=\"aviso-formulario\">Faltan campos por completar</p>";}                
  6.                     if($_POST['check1'] == "" && $_POST['check2'] == "")
  7.                     {echo "<p class=\"aviso-formulario\">Indique alguna cobertura</p>";}
  8.                     if ($_POST['check2'] != "")
  9.                     //if (isset($_POST['check4']) && $_POST['importe-diario'] != "" && $_POST['importe-diario'] != "Incompleto")  
  10.                     {    
  11.                     // Si existe prestacion diaria y el campo está vacio o indica Incompleto
  12.                         if ($_POST['importe-diario'] == "" || $_POST['importe-diario'] == "Incompleto")
  13.                     //if (isset($_POST['importe-diario']) && $_POST['importe-diario'] != "" || $_POST['importe-diario'] != "Incompleto")
  14.                         {
  15.                             {echo "<p class=\"aviso-formulario\">Indique el importe diario</p>";}
  16.                         }  
  17.                 }
  18.                 if ($_POST['check3'] != "")
  19.                     //if (isset($_POST['check4']) && $_POST['importe-diario'] != "" && $_POST['importe-diario'] != "Incompleto")  
  20.                     {    
  21.                     // Si existe prestacion diaria y el campo está vacio o indica Incompleto
  22.                         if ($_POST['importe-diario3'] == "" || $_POST['importe-diario3'] == "Incompleto")
  23.                     //if (isset($_POST['importe-diario']) && $_POST['importe-diario'] != "" || $_POST['importe-diario'] != "Incompleto")
  24.                         {
  25.                             {echo "<p class=\"aviso-formulario\">Indique el importe diario 3</p>";}
  26.                         }  
  27.                 }
  28.             }                  
  29. ?>

Saludos.

Última edición por kahlito; 05/08/2011 a las 19:23