Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/01/2016, 17:26
shawn1986
 
Fecha de Ingreso: julio-2009
Mensajes: 63
Antigüedad: 14 años, 9 meses
Puntos: 0
Peoblema con if anidado (no se cumplen condiciones)

Saludos a todos los usarios, colaboradores y administradores de este gran foro.

Espero me puedan echar una mano con el siguiente problema.

Cuento con un formulario para una tienda mismo que tiene diferentes campos segun la categoria, dependiendo la categoria, jquery me arma un formulario con determinados campos u otro.

Ahora bien, como la validación con javascript es menos segura que la validacion del lado del servidor, he decidido realizarla unicamente del lado del servidor, intentando que esta sea lo menos perceptible para el usuario (es decir, todo sobre la misma pagina, dando la apariencia que no se sale de la misma).

He desarrollado un codigo php que si bien no esta terminado, pues por ahora solo comprueba que los campos no se encontraran vacios, no funciona del todo bien. Resulta que en primera instancia, si las condiciones no se cumplen muestra el mensaje "los datos no pasan", este mensaje solo lo he puesto de modo que pueda verificar el flujo de datos. En caso de que las condiones si se cumplan se muestra el mensaje "rutina para insertar en db", en este punto es donde crearia el codigo necesario para introducir los datos en mi tabla mysql.

El codigo que utilizo es el siguiente:


Código PHP:
<?

$categoria
=$_POST["categoria"]; //definimos la caregoria.
    //Si la categoria no se ha seleccionado entonces imprimimos el formulario.
    
