Control del flujo en PHP: Condiciones IF

Presentamos una de las herramientas principales usadas para controlar el flujo de nuestros scripts: Los condicionales IF.

La programación exige en muchas ocasiones la repetición de acciones sucesivas o la elección de una determinada secuencia y no de otra dependiendo de las condiciones específicas de la ejecución.

Como ejemplo, podríamos hacer alusión a un script que ejecute una secuencia diferente en función del día de la semana en el que nos encontramos.

Este tipo de acciones pueden ser llevadas a cabo gracias a una paleta de instrucciones presentes en la mayoría de los lenguajes. En este capítulo describiremos someramente algunas de ellas propuestas por PHP y que resultan de evidente utilidad.

Para evitar el complicar el texto, nos limitaremos a introducir las más importantes dejando de lado otras cuantas que podrán ser fácilmente asimilables a partir de ejemplos prácticos.

Las condiciones if

Cuando queremos que el programa, llegado a un cierto punto, tome un camino concreto en determinados casos y otro diferente si las condiciones de ejecución difieren, nos servimos del conjunto de instrucciones if, else y elseif. La estructura de base de este tipo de instrucciones es la siguiente:

if (condición)
{
   Instrucción 1;
   Instrucción 2;
   ...
}
else
{
   Instrucción A;
   Instrucción B;
   ...
}

Llegados a este punto, el programa verificará el cumplimiento o no de la condición. Si la condición es cierta las instrucciones 1 y 2 serán ejecutadas. De lo contrario (else), las instrucciones A y B serán llevadas a cabo.

Esta estructura de base puede complicarse un poco más si tenemos cuenta que no necesariamente todo es blanco o negro y que muchas posibilidades pueden darse. Es por ello que otras condiciones pueden plantearse dentro de la condición principal. Hablamos por lo tanto de condiciones anidadas que tendrían una estructura del siguiente tipo:

if (condición1)
{
   Instrucción 1;
   Instrucción 2;
   ...
}
else
{
   if (condición2)
   {
      Instrucción A;
      Instrucción B;
      ...
   }
   else
   {
      Instrucción X
      ...
   }
}

De este modo podríamos introducir tantas condiciones como queramos dentro de una condición principal.

De gran ayuda es la instrucción elseif que permite en una sola línea introducir una condición adicional. Este tipo de instrucción simpifica ligeramente la sintaxis que acabamos de ver:

if (condición1)
{
   Instrucción 1;
   Instrucción 2;
   ...
}
elseif (condición2)
{
   Instrucción A;
   Instrucción B;
   ...
}
else
{
   Instrucción X
   ...
}

El uso de esta herramienta resultará claro con un poco de práctica. Pongamos un ejemplo sencillo de utilización de condiciones. El siguiente programa permitiría detectar la lengua empleada por el navegador y visualizar un mensaje en dicha lengua.

<HTML>
<HEAD>
<TITLE>Detector de Lengua</TITLE>
</HEAD>
<BODY>
<?
//Antes de nada introducimos mensajes en forma de variables
$espanol="Hola";
$ingles="Hello";
$frances="Bonjour";

//Ahora leemos del navegador cuál es su lengua oficial
$idioma=substr($HTTP_ACCEPT_LANGUAGE,0,2);

//Formulamos las posibilidades que se pueden dar
if ($idioma == "es")
{echo "$espanol";}
elseif ($idioma=="fr")
{echo "$frances";}
else
{echo "$ingles";}
?>
</BODY>
</HTML>

Ejecutar script

Para poder ver el funcionamiento de este script es necesario cambiar el idioma preferido lo cual puede ser realizado a partir del menú de opciones del navegador.

Para leer la lengua aceptada por el navegador lo que hacemos es definir una variable ($idioma) y, mediante la función substr, recogemos las dos primeras letras del código correspondiente al idioma aceptado por el navegador ($HTTP_ACCEPT_LANGUAGE).

La tercera parte de script se encarga de ver si el navegador está en español (es), francés (fr) o en cualquier otro idioma que no sea ninguno de estos dos y de imprimir el mensaje que proceda en cada caso.

A notar que, cuando se trata de comparar variables, ponemos un doble igual "==" en lugar de un simple "=". Este último queda reservado exclusivamente para asignar valores a variables

Referencia: Hemos publicado un vídeo para mostrar la creación y el funcionamiento de las estructuras IF: Estructuras de control, Vídeo 1: condicional if

