Foros del Web » Programando para Internet » PHP »

sentencias if se ejecuntan al reves

Estas en el tema de sentencias if se ejecuntan al reves en el foro de PHP en Foros del Web. Miren resulta que tengo varios ifs para condicionar un sistema de suarios pero resulta que los toma al reves es decir ejecuta 1ro los que ...
  #1 (permalink)  
Antiguo 21/09/2007, 10:30
Avatar de hanscruz  
Fecha de Ingreso: junio-2005
Mensajes: 278
Antigüedad: 19 años, 5 meses
Puntos: 0
sentencias if se ejecuntan al reves

Miren resulta que tengo varios ifs para condicionar un sistema de suarios pero resulta que los toma al reves es decir ejecuta 1ro los que estan al ultimo, luego el penultimo , etc..

A que se debe esto una ayuda please

aqui les pongo el codigo y la explicacion de lo que esta pasando:
Código PHP:
<?php

/*recojemos los datos del usuario*/
$Usuario=$HTTP_POST_VARS["Usuario"];
$Clave=$HTTP_POST_VARS["Clave"];

/*verificamos si las datos no estan vacios*/
if($Usuario=="" AND $Clave==""){header("location: index.php?UsuarioError=si&ClaveError=si");}
if(
$Usuario==""){header("location: index.php?UsuarioError=si");}
if(
$Clave==""){header("location: index.php?ClaveError=si");}

/*si todo esta bien entonces filtramos los datos para evitar el SQL Injection*/
$Usuario=str_replace("'","",$Usuario);
$Usuario=str_replace('"',"",$Usuario);
$Usuario=str_replace("--","",$Usuario);
$Clave=str_replace("'","",$Clave);
$Clave=str_replace('"',"",$Clave);
$Clave=str_replace("--","",$Clave);

/*nos conectamos con la base de datos*/
include ("abrir_bd.php");

/*creamos nuestra consulta*/
$SentenciaSQL="SELECT * FROM usuarios WHERE Usuario='$Usuario' and Clave='$Clave' and Bloqueado='no'";

/*ejecutamos nuestra consulta y obtenemos el numero de filas del resultado*/
$ConsultaSQL=mysql_query($SentenciaSQL);

/*verificamosr si los datos de identificacion son corretos*/
$Resultado=mysql_num_rows($ConsultaSQL);

if(
$Resultado==0)
{
header("location: index.php?NoUsuario=si");//si no es correcto redirecionamos al formulario de identificacion
}
else
{
/*si los datos de identificacion son correctos realizamos una consulta y establecemos las variables de session*/
$Datos=mysql_fetch_array($ConsultaSQL);
$HTTP_SESSION_VARS["Identificado"]="si";
$HTTP_SESSION_VARS["UsuarioSession"]=$Datos["Usuario"];
$HTTP_SESSION_VARS["NombresSession"]=$Datos["Nombres"];
$HTTP_SESSION_VARS["ApellidosSession"]=$Datos["Apellidos"];
$HTTP_SESSION_VARS["IdUsuarioSession"]=$Datos["Id"];

/*insertamos la fecha de ingreso*/
$FechaIngreso=date("Y-d-m H:i:s");
$InserccionSQL="INSERT Usuarios (FechaUltimoIngreso) Values ('$FechaIngreso')";
mysql_query($InserccionSQL,$Conexion);

/*Redireccionamos al panel de control*/
header("location: panel.php");
}

/*liberamos y cerramos la base de datos*/

?>
Bien si los datos de usuario y contraseña estan vacios deberia mandar al index.php con las dos variables pero solo manda la variable claveerror, ahora por que digo que se esta ejecutando al reves? es porque si cambio ese lugar del codigo asi:
Código PHP:
/*verificamos si las datos no estan vacios*/
if($Clave==""){header("location: index.php?ClaveError=si");}
if(
$Usuario==""){header("location: index.php?UsuarioError=si");}
if(
$Usuario=="" AND $Clave==""){header("location: index.php?UsuarioError=si&ClaveError=si");} 
recien me manda los dos datos usuarioerror y claveerror a que se debe esto a alguien le paso?

saludos
__________________
:policia:

Última edición por hanscruz; 21/09/2007 a las 10:34 Razón: ortografia
  #2 (permalink)  
Antiguo 21/09/2007, 11:00
 
