Foros del Web » Programando para Internet » PHP »

Condiciones IF - entra en todas

Estas en el tema de Condiciones IF - entra en todas en el foro de PHP en Foros del Web. Hola a todos/as, llevo varios dias comiendome la cabeza con este trozo de codigo y no logro entender porque me da el resultado que me ...
  #1 (permalink)  
Antiguo 06/03/2008, 09:54
 
Fecha de Ingreso: febrero-2006
Mensajes: 103
Antigüedad: 18 años, 2 meses
Puntos: 1
Condiciones IF - entra en todas

Hola a todos/as, llevo varios dias comiendome la cabeza con este trozo de codigo y no logro entender porque me da el resultado que me da. Se trata de varias condiciones if, yo paso el valor por la url y a la hora de ver el resultado en el navegador me encuentro con todos los mensajes, mejor pongo el codigo para que lo entendais bien:

Código PHP:
<?php

$a 
$_GET["orden"];
echo 
"Valor de a: $a" '<br>';

if(
$a="default")
{
/* Por defecto */
echo "Orden por defecto<br>";
}

if(
$a=1)
{
/* Por fecha ascendente */
echo "Orden 1<br>";
}

if(
$a=2)
{
/* Por fecha descendente */
echo "Orden 2<br>";
}

if(
$a=3)
{
/* Por titulo ascendente */
echo "Orden 3<br>";
}

if(
$a=4)
{
/* Por titulo descendente */
echo "Orden 4<br>";
}

if(
$a=5)
{
/* Por precio ascendente */
echo "Orden 5<br>";
}

if(
$a=6)
{
/* Por precio descendente */
echo "Orden 6<br>";
}

if(
$a=7)
{
/* Por provincia ascendente */
echo "Orden 7<br>";
}

if(
$a=8)
{
/* Por provincia descendente */
echo "Orden 8<br>";
}
?>
Utilizo: http://localhost/prueba.php?valor=default

Y el resultado en el navegador es este:

Valor de a: default
Orden por defecto
Orden 1
Orden 2
Orden 3
Orden 4
Orden 5
Orden 6
Orden 7
Orden 8

Se supone que solo deberia mostrar "Orden por defecto" y no entrar en las otras condiciones, ¿alguien sabe por que?
  #2 (permalink)  
Antiguo 06/03/2008, 10:02
 
Fecha de Ingreso: enero-2008
Mensajes: 68
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: Condiciones IF - entra en todas

es un error que siempre cometemos

en lugar de poner:

if($a=1)

debes poner

if($a==1)


si quieres saber por qué pasa esto
te lo explico de inmediato.

lo que está en juego dentro del if es un valor booleano, vale decir, de verdadero o falso
en estos casos los valores que tienes en juego son
"default",1,2,3,4,5,6,7 y 8
los cuales son en todos los casos un valor verdadero (solo 0 y NULL son falsos)

ahora, por qué es que estos valores son verdaderos, esto pasa porque los valores los estas asignando, el signo "=" por si solo es una asignación, en cambio "==" se utiliza para comparar.


COMENTARIO SOBRE TU CODIGO

por lo que veo, "$a" solo tendrá uno de esos valores, entonces
para que el código se ejecute mucho más rápido
(en este caso la diferencia no se va a notar, pero si programas de aqui en adelante con esta idea, cuando tengas códigos mucho mas complejos, la diferencia si se notará)

deja solo el primer if y el resto cambialos por elseif

<?php

$a = $_GET["orden"];
echo "Valor de a: $a" . '<br>';

if($a=="default") echo "Orden por defecto<br>";
elseif($a==1) echo "Orden 1<br>";
elseif($a==2) echo "Orden 2<br>";
elseif($a==3) echo "Orden 3<br>";
elseif($a==4) echo "Orden 4<br>";
elseif($a==5) echo "Orden 5<br>";
elseif($a==6) echo "Orden 6<br>";
elseif($a==7) echo "Orden 7<br>";
elseif($a==8) echo "Orden 8<br>";
?>

de esta forma al encontrar un valor, no seguirá comparando los demás

Última edición por fcopacheco; 06/03/2008 a las 10:08 Razón: Agregar un comentario
  #3 (permalink)  
Antiguo 06/03/2008, 10:04
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: Condiciones IF - entra en todas

tienes todos los if separados


if($a="default")
{
/* Por defecto */
echo "Orden por defecto<br>";
}


coje este ultimo corchete del primer if y ponlo el ultimo para que englobe a los demas.
  #4 (permalink)  
Antiguo 06/03/2008, 11:46
Avatar de Rh_Fenix  
Fecha de Ingreso: febrero-2008
Ubicación: Mexico
Mensajes: 9
Antigüedad: 16 años, 1 mes
Puntos: 0
De acuerdo Re: Condiciones IF - entra en todas

Hola Vj_DarkHunter:

Estoy de acuerdo con fcopacheco, si usas if anidados, es mejor creo ke cada cosa debe tener un orden, pero tienes otra opcion y eso es hacer un switch:

<?php

$a = $_GET["orden"];
echo "Valor de a: $a" . '<br>';

switch($a)
{
case "default": echo "Orden por defecto<br>";
break;
case "1": echo "Orden 1<br>";
break;
case "2": echo "Orden 2<br>";
break;
case "3": echo "Orden 3<br>";
break;
case "4": echo "Orden 4<br>";
break;
case "5": echo "Orden 5<br>";
break;
case "6": echo "Orden 6<br>";
break;
case "7": echo "Orden 7<br>";
break;
case "8": echo "Orden 8<br>";"
break;
default: echo "Opcion no valida";
}
?>

Espero te sirva,Suerte, bye.
  #5 (permalink)  
Antiguo 07/03/2008, 09:34
 
Fecha de Ingreso: febrero-2006
Mensajes: 103
Antigüedad: 18 años, 2 meses
Puntos: 1
Re: Condiciones IF - entra en todas

Ufffs, gracias a todos por las respuestas, desde luego es para matarme. Voy a utilizar el metodo que comentas fcopacheco. Gracias.
  #6 (permalink)  
Antiguo 07/03/2008, 21:56
 
Fecha de Ingreso: enero-2008
Mensajes: 68
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: Condiciones IF - entra en todas

Para eso estamos Vj_DarkHunter, cualquier duda compartela con nosotros, y más de alguno te podrá dar una solución.
  #7 (permalink)  
Antiguo 08/03/2008, 14:19
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 20 años, 11 meses
Puntos: 60
Re: Condiciones IF - entra en todas

Creo que como el caso es igual a la variable enviada.. podrias hacer algo simple como esto.. con el operador if ternario

Código PHP:
<?php
echo ($_GET['orden']!='default')? 'Orden '.$_GET['orden'] : 'Orden default';
?>
O si deseas mas libertad con un array asociativo te ahorras pasos..

Código PHP:
<?php
$r
['1'] = 1;
$r['2'] = 2;
$r['3'] = 3;
$r['4'] = 4;
$r['5'] = 5;
$r['6'] = 6;
$r['7'] = 7;
$r['8'] = 8;
$r['9'] = 9;
$r['default'] = 'default';

if(
$r[$_GET['orden']]!=NULL)
    {
    echo 
'Orden '.$_GET['orden'];
    }else
        {
        echo 
'Orden '.$r['default'];
        }
?>
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:09.