Autor

Rubén Alvarez

Rubén es doctor en química y programador aficionado con experiencia en PHP.

Compartir

Comentarios

Nacho

06/5/2003
Me gustaría felicitaros por el curso; es claro, sencillo y muy útil. También deciros que tras muchas pruebas no consigo hacer funcionar el script IF detector de lengua. He probado a copiar y pegar pero siempre aparece el mismo error:

Notice: Undefined variable: HTTP_ACCEPT_LANGUAGE in D:\Archivos de programa\Apache Group\Apache2\htdocs\curso_php\prueba.php on line 12 Hello

Un saludo,
Nacho

Anónimo

21/6/2003
Hola!, he probado el codigo tal cual está en la página y me he dado cuenta q si no activo 'register_globals' no funciona ninguna variable local, como $HTTP_ACCEPT_LANGUAGE o $PHP_SELF. El caso es que activarlo puede llevar a problemas de seguridad, como he leido en otros comentarios.

zamy57

05/7/2003
si tienes 'register_globals=off' usa $HTTP_SERVER_VARS['PHP_SELF'] Y
$HTTP_SERVER_VARS["HTTP_ACCEPT_LANGUAGE"] respectivamente

Alfonso

24/5/2004
Hola chicos. Tal como comenta algún con un copy/empastre el código no funciona. Pues bien, aunque ya dan pistas en las lineas de arriba de cómo solucionar esto, os envio el código para que todos podamos hacer nuestro querido COPY/EMPASTRE

<HTML>
<HEAD>
<TITLE>Detector de Lengua</TITLE>
</HEAD>
<BODY>
<?
//Antes de nada introducimos mensajes en forma de variables
$espanol="Hola";
$ingles="Hello";
$aleman="Hallo";

//Ahora leemos del navegador cuál es su lengua oficial
$idioma=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);

//Formulamos las posibilidades que se pueden dar
if ($idioma == "es")
{echo "$espanol";}
elseif ($idioma=="de")
{echo "$aleman";}
else
{echo "$ingles";}
?>
</BODY>
</HTML>

KaRlos

28/1/2005
hola...
la duda mia es la siguiente..he probado de utilizar esas variables q me tendrian q dar los valores de algunas datos..asi como en este caso el de el lengueje q usa el explorador.... pero el caso es q no me funciona..no se cual es el problema... porq si copio todo el codigo a mi no me funciona..pero el scipt q tienen uts de prueba si funciona... cual es mi error??
gracias de antemano..y muy bueno el manual...estoy aprendiendo muy bn ...

Pedro

08/3/2005
bueno, primero felicitaros por este manual que, por lo que veo, a tantos nos ha ayudado...

segundo, y no por eso menos importante, ahí va mi duda:

como hago para realizar un if complejo?, es decir: if (i==1 AND e==2 AND x==3){
// haces esto
} else {
// haces quello
}


Gracias de antemano...

Ghostfaced

05/5/2005
Hola Pedro,no sé si has resuelto ya tu duda, pero te contestas tu mismo cuando escribes la estructura condicional, está bien definida.

Saludos.

javi

19/10/2005
<?php
$var1 = 1;
$var2 = 1;
$var3 = 1;
if($var1 = 1 && $var2 = 1 && $var3 = 1)
   {
    echo("if complejo!");
    //aqui tienes la solucion!
   }
?>

geek

14/3/2006
humm
<?php
$var1 = 1;
$var2 = 1;
$var3 = 1;
if($var1 == 1 && $var2 == 1 && $var3 == 1)
{
echo("if complejo!");
//aqui tienes la solucion!
}
?>
el escript es correcto de las dos maneras pero de esta se compara el valor de las variables con 1.

de la manera que ha puesto javi se asigna el valor uno a la variable, lo cual siempre es cierto.

mucho cuidado con la diferencia entre

asignacion =

y comparacion ==

que es una de las cosas que mas errores inducen en los programadores noveles y los no tan noveles

Adrian

15/5/2006
Asi como es bueno saber como se utiliza el AND tambien es bueno saber como se utiliza el OR

($aaa==1 OR $aaa==3 OR $aaa==5)

Elfakyu

15/11/2006
para comparar usa ==
ya que para asignar se usa =

Jessica

13/2/2007
Hola, me parece genial encontrar explicaciones tan sencillas sobre algo que a veces nos asusta. y pues queria contarles que el script en mi navegador ejecutó a la perfeción desde el primer intento!
Gracias, chao.