Fecha de Ingreso: junio-2006
Mensajes: 133
Antigüedad: 18 años, 5 meses
Puntos: 5
Re: sentencias if se ejecuntan al reves

Hola

El php no puede ejecutar las instrucciones que estan de ultimo al comienzo, a no ser que uses funciones, pero en una programacion lineal no se puede. Verifica las condicionales del if, eso hace que se te presente el error. Acuerdate, el equipo hace lo que uno le ordene, si le ordenas una cosa, la hace asi y no de ninguna otra forma.

Comentas como te fue.

Suerte!!
  #3 (permalink)  
Antiguo 21/09/2007, 11:45
Avatar de gerson  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 481
Antigüedad: 19 años, 9 meses
Puntos: 4
Re: sentencias if se ejecuntan al reves

Bueno debo decir que tuve un problema parecido; intentalo de esta forma:

Código PHP:
/*verificamos si las datos no estan vacios*/ 
if($Usuario=="" AND $Clave==""){header("location: index.php?UsuarioError=si&ClaveError=si");exit();} 
if(
$Usuario==""){header("location: index.php?UsuarioError=si");exit();} 
if(
$Clave==""){header("location: index.php?ClaveError=si");exit();} 
Saludos
__________________

  #4 (permalink)  
Antiguo 21/09/2007, 14:16
Avatar de hanscruz  
Fecha de Ingreso: junio-2005
Mensajes: 278
Antigüedad: 19 años, 5 meses
Puntos: 0
Re: sentencias if se ejecuntan al reves

Amigos el problema se pone peor ahora ni siquiera verifica si las variables estan vacias o no si no que directamente se va a buscar a la base de datos y ejecuta el if que que tiene este comentario:
Código PHP:
if($Resultado==0

header("location: index.php?NoUsuario=si");//si no es correcto redirecionamos al formulario de identificacion 

else 

/*si los datos de identificacion son correctos realizamos una consulta y establecemos las variables de session*/ 
$Datos=mysql_fetch_array($ConsultaSQL); 
$HTTP_SESSION_VARS["Identificado"]="si"
$HTTP_SESSION_VARS["UsuarioSession"]=$Datos["Usuario"]; 
$HTTP_SESSION_VARS["NombresSession"]=$Datos["Nombres"]; 
$HTTP_SESSION_VARS["ApellidosSession"]=$Datos["Apellidos"]; 
$HTTP_SESSION_VARS["IdUsuarioSession"]=$Datos["Id"]; 

/*insertamos la fecha de ingreso*/ 
$FechaIngreso=date("Y-d-m H:i:s"); 
$InserccionSQL="INSERT Usuarios (FechaUltimoIngreso) Values ('$FechaIngreso')"
mysql_query($InserccionSQL,$Conexion); 

/*Redireccionamos al panel de control*/ 
header("location: panel.php"); 

mando el formulario con los datos vacios y busca en la base de datos y te manda al index con la variable nousuario, claro que esta correcto por que las variables estan vacias por lo tanto esta bien pero esta ejecutando el ultimo if, ya ni siquiera ejecuta los primeros ifs.

que sera?
alguien sabe?
siguo investigando....

saludos.
__________________
:policia:
  #5 (permalink)  
Antiguo 21/09/2007, 20:42
Avatar de marcosr  
Fecha de Ingreso: agosto-2005
Ubicación: Montevideo, Uruguay
Mensajes: 451
Antigüedad: 19 años, 3 meses
Puntos: 5
Re: sentencias if se ejecuntan al reves

Debes agregar detrás de cada "header" lo siguiente:

Código PHP:
header("Location: google.com"); // esto ya lo tienes, es el header
exit; // Esto es lo que debes agregar 
El exit lo que hace es indicarle a PHP que tu quieres que el programa deje de trabajar allí y NO continúe.

El tema de que al no poner el exit da la sensación de que no hace nada el header o que toma al último en vez de al primero tiene una simple explicación. El header lo que hace en el código es establecer una cabecera a la página, esta cabecera se ejecuta al finalizar el programa por lo que si tienes 3 cabeceras y nunca cerraste el programa (exit) siempre va a ejecutar la última o a veces, motivo por el cual descubrí esto, te da un error que dice algo como "Header already set".

Saludos y espero haber podido ayudarte !
__________________
Yo hago preguntas inteligentes para obtener respuestas rapidas, y vos?
(únete a la campaña !)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:06.