if(isset($_POST["Publicar"]) && ($categoria=="cat")or($categoria=="")){
        echo 
"$principal";break;
    }
    else{
        
//comprobamos categoria Accesorios y refacciones
        
if(($categoria=="Accesorios y refacciones")){
        }
        
//Comprobamos que los campos no se encuentren vacios
        
if(($_POST["ar1"]!="")&&($_POST["ar2"]!="")&&($_POST["ar3"]!="0")&&($_POST["ar4"]!="")&&($_POST["ar5"]!="")&&($_POST["ar6"]!="")&&($_POST["ar7"]!="")&&($_POST["ar8"]!="0")&&($_POST["ar9"]!="0")&&($_POST["ar10"]!="")&&($_POST["ar11"]!="")&&($_POST["ar12"]!="")){
        echo
"rutina para insertar en db";
        } 
    else{
        
//comprobamos categoria Computadoras y accesorios    
        
if(($categoria=="Computadoras y accesorios")){
        }
        
//Comprobamos que los campos no se encuentren vacios
        
if(($_POST["ca1"]!="")&&($_POST["ca2"]!="")&&($_POST["ca3"]!="0")&&($_POST["ca4"]!="0")&&($_POST["ca5"]!="")&&($_POST["ca6"]!="")&&($_POST["ca7"]!="")&&($_POST["ca8"]!="0")&&($_POST["ca9"]!="0")&&($_POST["ca10"]!="")&&($_POST["ca11"]!="")&&($_POST["ca12"]!="")){
        echo
"rutina para insertar en db";
        }
    else{
        
//comprobamos categoria Celulares y teléfonos
        
if(($categoria=="Celulares y teléfonos")){
        }
        if((
$_POST["ct1"]!="")&&($_POST["ct2"]!="")&&($_POST["ct3"]!="0")&&($_POST["ct4"]!="")&&($_POST["ct5"]!="")&&($_POST["ct6"]!="0")&&($_POST["ct7"]!="0")&&($_POST["ct8"]!="")&&($_POST["ct9"]!="0")&&($_POST["ct10"]!="")&&($_POST["ct11"]!="")&&($_POST["ct12"]!="")&&($_POST["ct13"]!="0")&&($_POST["ct14"]!="0")&&($_POST["ct15"]!="")&&($_POST["ct16"]!="")&&($_POST["ct17"]!="")){
        echo
"rutina para insertar en db";
        }
    else{
        
//comprobamos categoria Consolas y videojuegos
        
if(($categoria=="Consolas y videojuegos")){    
        }
        if((
$_POST["cv1"]!="")&&($_POST["cv2"]!="")&&($_POST["cv3"]!="0")&&($_POST["cv4"]!="")&&($_POST["cv5"]!="0")&&($_POST["cv6"]!="")&&($_POST["cv7"]!="")&&($_POST["cv8"]!="")&&($_POST["cv9"]!="")&&($_POST["cv10"]!="")&&($_POST["cv11"]!="0")&&($_POST["cv12"]!="0")&&($_POST["cv13"]!="")&&($_POST["cv14"]!="")&&($_POST["cv15"]!="")){
        echo
"rutina para insertar en db";
        }
    else{
        
//comprobamos categoria Tv, video, audio y fotografía
        
if(($categoria=="Tv, video, audio y fotografía")){
        }
        if((
$_POST["tvaf1"]!="")&&($_POST["tvaf2"]!="")&&($_POST["tvaf3"]!="0")&&($_POST["tvaf4"]!="")&&($_POST["tvaf5"]!="0")&&($_POST["tvaf6"]!="0")&&($_POST["tvaf7"]!="")&&($_POST["tvaf8"]!="0")&&($_POST["tvaf9"]!="")&&($_POST["tvaf10"]!="")&&($_POST["tvaf11"]!="")&&($_POST["tvaf12"]!="0")&&($_POST["tvaf13"]!="0")&&($_POST["tvaf14"]!="")&&($_POST["tvaf15"]!="")&&($_POST["tvaf16"]!="")){
        echo
"rutina para insertar en db";
        }
    else{    
        
//comprobamos categoria Muebles
        
if(($categoria=="Muebles")){
        }
        if((
$_POST["m1"]!="")&&($_POST["m2"]!="")&&($_POST["m3"]!="")&&($_POST["m4"]!="")&&($_POST["m5"]!="0")&&($_POST["m6"]!="0")&&($_POST["m7"]!="")&&($_POST["m8"]!="")&&($_POST["m9"]!="")&&($_POST["m10"]!="0")&&($_POST["m11"]!="0")&&($_POST["m12"]!="")&&($_POST["m13"]!="")&&($_POST["m14"]!="")){
        echo
"rutina para insertar en db";
        }
    else{
        
//comprobamos categoria ropa y calzado
        
if(($ctegoria=="Ropa y calzado")){
        }
        if((
$_POST["rc1"]!="")&&($_POST["rc2"]!="")&&($_POST["rc3"]!="")&&($_POST["rc4"]!="")&&($_POST["rc5"]!="")&&($_POST["rc6"]!="0")&&($_POST["rc7"]!="0")&&($_POST["rc8"]!="")&&($_POST["rc9"]!="")&&($_POST["rc10"]!="")){
        echo
"rutina para insertar en db";
        }
    else{
        echo
"los datos no pasan";
            }
                }
                    }
                        }
                            }
                                }
                                    }
                                        }
                                        
                                        echo 
$categoria;
<?
En principio si me funcionan las condiciones, lo extraño es que una vez que me muestra el mensaje "rutina para insertar en db" si le doy atras en el navegador y cambio la categoria y le doy enviar (aun dejando campos vacios), me sigue mostrando el mensaje "rutina para insertar en db" cuando en realidad me deberia de mostrar el mensaje "los datos no pasan" pues se cambian los campos de formulario y varios aparecen vacios.

He probado haciendo echo de la categoria para comprobar si funciona correctamente y si, en efecto funciona, cambia si se cambia en el formulario, pero al cambiarla ya no realiza la validacion y eso seria un inconveniente pues haciendo eso, cualquiera podria darle atras en navegador y una vez realizada la validacion, rellenar los campos con los datos que se quiera y volver a enviar pues ya no realizaria la validacion en el segundo envio (es decir, si pasa la validacion en el primer submit y se da atras en el navegador y se cambia los datos o se borran, se puede hacer un segundo submit y sigue pasando la validacion, lo cual no seria correcto).

Espero cualquier comentario, observacion o sugerencia y de antemano agradezco la atencion prestada.

Saludos!!!