sergio

10/4/2007
Jessica eres una fiera..bueno llevo dos dias reales con php y voy bastante liado..un saludo al foro y a quienes lo hacen sois de gran ayuda

dalvin

22/5/2007
para asignar se usa "="
para comparar se use "=="
yyyyyyy
para ver si las dos variables son identicas es decir no difieren en nada
se usa "==="
buena pagina esta

Ivan

30/7/2007
Muchas Gracias por el tutorial me ah servido bastante :)

ELSY

25/9/2007
HOLA,ESTOY TRABAJANDO EN PHP Y QUISIERA SABER COMO PUEDO CONDICIONAR MIS TABLAS PARA QUE SE GUARDEN SOLO CIERTA CANTIDAD DE REGISTROS. ESPERO ALGUIEN ME PUEDA AYUDAR

Juan David Parra

05/11/2007
Me gustaria saber cuantas condiciones puedo poner máximo, por ejemplo:

<?
if ( ($i== $a) or ($j==$b) or ($i== $a)..........
cuantos ?

Jorge

04/3/2009
Los felicito por el manual. Tan solo me gustaría observar que a esta altura del curso, se debería explicar cuales son los operadores de comparación, antes de usarlos en las condiciones de estructuras de decisión o en los bucles.
Un saludo

jonathan

22/4/2009
como hago
hola a todos como hago para sacar los datos de una sola persona y mostrarlos en una planilla sin q me muestre todas las demas personas q tengo en esa base de datos q sentencia utilizo

Juanfer

16/10/2009
Comentario
Creo que es un pequeño error de sintaxis, porque si mal no recuerdo las sentencias php entre codigos html incian de la siguiente manera:

<?php

etc... solo agreguenle php despues de <?

saludos.
Juanfer

Tote

18/4/2010
Consulta
Hola tengo una duda, ya que se que existe un método abreviado que hasta el momento no lo manejo bien y no he encontrado mucha información
Este método trata de la siguiente forma:
$variable=(condicion) ? correcto : incorrecto ;
por ejemplo.
$a=6;
$b=10;
$string=($a>$b) ? '$a es mayor que $b' : '$b es mayor que $a';
echo $string;

Quisiera manejarme mejor en eso, que funcione sin necesidad de entregar un solo valor, realizar más de una operación, anidadarlas con otros if.

MaCrOsS

11/5/2011
Nada
toy estudiando analisis y soy el comentario del 2011.

Cromox

10/3/2012
PARA LOS QUE TIENEN PROBLEMAS CON EL DETECTOR DE LENGUA
BUENAS PARA SOLUCIONAR EL PROBLEMA DEL ERROR CON
$idioma=substr($HTTP_ACCEPT_LANGUAGE,0,2);
QUE CUANDO LO EJECUTAN DICE
"Undefined variable: HTTP_ACCEPT_LANGUAGE in D:Archivos de programaApache GroupApache2htdocscurso_phpprueba.php on line 12 Hello "

TIENEN QUE BUSCAR EN EL PHP.INI(CLIC IZQUIERDO SOBRE WAMPSERVER)
LO SIGUIENTE 'register_globals=off'
LE BORRAN EL OFF Y LE PONEN ON REINICIAN EL WAMPSERVER Y LISTO EL CODIGO LES FUNCIONA DE MARAVILLA...
SALUDOS ESPERO SEA DE UTILIDAD

apab71

20/11/2012
Condición if no funiona
Hola, felicidades por el curso, es muy bueno y claro, lo único que en este caso, para el control de flujo no me funciona la condición, ya que solo me muestra la última opción, es decir, si al final, en la última condición, en ves de inglés, coloco francés, me muestra como resultado "Bonjour", o si pongo español, me muestra "hola".
Gracias

apab71

20/11/2012
Condición if no funiona
Hola nuevamente, ya solucioné el problema, era error mío.

Gracias y nuevamente felicidades por el curso, es genial.

nikey

10/4/2013
php
me parece muy interesante y me es de mucha utilidad este manual

jesrond

15/3/2016
ejecute este codigo y nada
hola q tal

estoy practicando este codigo y en realidad no puedo visualizarlo en pantalla me fui a otros codigos semejantes e hice posibles correcciones y nada ...ayudenme please!!!

jesrond

24/3/2016
listo
era un error de mi parte
gracias