Foros del Web » Programando para Internet » PHP »

un fallillo con && y ||

Estas en el tema de un fallillo con && y || en el foro de PHP en Foros del Web. Ola! tengo un script asi: Código PHP: if (((!isset( $_POST [ "usuario" ])) xor (!isset( $_POST [ "contra" ])))||((!isset( $_POST [ "usuario" ]))&&(!isset( $_POST [ "contra" ])))) { header ...
  #1 (permalink)  
Antiguo 20/07/2003, 13:31
Avatar de Ánima  
Fecha de Ingreso: julio-2002
Ubicación: Catalunya, Barcelona.
Mensajes: 538
Antigüedad: 21 años, 9 meses
Puntos: 1
Pregunta un fallillo con && y ||

Ola! tengo un script asi:
Código PHP:
if (((!isset($_POST["usuario"])) xor (!isset($_POST["contra"])))||((!isset($_POST["usuario"]))&&(!isset($_POST["contra"])))) {
header("Location: error.php");
exit;

que hace que si no pones "algo" en los campos usuario y contraseña t lleba a esa pagina. pero lo que me pasa esq si pongo algo en uno y en otro no si que me lleba a la pagina pero si no pongo nada en ninguno de los dos continua con el script...
xq????? eso q lo e especificao bien...q pasa?
  #2 (permalink)  
Antiguo 20/07/2003, 13:47
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Creo que te has complicado con las condiciones, y todavia mas al meter el xor. Incluso me lio con los parentesis. Voy a ver si me aclaro. Tienes:

(A xor B) || (A && B)

Siendo

A: !isset($_POST['usuario'])
B: !isset($_POST['contra'])

Como es un ||, y se evalua en cortocircuito, la expresion sera cierta cuando una de las 2 condiciones sea cierta. La segunda solo es cierta cuando ambos a la vez no estan definidos (usuario y contra). Y el xor es cierto cuando "either $a or $b is TRUE, but not both", es decir, cuando A o B es true, pero no cuando A y B son true a la vez. Asi que en teoria esta bien.

Pero si lo que quieres es que redireccione cuando 'usuario' o 'contra' estan sin definir, yo creo que es mas sencillo:
Código PHP:
if (!isset($_POST['usuario']) || !isset($_POST['contra'])) { 
Aunque puede que te siga fallando. Porque estas comprobando si no estan definidas, no que si no estan vacias. Usa empty() (www.php.net/empty) en lugar de isset(). Porque si has definido el formulario asi:

<input type="text" name="usuario" value="">

$_POST['usuario'] siempre estara definida, pero con el valor que le has puesto por defecto en el value (o al menos es asi como yo lo uso).

Asi que usa empty() en lugar de isset().

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 03:00.