Anda di halaman 1dari 91

CURSO PHP

Lecc 1 Lecc 2 Lecc 3 Lecc 4 Lecc 5 Lecc 6 Lecc 7 Lecc 8 Lecc 9 Lecc 10 Lecc 11 Lecc 12 Lecc 13 Lecc 14 Lecc 15 Lecc 16 Lecc 17 Lecc 18 Lecc 19 Lecc 20 Lecc 21 Lecc 22 Lecc 23 Lecc 24 Lecc 25 Lecc 26

Introduccin Instalando PHP Variables Parte 1 Variables Parte 2 Operaciones Matemticas con variables Operadores en PHP Precedencia de Operadores en PHP Estructuras de control (IF) Estructuras de Control (ELSE) Estructuras de Control (ELSEIF) Estructuras de Control (WHILE) Estructuras de Control (DO...WHILE) Estructuras de Control (FOR) Estructuras de Control (BREAK y CONTINUE) Estructuras de Control (SWITCH) Arreglos Simples Arreglos Asociativos y Multidimensionales Operaciones con Cadenas Expresiones Regulares Las Funciones Parte 1 Las Funciones Parte 2 (Parmetros y Valores de Retorno) las Funciones Parte 3 (Parmetros por valor, por referencia y por defecto) El Estilo.Indentacin El Estilo. Comentario El Estilo. Estandarizacin) Salidas HTML. Nuestro proyecto parte 1

Lecc 27 Lecc 28 Lecc 29 Lecc 30 Lecc 31 Lecc 32 Lecc 33 Lecc 34 Lecc 35 Lecc 36 Lecc 37 Lecc 38 Lecc 39 Lecc 40

Funcin date(). Nuestro proyecto parte 2 Nuestro Proyecto parte 3 Nuestro Proyecto parte 4 Nuestro Proyecto parte 5 Nuestro proyecto parte 6 Nuestro proyecto parte 7 Nuestro Proyecto parte 8 Nuestro Proyecto parte 9 Nuestro Proyecto parte 10 Nuestro Proyecto parte 11 Nuestro Proyecto parte 12 Nuestro Proyecto parte 13 Nuestro Proyecto parte 14 Consideraciones finales

CURSO INTRODUCTORIO DE PROMOGRAMACIN EN PHP Sean todo bienvenidos. A lo largo de este curso, aprenderemos los pasos necesarios para programar en PHP, junto con una rpida introduccin a las bases de la programacin. Para iniciar nuestro curso, debemos saber donde obtememos PHP y de dnde surge la idea de PHP. UN POCO DE HISTORIA DE PHP PHP es un acrnimo de PHP: Hypertext Preprocessor, aunque los orgenes del nombre se remontan al nombre Personal Home Page. PHP es un lenguaje de alto nivel que va embebido (insertado) en pginas HTML. Por otro lado, PHP es un lenguaje del lado del servidor (Server Side Scripting Languaje), lo cual significa que el usuario abre la pgina HTML y hace una peticin de interactuar, PHP, instalado en el servidor web, interpreta la peticin y enva una respuesta al usuario, lo cual hace la diferencia entre lenguajes como PHP y lenguajes como javascript, que son lenguajes del lado del usuario. PHP fue concebido en 1994 por Rasmus Lerdorf, cuyo uso fue personal por esos tiempos, para controlar la cantidad de personas que consultaban su hoja de vida, es decir, su "decubrimiento" fue accidental (qu les parece?, como la penicilina) PHP es un lenguaje de cdigo abierto, lo cual implica que, por un lado, hay un grupo de desarrolladores que contribuyen a la elaboracin y fortalecimiento del lenguaje; y, en segundo lugar, que es un lenguaje por el que no necesitamos pagar derechos de autor (licencia) para utilizarlo. CMO FLUYE LA MAYORA DE LA INFORMACIN A TRAVS DEL INTERNET EN UNA PGINA DINMICA Una pgina dinmica implica la interaccin entre el usuario y un script desarrollado en un lenguaje que permita el dinamismo, es decir, que permita la interaccin entre el usuario y un Servidor Web y un Servidor de Base de Datos (en caso de existir uno). Es decir, que el usuario haga una peticin al servidor Web, ste se comunica con el servidor de base de datos, extrae la informacin de la base de datos y presenta la informacin en la pantalla del usuario. Un ejemplo bastante claro, es la forma en la que nos inscribimos en algn servicio de correo electrnico, en el que proporcionamos nuestro nombre, apellido, un nombre para el correo de la forma minombre@miproveedor.com y una palabra clave. Cuando, por ejemplo, al da siguiente, vamos a ver nuestros correos electrnicos, basta con escribir nuestro nombre de usuario y palabra de acceso para que accesemos a nuestra cuenta. Todo lo anterior, es gracias a una pgina dinmica, que solicita los datos al servidor Web que a su vez, extra los datos de nuestra cuenta del Servidor de Base de Datos. Lo anterior es algo similar a la siguiente animacin:

LO QUE PODEMOS HACER CON PHP Lo que se puede hacer con PHP es bsicamente cualquier cosa que se pueda hacer con un script CGI, es decir, trabajo con formularios, como su procesamiento y manejo dinmico; generar pginas con contenido dinmico (de nuevo, el contenido dinmico es el que le permite a la pgina la interaccin con el usuario); mandar o recibir cookies, etc. Una caracterstica de PHP, es la capacidad de trabajar con una gran cantidad de bases de datos, lo cual lo hace un programa verdaderamente potente, siendo que, por ejemplo, si lo "juntamos" con MySQL (un Gestor de Bases de Datos con licencia GNU), nuestros recursos salen literalmente "GRATIS" Bien, en nuestra prxima entrega vamos a aprender a instalar PHP y vamos a desarrollar nuestra primera pgina web. Por el momento, hasta pronto.

INSTALANDO PHP Hola, cmo estn?, continuamos ahora con la instalacin de PHP Lo primero es bajar el programa de la pgina de PHP www.php.net y seguir los siguientes pasos:

El archivo .zip como habrn visto se ha guardado en el escritorio (pues as se lo especificamos al programa que descomprimi nuestros archivos, por otro lado, cuando descomprimimos el archivo), al descomprimir los archivos, tambin es necesario especificarle al programa que descomprime que mantenga los nombres de las carpetas (folders) para que se decomprima tal y como lo bajamos del sitio web. Como habrn visto, la instalacin es bastante sencilla, y el tipo de instalador que escogern depender del tipo de servidor web que deseen utilizar en sus aplicaciones (Apache o IIS). Para el presente curso tomaremos como base el servidor Apache (por cierto, saban que tambin es gratis). Finalmente, hay que tener en cuenta que lo mejor de todo es utilizar PHP como mdulo de Apache, por lo que ser necesario que se asguren a tener la configuracin de su archivo httpd.conf de la siguiente forma: LoadFile php\bin\php5ts.dll LoadFile php\bin\fdftk.dll LoadModule php5_module modules/mod_php.so

Con lo anterior, estmos listos para comenzar a trabajar en PHP. NUESTRO PRIMER PROGRAMA PHP Al igual que cualquier script de HTML, podemos escribir el cdigo PHP en cualquier editor de texto que escojamos, claro est, si hay que hacer alguna recomendacin, la recomendacin obvia es un editor de texto que sea freeware, es decir, que sea gratis. Uno bastante bueno es ConText, el cual se puede bajar de su direccin de internet www.context.cx Luego de haber escrito nuestro script PHP, debemos guardar el documento con la extensin .php Bien, como ya lo habrn imaginado, nuestro primer programa ser el tpico y casi infaltable "Hola Mundo!" (Casi inservible, pero muy vivificante). Como ya dijimos, necesitamos crear una pgina HTML con los comandos PHP embebidos (o insertados), dentro de las etiquetas especiales de inicio <? php y final ?> de la siguiente forma: <html> <head> <title>Mi primer programa PHP</title> </head> <body> <?php echo "Hola Mundo!"; ?> </body> </html> Lo anterior, como ya la mayora habr imaginado, produce la siguiente salida:

Como resulta obvio, los resultados de nuestro programas en PHP los veremos en nuestro navegador de Internet, siendo que los programas se insertan en pginas HTML. Por supuesto, el resultado final se hubiese logrado con menos scripts en HTML puro, pero en fin, el objetivo era simplemente mostrar la forma en la que un fragmento de cdigo en PHP debe iniciar y terminar. Nuestros programas sern ms grandes y complejos conforme vayamos avanzando y aprendiendo ms y ms.

LAS VARIABLES EN PHP. Parte 1 Las variables son uno de los conceptos ms bsicos en la programacin. Las variables son, en pocas palabras: contenedores de datos.

Las variables son datos, a los que podemos manipular basados en un nombre: el nombre de la variable, sin necesidad de hacer referencia al tipo de dato al que la variable hace referencia. En PHP, cada variable debe comenzar con el signo de dlar ($) ms el nombre de la variable de la manera siguiente: $nombre Para asignarle un valor a la variable, debemos utilizar el smbolo de asignaci, el cual no es otro que el signo de igual (=). Una observacin (con carcter de advertencia), que debe hacerse, es que no es lo mismo el carcter de asignacin (=), que el smbolo comparativo de igualdad (= =). Cuando asignamos un valor, por ejemplo $nombre = "Miguel", le decimos a PHP que la variable $nombre tiene el valor de cadena de caracteres "Miguel", mientras que $nombre = = "Miguel", hace la comparacin entre el valor que tiene $nombre y la cadena de caracteres "Miguel". Es decir, en buen castellano, la primera le dice a PHP quiero que la variable que se llama $nombre guarde el valor "Miguel", mientras que la segunda, por decirlo de alguna forma, le pregunta a PHP si la variable $nombre, guarda en su interior el valor "Miguel". Por favor dirijan su atencin a las comillas dobles que estn antes del valor Miguel y que tambin estn al final de dicho valor asignado a la variable $nombre. Si bien vamos a entrar en mayor detalle en un captulo futuro, tenemos que adelantar que no es lo mismo el tratamiento de nmeros, que el tratamiento de cadenas de caracteres como es el caso del ejemplo que hemos presentado. Por ejemplo, no es lo mismo "64", que 64. "64" hace referencia a la cadena de caracteres formadas por el valor ASCII de "6" y "4", mientras que 64, sin comillas dobles, hace referencia al dgito 64, con el cual ya se pueden efectuar operaciones matemticas como suma, resta multiplicacin, etc. De acuerdo, tal vez al principio no resulte tan sencillo de comprender, pero cuando hagamos referencia a las operaciones con cadenas, les aseguro que vamos a entender en su totalidad ambos conceptos. OTRO PROGRAMA EN PHP Bien, hagamos otro pequeo programa para mostrar lo que la asignacin de valores a variables significa, vamos a trabajar con el mismo ejemplo de la varible $nombre y el valor "Miguel": <? php $nombre = "Miguel"; echo $nombre; ?> La salida de esto en pantalla, no es ms que Miguel, sin comillas y sin "adorno" alguno. OBSERVACIONES NECESARIAS En primer lugar, hay que decir que el programa es similar al de Hola Mundo!, es decir, intil pero gratificante. Con todo y eso, la intencin es mostrar algunas cosas

importantes de la programacin en PHP, que se muestran de hecho desde el primer programa que desarrollamos en PHP. En primer lugar, como ya se mencion desde el principio, cada cdigo PHP insertado en HTML debe comenzar y terminar con las etiquetas especiales <? y ?>, las letras php despus de la etiqueta de apertura <? son opcionales, pero son recomendables para distinguir de manera ms sencilla en donde finaliza el script HTML y comienza el cdigo PHP, por otro lado, cada final de lnea de cdigo debe finalizar con el punto y coma (;), que es el smbolo de final de sentencia. Un final de sentencia implica que la instruccin especfica ha terminado y que la siguiente lnea contendr otra instruccin. Por otro lado, los espacios en blanco en PHP son opcionales, pero contribuyen mucho a dar legibilidad a nuestro cdigo, as, el segmento de cdigo del ejemplo anterior pudimos haberlo escrito de la siguiente forma: <?php $nombre="Muguel";echo $nombre;?> El resultado final sera exactamente el mismo, pero el dilema de entender un segmento de cdigo como el anterior sera verdaderamente un dolor de cabeza, sobre todo si nuestros programas se llegan a hacer (y se harn) mucho ms grandes que el ejemplo anterior. Por ltimo, la instruccin echo de PHP tiene la funcin, como ustedes seguramente ya lo habrn adivinado, de imprimir en pantalla lo que se le ordene imprimir. Claro est, la utilidad y poder de esta instruccin se discutirn con detenimiento a lo largo de todo el curso.

LAS VARIABLES EN PHP. Parte 2 Antes que nada, hay que explicar un poco las razones del por qu hay necesidad de hacer una segunda parta para las variables. Las razones son las siguientes:

Si el concepto de variable no se entiende bien, nada en un programa PHP podr funcionar. Las consideraciones faltantes en cuanto a variables son tan importantes como las primeras. Y por ltimo, el captulo anterior se estaba haciendo demasiado grande (esto es slo una irona) NOMBRES BUENOS Y NOMBRES MALOS

Hay normas sencillas en cuanto a los nombres que una variable debe tener. En primer lugar hay que decir que el tamao de las variables, es decir, de sus nombres, no tiene mayor importancia, las variables pueden tener un nombre tan grande como les apetezca, as por ejemplo, un nombre como: $elreydeconstantinoplasequieredesconstantinopolizar = "Nombre largo";

