EACH, WHILE Las estructuras de control nos permiten controlar el flujo del programa: tomar decisiones, realizar acciones repetitivas etc., dependiendo de unas condiciones que nosotros mismos establezcamos. As podemos hacer un script que nos salude cada da de la semana de una manera diferente. O por ejemplo hacer un script que nos pida la contrasea una otra vez hasta que suministremos la opci!n correcta. 1.- La toma de decisiones if-else: "uiz# la estructura de control m#s b#sica la m#s utilizada sea if$else: if (condicion) { // instrucciones que hay que ejecutar si la condicin es verdadera } else { // Instrucciones que hay que ejecutar si la condicin es falsa } %n castellano sera algo as: Si (Tal cosa es cierta) { // Haz esto } En caso contrario { // Haz esto otro } &eamos un ejemplo real: %n un formulario preguntaremos al usuario como se llama, pasaremos las variables a la p#gina 'saludos.php( . %n saludos.php mostraremos un saludo diferente en funci!n de si el usuario so o o es cualquier otro )ormulario ht!l" head" title" Eje!#lo $%sico de If /title" /head" $ody" for! action&'saludos(#h#' !ethod&')et'" Quin eres?$r /" in#ut ty#e&'te*t' na!e&'no!$re' /" in#ut ty#e&'su$!it' na!e&'reset' value&' Enviar ' /" /for!" /$ody" /ht!l" saludos.! ht!l" head" title" Eje!#lo $%sico de If /title" /head" $ody" h+" ,%)ina de $ienvenida/h+" -#h# // E!#ieza el cdi)o #h# if (.no!$re&&'/oder') { // Si el no!$re es /oder echo(' Ho!$re .no!$re0 1a est%s cotilleando #or aqu2 otra vez0')3 // saludo es#ecial }else { echo('Hola4 .no!$re4 )racias #or visitarnos')3 // saludo #ara los de!%s } -" /$ody" /ht!l" La cl#usula else *la parte del if$else que indica lo que ha que hacer si la condici!n es falsa+ es opcional. ,o es necesario ponerla. -or ejemplo puedo querer un script que s!lo me salude a mi. %n este caso, cambiara saludos.php de la siguiente manera: ht!l" head" title" Eje!#lo $%sico de If /title" /head" $ody" h+" ,%)ina de $ienvenida/h+" -#h# // e!#ieza el cdi)o #h# if (.no!$re&&'/oder') { // Si el no!$re es /oder echo(' Ho!$re .no!$re0 1a est%s cotilleando #or aqu2 otra vez0')3 // Saludo #ara /oder } -" /$ody" /ht!l" "O#A: .uidado con el operador //, es importante recordar que ha que utilizar un doble signo igual. 0i utilizas s!lo '/(, estar#s utilizando el operador de asignaci!n, es decir estableciendo que 1nombre es igual a .oder con lo que la condici!n siempre sera cierta Las condiciones pueden complicarse mucho m#s, supongamos que queremos dejarte pasar s!lo s adem#s de llamarte .oder, te sabes la contrasea, que en nuestro caso es 'foros(: Formulario: ht!l" head" title" Eje!#lo $%sico de If /title" /head" $ody" for! action&'saludos(#h#' !ethod&')et'" Quin eres?$r /" in#ut ty#e&'te*t' na!e&'no!$re' /"$r /" Y tu Contrasea?$r /" in#ut ty#e&'te*t' na!e&'#ass' /" in#ut ty#e&'su$!it' na!e&'reset' value&' Enviar ' /" /for!" /$ody" /ht!l" saludos.! ht!l" head" title" Eje!#lo $%sico de If /title" /head" $ody" h+" ,%)ina de $ienvenida/h+" -#h# // E!#ieza el cdi)o #h# if (.no!$re&&'/oder' and .#ass &&'foros') { // Si el no!$re es /oder y la contrase5a foros echo(' Ho!$re .no!$re0 1a est%s cotilleando #or aqu2 otra vez0')3 // saludo es#ecial }else { echo('ahhhhhhhhhhh co!o no te sa$es el no!$re y la contrase5a4 no #uedes #asar')3 // saludo #ara los de!%s } -" /$ody" /ht!l" Adem#s tenemos la instrucci!n elseif, que como su nombre indica, es una combinaci!n de if else. Aade una nueva condici!n en el caso de que la primera fuera falsa s!lo ejecuta las instrucciones si esta nueva condici!n es verdadera. %s decir, &eamos un ejemplo: if (.a " .$) { // Ejecuta esto si a es 6ayor que $ echo('a es !ayor que $')3 } elseif (.a && .$) { // si a no es !ayor que $e4 co!#rue$a si a es i)ual a $ echo('a es i)ual que $')3 } else { // si no se cu!#len las anteriores condiciones ejecuta 7sta echo ('a es !enor que $')3 } 2- $ucles: W!ile 2f else nos permita decidir si queramos ejecutar o no una instrucci!n en funci!n de una condici!n, los bucles nos permiten utilizar una condici!n para determinar cuantas veces queremos ejecutar una instrucci!n.: 8hile (condicion) { // Instrucciones a ejecutar una y otra //vez !ientras la condicin sea cierta } %l funcionamiento es mu parecido al del if$else, la diferencia estriba en que si la condici!n es cierta se ejecuta la orden, la condici!n vuelve a comprobarse una otra vez mientras siga siendo cierta. %n cambio en el cambio del if$else s!lo se comprueba la condici!n una vez, si es cierta se ejecuta la instrucci!n se sigue con el programa. %eamos un e&emlo: .cantidad & +3 9hile (.cantidad +:) { echo ('.cantidad ')3 .cantidad;;3 } %sto traducido a castellano sera: 1cantidad / 34 1cantidad es igual a uno 5hile *1cantidad 6 37+ 8ientras el valor de la variable 1cantidad sea menor que 37 echo *'1cantidad '+4 %scribe el valor de cantidad 1cantidad99 *suma 3 al valor que tenga 1cantidad, tambi:n podramos haber escrito 1cantidad / 1cantidad 93+ &eamos como funciona el script paso a paso, 1.antidad es igual a 3 3 es menor que 37 %scribo 3 en pantalla 1cantidad / ; *393+ ; es menor que 37 %scribo ; en pantalla 1cantidad / < *;93+= 0i ejecutamos este script, en pantalla veramos 3 ; < > ? @ A B C '- $ucles: do W!ile Los bucles do 5hile, son mu parecidos a los bucles 5hile, s!lo que comprobamos si la condici!n es cierta al final del bucle en lugar de al principio. As nuestras instrucciones se ejecutan siempre al menos una vez, lo que no ocurre en las condiciones 5hile si la condici!n es falsa. .cantidad & +3 do { echo (.cantidad)3 } 9hile (.cantidad+)3 Draducido sera 1cantidad / 3 do * EE ejecuta echo *1cantidad+4 escribe el valor de cantidad 5hile *1cantidad63+4 mientras cantidad sea maor que 3 $F la condici!n es falsa luego el programa sale del bucle, pero ha escrito una vez el valor de 1cantidad. %l resultado en pantalla sera 3 (- $ucles: for Los bucles for funcionan eGactamente igual que en . . .on una sola instrucci!n controlamos todo el bucle, as que para los vaguetes est# mu bien. for (valor inicial3 condicion3 ejecutar en cada $lucle) { // Instrucciones a ejecutar !ientras la condicin sea cierta } E&emlo for (.cantidad & +3 .cantidad +:3 .i;;) { echo('.cantidad')3 } Draducido es igual a: .antidad es igual a 3, mientras cantidad sea menor que 37 escribe cantidad en pantalla despu:s sHmale 3 al valor de cantidad. %s decir, es eGactamente el mismo ejemplo que vimos en el bucle 5hile pero de otra manera. (- )*ic!+case ,os permite ejecutar un bloque de c!digo u otro dependiendo del valor de una variable. &eamos un ejemplo. -rimero para asignar un valor a la variable, vamos a hacernos un formulario: ht!l" head" title" Eje!#lo de s9itch /title" /head" $ody" for! action&'s9itch(#h#' !ethod&')et'" Quin eres?$r /" in#ut ty#e&'radio' na!e&'quien' value&'c)us' /" c)us$r /" in#ut ty#e&'radio' na!e&'quien' value&'*ela' /" *ela$r /" in#ut ty#e&'radio' na!e&'quien' value&'adanedhel' /" adanedhel$r /" in#ut ty#e&'radio' na!e&'quien' value&'jor)ito' /" jor)ito$r /" in#ut ty#e&'su$!it' na!e&'reset' value&' Enviar ' /" /for!" /$ody" /ht!l" )*itc!.! ht!l" head" title"Eje!#lo de S9ich/title" /head" -#h# s9itch(.quien) { case 'c)us'< // ,ri!era #osi$ilidad echo (' .quien es todo un leader ')3 $rea=3 case 'adanedhel'< // se)unda #osi$ilidad echo ('.quien es un elfo')3 $rea=3 case '*ela'< // tercera #osi$ilidad echo ('.quien es nor!al')3 $rea=3 default< // ,osi$lidad si no es nin)una de las anteriores echo ('.quien es un desconocido')3 } -" /$ody" /ht!l" Den:is m#s informaci!n sobre las estructuras de control en el manual de php http:EE555.php.netEmanualEesEcontrol$structures.php )inta,is alternati-a -I- ofrece una sintaGis alternativa para alguna de sus estructuras de control4 a saber, if, 5hile, for, s5itch. -uede hace el c!digo m#s legible en algunos casos, especialmente en las p#ginas multiuso que vamos a ver a continuaci!n: 2f con construcci!n alternativa -#h# if (.a&&>)< -" ? es i)ual a > -#h# endif3 -" if con elseif else en el formato alternativo: if (.a && >)< #rint 'a es i)ual a >'3 #rint '((('3 elseif (.a && @)< #rint 'a es i)ual a @'3 #rint '000'3 else< #rint 'a no es ni ? ni @J4 endif4 Khile utilizando la construcci!n alternativa .i & +3 9hile (.i & +:)< #rint .i3 .i;;3 end9hile3 )or con la construcci!n alternativa for (e*#r+3 e*#rA3 e*#rB)< sentencia3 (((3 endfor3 ./0inas 1ultiuso -#ginas multiuso son aquellas que pueden mostrar un contenido completamente diferente dependiendo de alguna condici!n. Le esta forma, podemos hacer varias cosas en un solo documento. La estructura habitual de una p#gina multiuso es: ht!l" head" title" ,%)ina 6ultiusos /title" /head" $ody" #h#- If (condicin) { -" 0CC HT6D que se !ostar% si la condicin es cierta CC" -#h# }else{ -" 0CC ht!l que se !ostratar% si la condicin es falsa CC" -#h# } -" /$ody" /ht!l" E utilizando la sinta*is alternativa que aca$a!os de ver< ht!l" head" title" ,%)ina 6ultiusos /title" /head" $ody" #h#- if (condicin)< -" 0CC HT6D que se !ostar% si la condicin es cierta CC" -#h# else< -" 0CC ht!l que se !ostratar% si la condicin es falsa CC" -#h# endif3 -" /$ody" /ht!l" %sto puede parecer un poco confuso. -ero es precisamente una de las caractersticas que est#n haciendo mu popular al -I-: su capacidad de pasar de php a html en cualquier momento todas las veces que sea necesario. E&emlo -ara nuestro ejemplo vamos a utilizar el ejemplo que vimos para s5itch utilizar una sola p#gina *multiuso.php+ para el formulario las respuestas en lugar de las dos que tenamos antes ht!l" head" title" ,%)ina 6ultiusos /title" /head" $ody" -#h# if (0isset(.quien))< -" ht!l" head" title" Eje!#lo de s9itch /title" /head" $ody" for! action&'!ultiuso+(#h#' !ethod&')et'" Quin eres?$r /" in#ut ty#e&'radio' na!e&'quien' value&'c)us' /" c)us$r /" in#ut ty#e&'radio' na!e&'quien' value&'*ela' /" *ela$r /" in#ut ty#e&'radio' na!e&'quien' value&'adanedhel' /" adanedhel$r /" in#ut ty#e&'radio' na!e&'quien' value&'jor)ito' /" jor)ito$r /" in#ut ty#e&'su$!it' na!e&'reset' value&' Enviar ' /" /for!" /$ody" /ht!l" -#h# else< s9itch(.quien) { case 'c)us'< // ,ri!era #osi$ilidad echo (' .quien es todo un leader ')3 $rea=3 case 'adanedhel'< // se)unda #osi$ilidad echo ('.quien es un elfo')3 $rea=3 case '*ela'< // tercera #osi$ilidad echo ('.quien es un nor!al')3 $rea=3 default< // ,osi$lidad si no es nin)una de las anteriores echo ('.quien es un desconocido')3 } endif3 -" /$ody" /ht!l" for eac! %s un tipo de bucle especial para matrices. .!mo no hemos visto el tema de las matrices todava, de momento no lo vamos a eGplicar. Docaremos este tema al hablar de las matrices. E2ERCICIO .R3C#ICO 3.$ Iaz un script que escriba todos los nHmeros pares del 3 al 377 utilizando el bucle 5hile ;.$ %scribe un script utilizando un bucle que se ejecute una vez en el cual la condici!n sea imposible. <.$ Iaz un script que escriba todos los nHmeros impares del 3 al 377 utilizando el bucle for >.$ Meescribe el ejercicio del tema ;, de forma que utilicemos ; documentos en lugar de <. $ %n el primer documento utilizar#s una p#gina multiuso. 0i el usuario no ha enviado datos, le presentas el formulario. 0i el usuario a ha rellenado los datos ver# la p#gina con los enlaces. $ %n el segundo documento, utilizaremos las estructuras de control que hemos visto para que el usuario vea unos datos u otros en funci!n del enlace que utilice. $ Latos de contacto: &er# una tabla con s!lo los datos de contacto. $ Latos de empresa: &er# una tabla con s!lo los datos de la empresa. $ Latos de viaje: &er# una tabla con s!lo los datos del viaje. $ Dodo: ver# las tres tablas.