Es totalmente vlido, aunque por supuesto, no es precisamente el nombre ms explicativo y prctico que podemos asignarle a una variable, sin embargo, no causa problema alguno. Pese a las facilidades que brinda PHP para el tamao de los nombres de las variables, lo ms conveniente es darles nombres explicativos, que tengan que ver con el tipo de datos que se estn guardando como: $nombre = "Miguel"; $edad = 49; $consulta_mysql = "SELECT * FROM suscribientes WHERE username = 'astroboy'"; $punto_flotante = 164845.35 $arreglo = array("Hola", "Adis", "Buenos Das", "Buenas Noches"); &$valor_por_referencia = "pasando valor por referencia a una funcin"; Claro est, cada quien utilizar los nombres que resulten ms convenientes, pero en general, como ya se dijo, la idea es nombrar cada variable para que resulte sencillo comprender qu tipo de datos estn siendo guardados dentro de ellas. Por otro lado, hay ciertas reglas que seguir a la hora de darle nombre a las variables. Dichas reglas son:

Todas las variables deben comenzar con el signo de dlar ($). Las variables NO pueden comenzar (despus del signo de dlar claro est) con nmeros, as: o $123, o $0, no son nombre vlidos Las variables NO pueden comenzar o contener en su nombre smbolos especiales como ?, &, %, #, @, !, *, (, ), <, >. Por consiguiente, las variables o $%porcentaje, o $$precio, o $#_de_telefono, no son vlidas en lo absoluto Las variables no pueden llevar tildes o ees en su contenido, es decir que: o $nio, o $pasin, no son nombre vlidos en PHP Las variables SI pueden comenzar con el guin bajo ( _ ), de manera que las variables $_nombre, $_GET, $_123 son totalmente vlidas y pueden ser utilizadas sin ningn problema en segmentos de cdigo PHP.

Con respecto a la forma en la que se declaran y utilizan las variables, esto es lo ms relevante que debemos saber para el desarrollo de este curso, en nuestra prxima entrega, aprenderemos sobre las operaciones bsicas con las variables.

OPERADORES EN PHP Operadores de Comparacin Los operadores de comparacin se utlilizan, como su nombre lo indica, para hacer comparaciones entre valores (la gran mayora de las ocasiones guardados en variables) que necesitan desempear un papel en nuestro cdigo. En PHP dichos operadores son: Operador Nombre Igualdad Identidad Desigualdad Menor que Mayor que Ejemplo Resultado

== === != < > <= >=

$a = = $b Cierto si $a es igual a $b $a= = =$b Cierto si $a es igual a $b y si adems son del mismo tipo (slo PHP4 o mayor)

$a != $b Cierto si $a no es igual a $b $a < $b Cierto si $a es estrictamente menor que el de $b

$a > $b Cierto si $a es estrictamente mayor que $b

Menor o igual $a <= $b Cierto si $a es menor o igual que $b que Mayor o igual $a >= $b Cierto si $a mayor o igual que $b que

Operadores de Incremento y Decremento Los operadores de decremento o incremento son de gran utilidad en la programacin, sobre todo porque ahorran tiempo, esfuerzo y cdigo. Dichos operadores incrementan o decrementan en uno el valor de la variable a la que se le est aplicando dicho decremento o incremento. Claro est, la utilidad la veremos con un poco ms de obviedad a la hora de ver los bucles, en los que de hecho, los operadores de incremento o decremento, hacen su debut triunfal y decididamente impresionante. En PHP, los operadores de Incremento y Decremento son los siguientes: OPERADOR NOMBRE EFECTO $a++ Postincremento Devuelve el valor de $a y luego lo incrementa en uno ++$a $b---$b Preincremento Incrementa en uno $a y luego devuelve el valor de $a ya incrementado Decrementa en uno $b y luego devuelve el valor de $b ya decrementado

Postdecremento Devuelve el valor de $b y luego lo decrementa en uno Predecremento

Operadores Lgicos Los operadores lgicos son de extrema utilidad a la hora de decidir si un valor y otro o un valor u otro, cumplen con ciertas condiciones. De nuevo, la utilidad de estos

operadores los veremos cuando veamos las estructuras de control. En PHP, los operadores lgicos son los siguientes: Ejemplo Nombre Resultado $a and $b Y Cierto slo si $a y $b son ciertos $a or $b $a xor $b !$a $a&&$b $a||$b O Cierto si $a $b ambos son ciertos O Cierto si $a $b son ciertos, pero no si ambos son ciertos a la exclusiva vez Negacin Cierto si $a no es cierto Y O Cierto slo si $a y $b son ciertos Cierto si $a $b ambos son ciertos

Siendo que lo ms seguro es que se estn preguntando cul es la diferencia entre and y && o entre or y ||. La respuesta es sencilla, los smbolos && y || son abreviaciones o, ms an, son herencia del lenguaje del cual deriva PHP, es decir C/C++. Dado lo anterior, para todos aquellos que ya tengan experiencia en la programacin con C/C++, esta notacin les resultar muy familiar. Esto es todo en cuanto a los operadores se refiere, en nuestro prximo encuentro, aprenderemos sobre la precedencia que tiene los operadores en PHP.

PRECEDENCIA DE LOS OPERADORES La precendencia de operadores especifica que operaciones han de efectuarse primero en caso de existir ms de una operacin en un segmento de cdigo, por ejemplo 1 + 2 * 3 sera igual a 7 y no igual a 9, ya que el operador de multiplicacin (*) tiene mayor precedencia que el de suma (+). En PHP la precedencia es como sigue: Asociatividad izquierda izquierda izquierda izquierda derecha izquierda izquierda izquierda izquierda izquierda Operadores , or xor and print =, +=, -=, *=, /=, %= ?: || && |

izquierda izquierda no asociativo no asociativo izquierda izquierda derecha derecha no asociativo Operador Ternario

^ & ==, !=, === <,<=,>,>= +, - , . *, /, % !,~,++,--,(int), (double), (string),(array), (object), @ [ new

El operador ternario ?:, funciona de la forma (exp1) ? (exp2) : (exp3); Lo anterior significa que la expresin tomar el valor de exp2 si exp1 se vala como cierto, y el valor de exp3 si el valor de exp1 resulta falso. Un ejemplo sera: <?php $nombre = "Roberto"; echo ($nombre == "Roberto") ? "Hola Roberto" : "No te conozco"; ?> El cdigo anterior nos da como salida en la pantalla lo siguiente:

Si la variable $nombre hubiese tenido otro valor diferente a Roberto, entonces el resultado en pantalla hubiese sido No te conozco Este operador se utiliza de forma similar en una gran cantidad de lenguajes de programacin, por lo que para quienes ya tienen experiencia en programacin, por ejemplo en C o C++, no les resultar desconocido.

Bien, eso es todo, por el momento, en cuanto a operadores se refiere, en la prxima entrega aprenderemos sobre las estructuras de control, y nuestros programas en PHP comenzarn a hacerse ms interesantes.

ESTRUCTURAS DE CONTROL EN PHP. Parte 1 (IF) Como ya se explic con anterioridad, cada archivo de comandos PHP se compone de una serie de sentencias. La sentencia puede ser una asignacin, una llamada a una funcin (calma, las funciones vienen en camino en una entrega posterior), una sentencia condicional, etc. Por favor recuerden que cada sentencia termina con el punto y coma (;), lo que significa que si dicho smbolo no se escribe al final de cada sentencia, PHP har de cuenta que la sentencia no ha terminado hasta que un punto y coma sea encontrado. Los resultados de omitir un punto y coma van desde los ms leves e insignificantes, hasta los ms catastrficos, desesperantes y estresantes (enfermedad de moda en nuestros tiempos, adems de casi inevitable), que se puedan imaginar, as que por favor, no olviden de finalizar cada sentencia con un punto y coma. Por otro lado, tambin es necesario mencionar que las sentencias pueden ser agrupadas en grupos de sentencias, que estarn encerradas dentro de llaves { }. Por consiguiente, un grupo de sentencias encerradas en llaves, son en realidad, una sola sentencia. En esta entrega, veremos los diferentes tipos de sentencias que pueden haber en un programa PHP:

IF
"Si me gustan los chocolates, me los como" Una de las estructuras de control ms bsicas, y sin embargo una de las ms importantes, es la estructura if. Dicha estructura evala el valor de una expresin y dependiendo de si la evaluacin resulta verdadera o falsa, la sentencia a continuacin de if se ejecutar o se ignorar. La sintaxis es la siguiente: if(expr1) sentencia As, si tenemos el siguiente fragmento de cdigo: <?php $a = 1; $b = 3; if($a < $b)

echo "$a es menor que $b"; ?> El resultado en pantalla sera el siguiente:

Dado que 1 (valor de $a) es decididamente menor que 3 (el valor de $b), la sentencia echo "$a es menor que $b" se imprime en la pantalla de nuestro navegador de Internet. Si el caso hubiese sido que el valor de $a hubiese sido, por ejemplo 5, el navegador simplemente nos hubiese mostrado una pantalla vaca. Por favor observen que al final de la sentencia que contiene el IF, NO hay un punto y coma. Por favor tengan en cuenta que si ponen un punto y coma al final de la lnea de cdigo que contiene el IF, dicha sentencia, si bien se ejecutar, tendr un defecto de sintaxis que puede llegar a ser peligroso en caso de un programa verdaderamente grande. La instruccin echo, como ya se explic anteriormente proporciona una salida en pantalla de todo lo que est dentro de las comillas dobles (" "), por lo que es importante observar cuidadosamente el resultado de nuestro cdigo. Si se dan cuenta la sentencia de impresin (o de salida a pantalla) dice echo "$a es menor que $b", pero el resultado en pantalla dice 1 es menor que 3. Lo anterior implica que, cuando imprimimos variables dentro de una instruccin echo, incluso cuando las variables estn incluidas dentro de las comillas, lo que se imprimir en pantalla ser el valor de dicha variable y no la cadena de caracteres que implica dicha variable, en nuestro ejemplo seran las cadenas "$a" y "$b". Si nuestro deseo es imprimir las cadenas de caracteres mencionadas, entonces debemos utilizar la instruccin de impresin de caracteres especiales \. En otras palabras, la instruccin debera ser echo "\$a es menor que \$b"; Con las correcciones anteriores, el resultado sera el siguiente:

Como resulta claro, el operador \, hace que el carcter especial $ se imprima en pantalla.

Por otro lado, la maoyra de las veces, necesitaremos agrupar ms de una sentencia, dentro de la sentencia IF. Si ese fuese el caso, debemos de tener en cuenta que despus del primer punto y coma, la sentencia IF se acaba, por ello, para encerrar a varias sentencias, dentro de la sentencia IF, debemos utilizar las llaves { } para encerrar a todas las sentencias que deseemos que estn dentro de nuestra estructura de control IF, de la siguiente forma: <?php $a = 1; $b = 3; if($a < $b){ echo "\$a es menor que\ $b<BR>"; echo "El valor de \$a es $a y el de \$b es $b"; } ?> Para el ejemplo anterior, el resultado en pantalla sera el siguiente:

As pus, por favor recuerden de encerrar entre llaves las sentencias que han de ir dentro de una sola sentencia IF. Esto es todo en cuanto a IF, al menos por el momento. En la siguiente entrega veremos algo sobre su complemento perfecto, es decir la sentencia ELSE.

ESTRUCTURAS DE CONTROL. Parte 2 (ELSE)

ELSE
"Si me gustan los chocolates me los como, sino, los regalo" En muchas ocasiones, la evaluacin verdadera de una sentencia no es suficiente, ya que en la mayora de las ocasiones es necesario hacer algo especfico si la evaluacin resulta verdadera o hacer otra cosa si la evaluacin resulta falsa. Para ello existe un complemento de la sentencia IF, que es la sentencia ELSE, la cual se ejecuta slo en caso de que la sentencia no resulte verdadera. As pus, siguiendo con nuestro ejemplo anterior (y cambindolo un poco), tendramos: <?php $a = 3; $b = 1; if($a < $b){ echo "\$a es menor que \$b<BR>";

echo "El valor de \$a es $a y el de \$b es $b"; } else{ echo "\$a es mayor que \$b<BR>"; echo "El valor de \$a es $a y el valor de \$b es $b"; } ?> Siendo que la evaluacin es falsa y definitivamente 3 no es menor que 1, nos vemos en la obligacin de hacer que nuestro programa reaccione ante este hecho y que nos de una respuesta en vez de dejarnos con una enigmtica pgina en blanco (el temor de cualquier escritor,... incluso de un escritor de programas para computadora). Por las razones anteriores, la sentencia ELSE viene en nuestro auxilio y nos brinda la otra solucin posible, si la sentencia no es menor, entonces, debe ser mayor y nos imprime el resultado en pantalla de la siguiente forma:

Sin embargo, hay algo que debera preocuparnos (pero,... siempre hay un pero, no es as?). Si leyeron bien las ltimas dos filas del prrafo anterior dicen si la sentencia no es menor, entonces, debe ser mayor, lo cual no debe ser algo mandatorio, porque, que tal si no es ni mayor ni menor, sino ms bien igual. Esto implica que las sentencias IF...ELSE, no seran suficientes. Habr alguna forma de solucionar esto?, existir alguna sentencia que nos ayude a solventar este problema? La respuesta es S, s que la hay...

ESTRUCTURAS DE CONTROL. Parte 3 (ELSEIF)

ELSEIF
"Si me gustan los chocolates me los como, sino, los vendo, sino, los regalo" Cuando las evaluaciones de una expresin van ms all de una o dos sentencias, entonces es necesario utilizar la instruccin elseif. Es decir, si la expresin 1 es verdadera se ejecutan las sentencias despus de la instruccin IF, sino, se ejecutaran las que acompaan a elseif, si la expresin 1 tampoco cumple con la evaluacin de elseif, entonces se ejecutan las sentencias de else. Para seguir con nuestro queridsimo y entraable ejemplo: <?php $a = 3; $b = 1; if($a < $b){ echo "\$a es menor que \$b<BR>"; echo "El valor de \$a es $a y el de \$b es $b"; } elseif($a>$b){ echo "\$a es mayor que \$b<BR>"; echo "El valor de \$a es $a y el valor de \$b es $b"; } else{ echo "\$a es igual que \$b<BR>"; echo "El valor de \$a es $a y el valor de \$b es $b"; } ?> El resultado en pantalla sera:

Como podemos ver, basados en los valores de las variables, el segmento de cdigo que se ejecutar es el que corresponde a elseif, es decir: elseif($a>$b){ echo "\$a es mayor que \$b<BR>"; echo "El valor de \$a es $a y el valor de \$b es $b"; } Y el resultado en pantalla lo demuestra. Una ltima observacin que agregar es que podemos anidar sentencias IF...ELSEIF una dentro de otra, dentro de otra, dentro de otra, tantas veces como necesitemos, es decir: if(exp1){ sentencias } elseif(exp1){ sentencias } elseif(exp1){ sentencias } Tantas veces como sea necesario. Sin embargo, por razones de legibilidad, esto no es recomendable y hay que decir que existen alternativas al anidamiento de sentencias. Pero todo esto ser, como ya lo habrn adivinado, en otra entrega.

ESTRUCTURAS DE CONTROL. Parte 4 (WHILE) S, la verdad es que las estructuras de control son, por decirlo de alguna manera, la columna vertebral de cualquier lenguaje de programacin y es necesario explicarlas con toda la holgura necesaria. Como recordarn, en la entrega anterior vimos las estructura IF...ELSEIF...ELSE. Esta estructura nos permite tomar una decisin en cuanto al rumbo que nuestro programa tomar, dependiendo de si una condicin se cumple o no se cumple. En esta entrega iniciaremos con lo que se conoce como bucles, lo que no es ms que una sentencia que se repite una y otra vez, hasta que una condicin se cumple. Empezamos:

WHILE
"Mientras sea de da, tengo que trabajar" La sentencia WHILE viene a ser como el primer eslabn de la cadena evolutiva de un bucle, es decir, el bucle ms sencillo que hay. Lo que hace esta sentencia no es ms que decirle a PHP que ejecute las sentencias que contenga la instruccin WHILE, tanto tiempo como la expresin se evale como verdadera (TRUE). La sintaxis de WHILE es: while(expresin){ sentencias } Como ejemplo pondremos lo siguiente: <?php $a = 1; while($a < 11){ echo $a."<BR>"; $a++; } ?> El resultado en nuestro navegador sera el siguiente:

Observaciones necesarias Como podrn observar, la sentencia WHILE, como se habrn dado cuenta, contiene el operador de comparacin menor que (<), el cual le dice a while que la variable $a NO DEBE llegar al nmero 11. Lo mismo pudo haberse logrado cambiando la sentencia por "$a <= 10;", lo cual, de hecho hubiese sido ms exacto y ms legible. Por otro lado, por favor observen la sentencia echo $a."<BR>"; Como ya habrn podido apreciar, despus de la variable, estamos utilizando el operador punto (.), el cual, como ya sabemos, concatena resultados de cadena. En realidad, en nuestro ejemplo, la concatenacin es una seudoconcatenacin, ya que en realidad, el operador punto slo le dice a PHP que despus de la primera pasada por la variable $a (en la cual dicha variable vale 1), agregue un salto de lnea de HTML, es decir la etiqueta <BR>, de tal manera que al repetirse el bucle, siendo que $a todava es menor que 11, la respuesta siguiente (2), se imprima en otra lnea. Este mismo ciclo o bucle, se repetir hasta que la expresin se haga falsa, es decir cuando $a deje de ser menor que 11.

ESTRUCTURAS DE CONTROL. Parte 5 (DO...WHILE)

DO...WHILE
"Haz la limpieza, mientras an es de da"

La similitud entre los bucles DO...WHILE y los bucles WHILE es enorme, salvo que en los bucles DO...WHILE se garantiza la ejecucin de las sentencias internas al menos una vez, dado que la validez de la expresin a evaluar se efecta hasta el final de la sentencia, cosa que no necesariamente debe pasar en un bucle WHILE, el cual evala la validez de la expresin al principio de la sentencia. La sintaxis de la sentencia DO...WHILE es la siguiente: DO{ sentencias }WHILE(expresin) Siguiendo la misma lnea del ejemplo anterior, tendramos: <?php $a = 1; do{ echo $a."<BR>"; $a++; }while($a<=10) ?> Obteniendo exactamente el mismo resultado en pantalla:

Algo que debemos agregar de DO...WHILE en cuanto al ejemplo propuesto, es que aunque $a hubiese valido 11, la impresin de la pantalla se hubiese llevado a cabo. Por qu?, porque la evaluacin de la sentencia se llev a cabo hasta el final del bucle. Esto es una observaci realmente vital, pues si la intencin de nuestro programa hubiese sido la nunca imprimir el nmero 11 en pantalla, entonces nuestro programa hubiese fallado de la manera ms catastrfica posible. Por favor tengan en cuenta lo anterior cuanto utilicen DO...WHILE

ESTRUCTURAS DE CONTROL. Parte 6 (FOR)

FOR
"Para todos estos nios, reparte estos caramelos" La enorme belleza del bucle FOR, es que todo su poder se resume en una sola fila, la igual que toda su complejidad. La sintaxis de un bucle FOR es la siguiente: for (exp1; exp2; exp3) La primera expresin (exp1) se ejecuta una vez, al principio del bucle. La segunda expresin (exp2) se evala al comienzo de cada iteracin o retorno al bucle. La tercera expresin (exp3) se ejecuta al final de cada iteracin o retorno al bucle. Nuestro ejemplo sera: <?php for($i = 0; $i <= 10; $i++){ echo "Esta es la fila ".$i; echo "<BR>"; } ?> El resultado en pantalla sera el siguiente:

Observaciones: En primer lugar, debemos notar que la variable $i es inicializada en 0 y termina en 10, por consiguiente, y en estos momentos podr parecer totalmente irrelevante pero puede llegar a salvarles la vida, el nmero de filas es 11 y no 10. Por otro lado, la variable $i es inicializada en la declaracin del bucle FOR y no antes. Bien, los bucles en PHP representan, como ya vimos, la forma de llevar a cabo una serie de sentencias, basados en la evaluaci, (cierta o falsa) de las expresiones contenidas. En una entrega posterior vamos a aprender una manera muy sencilla de tomar decisiones, siempre claro, dentro de las estructuras de control.

ESTRUCTURAS DE CONTROL. Parte 7 En muchas ocasiones, es necesario forzar al flujo del programa para que se detenga o para que contine. Para esos casos, existen dos sentencias que podemos utilizar break y continue.

BREAK
"De aqu no has de pasar"

La sentencia BREAK escapa del flujo de una sentencia IF, FOR o SWITCH (tranquilos, SWITCH lo veremos en la prxima entrega).

COTINUE
"De aqu en adelante, no me interesa lo que hagas" Esta sentencia se utilizar dentro de la estructura de un bucle para saltar el resto de la iteracin actual del bucle y continuar la ejecucin al comienzo de la iteracin siguiente.

ESTRUCTURAS DE CONTROL. Parte 8 (SWITCH) Como ya vimos, las estructuras IF...ELSEIF...ELSE, son muy tiles para decidir el flujo de nuestro programa dependiendo de la evaluacin de una expresin. Sin embargo, cuando las opciones se vuelven muy grandes, el anidamiento de las sentencias IF...ELSEIF...ELSE se vuelve un verdadero problema en cuanto a estilo y legibilidad. Habr una manera de solventar este problema?... CLARO! para eso tenemos a nuestro buen amigo SWITCH.

SWITCH
"Como un ferrocarril cambiando de va" La sentencia switch evala la expresin y dependiendo del valor de la expresin, as se llevar a cabo un "caso" u otro. La sintanxis de SWITCH es la siguiente: switch(expresin){ case 1: sentencias a ejecutarse en caso de que expresin valga 1; break; case 2: sentencias a ejecutarse en caso de que expresin valga 2; break; default: sentencias a ejecutarse en caso de que expresin no cumpla con ninguno de los valores anteriores; } Como podrn apreciar, la sentencia break se ha colocado al final de cada posible caso de valor de expresin, dicindole a PHP que, si el valor de un caso especfico se cumple, el siguiente caso no habr de ser evaluado, sino que el flujo de nuestro progama continuar inmediatamente despus de la sentencia SWITCH. Adems, noten la presencia de la palabra default, la cual est en nuestro SWITCH como un salvavidas, pues en caso de que expresin no concuerde con ninguno de los posibles casos, la sentencia default se ejecutar. Ejemplo: <?php

$nombre = "Eva"; switch($nombre){ case "Adan": echo "El nombre es Adn"; break; case "Abel": echo "El nombre es Abel"; break; case "Eva": echo "El nombre es Eva"; break; default: echo "No hay nombre que concuerde"; } echo "<BR>Esto est fuera de SWITCH"; ?> La salida en pantalla sera la siguiente:

SWITCH, como ya digimos es una forma de abreviar el trabajo de una serie de IF...ELSEIF...ELSE anidadas en un cdigo mucho ms elegante y mucho ms legible a la hora de hacer una depuracin para encontrar posibles errores o "bugs" en nuestro cdigo. Bien, despus de esto podemos dar por finalizadas las estructuras de control, en nuestra prxima entrega vamos a hablar de los arreglos (arrays) y las ventajas que stos representan.

ARREGLOS. Parte 1 Como ya vimos con anteriordad, las variables son contenedores de datos en los que nosotros (o como veremos ms adelante, el USUARIO) guarda datos que, en un determinado momento y con la ayuda de otros tantos datos, podr convertirse en informacin. Sin embargo, las variables que hemos visto hasta hoy son del tipo $a = un_valor. Habr ocasiones en las que guardar ms de un valor en una sola variable se har necesario, pero en las varibles vistas hasta este momento, no es posible, pues si asignamos primero un valor a una variable y luego le asignamos otro, el nuevo valor sustituir al primero. Para resolver nuestro problema, PHP tiene los arreglos o arrays, que no son ms que variables con la capacidad de guardar ms de un dato. Para declarar un arreglo o array, todo lo que tenemos que hacer es lo siguiente: <?php $libros = array("Don Quijote de la Mancha", "La Saga/Fuga de J.B.", "El Jarama", "Ulises"); echo $libros[3]; ?> Lo anterior, dicho en simples y sencillas palabras dice: 1. La variable $libros es un arreglo de 4 elementos los cuales son "Don Quijote de la Mancha", "La Saga/Fuga de J.B.", "El Jarama", "Ulises" 2. Mande a la pantalla el elemento 4 del arreglo (OJO, no es un error de dedo eso del elemento 4) . Nuestro resultado en pantalla es:

Antes de que la curiosidad nos corroa (claro, si ustedes ya saben programar, por ejemplo en C/C++ el suspenso se les muri hace mucho), hemos de aclarar que la variable $libros contiene 4 elementos: "Don Quijote de la Mancha", "La Saga/Fuga de J.B.", "El Jarama", "Ulises", sin embargo, la instruccin echo dice echo $libros[3]. La

razn de esto es que los arreglos comienzan su conteo de elementos a partir de cero (0). Hay que hacer notar que lo anterior es de suma importancia, pues no podemos hacer referencia a un elemento inexistente dentro de un arreglo, por lo tanto, si nuestra intencin es referirnos al elemento 4 del arreglo, debemos comenzar nuestro conteo desde 0, con lo que la instruccin sera como ya hemos visto echo $libros[3]. En caso de que se estn preguntando el resultado de la referencia $libros[4], en la mayora de las ocasiones no es ms que una pgina en blanco, sin embargo, el resultado tambin podra ser un tanto inesperado. Como quiera que sea, por favor recuerden siempre de empezar su conteo desde 0, algo seguro es que PHP no lo olvidar jams. Eso es en cuanto a lo ms bsico de los arreglos, en nuestro prximo encuentro, algo sobre arreglos asociativos y los arreglos multidimensionales.

ARREGLOS. Parte 2 ARREGLOS ASOCIATIVOS Supongamos que estamos construyendo una pgina Web en la que, dependiendo del idioma escogido, as se desplegar un saludo en nuestra pantalla del navegador. Una solucin podra ser la siguiente: <?php $saludos = array("Hello!", "Salut!", "Que taaaaaal!"); echo $saludos[2]; ?> La impresin en pantalla sera:

Antes que nada, por qu se imprime el tercer saludo y no el nmero 2? (Una multa de chocolates si no sabe la respuesta!)

Sin embargo, lo ms lgico sera que, en base a la seleccin de un idioma, el saludo respectivo se desplegara. Para ello utilizamos los arreglos asociativos. Considere ahora la siguiente adicin a nuestro ejemplo anterior: <?php $saludos = array("Ingls"=>"Hello!", "Francs"=>"Salut!", Espaol"=>"Que taaaaaal!"); echo $saludos["Espaol"]; ?> El resultado en pantalla es exactamente el mismo que en el ejemplo anterior, pero claro, esta nueva adicin nos permite ser un poco ms elegantes, adems de hacernos ms fcil la correccin o modificacin de nuestro cdigo, haciendo referencia a la generalidad y no a la especificidad. ARREGLOS MULTIDIMENSIONALES Hasta hoy hemos trabajado con arreglos de una sola dimensin, es decir con un slo ndice (el ndice es el nmero que encerramos dentro de los corchetes en la referencia al array). Sin embargo, existen los arreglos multidimensionales de la forma $a[x][y]. Podemos pensar en el ejemplo anterior como una tabla en la que el primer ndice son las filas y el segundo las columnas, de tal manera que si tuvisemos el siguiente arreglo: $canciones = array( array("Quin me ha robado el mes de abril?", "El Blues de la Soledad", "El breve espacio",), array("Naturaleza muerta", "Cuando el mar te tenga", "Luca")); Y luego enviamos un echo $canciones[0][1], la impresin en pantalla nos dara como resultado "El Blues de la Soledad" (Y ese no es un resultado, es EL resultado!) Para entender un poco mejor, hemos de decir que podemos hacer una clasificacin dentro de nuestros arreglos multidimensionales para que la clasificacin e impresin en pantalla nos resulte ms sencilla. Para ver esto, por favor observen el siguiente vdeo:

Bien, espero que la parte de arreglos les sea de mucha utilidad para crear programas interesantes (sabemos perfectamente que s). En nuestra prxima entrega, vamos a aprender a trabajar y a operar con cadenas.

OPERACIONES CON CADENAS

La siguiente frase: "Pablito clav un clavito en la calva de un calvito", es una cadena de caracteres que puede ser grabada en una variable en PHP de la forma que ya conocemos, es decir de la forma $trabalenguas = "Pablito clav un clavito en la calva de un calvito". Sabiendo lo anterior, trabajemos con los operadores de cadenas en PHP. strlen: La funcin strlen obtiene la longitud de una cadena y devuelve un nmero entero. Aplicando nuestra variable, el cdigo es el siguiente: <?php $trabalenguas = "Pablito clav un clavito en la calva de un calvito"; echo strlen($trabalenguas); ?> El resultado de esto es el siguiente:

substr: Esta funcin devuelve una subcadena de la cadena original o, dicho de otra forma, una parte de la cadena. Los argumentos de substr son tres: el primero es la cadena o variable que contiene la cadena; el segundo es un nmero entero que representa la posicin en la cual la subcadena comenzar a ser extrada; y el tercer argumento opcional, que es la cantidad de caracteres que sern extrados. Con nuestra cadena, el ejemplo sera: <?php $trabalenguas = "Pablito clav un clavito en la calva de un calvito"; echo substr($trabalenguas, 17); ?> El resultado en pantalla es el siguiente:

str_replace: Esta funcin reemplaza una subcadena dentro de la cadena original, por otra subcadena. Los argumentos que esta funcin recibe son tres: la subcadena que ha de buscar; la subcadena que que debe reemplazar a la primera; y la cadena original o la variable que contiena la cadena original. <?php $trabalenguas = "Pablito clav un clavito en la calva de un calvito"; echo str_replace("Pablito", "Pedrito", $trabalenguas); ?> Nuestro resultado sera:

Las anteriores son probablemente las funciones de cadena ms utilizadas. Existen muchas otras funciones, pero hara falta mucho ms espacio para explicarlas todas, sin embargo vamos a mencionar algunas ms que podran ser de suma importancia. strtolower: Pasa de maysculas a minsculas. El nico argumento que recibe es la cadena o la variable que contiene la cadena. Si $a = "ABCD", entonces echo strtolower($a); imprimira abcd.

strtoupper: Pasa de minsculas a maysculas. El nico argumento que recibe es la cadena o la variable que contiene la cadena. Si $a = "abcd", entonces echo strtoupper($a); imprimira ABCD. substr_count: Cuenta el nmero de apariciones de una subcadena. echo substr_count ("Esta es la regla del es", "es"); imprime 2, pues la subcadena "es" aparece 2 veces en la cadena original, la cadena Esta no es contada pues, si bien Esta comienza con es, la primera de las letras es mayscula. ucwords: Hace que la primera letra de cada palabra de la cadena se convierta a mayscula. echo ucwords("hola mundo"); imprime Hola Mundo. Un breve ejemplo de las funciones de cadena es el siguiente:

Esto es probablemente lo ms importante en cuanto a funciones de cadena. En nuestra prxima entrega aprenderemos sobre las expresiones regulares dentro de PHP.

EXPRESIONES REGULARES Debemos entender por una expresin regular una cadena de caracteres que se encuentra con regularidad en una cadena compleja de caracteres. PHP implementa una serie de funciones para la manipulacin de expresiones regulares. En esta entrega vamos a estudiar esas funciones y su utilidad en un programa de PHP. Las funciones para la manipulacin de expresiones regulares ms utilizadas que podemos encontrar en PHP son:

ereg()

ereg_replace() eregi() eregi_replace()

Todas estas funciones toman como primer argumento la cadena o expresin regular con la que se ha de trabajar. Empecemos: ereg("expresin", $contenedor, $arreglo) Encuentra coincidencias de una expresin regular dentro de una cadena. ereg("rojo", $colores); El ejemplo anterior devolvera verdadero (TRUE), si la cadena de caracteres "rojo" se encuentra en la variable $colores. Los argumentos que toma son: la expresin regular que se ha de buscar, la variable que contiene la cadena, un argumento opcional en el que se guardan las coincidencias. As, el siguiente cdigo: <?php $expresion = "Rpidos corren los carros por el ferrocarril"; if(ereg("arr", $expresion, $regs)){ for($i=0; $i<=count($regs);$i++){ echo "Coincidencia $i<BR>"; } } ?> Nos presenta el siguiente resultado:

Como podemos ver, el programa encontr dos coincidencias de la expresin regular (o cadena) "arr" y nos lo muestra en pantalla. ereg_replace("expresion", "reemplazo", $contenedor) La funcin reemplaza una cadena por otra, contenidas dentro de la variable contenedor, de tal forma que al enviar una salida a la pantalla, se imprimir la cadena con los reemplazos respectivos, sustituyendo a la expresin regular original. Esto trabaja de la siguiente manera: <?php $expresion = "Rpidos corren los carros por el ferrocarril"; echo ereg_replace("Rpidos", "Lentos", $expresion); ?> Produce la siguiente salida:

Como podemos ver, la expresin "Rpidos", ha sido sustituida por "Lentos". eregi("expresin", $contenedor, $arreglo) Encuentra coincidencias de una expresin regular dentro de una cadena sin diferenciar maysculas de minsculas. Por lo dems, el funcionamiento es idntico a ereg(). eregi_replace("expresion", "reemplazo", $contenedor)

La funcin reemplaza una cadena por otra, contenidas dentro de la variable contenedor, de tal forma que al enviar una salida a la pantalla, se imprimir la cadena con los reemplazos respectivos, sustituyendo a la expresin regular original, sin distincin entre maysculas y minsculas. Esto es posiblemente lo ms utilizado en cuanto a las expresiones regulares dentro de PHP, espero les sea de utilidad. En nuestra prxima entrega hablaremos de las funciones y su poderosa utilidad.

LAS FUNCIONES. Parte 1 Hasta este momento hemos utilizado algunas funciones predifinidas en PHP, como las de manejo de expresiones regulares, o las de operaciones con cadenas, pero no tenemos totalmente claro lo que es una funcin. Esto podr sonar a conducir un automvil mucho antes de aprender a caminar, pero no es as, ya que las funciones predefinidas en PHP son ms sencillas de utilizar que una funcin definida por el usuario, por una sencilla razn: en las funciones predifinidas, las reglas de cmo operar con ellas ya vienen dadas por PHP; en cambio en las definidas por el usuario (lase nosotros mismos), es necesario tener claro qu queremos que nuestra funcin haga, qu tipo de parmetros ha recibir, que tipo de valor ha de retornar, en caso de que retorne algn valor, en dnde habremos de hacer la llamada a la funcin, etc. Todo lo anterior, es precisamente lo que aprenderemos en esta entrega. Para comenzar, diremos que una funcin es un conjunto de instrucciones que se ejecutan cada vez que son llamadas en el cuerpo central de nuestro programa. La utilidad de las funciones es enorme, si nos ponemos a pensar que una llamada a una funcin nos ahorrara decenas (o cientos) de lneas de cdigo, pues bastara una sola llamada a la funcin cada vez que sea necesario, en vez de escribir una y otra vez el mismo cdigo con distintos parmetros. Una funcin est compuesta por la palabra reservada para PHP function, un nombre y una lista de parmetros, en caso que reciba parmetros. Para declarar una funcin, debe hacerse de la siguiente forma: function nombre_de_funcion (lista_de_parametros) Un breve ejemplo es el siguiente: <?php function hola(){ echo "<B>Esta es una prueba</B>"; }

echo "Este es el cuerpo de nuestro programa"; echo "<BR>"; echo "Aqu est la llamada a la funcin:<BR>"; hola(); ?> El resultado de este pequeo programa es el siguiente:

En el ejemplo, la funcin hola(), no retorna ningn valor, y no recibe parmetro alguno (por eso los parntesis vacos). Todo lo que hace es enviar un mensaje a la pantalla que dice "Esta es una prueba" con un atributo de negrita. Una vez ms, la utilidad real de esta funcin estriba en el hecho de que si en algn momento nuestro programa crece de manera exponencial y se nos hace necesario imprimir, digamos treinta veces la cadena "Esta es una prueba" (vaya un proyecto de programacin que sera, no lo creen?), sera necesario escribir treinta veces la instruccin echo "Esta es una prueba"; lo cual se hace un poco ms difcil que simplemente escribir la llamada a la funcin hola(). Por otro lado, en caso de que necesitasemos cambiar el mensaje desplegado, tal vez por algo un tanto ms profesional como "Esta ya no es una prueba", es mucho, mejor an, muchsimo mejor cambiar este mensaje una vez, en la llamada a la funcin, que treinta veces, en cada instruccin echo. Como habrn visto, las funciones nos pueden ahorrar una cantidad enorme de trabajo. Por esa razn, PHP incluye en sus libreras, una cantidad bastante grande de funciones preformateadas, cosa que agradecemos en cantidad. Nuestra siguiente reunin trata sobre los parmetros en las funciones (despus de esto... la locura) y para que nos sirven.

FUNCIONES. Parte 2 Parmetros Los parmetros en las funciones son los valores que la funcin recibe para poder operar y llevar a cabo todas las instrucciones que dicha funcin tiene en su cuerpo. Valor de retorno El valor de retorno es el valor que la funcin retorna al cuerpo del programa o al cuerpo de la funcin que la llam (si, como ya habrn adivinado, las funciones tambin pueden anidarse y una funcin puede llamar a otra funcin) para poder operar con ese valor retornado. Para saber cmo funcionan los dos conceptos anteriores, veamos otro ejemplo: <?php

function iva($precio_original){ $precio_final = ($precio_original * 0.13) + $precio_original; return $precio_final; } echo "<CENTER>Clculo del Impuesto sobre el Valor Agregado (IVA)</CENTER>"; $producto = "Disco de Joaqun Sabina"; $precio_original = 15.50; echo "El producto es: ".$producto."<BR>"; echo "El precio original es: ".$precio_original."<BR>"; echo "El precio final es: "; echo iva($precio_original); ?> El resultado en pantalla es el siguiente:

Bien, como podrn ver, el trabajo con funciones facilita la existencia del programador (y vaya que s lo hace) de una forma enorme. En el caso de que necesitacemos cambiar el porcentaje del impuesto (ojal que a un porcentaje menor), bastara con cambiar el valor nica y exclusivamente en el cuerpo de la funcin, y no en cada operacin que efectuamos a lo largo del programa. De esta manera, el parmetro que la funcin ha recibido es el precio original del producto (15.5) y el valor de retorno es el valor contenido en la variable $precio_final, el cual es el resultado de una opreacin matemtica llevada a cabo dentro de la funcin. Hasta aqu con la primera parte de las funciones, en nuestra siguiente entrega aprenderemos un poco ms sobre los parmetros de las funciones.

FUNCIONES. Parte 3 En esta entrega vamos a aprender sobre los parmetros en las funciones. Primero que nada es necesario mencionar que la informacin que se le pasa a las funciones puede pasrsele por medio de una serie de constantes y/o variables separadas por comas, como ya vimos en la entrega anterior. Los parmetros que se pasan a las funciones pueden ser por valor, por referencia y parmetros por defecto. Parmetros por valor: Por defecto, los parmetros se pasan por valor. Esto significa que si el valor de la variable que se pasa como parmetro a la funcin sufre algn cambio en su valor dentro de la funcin, ste cambio no afectar al valor original de la variable. El ejemplo siguiente aclara las dudas de mejor manera: <?php $original = "Esto es fuera de la funcin";

function cambio($original){ $original = "Esto es dentro de la funcin"; echo $original; } echo "Fuera de la funcin la variable es: "; echo $original."<BR>"; echo "Dentro de la funcin, la variable es: "; cambio($original); echo "<BR>Esto est fuera de la funcin de nuevo: "; echo $original; ?> Lo anterior produce el siguiente resultado:

Parmetros por referencia: Cuando se pasan parmetros por referencia, le damos autorizacin a la funcin (qu tal?, verso sin mucho esfuerzo!) de cambiar permanentemente el valor original de la variable. Para pasar siempre un parmetro por referencia, basta con anteponer un ampersand (&) al nombre del parmetro en la definicin de la funcin de la siguiente forma: <?php $original = "Esto es fuera de la funcin"; function cambio_total(&$original){

$original = "Esto es dentro de la funcin y fuera de la funcin"; echo $original; } echo "Fuera de la funcin la variable es: "; echo $original."<BR>"; echo "Dentro de la funcin, la variable es: "; cambio_total($original); echo "<BR>Esto est fuera de la funcin de nuevo: "; echo $original; ?> El cdigo anterior produce la siguiente salida:

Como se darn cuenta, la variable $original cambia definitivamente de valor al entrar al cuerpo de la funcin, gracias a que su parmetro (es decir la variable $original) se ha pasado por referencia. Parmetros por defecto: Los valores por defecto son expresiones constantes y no variables, que se pasan a la funcin. Una observacin importante que debemos hacer, es que los parmetros por defecto deben ser declarados a la derecha de cualquier parmetro que no sea por defecto pasado a la funcin. El ejemplo siguiente demuestra lo que significa pasar un parmetro por defecto: <?php function por_defecto($autor, $libro = "Cien aos de soledad"){

return "El libro es $libro y su autor es $autor"; } echo por_defecto("Gabriel Garca Mrquez"); ?> Como ya habn imaginado, lo anterior produce la siguiente salida:

Muy bien, en cuanto a funciones, lo anterior es lo ms importante. Estamos seguros que con esto, sus programas se volvern verdaderamente intensos e interesantes. En nuestra prxima entrega, aprenderemos sobre estilo y algunos consejos de cmo hacer nuestros programas ms profesionales y documentados.

LA IMPORTANCIA DEL ESTILO Y DE LA ESTANDARIZACIN Hasta el momento, en cada uno de los "miniprogramas" que hemos desarrollado, hemos seguido una cierta cantidad de normas que, si bien no son obligatorias para construir un progama en PHP, resultan verdaderamente vitales (y en caso de que no trabajen solos, sino con un grupo de programadores, es una de las costumbres ms importantes y agradecidas por los dems) en programas complejos y con muchas lneas de cdigo. A continuacin, veremos con detalle algunas de estas normas, adems de agregar otras tantas. INDENTACIN La indentacin en los programas (no slo en los desarrollados en PHP, sino en casi todos los lenguajes de programacin) es un buen hbito para la mayor comprensin de los bloques de cdigo que se van anidando, y que representan un nmero de instrucciones que llevan a cabo un fin comn (en la gran mayora de las ocasiones). As por ejemplo, comparemos estos dos segmentos de cdigo: <?php $producto = "Camisa"; function descubriendo($producto){

if ($producto == "Camiseta"){ echo "El producto es una Camiseta"; echo "Adis"; } elseif ($producto == "Camisa"){ echo "El producto es una Camisa"; echo "Adis"; } else echo "No hay producto"; } echo "El producto guardado es: <BR>"; descubriendo($producto); ?> <?php $producto = "Camisa"; function descubriendo($producto){ if ($producto == "Camiseta"){ echo "El producto es una Camiseta"; echo "Adis"; } elseif ($producto == "Camisa"){ echo "El producto es una Camisa"; echo "Adis"; } else echo "No hay producto"; } echo "El producto guardado es: <BR>"; descubriendo($producto); ?> Si bien ambos programitas hacen exactamente lo mismo, con cul de los dos se quedaran? La indentacin nos sirve para comprender el orden en el que el programa fluye, de tal forma que nos resulte muy difcil perdernos, por ejemplo, en el orden en el que un if...elseif...elseif...elseif...else, est anidado en nuestro programa.

La indentaci, adems, no afecta el tamao de nuestro archivo, ya que los espacios en blanco no son tomados en cuenta por el "compilador" de PHP. En nuestra prxima reunin, hablaremos sobre los comentarios y su enorme importancia. De momento, la peor de las batallas, es precisamente la que nunca se lleva cabo (que conste, esto tiene que ver exclusivamente con las batallas que libramos con nosotros mismos y nuestros conocimientos

LOS COMENTARIOS Continuando con el estilo y la estandarizacin, debemos hablar sobre una de las armas de entendimiento ms fabulosas que los lenguajes de programacin (incluyendo PHP, claro est) tienen: LOS COMENTARIOS. La razn de la existencia de los comentarios estriba en la importancia de mantener el flujo de nuestro programa bien documentado, de tal manera que, si otro programador llega y pretende continuar o aadir algo a nuestro programa, pueda, gracias a los comentarios, enterarse de los procesos, variables y estructuras de control que existen en nuestro programa, a la par de saber para qu sirve cada una de stas. Los comentarios en PHP pueden hacerse de dos formas, ambas al estilo C/C++, es decir: los comentarios de lnea, que se hacen aadiendo al final de cada lnea de cdigo los caracteres // ms el respectivo comentario y los comentarios multilnea, es decir que abarcan ms de una lnea de nuestro programa, que inician con /* y terminan */, este comentario puede abarcar ms de una lnea. Imaginemos el siguiente programa: <?php $a = 15.55; function calculo($a){ $m = 0.13; return $f = ($a * $m) + $a; } echo "El precio final del producto es: ".calculo($a); echo "Gracias por su compra<BR>";

echo "Vuelva Pronto!"; ?> El programa anterior produce una salida del siguiente tipo:

El programa obviamente cumple con su funcin, pero comparemos la siguiente adicin: <?php $a = 15.55; //variable que representa el precio original del producto sin impuesto function calculo($a){ //funcin que calcula el precio final del producto, con todo e impuesto $m = 0.13; //variable que guarda el porcentaje del impuesto que se aplicar return $f = ($a * $m) + $a; //clculo del impuesto al producto y retorno del valor al cuerpo del programa } echo "El precio final del producto es: ".calculo($a)."<BR>"; //Impresin en pantalla del precio final del producto echo "Gracias por su compra<BR>"; //Despedida echo "Vuelva Pronto!"; //Despedida ?> La salida es exactamente la misma, es decir:

Lo cual nos da a entender que los comentarios no cambian en lo absoluto los resultados del programa, pero nos dan una idea clara de lo que cada una de las lneas de cdigo de nuestro programa hacen. En nuestro siguiente encuentro hablaremos de lo que significa la estandarizacin en nuestro programas, por el momento, por favor recuerden que la vida es bella y que los programas son hermosos, es decir, A vivir y a Programar!, hasta pronto.

LA ESTANDARIZACIN La estandarizacin de un programa, no es ms que tener las ideas claras de lo que queremos que nuestro programa haga, y la forma en la que nuestro programa habr de ser construido. Cuando estamos construyendo un programa es necesario aclarar la forma en la que el flujo del programa habr de correr, es decir, tener una idea de las ramificaciones, decisiones, funciones, variables, etc., que nuestro programa debe tener. As por ejemplo, supongamos que tenemos que hacer un programa que calcule el precio de un producto dependiendo de su precio original, agregando un impuesto especfico. Cmo aplicaramos la estandarizacin? Empecemos por decir que debemos de tener clara la forma en la que nuestro programa se va a presentar ante el usuario. Siendo que an no hemos visto las salidas HTML combinadas con PHP, la salida ser,... digamos no tan espectacular como debera. Sin embargo, un comienzo en nuestra estandarizacin debera ser el preguntarnos desde lo ms trivial hasta lo ms esencial como:

La justificacin de los diferentes tipos de texto ser? La insercin del precio original ser a travs de? La presentacin de la salida ser? Habr indentacin en nuestro programa o no? En dnde insertaremos los comentarios? Cuntas funciones tendr, en caso de tener funciones?

Las respuestas a lo anterior podran ser: 1. Los ttulos estarn centrados, con una letra Verdana, con el atributo de resaltado o negrita y en color Azul. 2. La insercin de los textos ser a travs de cuadros de texto 3. La salida ser presentada en texto plano, en letra Times New Roman 4. El cdigo fuente de nuestro programa ser indentado 5. Los comentarios sern de todo tipo, dependiendo del largo del comentario 6. Slo habr un funcin en nuestro programa, la cual calcular el precio final, en base el parmetro del precio original del producto. En esta seccin podramos decir algo del pseudocdigo, pero nos requerira varios captulos extra. Sin embargo, podemos decirles que el pseudocdigo es el salvavidas de los programadores a gran escala, sobre todo porque aclara muchas ideas en cuanto a la forma en la que el cdigo fuente de nuestro programa habr de escribirse. El pseudocdigo es la "traduccin" de los comandos y funciones que un programa habr de desarrollar con base en su cdigo fuente. As por ejemplo: ... declaracin de variable precio declaracin de la funcin calculo la variable precio final ser igual a la multiplicacin de la variable precio por el valor del impuesto ms el precio original retornar el valor de la variable precio_final ... Este segmento de pseudocdigo sera "traducido" a PHP como: ... $precio = 17.00 function calculo($precio){ return $precio_final = ($precio * 0.13) + $precio; } ... Como puede verse, el pseudocdigo ayuda a clarificar lo que nuestro cdigo fuente ha de hacer. Si bien es cierto en este pequesimo fragmento de cdigo el pseudocdigo parece inservible e incluso una fuente de atraso, la verdad es que en programas de gran calibre, puede ser la diferencia entre un programa que corre sin problemas y uno que no.

Muy bien, en nuestras prximas entregas, vamos a desarrollar el proyecto propuesto algunos prrafos arriba. Claro est, primero que nada aprenderemos sobre la combinacin entre HTML y PHP.

SALIDAS HTML Asumimos desde ya que todos poseemos un conocimiento al menos bsico de lo que implica HTML y una pgina web bsica, de tal manera que no nos vamos a detener a explicar con detalles para qu sirve cada vieta HTML que iremos insertando. (Para ms referencia pueden consultar el curso de HTML brindado en aulafcil.com) En esta entrega vamos a aprender de una manera ms detallada la forma en la que podemos combinar HTML y PHP para generar una pgina dinmica que no solamente servir para usos en Internet, sino tambin puede servir como un programa en una red interna. Recordamos todos el proyecto a desarrollar? Slo en caso de que no: tenemos que hacer un programa que calcule el precio de un producto dependiendo de su precio original, agregando un impuesto especfico. Recordamos todos la estandarizacin que ibamos a tener? De nuevo, en caso de que no: 1. Los ttulos estarn centrados, con una letra Verdana, con el atributo de resaltado o negrita y en color Azul. 2. La insercin de los textos ser a travs de cuadros de texto 3. La salida ser presentada en texto plano, en letra Times New Roman 4. El cdigo fuente de nuestro programa ser indentado 5. Los comentarios sern de todo tipo, dependiendo del largo del comentario. 6. Slo habr un funcin en nuestro programa, la cual calcular el precio final, en base el parmetro del precio original del producto. Agregaremos un par de cosas ms:

Las vietas HTML estarn siempre en mayscula. Las sentencias PHP estarn siempre en minscula Vamos por partes, les parece?

En primer lugar vamos a nuestro editor de texto y abramos un documento nuevo:

En este documento nuevo comenzaremos la construccin de nuestra pgina dinmica de la siguiente manera: <HTML> <HEAD> <TITLE>Proyecto Pgina Dinmica</TITLE> </HEAD> <BODY> <!-- Formato del Ttulo de la pgina--> <FORM METHOD = "POST" ACTION = "proyecto_1.php"> <FONT FACE = "Verdana" COLOR = "#1200FF"> <CENTER><B><H2>Sistema de Clculo de Impuesto de Producto</H2></B></CENTER> </FONT> Por favor digite el precio del producto: <INPUT TYPE = TEXT NAME = "precio_original" MAXLENGHT = 5 SIZE = 5> <P> <INPUT TYPE = "Submit" VALUE = "Calcular Precio"> <?php /********************************************************************** ***********************

* Programa que calcula el precio final de un producto, a partir de su precio original ms un impuesto * Autor: * Fecha: ********************************************************************** ***********************/ function calculo($precio_original){ //Funcin que calcula el precio final return $precio_final = ($precio_original * 0.13) + $precio_original; //retorna precio final } echo "<BR><H2><CENTER>El precio final es: ".calculo($precio_original)."</CENTER></H2>"; /*La salida ser centada como Header 2, incluyendo el precio final (calculado en la funcin calculo()*/ ?> El resultado es el siguiente:

En nuestras siguientes entregas, vamos a continuar con este proyecto, el cual crecer, y se mejorar. Esperamos que en cuanto a las salidas HTML todo est claro. De momento, Hasta Pronto!

NUESTRO PROYECTO. Parte 2 Antes de continuar con nuestro proyecto, expliquemos una funcin que nos ser de gran ayuda cuando desarrollemos nuestro programa.Hablamos de una de las funciones predefinidas por PHP: date(). La funcin date() presenta la fecha con base a ciertos parmetros que se escriben dentro de los parntesis. Dichos parmetros son: formato en caracteres a A B c Decripcin En minscula, retorna am o pm En Mayscula, retorna AM o PM Presenta tiempo de Internet Fecha tipo ISO 8601 (agregado en PHP 5) Valor devuelto am o pm AM o PM 000 a 999 2004-02-

formato en caracteres

Decripcin

Valor devuelto 12T15:19:21+00:00

d D F g G h H i I (i mayscula) j l ('L' Minscula) L m M n O r s S t T U w

Da del mes, 2 digitos con precedencia de ceros Presentacin textual en formato de tres letras del da de la semana (Ingls)

01 to 31 Mon a Sun

Presentacin textual completa del mes del ao January a December (Ingls) Formato de 12 horas, sin aadido de ceros precedentes Formato de 24 horas sin ceros precedentes Formato de 12 horas, con aadido de ceros precedentes Formato de 24 horas con ceros precedentes Minutes with leading zeros Dice si el da del ao est en formato de ahorro (Estados Unidos) Da del mes sin ceros precedentes 1 a 12 0 a 23 01 a 12 00 a 23 00 to 59 1 si est en formato de ahorro, 0 si no lo est. 1 a 31

Presentacin textual completa del da del mes Sunday a Saturday (Ingls) Nos dice si es ao bisiesto o no Presentacin numrica del mes, con ceros precedentes 1 si es bisiesto, 0 sino. 01 a 12

Presentacin abreviada del mes (tres letras en Jan a Dec Ingls) Presentacin numrica del mes del ao sin ceros precedentes Diferencia del tiempo de Greenwich (GMT) en horas Fecha formateada al estilo RFC 2822 Segundos con ceros precedentes Sufijos ordinales en ingls para los das de la semana. Formato de dos caracteres. Nmero de los das del mes dado 1 a 12 Ejemplo: +0200 Ejemplo: Thu, 21 Dec 2000 16:01:07 +0200 00 a 59 st, nd, rd or th. Trabaja bien con el parmetro j 28 a 31

Formato temporal de la computadora en la que Ejemplos: EST, MDT ... se est trabajando Segundos al estilo de la poca Unix representacin numrica de los das de la semana (empezando de 0) (January 1 1970 00:00:00 GMT) 0 (para el Domingo) a 6 (para el Sbado)

formato en caracteres W Y y z Z

Decripcin Nmero de la semana del ao al estilo ISO8601 empezando en Lunes(agregado en PHP 4.1.0) Representacin anual completa Representacin anual de dos dgitos El da del ao, empezando de cero (0)

Valor devuelto Ejemplo: 42 (es la 42a semana del ao) Ejemplos: 1999 o 2003 Ejemplos: 99 o 03 0 a 365

Zona temporal contado en segundos. El conteo de las zonas temporales al oeste de UTC es -43200 a 43200 siempre negativo, y el de la zonaeste de UTC es siempre positivo.

Si bien en nuestro proyecto esta poderosa funcin no ser utilizada en toda su capacidad (la cual como podemos ver, es enorme), nos servir para darle una mejor presentacin. Cmo?, lo veremos en nuestro prximo encuentro. Por el momento, recuerden que "Nadie puede matar la parte de s que ha hecho vivir en los otros" (ngeles Mastreta), as que hagamos que nuestros conocimientos vivan en los dems, es decir: compartamos y programemos.

NUESTRO PROYECTO. Parte 3 En nuestra ltima entrega aprendimos sobre el uso de la funcin date(). En esta entrega aplicaremos lo que aprendimos a nuestro proyecto. Como recordarn, nuestro proyecto es: tenemos que hacer un programa que calcule el precio de un producto dependiendo de su precio original, agregando un impuesto especfico. La salida de nuestro proyecto, hasta donde est, es la siguiente:

No sera fantstico que el programa presentara en pantalla la fecha en la que se lleva a cabo la transaccin, en otras palabras, la fecha de hoy? Bien, con base a lo que aprendimos sobre date(), podemos hacer la siguiente adicin a nuestro cdigo: <HTML> <HEAD> <TITLE>Proyecto Pgina Dinmica</TITLE> </HEAD> <BODY> <!-- Formato del Ttulo de la pgina--> <FORM METHOD = "POST" ACTION = "proyecto_1.php"> <FONT FACE = "Verdana" COLOR = "#1200FF"> <CENTER><B><H2>Sistema de Clculo de Impuesto de Producto</H2></B></CENTER> </FONT> <BR> <BR> <?php

//Imprimiento la fecha de hoy en la pantalla $fecha = date("j-m-Y"); echo "<H2> $fecha </H2>"; ?> Por favor digite el precio del producto: <INPUT TYPE = TEXT NAME = "precio_original" MAXLENGHT = 5 SIZE = 5> <P> <INPUT TYPE = "Submit" VALUE = "Calcular Precio"> <?php /********************************************************************** *********************** * Programa que calcula el precio final de un producto, a partir de su precio original ms un impuesto * Autor: * Fecha: ********************************************************************** ***********************/ function calculo($precio_original){ //Funcin que calcula el precio final return $precio_final = ($precio_original * 0.13) + $precio_original; //retorna precio final } echo "<BR><H2><CENTER>El precio final es: ".calculo($precio_original)."</CENTER></H2>"; /*La salida ser centrada como Header 2, incluyendo el precio final (calculado en la funcin calculo()*/ ?> La adicin a nuestro proyecto no es, digamos, sustancial, sin embargo, una fecha puesta en el lugar indicado siempre es bien agradecida.

La adicin anterior, le da a nuestro programa la siguiente salida:

Como vemos, la fecha nos dice que estamos en el cinco de octubre del ao 2006, y luego la salida del programa sigue siendo la misma. En nuestra prxima entrega, agregaremos un poco ms de ayuda para nuestros queridsimos usuarios. De momento por favor, por favor recuerden: "No hacen falta bombas para destruir un sitio. No hace falta nada. Abandnalo y se caer en pedazos" (Robert Silverberg). Por favor, no abandonen nunca el deseo de aprender, o se caer en pedazos

NUESTRO PROYECTO. Parte 4 Hola de nuevo! En esta entrega vamos a aadirle a nuestro proyecto algunas cosas que le ayudarn al usuario. Hasta el momento, la salida de nuestro proyecto es la siguiente:

Nuestra interaccin con el usuario se reduce a la solicitud del precio de un producto. No sabemos en lo absoluto qu tipo de producto es. En esta entrega, le vamos a dar la oportunidad al usuario de decirnos qu tipo de producto es. Sin embargo, antes de comenzar, diremos que en esta entrega presentaremos una forma de interactuar con el usuario, aunque tal vez no sea la ms adecuada. As y todo, es bueno que conozcamos todas las posibilidades. Lo que haremos es agregar un cuadro de texto en el que el usuario podr introducir el nombre del producto y otro cuadro en el que introducir el tipo del producto. Las adiciones a nuestro cdigo sern las siguientes:

Dos cuadros de texto HTML para que el usuario introduzca el nombre del producto y el tipo del producto respectivamente La salida del programa no slo imprimir el precio, sino tambin el tipo y el nombre del producto.

La forma de hacerlos podra ser el siguiente segmento de cdigo: PARA LOS CUADROS DE TEXTO

<INPUT TYPE = TEXT NAME = "tipo_producto" MAXLENGHT = 20 SIZE = 20> <INPUT TYPE = TEXT NAME = "nombre_producto" MAXLENGHT = 15 SIZE = 15> PARA LA SALIDA

echo "<BR><H2><CENTER>El Tipo de producto es: $tipo_producto. El nombre es: $nombre_producto. El precio final es: ".calculo($precio_original)."</CENTER></H2>";

Nuestro csigo final sera: <HTML> <HEAD> <TITLE>Proyecto Pgina Dinmica</TITLE> </HEAD> <BODY> <!-- Formato del Ttulo de la pgina--> <FORM METHOD = "POST" ACTION = "proyecto_1.php"> <FONT FACE = "Verdana" COLOR = "#1200FF"> <CENTER><B><H2>Sistema de Clculo de Impuesto de Producto</H2></B></CENTER> </FONT> <BR> <BR> <?php //Imprimiento la fecha de hoy en la pantalla $fecha = date("j-m-Y"); echo "<H2> $fecha </H2>"; ?> <!--INSERTANDO ADICIONES--> Por favor inserte el tipo de producto: <INPUT TYPE = TEXT NAME = "tipo_producto" MAXLENGHT = 20 SIZE = 20><BR> Por favor inserte el nombre del producto:

<INPUT TYPE = TEXT NAME = "nombre_producto" MAXLENGHT = 35 SIZE = 35><BR> <!--HASTA AQU PRIMERAS INSERCIONES--> Por favor digite el precio del producto: <INPUT TYPE = TEXT NAME = "precio_original" MAXLENGHT = 5 SIZE = 5> <P> <INPUT TYPE = "Submit" VALUE = "Calcular Precio"> <?php /********************************************************************** *********************** * Programa que calcula el precio final de un producto, a partir de su precio original ms un impuesto * Autor: * Fecha: ********************************************************************** ***********************/ function calculo($precio_original){ //Funcin que calcula el precio final return $precio_final = ($precio_original * 0.13) + $precio_original; //retorna precio final } //INSERCIONES EN CDIGO PHP echo "<BR><H2><CENTER>El tipo de producto es: $tipo_producto</CENTER></H2>"; echo "<BR><H2><CENTER>El nombre del producto es: $nombre_producto</CENTER></H2>"; //HASTA AQU INSERCIONES EN CDIGO PHP echo "<BR><H2><CENTER>El precio final es: ".calculo($precio_original)."</CENTER></H2>";

/*La salida ser centada como Header 2, incluyendo el precio final (calculado en la funcin calculo()*/ ?> La salida de estas adiciones es:

Como vern, estas adiciones le dan un toque de profesionalismo a nuestro sistema, adems claro, que el usuario tiene la oportunidad de introducir ms datos. En nuestra siguiente entrega, mejoraremos estas nuevas adiciones.

NUESTRO PROYECTO. Parte 5

En nuestra entrega anterior, vimos como nuestro proyecto creci y le dio ms opciones al usuario. En esta entrega, vamos a mejorar esas opciones, aunque restringiendo un poco al usuario, con el objetivo de minimizar la cantidad de errores que pueden darse por digitar errneamente (los famosos y temidos dedazos). Hasta el momento, el usuario est facultado para escribir el tipo del producto, el nombre del producto, y el precio del producto. No sera genial que con unos cuantos "clicks" de ratn, el usuario pudiese escoger el tipo y el nombre del producto, mientras el sistema calcula el precio final del producto? Para comenzar, vamos a estandarizar un poco ms las opciones del usuario:

Las opciones de selecin del usuario sern hechas con base a mens emergentes. o Para los libros propuestos, el precio ser de 20.00 (ms el respectivo impuesto) o Para los discos propuestos, el precio ser de 15.50 (ms el respectivo impuesto)

Muestra de Men Emergente

El precio ya no se escribir sino que ser calculado dependiendo del tipo del producto.

La totalidad de nuestro cdigo, hasta el momento es la siguiente: <HTML> <HEAD> <TITLE>Proyecto Pgina Dinmica</TITLE> </HEAD> <BODY> <!-- Formato del Ttulo de la pgina--> <FORM METHOD = "POST" ACTION = "proyecto_1.php"> <FONT FACE = "Verdana" COLOR = "#1200FF"> <CENTER><B><H2>Sistema de Clculo de Impuesto de Producto</H2></B></CENTER> </FONT> <BR> <BR>

<?php //Imprimiento la fecha de hoy en la pantalla $fecha = date("j-m-Y"); echo "<H2> $fecha </H2>"; ?> <!--INSERTANDO ADICIONES--> Por favor escoja el tipo del producto: <SELECT NAME = "tipo_prod"> <OPTION VALUE = ""> <OPTION VALUE = "disco">Disco <OPTION VALUE = "libro">Libro </SELECT> <!--HASTA AQU ADICIONES--> Por favor inserte el nombre del producto: <INPUT TYPE = TEXT NAME = "nombre_producto" MAXLENGHT = 35 SIZE = 35><BR> <P> <INPUT TYPE = "Submit" VALUE = "Calcular Precio"> <?php /********************************************************************** *********************** * Programa que calcula el precio final de un producto, a partir de su precio original ms un impuesto * Autor: * Fecha: ********************************************************************** ***********************/

//Inserciones en el cdigo PHP $precio_original = 0; if($tipo_prod =="disco"){ $precio_original = 15.5; } elseif($tipo_prod=="libro"){ $precio_original = 20; } //Hasta aqu inserciones en el cdigo PHP function calculo($precio_original){ //Funcin que calcula el precio final return $precio_final = ($precio_original * 0.13) + $precio_original; //retorna precio final } echo "<BR><H2><CENTER>El tipo de producto es: $tipo_prod</CENTER></H2>"; echo "<BR><H2><CENTER>El nombre del producto es: $nombre_producto</CENTER></H2>"; echo "<BR><H2><CENTER>El precio final es: ".calculo($precio_original)."</CENTER></H2>"; /*La salida ser centada como Header 2, incluyendo el precio final (calculado en la funcin calculo()*/ ?> Hasta aqu con las adiciones a nuestro proyecto.De momento les dejo con un vdeo que muestra la salida de nuestro cdigo fuente:

NUESTRO PROYECTO. Parte 6. EXPLICACIONES OBLIGATORIAS Hola y bienvenidos. En esta entrega vamos a revisar las adiciones hechas en nuestra entrega anterior con todo el detenimiento necesario.

La primera de nuestras adiciones es una vieta de seleccin HTML Por favor escoja el tipo del producto: <SELECT NAME = "tipo_prod"> <OPTION VALUE = ""> <OPTION VALUE = "disco">Disco <OPTION VALUE = "libro">Libro </SELECT> Esta adicin le permite al usuario seleccionar uno de dos producto (no los dos a la vez), para evitar algn error de digitacin por parte del usuario. Adems, una adicin curiosa dentro de esta vieta de seleccin: un valor vaco. Esto es en realidad para evitar que la seleccin tenga un valor especfico por defecto, y as minimizar la cantidad de errores que el usuario podra cometer. En segundo lugar tenemos la siguiten adicin: $precio_original = 0; Lo hecho aqu recibe el nombre de inicializacin, lo cual no es ms que dar un valor inicial a una variable con el objetivo de que sta no guarde en su interior cualquier valor de la memoria, lo que se conoce como "valores basura". Esta es una buena costumbre que sera bueno que tuvisemos desde un prinicipio, pues no solamente nos servir con PHP, sino con muchos, muchiiiiiiiisimos otros lenguajes. La tercera de nuestras adiciones fue una estructura de control: if($tipo_prod =="disco"){ $precio_original = 15.5; } elseif($tipo_prod=="libro"){ $precio_original = 20; } Esta estructura, en conjuncin con la vieta de seleccin (el men emergente o pop up menu) es en realidad la GRAN ADICIN. La estructura toma el valor seleccionado en el men emergente (disco o libro) y procesa el resultado. Como habrn visto, la variable $tipo_prod es, en realidad, el nombre de la vieta SELECT y la comparacin de igualdad ($tipor_prod =="disco")se hace con el valor de la vieta OPTION.

Por otro lado, antes de decir el por qu, la pregunta para el apreciable lector es la siguiente: por qu en la estructura de control incluimos un elseif en lugar de un simple else? La respuesta es la siguiente: si la estructura hubiese incluido un else en lugar del elseif que contiene, cualquier otro valor distinto de "disco" hubiese valido 20, incluyendo un espacio vaco, por lo que nuestro programa hubiese tenido un valor de 22.60 incluso antes de haber seleccionado un tipo de producto, lo cual, obviamente, no es aceptable. De esto se deduce que la sentencia else, si hemos de hacer una comparacin con otra estructura de control, es similar a la sentencia default en un switch, es decir, si cualquier otra comparacin de la sentencia switch no se cumple, la sentencia default ser escogida y se ejecutar. En nuestra siguiente entrega, vamos a hacer una adicin ms a nuestro cdigo, que nos obligar a hacer una adicin importante a nuestra sentencia if...elseif. Por el momento, los dejamos con la siguiente reflexin de Giovanni Giacomo Casanova: "El amor no es ms que una curiosidad". Amemos lo que hacemos, amemos lo que aprendemos, seamos curiosos, no nos conformemos nunca.

NUESTRO PROYECTO. Parte 7 Hola una vez ms. En esta entrega vamos a hacer un par de adiciones importantes a nuestro proyecto que nos obligarn a hacer uso de muchos de nuestros conocimientos de PHP. En esta ocasin vamos a insertar un men emergente ms, que restringir al usuario para evitar todava ms la posibilidad de una mala digitacin. Vamos a restringir la digitacin del nombre del producto. Hasta este momento, la salida de nuestro programa tiene la siguiente estructura:

Hasta este punto el usuario tiene la facultad de escribir el nombre del producto que se est vendiendo es ese momento. Sin embargo, pese a que esto es una facultad, tambin puede ser un problema, en caso de que el usuario no sea el mejor mecangrafo (digitador para los ms extremistas). Hay que decir en este punto que, como programadores, debemos asumir siempre la premisa principal de la ley de Murphy: "Si algo puede salir mal, definitvamente saldr mal". En otras palabras, debemos pensar siempre en lo peor, y "curarnos en salud". As pues, vamos a hacer otro men emergente para que el usuario escoja el nombre del producto que se est vendiendo. Las adiciones a nuestro cdigo sern las siguientes: 1. El nuevo men emergente (vamos a decir aqu que la cantidad de productos de la tienda es bastante limitada, para que nuestro cdigo no se haga del tamao de una sbana) o <SELECT NAME = nombre_prod> <OPTION VALUE = "El hombre del traje gris">El hombre del traje gris - Joaqun Sabina <OPTION VALUE ="Mentidas piadosas">Mentiras piadosas - Joaqun Sabina

<OPTION VALUE = "Cien aos de soledad">Cien aos de soledad - Gabriel Garca Mrquez <OPTION VALUE = "El jinente polaco">El jinete polaco Antonio Muoz Molina </SELECT> 2. Nuestro cdigo de seleccin PHP (en realidad, la parte sabrosa de esta adicin)

switch($tipo_prod){ case "disco": $precio_original = 15.5; calculo($precio_original); break; case "libro": $precio_original = 20.00; calculo($precio_original) break; default: echo "Tipo no vlido"; }

Nuestro cdigo final ser el siguiente:


<HEAD> <TITLE>Proyecto Pgina Dinmica</TITLE></HEAD> <!-- Formato del Ttulo de la pgina--><FORM METHOD = "POST" ACTION = "proyecto_1.php"> <CENTER> <font color="#1200FF" face="Verdana"><B><H2>Sistema de Clculo de Impuesto de Producto</H2></B></font> </CENTER> <BR> <BR> <?php //Imprimiento la fecha de hoy en la pantalla $fecha = date("j-m-Y"); echo "<H2> $fecha </H2>"; ?> <!--INSERTANDO ADICIONES-->

Nuestra salida final es la siguiente:

Hay que decir que en nuestro cdigo hay que agregar al inicio la vieta <HTML> y, despus de las vietas <HEAD></HEAD> la vieta <BODY>, al igual que, al final las vietas de cierre </BODY></HTML> Con esto nos evitamos errores de digitacin. Sin embargo, hay otros errores posibles. Cules?. Nos enteraremos en nuestra prxima entrega.

NUESTRO PROYECTO. Parte 8 Hola de nuevo. Espero que hayan seguido experimentando con nuestro proyecto y que hayan descubierto cules eran los posibles errores que el usuario podra cometer a la hora de hacer las selecciones de tipo de producto y nombre de producto respectivamente. La salida de nuestro programa en pantalla le permite al usuario escoger - y no escribir o digitar - el tipo del producto, en conjuncin con el nombre del producto que el comprador desea llevarse a su casa. Sin embargo, el usuario tiene la posibilidad de

equivocarse a la hora de escoger. Por ejemplo, el programa le da la posibilidad de escoger un tipo de producto "Disco" y escoger un nombre de producto El jinete polaco Antonio Muoz Molina, con lo que se crea la confusin, adems de que se le cobra al comprador o bien ms (en caso de lleve un disco y se le cobre un libro) o bien menos (en caso de que lleve un libro y se le cobre un disco) Algo que hay que hacer notar, es que este programa puede utilizarse tanto a nivel de intranet, como a nivel de internet, en una tienda On-line, en la que el usuario y el comprador, vendran a ser el mismo. En fin, modos de reparar este error, como modos de hacer el proyecto que hemos ido desarrollando, las hay muchas, y esperamos que todos y cada uno de los apreciables lectores encuentren su propio estilo. Para este curso, y siendo que pretendemos utilizar la mayor cantidad de conceptos aprendidos en este curso, nos decidimos por hacerlo utilizando switch e if..else anidados. De lo anterior vemos que las adiciones a nuestro programa se dan en la estructura switch, agregando una estructura if..else a cada case, de la siguiente forma: switch($tipo_prod){ case "disco": if($nombre_prod == "Cien aos de soledad" || $nombre_prod =="El jinete polaco"){ echo "<H1>El producto escogido es un libro, corrija</H1>"; } else{ $precio_original = 15.5; calculo($precio_original); } break; case "libro": if($nombre_prod == "El hombre del traje gris" || $nombre_prod == "Mentiras piadosas"){ echo "<H1>El producto escogido es un disco, corrija</H1>"; } else{

$precio_original = 20.00; calculo($precio_original); } break; } De esta forma, nuestra salida queda de la siguiente forma:
<HEAD> <TITLE>Proyecto Pgina Dinmica</TITLE></HEAD> <!-- Formato del Ttulo de la pgina--><FORM METHOD = "POST" ACTION = "proyecto_1.php"> <CENTER> <font color="#1200FF" face="Verdana"><B><H2>Sistema de Clculo de Impuesto de Producto</H2></B></font> </CENTER> <BR> <BR> <?php //Imprimiento la fecha de hoy en la pantalla $fecha = date("j-m-Y"); echo "<H2> $fecha </H2>"; ?> Por favor escoja el tipo del producto:

Con las adiciones anteriores, la salida a pantalla de nuestro programa queda de la siguiente forma:

Esta es la salida cuando cometemos un error en cuanto a la seleccin del nombre del producto. La salida, cuando no hay error alguno es la siguiente:

En nuestra prxima entrega, ms mejoras a nuestro proyecto.

NUESTRO PROYECTO. Parte 9 Hola, cmo estn?. En esta entrega vamos a corregir un problema que hemos ido dejando en el cajn de lo de "para ms tarde", pero que no es precisamente algo que no salte a la vista. Nuestra salida, hasta el momento, es la siguiente:

Pregunta, se han percatado del error?, se percataron de l desde un inicio? Muy bien, el error es sencillo pero crucial, despus del punto decimal, las posiciones que existen son tres y no dos, como debera ser para los precios en dinero. Poca cosa, tal vez, pero no cuando se trata de dinero (y si no que lo digan los dueos de los supermercados) Para este fin, existe una funcin predefinida en PHP, que nos ayudar a decirle a nuestro programa, no slo la cantidad de espacios decimales que necesitamos en nuestra salida, sino, adems, el tipo de separador que necesitamos para las posiciones decimales, y el tipo de separador para los miles. Dicha funcin se llama number_format(). Y su utilizacin es la siguiente: number_format(nmero flotante o variable que lo contiene, posiciones decimales a ser desplegadas, separador de decimales, separador de miles) El lugar en el que vamos a incluir esta funcin ser, como ya habrn adivinado, en el momento de imprimir nuestra salida, es decir en la sentencia: echo "<BR><H2><CENTER>El precio final es: ".number_format(calculo($precio_original), 2, '.', ','). "</CENTER></H2>";

NUESTRO PROYECTO. Parte 10 Bienvenidos. En esta entrega, le permitiremos al usuario escoger ms de un producto a comprar. Hasta hoy, el programa nos permite escoger un producto y luego calcular su precio con un impuesto. Sin embargo, qu hay si el comprador quiere dos productos del mismo tipo. Las adiciones necesarias son:

Para comenzar, vamos a hacerle un cambio de forma a nuestro programa, a partir de este momento, los clculos los vamos a hacer en una tabla. Las adiciones en PHP son simplemente la operacin $precio_final = (($precio_original * 0.13) + $precio_original)*$cantidad; la cual ahora toma en cuenta la variable (que no es ms que el campo de texto del mismo nombre) $cantidad y la une a la funcin calculo();

El cdigo corregido y aumentado sera: <CENTER><TABLE BORDER = 1> <TH>TIPO<TH>NOMBRE<TH>CANTIDAD<TH>PRECIO FINAL <TR> <TD> <SELECT NAME = "tipo_prod"> <OPTION VALUE = ""> </OPTION> <OPTION VALUE = "disco">Disco</OPTION> <OPTION VALUE = "libro">Libro</OPTION> </SELECT> <TD> <SELECT NAME = "nombre_prod"> <OPTION VALUE = ""> </OPTION> <OPTION VALUE = "El hombre del traje gris">El hombre del traje gris Joaqun Sabina</OPTION> <OPTION VALUE ="Mentiras piadosas">Mentiras piadosas - Joaqun Sabina</OPTION> <OPTION VALUE = "Cien aos de soledad">Cien aos de soledad - Gabriel Garca Mrquez</OPTION> <OPTION VALUE = "El jinete polaco">El jinete polaco - Antonio Muoz Molina</OPTION> </SELECT> <TD> <INPUT TYPE = TEXT NAME = "cantidad" MAXLENGTH = 5 SIZE = 5> <TD> <?php /********************************************************************** *********************** * Programa que calcula el precio final de un producto, a partir de su precio original ms un impuesto * Autor: * Fecha: **********************************************************************

***********************/ $precio_original = 0; function calculo($precio_original, $cantidad){ //Funcin que calcula el precio final return $precio_final = (($precio_original * 0.13) + $precio_original)*$cantidad; //retorna precio final } switch($tipo_prod){ case "disco": if($nombre_prod == "Cien aos de soledad" || $nombre_prod =="El jinete polaco"){ echo "<H1>El producto escogido es un libro, corrija</H1>"; } else{ $precio_original = 15.5; echo "<CENTER>".number_format(calculo($precio_original,$cantidad),2,'.',',')."</CE NTER>"; } break; case "libro": if($nombre_prod == "El hombre del traje gris" || $nombre_prod == "Mentiras piadosas"){ echo "<H1>El producto escogido es un disco, corrija</H1>"; } else{ $precio_original = 20.00; echo "<CENTER>".number_format(calculo($precio_original,$cantidad),2,'.',',')."</CE NTER>"; } break; } /*La salida ser centada como Header 2, incluyendo el precio final (calculado en la funcin calculo()*/ ?> </TABLE></CENTER> Como vern, eso implica adiciones en muchas partes del cdigo, y correcciones necesarias en algunas otras partes. Nuestro cdigo ahora es el siguiente:

<HEAD> <TITLE>Proyecto Pgina Dinmica</TITLE></HEAD> <!-- Formato del Ttulo de la pgina--><FORM METHOD = "POST" ACTION = "proyecto_1.php"> <CENTER> <font color="#1200FF" face="Verdana"><B><H2>Sistema de Clculo de Impuesto de Producto</H2></B></font> </CENTER> <BR> <BR> <?php //Imprimiento la fecha de hoy en la pantalla $fecha = date("j-m-Y"); echo "<CENTER><H2> $fecha </H2></CENTER>"; ?> <CENTER><TABLE BORDER = 1>

En nuestra prxima entrega, haremos de nuestro proyecto, un proyecto que pueda ser subido a una pgina web, aadiendo algunas de las funciones ms comunes del manejo Web. Por el momento, recuerden, sigan programando, experimenten, equivquense y corrijan. Slo as aprendern

NUESTRO PROYECTO. Parte 11 Hola una vez ms. Como ya habamos dicho, en esta entrega vamos a aprender algunos pasos esenciales para hacer de nuestro proyecto un proyecto Internet.

Para comenzar, siendo que nuestra pequea tienda va a estar en la red, es necesario saber la identidad de las personas que entrarn en nuestra pgina. Si bien es cierto, la mejor forma de hacerlo es con una bases de datos, ese tema no es tocado en este curso por razones de espacio. Sin embargo, a manera de ejemplo, vamos a hacer un simulador de base de datos para ver como funciona nuestra pgina de acceso al programa que ya desarrollamos con anterioridad. Con el objetivo anterior puesto en mente, vamos a desarrollar una pgina extra, adems de la que ya tenemos escrita, con el objetivo de garantizar el ingreso a nuestros futuros clientes. Nuestras nuevas adiciones al cdigo son:

Una nueva pgina HTML para pedir los datos del usuario (correo electrnico y nombre), la pgina contendr lo siguiente: o <HTML> <HEAD> <TITLE>Pgina de ingreso al sistema de compras</TITLE> </HEAD> <BODY> <FONT FACE = "arial" COLOR = "#1200FF"> <CENTER><B><H3>Por favor digite su nombre y su email</H3></B></CENTER> <FORM METHOD = GET ACTION = "proyecto_1.php"> <BR> <BR> <BR> <CENTER> e-mail: <INPUT TYPE = "TEXT" NAME = "correo" MAXLENGHT = 35 SIZE = 35> NOMBRE: <INPUT TYPE = "TEXT" NAME = "nombre" MAXLENGHT = 25 SIZE = 25> <BR> <BR> <INPUT TYPE = "SUBMIT" VALUE = "Remitir Informacin"> </FONT> </CENTER> </BODY> </HTML> Una leve adicin en nuestra pgina de proyecto_1.php, para darle la bienvenida al cliente, con base a lo que introdujo en la pgina anterior, que por cierto la llamaremos login. El cdigo adicionado a nuestra pgina ser: o echo "<CENTER><H3>Bienvenido(a) ".$nombre."</H3></CENTER>";

La totalidad del cdigo en la pgina proyecto_1.php es como sigue:

<HEAD> <TITLE>Proyecto Pgina Dinmica</TITLE></HEAD> <!-- Formato del Ttulo de la pgina--><FORM METHOD = "POST" ACTION = "proyecto_1.php"> <CENTER> <font color="#1200FF" face="Verdana"><B><H2>Sistema de Clculo de Impuesto de Producto</H2></B></font> </CENTER> <BR> <BR> <?php //Imprimiento la fecha de hoy en la pantalla echo "<CENTER><H3>Bienvenido(a) ".$nombre."</H3></CENTER>"; $fecha = date("j-m-Y"); echo "<CENTER><H2> $fecha </H2></CENTER>"; ?>

Las salidas de cada pgina son, para la pgina login:

Para la pgina proyecto_1:

Posiblemente se estn preguntando sobre la utilidad de esta adicin, siendo que lo nico que hace es transferir el nombre de una pgina a otra. Pues bien, la importancia radica en realidad, en la posibilidad de almacenar esta informacin en una base de datos y guardar en dicha base de datos un rcord de las transacciones hechas por dicho usuario, de tal manera que se pueda dar una clasificacin de un cliente regular hasta un cliente excelente, de tal manera que el cliente excelente pueda tomar algunas ventajas de su condicin y recibir descuentos y promociones de cuando en cuando, claro est, gracias al dato de su correo electrnico que ingres en la pgina login. Adems, hay que decir que a nivel de atencin al cliente no hay nada ms reconfortante que recibir una bienvenida con nuestro nombre y apellido. En nuestra prxima entrega, aprenderemos a sacar las estadsticas elementales de las personas que entran en nuestra pgina.

NUESTRO PROYECTO. Parte 12 Hola de nuevo, en esta entrega vamos a ver cmo hacer un "entregador de estadsticas". Este tipo de programa, es de utilidad ms a nivel de "webmaster", ya que proporciona la "identidad" de la computadora que ha entrado a ver nuestra pgina. La utilidad, sencilla: al enviar cookies a la mquina visitante, es factible hacer una pgina personalizable por parte del usuario. Esto, entre muchas otras posibilidades.

Este reporte de estadsticas ser presentado gracias a dos pginas ms (se imaginan, ya llevamos cuatro!), a las que llamaremos, en un arranque de originalidad, estadstica.php y resultado_estadistica.php Las adiciones a nuestro cdigo sern las siguientes: <?php $esta_pagina = $_SERVER["PHP_SELF"]; $IP = $_SERVER["REMOTE_ADDR"]; ?> Y a nuestro programa original, le agregaremos un enlace a la pgina resultado_estadistica.php: <CENTER><A HREF = "resultado_estadistica.php">Estadsticas</A></CENTER> Hasta este momento, la salida de nuesta pgina principal no ha cambiado en gran cosa, salvo por el enlace que nos lleva a la pgina de las estadsticas.

Otra explicacin que se hace necesaria, es la del uso de dos variables predifinidas: $_SERVER["PHP_SELF"] y $_SEVER["REMOTE_ADDR"]

La variable predefinida $_SERVER es un arreglo que contiene informacin tal como cabeceras, rutas o paths y la ubicacin de los scripts que utilizamos. Las entradas en este arreglo son creadas por el servidor web. No hay garanta que todo servidor web proveer cualquiera de estos datos; los servidores podran omitir alguno o proveer algunos otros que no estamos especificando aqu.. Una gran nmero de estas variables estn contadas en las especificaciones CGI 1.1, por lo que, si la curiosidad les toca el alma, pueden ver dichas especificaciones y esperar cualquiera de estas. Ahora bien, PHP_SELF proporciona el nombre del archivo del script que se est ejecutando en este momento, relativo al documento raz. Para nuestro caso sera /work/proyecto_1.php Por otro lado REMOTE_ADDR nos proporciona la direccin IP del usuario que est viendo nuetra pgina en este momento. Dicho lo anterior, la explicacin del por qu inclumos dichas sentencias en nuestra nueva pgina son, la primera ($_SERVER["PHP_SELF"]), para que nuestro programa tenga "la idea clara" del lugar en donde se ubican nuestro archivos y evitar as algn error de OBJETO NO ENCONTRADO por parte del servidor WEB y la segunda ($_SERVER["REMOTE_ADDR"]) para poder tener la direccin IP de la persona que nos est visitando. Hasta este momento, con nuestra pgina estadistica.php, tenemos asegurado que el programa sabe la direccin IP de la persona que ha visitado nuestra pgina, sin embargo, cmo lo sabemos nosotros?. La pregunta anterior tendr una respuesta en nuestra prxima entrega. De momento,...

NUESTRO PROYECTO. Parte 13 Hola, cmo estn?. Estamos en el camino de hacer de nuestro proyecto un "final feliz", y en este nuevo encuentro, hablaremos de cmo terminar nuestro progama de estadsticas para que nos presente el "documento de identidad", es decir la IP de la computadora que ha visitado nuestra pgina. En nuestro encuentro previo, hicimos la pgina que le hace saber a nuestro servidor la IP de la computadora que ha visitado nuestro sitio, sin embargo, como ya se habrn dado cuenta, nosotros (los mortales), no sabemos la direccin de esa computadora. As pues, necesitamos crear la cuarta de nuestras pginas (una muy, muy cortita, por cierto), la cual constar del siguiente cdigo: <?php

include("estadistica.php"); echo "Esta pgina ha sido visitada por: $IP"; ?> Bien, probablemente se estarn preguntando qu es la primera sentencia de nuestro programa. Pues bien, esta sentencia cumple la funcin de incluir y evaluar el archivo especificado entre parntesis y encerrado entre las comillas dobles (para nuestro caso, el archivo estadistica.php). Dicho en otras palabras, lo que hacemos es incluir a todo el archivo y utilizarlo para imprimir una salida en pantalla, la cual ser (redoble de tambores): la IP de la computadora que ha visitado nuestra pgina. Antes de ver la salida en pantalla, es necesario incluir al "compaero de frmula" de include(), es decir: require(). require(), se sustituye a si mismo por el archivo especificado. Es decir, podemos requerir la utilizacin de un archivo dentro de nuestro programa mediante esta directiva. Hay que decir que require() no es una funcin predefinida, sino, en realidad, una construccin del lenguaje. Como tal, las reglas de las funciones no se le aplican. Por otro lado, esta sentencia no devuelve ningn valor. Dicho lo anterior, los dejamos con la salida de todas las pginas juntas, para que vean que, en definitiva, la unin hace la fuerza:

Antes de continuar, hay que aclarar que para efectos de este ejemplo, utilizamos, como se habrn dado cuenta, otro archivo que se llama login2.php en lugar del original login.php, sin embargo, ambos archivos tienen exactamente la misma informacin. Muy bien, espero que la salida de nuestro programa les sirva para ver cuan poderoso e interesante es programar en PHP. Por el momento, hay un pensamiento importantsimo que es imperativo que conozcamos: "Es detestable esa avaricia espiritual que tienen los que, sabiendo algo, no procuran la transmisin de esos conocimientos" (Miguel de Unamuno). Compartan sus conocimientos, lo nico mejor que una persona que sabe, es un enorme grupo de personas que saben.

NUESTRO PROYECTO. Parte 14 Hola una vez ms! En esta entrega vamos a agregar un ltimo "aderezo" a nuestro proyecto. Agregaremos un elemento de seguridad. La razn: con el programa tal como est, las estadsticas pueden ser visitadas por cualquier persona que haga click en el enlace que dice Estadsticas, cosa que no es conveniente, ni para nosotros y, mucho menos, para el usuario. Para lograr dicho objetivo, crearemos una pgina ms (cinco en total, esto es toda una locura!) que nos servir como intermedio entre nuestra pgina prinicipal y la de estadsticas. Los cambios a nuestra pgina principal (proyecto_1.php) sern nfimos: simplemente un cambio en la direccin a la que "mirar" el enlace Estadsticas, es decir:

<CENTER><A HREF = "seguridad.php">Estadsticas</A></CENTER>

Por otro lado, nuestra nueva pgina contendr la siguiente informacin: <HTML> <HEAD> <TITLE>Entrada a WebMaster</TITLE> </HEAD> <BODY> <H2><CENTER>Bienvenido WEBMASTER</CENTER></H2> <H3><CENTER>Por favor escriba su nombre de usuario y su palabra de acceso</CENTER></H3> <H4><CENTER>Nombre de usuario: </CENTER></H4> <CENTER><INPUT TYPE = "TEXT" NAME = "id_usuario"></CENTER> <H4><CENTER>Palabra de acceso: </CENTER></H4> <CENTER><INPUT TYPE = "PASSWORD" NAME = "password"></CENTER> <CENTER><INPUT TYPE = "SUBMIT" VALUE = "Entrar"></CENTER> <?php

if($id_usuario == "" && $password == ""){ echo ""; } elseif($id_usuario =="Alberto" && $password == "bibidi"){ echo "<CENTER><A HREF = '/work/resultado_estadistica.php'>Ir a Estadsticas</A></CENTER>"; } else{ echo "<H1><CENTER>Usuario o Palabra de Acceso equivocado</CENTER></H1>"; } ?> </BODY> </HTML> Y la salida de nuestro programa es la siguiente:

En nuestra siguiente entrega, las consideraciones finales a nuestro proyecto.

CONSIDERACIONES FINALES Muy bien, hemos llegado prcticamente al final de esta deliciosa aventura, en la que hemos aprendido las bases de la programacin en PHP, suficientes para manejar decisiones, crear funciones, conocer "identidades", manejar cadenas, reconocer expresiones regulares, etctera. Todo lo anterior es suficiente para crear programas que nos puedan ayudar o incluso buenos para subirlos a la red.

Como ya se dijo anteriormente, por razones de espacio no ha sido posible incluir el manejo de base de datos ni la integracin con algn GBDD (Gestor de Bases de Datos) como por ejemplo MySQL, sin embargo, esperamos poder incluir todo lo anterior en un futuro en otro curso. En fin, nuestra ltima pgina (la de seguridad) qued como sigue: if($id_usuario == "" && $password == ""){ echo ""; } elseif($id_usuario =="Alberto" && $password == "bibidi"){ echo "<CENTER><A HREF = '/work/resultado_estadistica.php'>Ir a Estadsticas</A></CENTER>"; } else{ echo "<H1><CENTER>Usuario o Palabra de Acceso equivocado</CENTER></H1>"; } Las ltimas consideraciones sobre esta pgina son la siguientes:

La razn para hacer empezado con un if($id_usuario == "" && $password == "") fue porque, al entrar a esta pgina, los campos del nombre del usuario y la palabra de acceso estarn vacos, por consiguiente, si hubisemos omitido el primer if y hubisemos comenzado por if($id_usuario == "Alberto" && $password == "bibidi") y luego un else{ echo "<H1><CENTER>Usuario o Palabra de Acceso equivocado</CENTER></H1>"; } El programa hubiese comenzado por evaluar lo que encontr desde un inicio, es decir un espacio vaco, por consiguiente el resultado de nuestra evaluacin resulta como: $id_usuario != "Alberto && $password != "bibidi", lo cual le dice a nuestro programa que debe imprimir en pantalla el mensaje de Usuario o Palabra de Acceso equivocado. Esto puede que resulte de poca importancia, pero le resta vistosidad y profesionalismo a nuestro proyecto.

Finalmente utilizamos un elseif...else porque de lo contrario, hubisemos garantizado el acceso a todo el mundo a nuestra pgina de informes. Cmo?, bien en caso de haber dejado solamente un else, diciendo: else{ echo "<CENTER><A HREF = '/work/resultado_estadistica.php'>Ir a stadsticas</A></CENTER>"; }

La entrada a cualquier persona que no cometiese el error de dejar en blanco los campos de nombre de usuario y palabra clave, estara garantizada. Ahhh bueno!!!, todas las despedidas parecen tener un deje de tristeza,... sin embargo, es justo decir que no hay nada que deseemos ms en este mundo, que este curso haya servido para despertar en todos la curiosidad y el "hambre" de conocimiento suficiente para seguir aprendiendo todo sobre PHP. Y ya que hablamos de "hambre" de conocimiento, recuerden siempre: "No hay amor ms sincero que el amor a la comida". En otras palabras, amen sus conocimientos, amen lo que aprenden, gracias por su atencin, gracias por su curiosidad y...

Anda mungkin juga menyukai