Você está na página 1de 56

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Contenido
I. CONCEPTOS BSICOS.......................................................................................................................................................... 4 1. Introduccin........................................................................................................................................................................ 4 Qu es PHP?................................................................................................................................................................. 4 Breve historia de PHP...................................................................................................................................................... 4 Qu se puede hacer con PHP?...................................................................................................................................... 5 2. Una explicacin sencilla..................................................................................................................................................... 6 Qu necesito?................................................................................................................................................................ 6 Su primera pgina con PHP............................................................................................................................................. 7 Algo til............................................................................................................................................................................. 8 Uso de Formularios HTML............................................................................................................................................... 9 II. REFERENCIA DEL LENGUAJE............................................................................................................................................ 10 3. Sintaxis bsica................................................................................................................................................................. 10 Saliendo de HTML.......................................................................................................................................................... 10 Separacin de instrucciones.......................................................................................................................................... 11 Comentarios................................................................................................................................................................... 11 4. Tipos de Datos................................................................................................................................................................. 12 Introduccin.................................................................................................................................................................... 12 Booleanos....................................................................................................................................................................... 13 Enteros........................................................................................................................................................................... 13 Nmeros de punto flotante............................................................................................................................................. 14 Cadenas......................................................................................................................................................................... 14 5. Vectores (tablas).............................................................................................................................................................. 17 Tablas multidimensionales............................................................................................................................................. 18 6. Variables.......................................................................................................................................................................... 19 Conceptos Bsicos......................................................................................................................................................... 19 mbito de las variables.................................................................................................................................................. 19 Variables externas a PHP.............................................................................................................................................. 21

Eclipse Soluciones con Poder

Pgina 1

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Formularios HTML (GET y POST)................................................................................................................................. 21 7. Constantes....................................................................................................................................................................... 23 Sintaxis........................................................................................................................................................................... 23 8. Operadores...................................................................................................................................................................... 24 Operadores de Aritmtica............................................................................................................................................... 24 Operadores de Asignacin............................................................................................................................................. 24 Operadores de Comparacin......................................................................................................................................... 25 Operadores de Incremento/Decremento........................................................................................................................ 25 Operadores de Lgica.................................................................................................................................................... 26 Operadores de Cadena.................................................................................................................................................. 26 9. Estructuras de Control..................................................................................................................................................... 27 if...................................................................................................................................................................................... 27 else................................................................................................................................................................................. 27 elseif............................................................................................................................................................................... 27 while............................................................................................................................................................................... 28 do..while......................................................................................................................................................................... 28 for................................................................................................................................................................................... 29 foreach............................................................................................................................................................................ 30 break............................................................................................................................................................................... 31 continue.......................................................................................................................................................................... 32 switch.............................................................................................................................................................................. 32 return.............................................................................................................................................................................. 33 10. Funciones....................................................................................................................................................................... 35 Funciones definidas por el usuario................................................................................................................................. 35 Parmetros de las funciones.......................................................................................................................................... 36 Pasar parmetros por referencia.................................................................................................................................... 36 Parmetros por defecto.................................................................................................................................................. 36 Devolviendo valores....................................................................................................................................................... 37 Funciones internas (incorporadas)................................................................................................................................. 38

Eclipse Soluciones con Poder

Pgina 2

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

III. ESCRIBIENDO APLICACIONES CON PHP....................................................................................................................... 39 11. Formularios.................................................................................................................................................................... 39 12. Bases de Datos.............................................................................................................................................................. 45 Qu es MySQL?........................................................................................................................................................... 45 Creacin de la Base de Datos........................................................................................................................................ 45 Conexin al MySQL........................................................................................................................................................ 46 Mostrar los datos de una consulta.................................................................................................................................. 46 Un buscador para nuestra base de datos...................................................................................................................... 47 Aadir registros a nuestra base de datos....................................................................................................................... 49 Modificar registros de nuestra base de datos.................................................................................................................50 Borrar registros de nuestra base de datos..................................................................................................................... 51 Resumen de todo lo visto............................................................................................................................................... 51 Cmo ahorramos lneas de cdigo?............................................................................................................................ 52 13. Envo de e-mails............................................................................................................................................................ 53 IV. FUENTES CONSULTADAS................................................................................................................................................. 55

Eclipse Soluciones con Poder

Pgina 3

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

I. CONCEPTOS BSICOS
1. Introduccin
Qu es PHP?
PHP (acrnimo de "PHP: Hypertext Preprocessor") es un lenguaje de "cdigo abierto" interpretado, de alto nivel, embebido en pginas HTML y ejecutado en el servidor. Una respuesta corta y concisa, pero, qu significa realmente? Un ejemplo nos aclarar las cosas: Ejemplo 1-1. Un ejemplo introductorio
<html> <head> <title>Ejemplo</title> </head> <body> <?php echo "Hola, soy un script PHP!"; ?> </body> </html>

Puede apreciarse que no es lo mismo que un script escrito en otro lenguaje de programacin como Perl o C. En vez de escribir un programa con muchos comandos para crear una salida en HTML, escribimos el cdigo HTML con cierto cdigo PHP embebido (incluido) en el mismo, que producir cierta salida (en nuestro ejemplo, producir un texto). El cdigo PHP se incluye entre etiquetas especiales de comienzo y final que nos permitirn entrar y salir del modo PHP. Lo que distingue a PHP de la tecnologa Javascript, la cual se ejecuta en la mquina cliente, es que el cdigo PHP es ejecutado en el servidor. Si tuvisemos un script similar al de nuestro ejemplo en nuestro servidor, el cliente solamente recibira el resultado de su ejecucin en el servidor, sin ninguna posibilidad de determinar qu cdigo ha producido el resultado recibido. El servidor web puede ser incluso configurado para que procese todos los archivos HTML con PHP.

Figura 1. Esquema de funcionamiento de PHP

Breve historia de PHP


PHP es un lenguaje creado por una gran comunidad de personas. El sistema fue desarrollado originalmente en el ao 1994 por Rasmus Lerdorf como un CGI escrito en C que permita la interpretacin de un nmero limitado de comandos. El sistema fue denominado Personal Home Page Tools y adquiri relativo xito gracias a que otras personas pidieron a Rasmus que les permitiese utilizar sus programas en sus propias pginas. Dada la aceptacin del primer PHP y de manera adicional, su creador dise un sistema para procesar formularios al que le atribuy el nombre de FI (Form Interpreter) y el conjunto de estas dos herramientas, sera la primera versin compacta del lenguaje: PHP/FI. La siguiente gran contribucin al lenguaje se realiz a mediados del '97 cuando se volvi a programar el analizador sintctico, se incluyeron nuevas funcionalidades, como el soporte a nuevos protocolos de Internet y el soporte a la gran mayora de las bases de datos comerciales. Todas estas mejoras sentaron las bases de PHP versin 3. Actualmente PHP se encuentra en su versin 5, que utiliza el motor Zend, desarrollado con mayor meditacin para cubrir las necesidades actuales y solucionar algunos inconvenientes de la anterior versin. Algunas mejoras de esta nueva versin son su rapidez

Eclipse Soluciones con Poder

Pgina 4

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

-gracias a que primero se compila y luego se ejecuta, mientras que antes se ejecutaba mientras se interpretaba el cdigo-, su mayor independencia del servidor web -creando versiones de PHP nativas para ms plataformas- y un API ms elaborado y con ms funciones.

Qu se puede hacer con PHP?


PHP puede hacer cualquier cosa que se pueda hacer con un script CGI, como procesar la informacin de formularios, generar pginas con contenidos dinmicos, o enviar y recibir cookies. Y esto no es todo, se puede hacer mucho ms. Existen tres campos en los que se usan scripts escritos en PHP. Scripts del lado del servidor. Este es el campo ms tradicional y el principal foco de trabajo. Se necesitan tres cosas para que esto funcione. El intrprete PHP (CGI mdulo), un servidor web y un navegador. Es necesario correr el servidor web con PHP instalado. El resultado del programa PHP se puede obtener a travs del navegador, conectndose con el servidor web. Scripts en la lnea de comandos. Puede crear un script PHP y correrlo sin ningn servidor web o navegador. Solamente necesita el intrprete PHP para usarlo de esta manera. Este tipo de uso es ideal para scripts ejecutados regularmente desde cron (en *nix o Linux) o el Planificador de tareas (en Windows). Estos scripts tambin pueden ser usados para tareas simples de procesamiento de texto. Escribir aplicaciones de interfaz grfica. Probablemente PHP no sea el lenguaje ms apropiado para escribir aplicaciones grficas, pero si conoce bien PHP, y quisiera utilizar algunas caractersticas avanzadas en programas clientes, puede utilizar PHP-GTK para escribir dichos programas. Tambin es posible escribir aplicaciones independientes de una plataforma. PHP-GTK es una extensin de PHP, no disponible en la distribucin principal. PHP puede ser utilizado en cualquiera de los principales sistemas operativos del mercado, incluyendo Linux, muchas variantes Unix (incluyendo HP-UX, Solaris y OpenBSD), Microsoft Windows, Mac OS X, RISC OS y probablemente alguno ms. PHP soporta la mayora de servidores web de hoy en da, incluyendo Apache, Microsoft Internet Information Server, Personal Web Server, Netscape e iPlanet, Oreilly Website Pro server, Caudium, Xitami, OmniHTTPd y muchos otros. PHP tiene mdulos disponibles para la mayora de los servidores, para aquellos otros que soporten el estndar CGI, PHP puede usarse como procesador CGI. De modo que, con PHP tiene la libertad de elegir el sistema operativo y el servidor de su gusto. Tambin tiene la posibilidad de usar programacin procedimental o programacin orientada a objetos. Aunque no todas las caractersticas estndar de la programacin orientada a objetos estn implementadas en la versin actual de PHP, muchas bibliotecas y aplicaciones grandes (incluyendo la biblioteca PEAR) estn escritas ntegramente usando programacin orientada a objetos. Con PHP no se encuentra limitado a resultados en HTML. Entre las habilidades de PHP se incluyen: creacin de imgenes, archivos PDF y pelculas Flash (usando libswf y Ming) sobre la marcha. Tambin puede presentar otros resultados, como XHTM y archivos XML. PHP puede autogenerar stos archivos y almacenarlos en el sistema de archivos en vez de presentarlos en la pantalla. Quizs la caracterstica ms potente y destacable de PHP es su soporte para una gran cantidad de bases de datos. Escribir un interfaz va web para una base de datos es una tarea simple con PHP. Las siguientes bases de datos estn soportadas actualmente: Adabas D dBase Empress FilePro (read-only) Hyperwave IBM DB2 Informix Ingres InterBase FrontBase mSQL Direct MS-SQL MySQL ODBC Oracle (OCI7 and OCI8) Ovrimos PostgreSQL Solid Sybase Velocis Unix dbm

Tambin contamos con una extensin DBX de abstraccin de base de datos que permite usar de forma transparente cualquier base de datos soportada por la extensin. Adicionalmente, PHP soporta ODBC (el Estndar Abierto de Conexin con Bases de Datos), asi que puede conectarse a cualquier base de datos que soporte tal estndar. PHP tambin cuenta con soporte para comunicarse con otros servicios usando protocolos tales como LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (en Windows) y muchos otros. Tambin se pueden crear sockets puros. PHP soporta WDDX para el intercambio de datos entre lenguajes de programacin en web. Y hablando de interconexin, PHP puede utilizar objetos Java de forma transparente como objetos PHP y la extensin de CORBA puede ser utilizada para acceder a objetos remotos.

Eclipse Soluciones con Poder

Pgina 5

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

2. Una explicacin sencilla


A continuacin, le introduciremos a PHP en un pequeo y sencillo manual. Este documento explica cmo crear pginas web dinmicas para Internet con PHP, aunque PHP no solamente est diseado para la creacin de stas. Las pginas web que utilizan PHP son tratadas como pginas de HTML comunes y corrientes, y puede crearlas y editarlas de la misma manera que lo hace con documentos normales de HTML.

Qu necesito?
En este manual vamos a asumir que usted cuenta con un servidor que soporta PHP y que todos los archivos con la extensin .php son manejados por PHP. En la mayora de servidores, sta es la extensin que toman los archivos PHP por defecto, pero pregunte al administrador de su servidor para estar seguro. Si su servidor soporta PHP, entonces no necesita hacer nada, solamente crear sus archivos .php y guardarlos en su directorio web, y el servidor, como por arte de magia, los analizar para usted. No hay necesidad de compilar nada, tampoco tiene necesidad de instalar otras herramientas. Mrelo de esta manera, estos archivos de PHP son tan simples como archivos de HTML con una nueva familia de etiquetas que le permiten una gran cantidad de cosas. Digamos que usted tiene limitado acceso a internet y se encuentra programando localmente. En este caso, querr instalar un servidor de web como Apache, y PHP. Lo ms seguro es que tambin quiera instalar una base de datos como MySQL. Puede instalar estos productos individualmente o simplemente localizar un paquete pre-configurado que automticamente instale todos estos productos con solamente unos movimientos de su ratn. Es muy fcil instalar un servidor web con soporte para PHP en cualquier sistema operativo, incluyendo Linux y Windows. Requisitos Servidor Web (Apache, IIS, etc.) PHP (www.php.net)

Para este taller tambin usaremos: MySql

Otras utileras Herramientas para la gestin de MySQL: PHPMyAdmin, MySql Administrator, MySql Query Browser. Editores de PHP: PhpEdit, Quanta, Bluefish. Herramientas para diseo Web: Quanta, Nvu. Manuales de PHP y MySQL.

Una vez que ya tenemos instalados PHP y MySQL, es posible hacer scripts PHP-CLI, pero una de las aplicaciones ms poderosas es el manejo de sitios interactivos WEB, para lo cual es importante tener configurado apache. Se recomienda primero Instalar MySQL desde fuentes o binarios, Apache y en seguida PHP.

Eclipse Soluciones con Poder

Pgina 6

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Su primera pgina con PHP


Comenzaremos por crear un archivo llamado hola.php y colocarle en el "directorio raz" ( DOCUMENT_ROOT) con el siguiente contenido: Ejemplo 2-1. Nuestro primer script PHP: hola.php
<html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php echo "<p>Hola Mundo</p>"; ?> </body> </html>

Utilice su navegador web para acceder al archivo, con la URL terminando en "/hola.php". Si est programando localmente este URL lucir algo como http://localhost/hola.php o http://127.0.0.1/hola.php pero esto depende de la configuracin de su servidor web. Aunque este tema est fuera del alcance de este tutorial, tambin puede ver las directivas DocumentRoot y ServerName en la configuracin de su servidor (en Apache, esto es httpd.conf). Si todo est configurado correctamente, el archivo ser analizado por PHP y el siguiente contenido aparecer en su navegador:
<html> <head> <title>Ejemplo de PHP</title> </head> <body> <p>Hola Mundo</p> </body> </html>

Note que esto no es como los scripts de CGI. El archivo no necesita ninguna clase especial de permisos para ser ejecutado. Piense en ellos como si fueran archivos HTML con un conjunto muy especial de etiquetas disponibles, y que hacen muchas cosas interesantes. Este programa es extremadamente simple, y no necesita usar PHP para crear una pgina como sta. Todo lo que hace es mostrar: Hola Mundo usando la sentencia echo(). Si ha intentado usar este ejemplo, y no produjo ningn resultado, preguntando si deseaba descargar el archivo, o mostr todo el archivo como texto, lo ms seguro es que PHP no se encuentra habilitado en su servidor. Pdale a su administrador que active esta funcin por usted. El objetivo de este ejemplo es demostrar cmo puede usar las etiquetas PHP. En este ejemplo usamos <?php para indicar el inicio de la etiqueta PHP. Despus indicamos la sentencia y abandonamos el modo PHP usando ?>. Puede salir de PHP y regresar cuantas veces lo desee usando este mtodo. Una nota acerca de editores de texto: Hay muchos editores de texto y Entornos Integrados de Desarrollo (IDE por sus siglas en Ingls) que puede usar para crear, editar, y organizar archivos PHP. Contar con un editor que resalte la sintaxis de PHP puede ser de mucha ayuda. Una nota acerca de los procesadores de palabras: Los procesadores de palabras como "StarOffice", "Microsoft word" y "Abiword" no son buenas opciones para editar archivos de PHP. Si desea usar uno de stos programas para probar sus scripts, primero debe asegurarse de guardar el documento en formato de "Texto" puro, o PHP no ser capaz de ejecutar el script. Una nota acerca del "Bloc de Notas de Windows": Si desea escribir sus archivos PHP usando el "Bloc de Notas de Windows" o en algn otro editor de texto para Windows necesita asegurarse de que sus archivos sean guardados con la extensin .php (la mayora de editores de texto en Windows automticamente tratarn de aadir la extensin .txt a los archivos a menos que tome los siguientes pasos para prevenirlo). Cuando guarde sus archivos y el programa le pregunte qu nombre le desea dar al archivo, use comillas para indicar el nombre (es decir, "hola.php"). Una alternativa es, en la lista de opciones "Archivos de Texto *.txt", seleccionar la opcin "Todos los archivos *.*". Aqu puede escribir el nombre del archivo sin las comillas. Ahora que ha creado un pequeo script de PHP que funciona correctamente, es hora de trabajar con el script de PHP ms famoso; vamos a hacer una llamada a la funcin phpinfo() para obtener informacin acerca de su sistema y configuracin como las variables predefinidas disponibles, los mdulos utilizados por PHP, y las diferentes opciones de configuracin. Tomemos unos segundos para revisar esta informacin.

Eclipse Soluciones con Poder

Pgina 7

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Algo til
Hagamos ahora algo que puede ser ms til. Vamos a probar qu clase de navegador web utiliza. Para hacerlo, vamos a consultar la informacin que el navegador nos enva como parte de su peticin HTTP. Esta informacin es guardada en una variabl variable. Las variables siempre comienzan con un signo de dlar ("$") en PHP. La variable que vamos a utilizar en esta situacin es $_SERVER["HTTP_USER_AGENT"]. Nota: $_SERVER es una variable reservada por PHP que contiene toda la informacin del servidor web. Es conocida como Autoglobal (o Superglobal). stas son variables especiales que fueron introducidas en la versin 4.1.0 de PHP. Antes podamos usar las matrices $HTTP_*_VARS, tales como $HTTP_SERVER_VARS. Aunque stas han sido marcadas como obsoletas, tales matrices todava existen. Para poder ver esta variable solo necesita: Ejemplo 2-2. Impresin de una variable (elemento de la matriz)
<?php echo $_SERVER["HTTP_USER_AGENT"]; ?>

Un ejemplo de los resultados de este programa sera:


Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)

Hay muchos tipos de variables en PHP. En el ejemplo anterior imprimimos una matriz. Las matrices pueden ser muy tiles. $_SERVER es simplemente una variable que se encuentra disponible automticamente para usted en PHP. Ejemplo 2-3. Consultar todas las variables predefinidas con phpinfo()
<?php phpinfo(); ?>

Si abre este archivo con su navegador, puede ver una pgina con informacin acerca de PHP, junto a una lista de todas las variables que puede usar. Puede usar ms de un declaracin PHP dentro de una etiqueta PHP, y crear pequeos segmentos de cdigo que pueden hacer ms que un "echo". Por ejemplo, si quisiramos detectar el uso de "Internet Explorer", haramos algo as: Ejemplo 2-4. Ejemplos de uso de estructuras de control y funciones
<?php if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) { echo "Est usando Internet Explorer<br />"; } ?>

Un ejemplo de los resultado del script puede ser:


Est usando Internet Explorer

A continuacin introduciremos un par de conceptos nuevos. Tenemos una declaracin "if". Si est familiarizado con la sintaxis bsica del lenguaje "C", esto se ver lgico. El segundo concepto que introducimos fue la funcin llamada strstr(). strstr() es una funcin integrada de PHP que busca un cadena dentro de otra cadena ms larga. En el caso anterior estamos buscando "MSIE" dentro de $_SERVER["HTTP_USER_AGENT"]. Si la cadena fue encontrada, la funcin devolver verdadero ("TRUE"), la declaracin "if" se evala a verdadero ("TRUE") y el cdigo adentro de las llaves {} es ejecutado. De otra manera no resulta ejecutado. Podemos continuar y demostrar cmo puede saltar adentro y afuera del modo PHP en el medio de un bloque de cdigo. Ejemplo 2-5. Mezcla de los modos HTML y PHP
<?php if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) { ?> <h3>strstr debe haber devuelto verdadero</h3> <center> <b>

Eclipse Soluciones con Poder

Pgina 8

Instituto Tecnolgico Superior de Lerdo. Est&aacute; usando Internet Explorer </b> </center>

Taller de PHP.

<?php } else { ?> <h3>strstr debi&oacute; devolver falso</h3> <center> <b> No est&aacute; usando Internet Explorer </b> </center> <?php } ?>

Un ejemplo de los resultados de este script puede ser:


<h3>strstr debe haber devuelto verdadero </h3> <center><b>Est&aacute; usando Internet Explorer</b></center>

En vez de usar una sentencia PHP "echo" para demostrar algo, saltamos fuera del cdigo PHP y escribimos HTML puro. Este es un punto muy importante y potente que debemos observar aqu, y es que la fluidez lgica del script est intacta. Slamente las partes donde hay HTML sern enviadas a su navegador dependiendo de los resultados que strstr() devuelve (si fue verdadero [TRUE], o falso [FALSE]). En otras palabras, si la cadena MSIE fue encontrada o no.

Uso de Formularios HTML


Otra de las caractersticas de PHP es que gestiona formularios de HTML. El concepto bsico que es importante entender es que cualquier elemento de los formularios estar disponible automticamente en su cdigo PHP. Observemos un ejemplo: Ejemplo 2-6. Un formulario HTML sencillo
<form action="accion.php" method="POST"> Su nombre: <input type="text" name="nombre" /> Su edad: <input type="text" name="edad" /> <input type="submit"> </form>

No hay nada especial en este formularo, es HTML limpio sin ninguna clase de etiquetas desconocidas. Cuando el cliente llena ste formulario y oprime el botn etiquetado "Submit", una pgina titulada accion.php es llamada. En este archivo encontrar algo as: Ejemplo 2-7. Procesamiento de informacin de nuestro formulario HTML
Hola <?php echo $_POST["nombre"]; ?>. Tiene <?php echo $_POST["edad"]; ?> a&ntilde;os Un ejemplo del resultado de este script podra ser: Hola Jos. Tiene 22 aos

Es aparentemente obvio lo que hace. No hay mucho ms que decir al respecto. Las variables $_POST["nombre"] y $_POST["edad"] son definidas automticamente por PHP. Hace un momento usamos la variable autoglobal $_SERVER, ahora hemos introducido autoglobal $_POST, que contiene toda la informacin enviada por el mtodo POST. Fjese en el atributo method en nuestro formulario; es POST. Si hubiramos usado GET, entonces nuestra informacin estara en la variable autoglobal $_GET.

Eclipse Soluciones con Poder

Pgina 9

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

II. REFERENCIA DEL LENGUAJE


3. Sintaxis bsica
Saliendo de HTML
Para interpretar un archivo, php smplemente interpreta el texto del archivo hasta que encuentra uno de los carcteres especiales que delimitan el inicio de cdigo PHP. El intrprete ejecuta entonces todo el cdigo que encuentra, hasta que encuentra una etiqueta de fin de cdigo, que le dice al intrprete que siga ignorando el cdigo siguiente. Este mecanismo permite embeber cdigo PHP dentro de HTML: todo lo que est fuera de las etiquetas PHP se deja tal como est, mientras que el resto se interpreta como cdigo. Hay cuatro conjuntos de etiquetas que pueden ser usadas para denotar bloques de cdigo PHP. De estas cuatro, slo 2 (<?php. . .?> y <script language="php">. . .</script>) estn siempre disponibles; el resto pueden ser configuradas en el fichero de php.ini para ser o no aceptadas por el intrprete. Mientras que el formato corto de etiquetas (short-form tags) y el estilo ASP (ASP-style tags) pueden ser convenientes, no son portables como la versin de formato largo de etiquetas. Adems, si se pretende embeber cdigo PHP en XML o XHTML, ser obligatorio el uso del formato <?php. . .?> para la compatibilidad con XML. Las etiquetas soportadas por PHP son: Ejemplo 3-1. Formas de escapar de HTML
1. 2. 3. <?php echo("si quieres servir documentos XHTML o XML, haz como aqu\n"); ?> <? echo ("esta es la ms simple, una instruccin de procesado SGML \n"); ?> <?= expression ?> Esto es una abreviatura de " <? echo expression ?>" <script language="php"> echo ("muchos editores (como FrontPage) no aceptan instrucciones de procesado"); </script> <% echo ("Opcionalmente, puedes usar las etiquetas ASP"); %> <%= $variable; # Esto es una abreviatura de "<% echo . . ." %>

4.

El mtodo primero, <?php. . .?>, es el ms conveniente, ya que permite el uso de PHP en cdigo XML como XHTML. El mtodo segundo no siempre est disponible. El formato corto de etiquetas est disponible con la funcin short_tags() (slo PHP 3), activando el parmetro del fichero de configuracin de PHP short_open_tag, o compilando PHP con la opcin --enable-short-tags del comando configure. Aunque est activa por defecto en php.ini-dist, se desaconseja el uso del formato de etiquetas corto. El mtodo cuarto slo est disponible si se han activado las etiquetas ASP en el fichero de configuracin: asp_tags. Nota: El soporte de etiquetas ASP se aadi en la versin 3.0.4. Nota: No se debe usar el formato corto de etiquetas cuando se desarrollen aplicaciones o bibliotecas con intencin de redistribuirlas, o cuando se desarrolle para servidores que no estn bajo nuestro control, porque puede ser que el formato corto de etiquetas no est soportado en el servidor. Para generar cdigo portable y redistribuble, asegrate de no usar el formato corto de etiquetas. La etiqueta de fin de bloque incluir tras ella la siguiente lnea si hay alguna presente. Adems, la etiqueta de fin de bloque lleva implcito el punto y coma; no necesitas por lo tanto aadir el punto y coma final de la ltima lnea del bloque PHP. PHP permite estructurar bloques como: Ejemplo 3-2. Mtodos avanzados de escape
<?php if ($expression) { ?> <strong>This is true.</strong> <?php } else {

Eclipse Soluciones con Poder

Pgina 10

Instituto Tecnolgico Superior de Lerdo. ?> <?php } ?>

Taller de PHP.

<strong>This is false.</strong>

Este ejemplo realiza lo esperado, ya que cuando PHP encuentra las etiquetas ?> de fin de bloque, empieza a escribir lo que encuentra tal cual hasta que encuentra otra etiqueta de inicio de bloque. El ejemplo anterior es, por supuesto, inventado. Para escribir bloques grandes de texto generamente es ms eficiente separalos del cdigo PHP que enviar todo el texto mediante las funciones echo(), print() o similares.

Separacin de instrucciones
Las separacin de instrucciones se hace de la misma manera que en C o Perl - terminando cada declaracin con un punto y coma. La etiqueta de fin de bloque (?>) implica el fin de la declaracin, por lo tanto lo siguiente es equivalente:
<?php echo "Esto es una prueba"; ?> <?php echo "Esto es una prueba" ?>

Comentarios
PHP soporta el estilo de comentarios de 'C', 'C++' y de la interfaz de comandos de Unix. Por ejemplo:
<?php echo "Esto es una prueba"; // Este es un comentario al estilo c++ de una sola lnea. /* Este es un comentario multi lnea otra lnea del mismo comentario. */ echo "Esta es otra prueba"; echo "Una prueba final"; # Este es un comentario al estilo del Shell de Unix ?>

Los estilos de comentarios de una linea actualmente slo comentan hasta el final de la linea o el bloque actual de cdigo PHP, lo primero que ocurra.
<h1>Este es un <?php # echo "simple";?> ejemplo.</h1> <p>El encabezado anterior mostrar 'Este es un ejemplo'.

Hay que tener cuidado con no anidar comentarios de estilo 'C', algo que puede ocurrir al comentar bloques largos de cdigo.
<?php /* */ ?> echo "Esta es una prueba"; /* Este comentario causar problemas */

Los estilos de comentarios de una linea actualmente slo comentan hasta el final de la linea o del bloque actual de cdigo PHP, lo primero que ocurra. Esto implica que el cdigo HTML tras // ?> ser impreso: ?> sale del modo PHP, retornando al modo HTML, el comentario // no le influye.

Eclipse Soluciones con Poder

Pgina 11

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

4. Tipos de Datos
Introduccin
PHP soporta ocho tipos primitivos. Cuatro tipos escalares: boolean integer float (nmero de punto-flotante, tambin conocido como double string Dos tipos compuestos: array object Y finalmente dos tipos especiales: resource NULL Tambin puede encontrar algunas referencias al tipo "double". Considere al tipo double como el mismo que float, los dos nombres existen solo por razones histricas. El tipo de una variable usualmente no es declarado por el programador; en cambio, es decidido en tiempo de compilacin por PHP dependiendo del contexto en el que es usado la variable. Nota: Si desea chequear el tipo y valor de una cierta expresin, use var_dump(). Nota: Si tan solo desea una representacin legible para humanos del tipo para propsitos de depuracin, use gettype(). Para chequear por un cierto tipo, no use gettype(); en su lugar utilice las funciones is_tipo. Algunos ejemplos:
<?php $bool = TRUE; $str = "foo"; $int = 12;

// un valor booleano // una cadena // un entero

echo gettype($bool); // imprime "boolean" echo gettype($str); // imprime "string" // Si este valor es un entero, incrementarlo en cuatro if (is_int($int)) { $int += 4; } // Si $bool es una cadena, imprimirla // (no imprime nada) if (is_string($bool)) { echo "Cadena: $bool"; }

?>

Si quisiera forzar la conversin de una variable a cierto tipo, puede moldear la variable, o usar la funcin settype() sobre ella.

Eclipse Soluciones con Poder

Pgina 12

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Note que una variable puede ser evaluada con valores diferentes en ciertas situaciones, dependiendo del tipo que posee en cada momento.

Booleanos
Este es el tipo ms simple. Un boolean expresa un valor de verdad. Puede ser TRUE or FALSE. Nota: El tipo booleano fue introducido en PHP 4.

Sintaxis Para especificar un literal booleano, use alguna de las palabras clave TRUE o FALSE. Ambas son insensibles a maysculas y minsculas.
<?php $foo = True; // asignar el valor TRUE a $foo ?>

Usualmente se usa algn tipo de operador que deuelve un valor boolean, y luego ste es pasado a una estructura de control.
<?php // == es un // igualdad if ($accion echo "La }

operador que prueba por y devuelve un booleano == "mostrar_version") { versi&oacute;n es 1.23";

// esto no es necesario... if ($mostrar_separadores == TRUE) { echo "<hr>\n"; } // ...porque se puede escribir simplemente if ($mostrar_separadores) { echo "<hr>\n"; }

?>

Enteros
Un integer es un nmero del conjunto Z = {..., -2, -1, 0, 1, 2, ...}. Sintaxis Los enteros pueden ser especificados en notacin decimal (base-10), hexadecimal (base-16) u octal (base-8), opcionalmente precedidos por un signo (- o +). Si usa la notacin octal, debe preceder el nmero con un 0 (cero), para usar la notacin hexadecimal, preceda el nmero con 0x. Ejemplo 4-1. Literales tipo entero
<?php $a $a $a $a ?> = = = = 1234; -123; 0123; 0x1A; // // // // numero decimal un numero negativo numero octal (equivalente al 83 decimal) numero hexadecimal (equivalente al 26 decimal)

Eclipse Soluciones con Poder

Pgina 13

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

El tamao de un entero es dependiente de la plataforma, aunque un valor mximo de aproximadamente dos billones es el valor usual (lo que es un valor de 32 bits con signo). PHP no soporta enteros sin signo. Desbordamiento de enteros Si especifica un nmero ms all de los lmites del tipo integer, ser interpretado en su lugar como un float. Asimismo, si realiza una operacin que resulta en un nmero ms all de los lmites del tipo integer, un float es retornado en su lugar. No hay un operador de divisin de enteros en PHP. 1/2 produce el float 0.5. Puede moldear el valor a un entero para asegurarse de redondearlo hacia abajo, o puede usar la funcin round().
<?php var_dump(25/7); // float(3.5714285714286) var_dump((int) (25/7)); // int(3) var_dump(round(25/7)); // float(4) ?>

Nmeros de punto flotante


Los nmeros de punto flotante (tambin conocidos como "flotantes", "dobles" o "nmeros reales") pueden ser especificados usando cualquiera de las siguientes sintaxis:
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?>

Formalmente:
LNUM [0-9]+ DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*) EXPONENT_DNUM ( ({LNUM} | {DNUM}) [eE][+-]? {LNUM})

El tamao de un flotante depende de la plataforma, aunque un valor comn consiste en un mximo de ~1.8e308 con una precisin de aproximadamente 14 dgitos decimales (lo que es un valor de 64 bits en formato IEEE).

Cadenas
Un valor string es una serie de caracteres. En PHP, un caracter es lo mismo que un byte, es decir, hay exactamente 256 tipos de caracteres diferentes. Esto implica tambin que PHP no tiene soporte nativo de Unicode. V Nota: El que una cadena se haga muy grande no es un problema. PHP no impone lmite prctico alguno sobre el tamao de las cadenas, as que no hay ninguna razn para preocuparse sobre las cadenas largas.

Sintaxis Un literal de cadena puede especificarse en tres formas diferentes. comillas simples comillas dobles sintaxis heredoc

Comillas simples La forma ms simple de especificar una cadena sencilla es rodearla de comillas simples (el caracter ').

Eclipse Soluciones con Poder

Pgina 14

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Para especificar una comilla sencilla literal, necesita escaparla con una barra invertida (\), como en muchos otros lenguajes. Si una barra invertida necesita aparecer antes de una comilla sencilla o al final de la cadena, necesitar doblarla. Note que si intenta escapar cualquier otro caracter, la barra invertida ser impresa tambin! De modo que, por lo general, no hay necesidad de escapar la barra invertida misma. Nota: En PHP 3, se generar una advertencia de nivel E_NOTICE cuando esto ocurra. Nota: A diferencia de las otras dos sintaxis, las variables y secuencias de escape para caracteres especiales no sern expandidas cuando ocurren al interior de cadenas entre comillas sencillas.
<?php echo 'esta es una cadena simple'; echo 'Tambi&eacute;n puede tener saltos de l&iacute;nea embebidos en las cadenas de esta forma, ya que es v&aacute;lido'; // Imprime: Arnold dijo una vez: "I'll be back" echo 'Arnold dijo una vez: "I\'ll be back"'; // Imprime: Ha eliminado C:\*.*? echo 'Ha eliminado C:\\*.*?'; // Imprime: Ha eliminado C:\*.*? echo 'Ha eliminado C:\*.*?'; // Imprime: Esto no va a expandirse: \n una nueva linea echo 'Esto no va a expandirse: \n una nueva linea'; // Imprime: Las variables no se $expanden $tampoco echo 'Las variables no se $expanden $tampoco'; ?>

Comillas dobles Si la cadena se encuentra rodeada de comillas dobles ("), PHP entiende ms secuencias de escape para caracteres especiales: Tabla 4-1. Caracteres escapados secuencia \n \r \t \\ \$ \" \[0-7]{1,3} \x[0-9A-Fa-f]{1,2} significado alimentacin de lnea (LF o 0x0A (10) en ASCII) retorno de carro (CR o 0x0D (13) en ASCII) tabulacin horizontal (HT o 0x09 (9) en ASCII) barra invertida signo de dlar comilla-doble la secuencia de caracteres que coincide con la expresin regular es un caracter en notacin octal la secuencia de caracteres que coincide con la expresin regular es un caracter en notacin hexadecimal

Nuevamente, si intenta escapar cualquier otro caracter, la barra invertida ser impresa tambin! Pero la caracterstica ms importante de las cadenas entre comillas dobles es el hecho de que los nombres de variables sern expandidos.

Eclipse Soluciones con Poder

Pgina 15

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Heredoc Otra forma de delimitar cadenas es mediante el uso de la sintaxis heredoc ("<<<"). Debe indicarse un identificador despus de la secuencia <<<, luego la cadena, y luego el mismo identificador para cerrar la cita. El identificador de cierre debe comenzar en la primera columna de la lnea. Asimismo, el identificador usado debe seguir las mismas reglas que cualquier otra etiqueta en PHP: debe contener solo caracteres alfanumricos y de subrayado, y debe iniciar con un caracter no-dgito o de subrayado. Aviso Es muy importante notar que la lnea con el identificador de cierre no contenga otros caracteres, excepto quizs por un punto-y-coma (;). Esto quiere decir en especial que el identificador no debe usar sangra, y no debe haber espacios o tabuladores antes o despus del punto-y-coma. Es importante tambin notar que el primer caracter antes del identificador de cierre debe ser un salto de lnea, tal y como lo defina su sistema operativo. Esto quiere decir \r en Macintosh, por ejemplo. Si esta regla es rota y el identificador de cierre no es "limpio", entonces no se considera un identificador de cierre y PHP continuar en busca de uno. Si, en tal caso, no se encuentra un identificador de cierre apropiado, entonces un error del analizador sintctico resultar con el nmero de lnea apuntando al final del script. No es permitido usar la sintaxis heredoc al inicializar miembros de clase. Use otro tipo de sintaxis en su lugar. Ejemplo 4-2. Ejemplo invlido
<?php class foo { public $bar = <<<EOT bar EOT; } ?>

El texto heredoc se comporta tal como una cadena entre comillas dobles, sin las comillas dobles. Esto quiere decir que no necesita escapar tales comillas en sus bloques heredoc, pero aun puede usar los cdigos de escape listados anteriormente. Las variables son expandidas, aunque debe tenerse el mismo cuidado cuando se expresen variables complejas al interior de un segmento heredoc, al igual que con otras cadenas. Ejemplo 4-3. Ejemplo de uso de una cadena heredoc
<?php $cadena = <<<FIN Ejemplo de una cadena que se extiende por varias l&iacute;neas usando la sintaxis heredoc. FIN; /* Un ejemplo mas complejo, con variables. */ class foo { var $foo; var $bar; function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); }

$foo = new foo(); $nombre = 'MiNombre'; echo <<<FIN Mi nombre es "$nombre". Estoy imprimiendo algo de $foo->foo. Ahora, estoy imprimiendo algo de {$foo->bar[1]}. Esto deber&iacute;a imprimir una letra 'A' may&uacute;scula: \x41 FIN;

?>

Eclipse Soluciones con Poder

Pgina 16

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

5. Vectores (tablas)
Las tablas (o array en ingls), son muy importantes en PHP, ya que generalmente, las funciones que devuelven varios valores, como las funciones ligadas a las bases dedatos, lo hacen en forma de tabla. En PHP disponemos de dos tipos de tablas. El primero sera el clsico, utilizando ndices:
<?php $ciudad[] = "Pars"; $ciudad[] = "Mxico"; $ciudad[] = "Roma"; $ciudad[] = "Sevilla"; $ciudad[] = "Londres"; print ("yo vivo en " . $ciudad[1] . "<BR>\n"); ?>

Esta es una forma de asignar elementos a una tabla, pero una forma ms formal es utilizando la funcin array
<?php $ciudad = array("Pars", "Roma", "Sevilla", "Londres"); //contamos el nmero de elementos de la tabla $numelentos = count($ciudad); //imprimimos todos los elementos de la tabla for ($i=0; $i < $numelentos; $i++) { print ("La ciudad $i es $ciudad[$i] <BR>\n"); } ?>

Si no se especifica, el primer ndice es el cero, pero podemos utilizar el operador => para especificar el ndice inicial.
$ciudad = array(1=>"Pars", "Roma", "Sevilla", "Londres");

Un segundo tipo, son las tablas asociativas, en las cules a cada elemento se le asigna un valor (key) para acceder a l. Para entenderlo, que mejor que un ejemplo, supongamos que tenemos una tabla en al que cada elemento almacena el nmero de visitas a nuestra web por cada da de la semana. Utilizando el mtodo clsico de ndices, cada da de la semana se representara por un entero, 0 para lunes, 1 para martes, etc.
$visitas[0] = 200; $visitas[1] = 186;

Si usamos las tablas asociativas sera


$visitas["lunes"] = 200; $visitas["martes"] = 186;

o bien,
$visitas = array("lunes"=>200; "martes"=>186);

Ahora bien, recorrer una tabla y mostrar su contenido es sencillo utilizando los ndices, pero cmo hacerlo en las tablas asociativas?. La manipulacin de las tabas asociativas se a hace travs de funciones que actan sobre un puntero interno que indica la posicin. Por defecto, el puntero se sita en el primer elemento aadido en la tabla, hasta que es movido por una funcin: current - devuelve el valor del elemento que indica el puntero pos - realiza la misma funcin que current reset - mueve el puntero al primer elemento de la tabla end - mueve el puntero al ltimo elemento de la tabla next - mueve el puntero al elemento siguiente Eclipse Soluciones con Poder Pgina 17

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

prev - mueve el puntero al elemento anterior count - devuelve el nmero de elementos de una tabla. Veamos un ejemplo de las funciones anteriores:
<?php $semana = array("lunes", "martes", "mircoles", "jueves","viernes", "sbado", "domingo"); echo count($semana); //7 //situamos el puntero en el primer elemento reset($semana); echo current($semana); //lunes next($semana); echo pos($semana); //martes end($semana) echo pos($semana); //domingo prev($semana); echo current($semana); //sbado ?>

Recorrer una tabla con las funciones anteriores se hace un poco enredoso, para ello se recomienda utilizar la funcin each().
<?php $visitas = array("lunes"=>200, "martes"=>186, "mircoles"=>190, "jueves"=>175); reset($visitas); while (list($clave, $valor) = each($visitas)) { echo "el da $clave ha tenido $valor visitas<BR>"; } ?>

La funcin each() devuelve el valor del elemento actual, en este caso, el valor del elemento actual y su clave, y desplaza el puntero al siguiente, cuando llega al final devuelve falso, y termina el bucle while().

Tablas multidimensionales
Las tablas multidimensionales son simplemente tablas en las cuales cada elemento es a su vez otra tabla.
<?php $calendario[] = array (1, "enero", 31); $calendario[] = array (2, "febrero", 28); $calendario[] = array (3, "marzo", 31); $calendario[] = array (4, "abril", 30); $calendario[] = array (5, "mayo", 31); while (list($clave, $valor ) = each($calendario)){ { $cadena = $valor[1]; $cadena .= " es el mes nmero " . $valor[0]; $cadena .= "y tiene " . $varlor[2] . " das<BR>"; echo $cadena; } ?>

La funcin list() es ms bien un operador de asignacin, lo que hace es asignar valores a unas lista de variables. En este caso los valores son extrados de una tabla por la funcin each().

Eclipse Soluciones con Poder

Pgina 18

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

6. Variables
Conceptos Bsicos
En PHP las variables se representan como un signo de dlar seguido por el nombre de la variable. El nombre de la variable es sensible a minsculas y maysculas. Los nombres de variables siguen las mismas reglas que otras etiquetas en PHP. Un nombre de variable vlido tiene que empezar con una letra o una raya (underscore), seguido de cualquier nmero de letras, nmeros y rayas.
<?php $var = "Bob"; $Var = "Joe"; echo "$var, $Var"; $4site = 'not yet'; $_4site = 'not yet'; $tyte = 'mansikka'; ?>

// outputs "Bob, Joe" // invalid; starts with a number // valid; starts with an underscore // valid; '' is ASCII 228 (Extendido)

En PHP3, las variables siempre se asignan por valor. Esto significa que cuando se asigna una expresin a una variable, el valor ntegro de la expresin original se copia en la variable de destino. Esto quiere decir que, por ejemplo, despus de asignar el valor de una variable a otra, los cambios que se efecten a una de esas variables no afectar a la otra. PHP4 ofrece otra forma de asignar valores a las variables: asignar por referencia. Esto significa que la nueva variable simplemente referenca (en otras palabras, "se convierte en un alias de" "apunta a") la variable original. Los cambios a la nueva variable afectan a la original, y viceversa. Esto tambin significa que no se produce una copia de valores; por tanto, la asignacin ocurre ms rpidamente. Para asignar por referencia, simplemente se antepone un ampersand signo "&" al comienzo de la variable cuyo valor se est asignando (la variable fuente). Por ejemplo, el siguiente trozo de cdigo produce la salida 'Mi nombre es Bob' dos veces:
<?php $foo $bar $bar echo echo ?> = 'Bob'; = &amp;$foo; = "Mi nombre es $bar"; $foo; $bar; // // // // Asigna el valor 'Bob' a $foo Referencia $foo va $bar. Modifica $bar... $foo tambin se modifica.

Algo importante a tener en cuenta es que slo las variables con nombre pueden ser asignadas por referencia.
<?php $foo = 25; $bar = &amp;$foo; $bar = &amp;(24 * 7); function test() { return 25; } $bar = &amp;test();

// Esta es una asignacin v&aacute;lida. // Invlida; referencia una expresin sin nombre.

?>

// Invlida.

mbito de las variables


El mbito de una variable es el contexto dentro del que la variable est definida. La mayor parte de las variables PHP slo tienen un mbito simple. Este mbito simple tambin abarca los ficheros incluidos y los requeridos. Por ejemplo:
<?php $a = 1; include "b.inc"; ?>

Eclipse Soluciones con Poder

Pgina 19

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Aqu, la variable $a dentro del script incluido b.inc. De todas formas, dentro de las funciones definidas por el usuario aparece un mbito local a la funcin. Cualquier variable que se use dentro de una funcin est, por defecto, limitada al mbito local de la funcin. Por ejemplo:
<?php $a = 1; /* global scope */ function Test() { echo $a; /* reference to local scope variable */ } ?> Test();

Este script no producir salida, ya que la orden echo utiliza una versin local de la variable $a, a la que no se ha asignado ningn valor en su mbito. Puede que usted note que hay una pequea diferencia con el lenguaje C, en el que las variables globales estn disponibles automticamente dentro de la funcin a menos que sean expresamente sobreescritas por una definicin local. Esto puede causar algunos problemas, ya que la gente puede cambiar variables globales inadvertidamente. En PHP, las variables globales deben ser declaradas globales dentro de la funcin si van a ser utilizadas dentro de dicha funcin. Veamos un ejemplo:
<?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ?>

El script anterior producir la salida "3". Al declarar $a y $b globales dentro de la funcin, todas las referencias a tales variables se referirn a la versin global. No hay lmite al nmero de variables globales que se pueden manipular dentro de una funcin. Un segundo mtodo para acceder a las variables desde un mbito global es usando la matriz $GLOBALS. El ejemplo anterior se puede reescribir as:
<?php $a = 1; $b = 2; function Sum() { $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; } Sum(); echo $b;

?>

La matriz $GLOBALS es una matriz asociativa con el nombre de la variable global como clave y los contenidos de dicha variable como el valor del elemento de la matriz. $GLOBALS existe en cualquier mbito.
<?php function test_global() { // Most predefined variables aren't "super" and require // 'global' to be available to the functions local scope. global $HTTP_POST_VARS; print $HTTP_POST_VARS['name'];

Eclipse Soluciones con Poder

Pgina 20

Instituto Tecnolgico Superior de Lerdo. // Superglobals are available in any scope and do // not require 'global'. Superglobals are available // as of PHP 4.1.0 print $_POST['name']; } ?>

Taller de PHP.

Otra caracterstica importante del mbito de las variables es la variable static. Una variable esttica existe slo en el mbito local de la funcin, pero no pierde su valor cuando la ejecucin del programa abandona este mbito. Consideremos el siguiente ejemplo:
<?php function Test () { $a = 0; echo $a; $a++; } ?>

Esta funcin tiene poca utilidad ya que cada vez que es llamada asigna a $a el valor 0 y representa un "0". La sentencia $a++, que incrementa la variable, no sirve para nada, ya que en cuanto la funcin termina la variable $a desaparece. Para hacer una funcin til para contar, que no pierda la pista del valor actual del conteo, la variable $a debe declararse como esttica:
<?php function Test() { static $a = 0; echo $a; $a++; } ?>

Ahora, cada vez que se llame a la funcin Test(), se representar el valor de $a y se incrementar. Las variables estticas tambin proporcionan una forma de manejar funciones recursivas. Una funcin recursiva es la que se llama a s misma. Se debe tener cuidado al escribir una funcin recursiva, ya que puede ocurrir que se llame a s misma indefinidamente. Hay que asegurarse de implementar una forma adecuada de terminar la recursin. La siguiente funcin cuenta recursivamente hasta 10, usando la variable esttica $count para saber cundo parar:
<?php function Test() { static $count = 0; $count++; echo $count; if ($count < 10) { Test (); } $count--;

} ?>

Variables externas a PHP Formularios HTML (GET y POST)


Cuando se enva un formulario a un script PHP, las variables de dicho formulario pasan a estar automticamente disponibles en el script gracias a PHP. Por ejemplo, consideremos el siguiente formulario: Ejemplo 6-1. Variables de formulario simples
<form action="foo.php" method="POST"> Name: <input type="text" name="username"><br> Email: <input type="text" name="email"><br>

Eclipse Soluciones con Poder

Pgina 21

Instituto Tecnolgico Superior de Lerdo. <input type="submit" name="submit" value="Submit me!"> </form>

Taller de PHP.

Dependiendo de tu configuracin y preferencias personales, existen muchas maneras de acceder a los datos de tus formularios HTML. Algunos ejemplos: Ejemplo 6-2. Accediendo datos de un formulario simple HTML POST
<?php // Available since PHP 4.1.0 print $_POST['username']; print $_REQUEST['username']; import_request_variables('p', 'p_'); print $p_username; // Available since PHP 3. As of PHP 5.0.0, these long predefined // variables can be disabled with the register_long_arrays directive. print $HTTP_POST_VARS['username']; // Available if the PHP directive register_globals = on. As of // PHP 4.2.0 the default value of register_globals = off. // Using/relying on this method is not preferred. ?> print $username;

Usando un formulario GET es similar excepto en el uso de variables predefinidas, que en este caso sern del tipo GET. GET tambin se usa con QUERY_STRING (la informacin despus del smbolo '?' en una URL). Por ejemplo http://www.example.com/test.php?id=3 contiene datos GET que son accesibles con $_GET['id'].

Eclipse Soluciones con Poder

Pgina 22

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

7. Constantes
Una constante es un identificador para expresar un valor simple. Como el nombre sugiere, este valor no puede variar durante la ejecucin del script. Una constante es sensible a maysculas por defecto. Por convencin, los identificadores de constantes suelen declararse en maysculas El nombre de una constante sigue las mismas reglas que cualquier etiqueta en PHP. Un nombre de constante vlido empieza con una letra o un caracter de subrayado, seguido por cualquier nmero de letras, nmeros, o subrayados. El alcanze de una constante es global, Es decir, es posible acceder a ellas sin preocuparse por el mbito de alcance.

Sintaxis
Se puede definir una constante usando la funcin define( ). Una vez definida, no puede ser modificada ni eliminada . Slo se puede definir como constantes valores escalares (boolean, integer, float y string ). Para obtener el valor de una constante solo es necesario especificar su nombre. A diferencia de las variables, no se tiene que especificar el prefijo $. Tambin se puede utilizar la funcin constant(), para obtener el valor de una constante, en el caso de que queramos expresarla de forma dinmica. Usa la funcin get_defined_constants() parar obtener una lista de todas las constantes definidas. stas son las diferencias entre constantes y variables: Las constantes no son precedidas por un smbolo de dolar ($) Las contantes slo pueden ser definidas usando la funcin define ( ) , nunca por simple asignacin Las constantes pueden ser definidas y accedidas sin tener en cuenta las reglas de alcanze del mbito. Las constantes no pueden ser redefinidas o eliminadas despues de establecerse; y Las constantes slo puede albergar valores escalares Ejemplo 7-1. Definiendo constantes
<?php define("CONSTANT", "Hello world."); echo CONSTANT; // outputs "Hello world." echo Constant; // outputs "Constant" and issues a notice. ?>

Eclipse Soluciones con Poder

Pgina 23

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

8. Operadores
Un operador es algo a lo que usted entrega uno o ms valores (o expresiones, en jerga de programacin) y produce otro valor (de modo que la construccin misma se convierte en una expresin). As que puede pensar sobre las funciones o construcciones que devuelven un valor (como print) como operadores, y en aquellas que no devuelven algo (como echo) como cualquier otra cosa. Existen tres tipos de operadores. En primer lugar se encuentra el operador unario, el cual opera sobre un nico valor, por ejemplo ! (el operador de negacin) o ++ (el operador de incremento). El segundo grupo se conoce como operadores binarios; ste grupo contiene la mayora de operadores que soporta PHP

Operadores de Aritmtica
Recuerda la aritmtica bsica del colegio? stos operadores funcionan tal como aqullos. Tabla 8-1. Operadores de Aritmtica Ejemplo -$a $a + $b $a - $b $a * $b $a / $b $a % $b Nombre Negacin Adicin Substraccin Multiplicacin Divisin Mdulo El opuesto de $a. Suma de $a y $b. Diferencia entre $a y $b. Producto de $a y $b. Cociente de $a y $b. Resto de $a dividido por $b. Resultado

El operador de divisin ("/") devuelve un valor flotante en todos los casos, incluso si los dos operandos son enteros (o cadenas que son convertidas a enteros). Nota: El resto de $a % $b es negativo para valores negativos de $a.

Operadores de Asignacin
El operador bsico de asignacin es "=". A primera vista, usted podra pensar en l como "es igual a". No lo haga. Lo que quiere decir en realidad es que el operando de la izquierda recibe el valor de la expresin a la derecha (es decir, "se define a"). El valor de una expresin de asignacin es el valor que se asigna. Es decir, el valor de "$a = 3" es 3. Esto le permite hacer una que otra cosa curiosa:
<?php $a = ($b = 4) + 5; // $a es igual a 9 ahora, y $b ha sido definido a 4. ?>

En conjunto con el operador bsico de asignacin, existen "operadores combinados" para todas las operaciones de aritmtica binaria y de cadenas, que le permiten usar un valor en una expresin y luego definir su valor como el resultado de esa expresin. Por ejemplo:
<?php $a $a $b $b ?> = 3; += 5; // define $a como 8, como si hubiesemos dicho: $a = $a + 5; = "Hola "; .= "a todos!"; // define $b como "Hola a todos!", tal como $b = $b . "a todos!";

Eclipse Soluciones con Poder

Pgina 24

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Note que la asignacin copia la variable original en la nueva (asignacin por valor), de modo que cualquier cambio a una no afecta a la otra. Esto puede resultar de importancia si necesita copiar algo como una matriz de gran tamao al interior de un ciclo reducido.

Operadores de Comparacin
Los operadores de comparacin, como su nombre indica, le permiten comparar dos valores. Puede que tambin se encuentre interesado en consultar las tablas de comparacin de tipos, ya que stas muestran ejemplos de varios tipos de comparaciones relacionadas con tipos. Tabla 8-2. Operadores de Comparacin Ejemplo $a == $b $a === $b $a != $b $a <> $b $a !== $b $a < $b $a > $b $a <= $b $a >= $b Nombre Igual Idntico Diferente Diferente No idnticos Menor que Mayor que Menor o igual que Mayor o igual que Resultado TRUE si $a es igual a $b. TRUE si $a es igual a $b, y son del mismo tipo. (A partir de PHP 4) TRUE si $a no es igual a $b. TRUE si $a no es igual a $b. TRUE si $a no es igual a $b, o si no son del mismo tipo. (A partir de PHP 4) TRUE si $a es escrictamente menor que $b. TRUE si $a es estrictamente mayor que $b. TRUE si $a es menor o igual que $b. TRUE si $a es mayor o igual que $b.

Si compara un entero con una cadena, la cadena es convertida a un nmero. Si compara dos cadenas numricas, ellas son comparadas como enteros. Estas reglas tambin se aplican a la sentencia switch.
<?php var_dump(0 == "a"); // 0 == 0 -> true var_dump("1" == "01"); // 1 == 1 -> true switch ("a") { case 0: echo "0"; break; case "a": // nunca se ejecuta ya que "a" ya ha coincidido con 0 echo "a"; break; } ?>

Operadores de Incremento/Decremento
PHP ofrece soporte de operadores de pre- y post-incremento y decremento, estilo-C. Nota: Los operadores de incremento/decremento no afectan a los valores booleanos. Decrementar valores NULL tampoco tiene efecto, aunque incrementarlos resulta en 1. Tabla 8-3. Operadores de Incremento/decremento Ejemplo ++$a $a++ --$a $a-Nombre Pre-incremento Post-incremento Pre-decremento Post-decremento Efecto Incrementa $a en uno, y luego devuelve $a. Devuelve $a, y luego incrementa $a en uno. Decrementa $a en uno, luego devuelve $a. Devuelve $a, luego decrementa $a en uno.

Eclipse Soluciones con Poder

Pgina 25

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Aqu hay un script sencillo de ejemplo:


<?php echo $a = echo echo echo $a = echo echo echo $a = echo echo echo $a = echo echo ?> "<h3>Postincremento</h3>"; 5; "Debe ser 5: " . $a++ . "<br />\n"; "Debe ser 6: " . $a . "<br />\n"; "<h3>Preincremento</h3>"; 5; "Debe ser 6: " . ++$a . "<br />\n"; "Debe ser 6: " . $a . "<br />\n"; "<h3>Postdecremento</h3>"; 5; "Debe ser 5: " . $a-- . "<br />\n"; "Debe ser 4: " . $a . "<br />\n"; "<h3>Predecremento</h3>"; 5; "Debe ser 4: " . --$a . "<br />\n"; "Debe ser 4: " . $a . "<br />\n";

Operadores de Lgica
Tabla 8-4. Operadores de Lgica Ejemplo $a and $b $a or $b $a xor $b ! $a $a && $b $a || $b Y O O exclusivo (Xor) No Y O Nombre Resultado TRUE si tanto $a como $b son TRUE. TRUE si cualquiera de $a o $b es TRUE. TRUE si $a o $b es TRUE, pero no ambos. TRUE si $a no es TRUE. TRUE si tanto $a como $b son TRUE. TRUE si cualquiera de $a o $b es TRUE.

La razn para tener las dos variaciones diferentes de los operadores "and" y "or" es que ellos operan con precedencias diferentes.

Operadores de Cadena
Existen dos operadores para datos tipo stringstring. El primero es el operador de concatenacin ('.'), el cual devuelve el resultado de concatenar sus argumentos a lado derecho e izquierdo. El segundo es el operador de asignacin sobre concatenacin ('.='), el cual adiciona el argumento del lado derecho al argumento en el lado izquierdo.
<?php $a = "Hola "; $b = $a . "Mundo!"; // ahora $b contiene "Hola Mundo!" $a = "Hola "; $a .= "Mundo!"; ?> // ahora $a contiene "Hola Mundo!"

Eclipse Soluciones con Poder

Pgina 26

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

9. Estructuras de Control
Todo script PHP se compone de una serie de sentencias. Una sentencia puede ser una asignacin, una llamada a funcin, un bucle, una sentencia condicional e incluso una sentencia que no haga algo (una sentencia vaca). Las sentencias normalmente acaban con punto y coma. Adems, las sentencias se pueden agrupar en grupos de sentencias encapsulando un grupo de sentencias con llaves. Un grupo de sentencias es tambin una sentencia. En este captulo se describen los diferentes tipos de sentencias.

if
La construccin if es una de las ms importantes caractersticas de muchos lenguajes, includo PHP. Permite la ejecucin condicional de fragmentos de cdigo. PHP caracteriza una estructura if que es similar a la de C:
<?php if (expr) sentencia ?>

Si expr se evala como TRUE, PHP ejecutar la sentencia, y si se evala como FALSE . El siguiente ejemplo mostrara a es mayor que b si $a fuera mayor que $b:
<?php if ($a > $b) print "a es mayor que b"; ?>

A menudo, se desea tener ms de una sentencia ejecutada de forma condicional. Por supuesto, no hay necesidad de encerrar cada sentencia con una clusula if. En vez de eso, se pueden agrupar varias sentencias en un grupo de sentencias. Por ejemplo, este cdigo mostrara a es mayor que b si $a fuera mayor que $b, y entonces asignara el valor de $a a $b:
<?php if ($a > $b) { print "a es mayor que b"; $b = $a; } ?>

Las sentencias if se pueden anidar indefinidamente dentro de otras sentencias if, lo cual proporciona una flexibilidad completa para ejecuciones condicionales en las diferentes partes de tu programa.

else
A menudo queremos ejecutar una sentencia si se cumple una cierta condicin, y una sentencia distinta si la condicin no se cumple. Esto es para lo que sirve else. else extiende una sentencia if para ejecutar una sentencia en caso de que la expresin en la sentencia if se evale como FALSE. Por ejemplo, el siguiente cdigo mostrara a es mayor que b si $a fuera mayor que $b, y a NO es mayor que b en cualquier otro caso:
<?php if ($a > $b) { print "a es mayor que b"; } else { print "a NO es mayor que b"; } ?>

La sentencia else se ejecuta solamente si la expresin if se evala como FALSE,.

elseif
elseif, como su nombre sugiere, es una combinacin de if y else. Como else, extiende una sentencia if para ejecutar una sentencia diferente en caso de que la expresin if original se evala como FALSE. No obstante, a diferencia de else,

Eclipse Soluciones con Poder

Pgina 27

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

ejecutar esa expresin alternativa solamente si la expresin condicional elseif se evala como TRUE. Por ejemplo, el siguiente cdigo mostrara a es mayor que b, a es igual a b o a es menor que b:
<?php if ($a > $b) { print "a es mayor que b"; } elseif ($a == $b) { print "a es igual que b"; } else { print "a es mayor que b"; } ?>

Puede haber varios elseifs dentro de la misma sentencia if. La primera expresin elseif (si hay alguna) que se evale como TRUE se ejecutara. En PHP, tambin se puede escribir 'else if' (con dos palabras) y el comportamiento sera idntico al de un 'elseif' (una sola palabra). El significado sintctico es ligeramente distinto (si estas familiarizado con C, es el mismo comportamiento) pero la lnea bsica es que ambos resultaran tener exactamente el mismo comportamiento. La sentencia elseif se ejecuta slo si la expresin if precedente y cualquier expresin elseif precedente se evalan como FALSE, y la expresin elseif actual se evala como TRUE.

while
Los bucles while son los tipos de bucle ms simples en PHP. Se comportan como su contrapartida en C. La forma bsica de una sentencia while es:
while (expr) sentencia

El significado de una sentencia while es simple. Le dice a PHP que ejecute la(s) sentencia(s) anidada(s) repetidamente, mientras la expresin while se evale como TRUE. El valor de la expresin es comprobado cada vez al principio del bucle, as que incluso si este valor cambia durante la ejecucin de la(s) sentencia(s) anidada(s), la ejecucin no parar hasta el fin de la iteracin (cada vez que PHP ejecuta las sentencias en el bucle es una iteracin). A veces, si la expresin while se evala como FALSE desde el principio de todo, la(s) sentencia(s) anidada(s) no se ejecutarn ni siquiera una vez. Como con la sentencia if, se pueden agrupar mltiples sentencias dentro del mismo bucle while encerrando un grupo de sentencias con llaves, o usando la sintaxis alternativa:
while (expr): sentencia ... endwhile;

Los siguientes ejemplos son idnticos, y ambos imprimen nmeros del 1 al 10:
<?php /* ejemplo 1 */ $i = 1; while ($i <= 10) { print $i++; /* el valor impreso sera $i antes del incremento (post-incremento) */ } /* ejemplo 2 */ $i = 1; while ($i <= 10): print $i; $i++; endwhile; ?>

do..while
Los bucles do..while son muy similares a los bucles while, excepto que las condiciones se comprueban al final de cada iteracin en vez de al principio. La principal diferencia frente a los bucles regulares while es que se garantiza la ejecucin de la primera iteracin de un bucle do..while (la condicin se comprueba slo al final de la iteracin), mientras que

Eclipse Soluciones con Poder

Pgina 28

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

puede no ser necesariamente ejecutada con un bucle while regular (la condicin se comprueba al principio de cada iteracin, si esta se evala como FALSE desde el principio la ejecucin del bucle finalizar inmediatamente). Hay una sola sintaxis para los bucles do..while:
<?php $i = 0; do { print $i; }while ($i>0); ?>

El bucle de arriba se ejecutara exactamente una sola vez, despus de la primera iteracin, cuando la condicin se comprueba, se evala como FALSE ($i no es ms grande que 0) y la ejecucin del bucle finaliza. Los usuarios avanzados de C pueden estar familiarizados con un uso distinto del bucle do..while, para permitir parar la ejecucin en medio de los bloques de cdigo, encapsulndolos con do..while(0), y usando la sentencia break. El siguiente fragmento de cdigo demuestra esto:
<?php do { if ($i < 5) { print "i no es lo suficientemente grande"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } print "i es correcto"; /* procesa i */ } while(0); ?>

No se preocupe si no entiende esto completamente o en lo absoluto. Se pueden codificar archivos de comandos e incluso archivos de comandos potentes sin usar esta 'propiedad'.

for
Los bucles for son los bucles ms complejos en PHP. Se comportan como su contrapartida en C. La sintaxis de un bucle for es:
for (expr1; expr2; expr3) sentencia

La primera expresin (expr1) se evala (ejecuta) incondicionalmente una vez al principio del bucle. Al comienzo de cada iteracin, se evala expr2 . Si se evala como TRUE, el bucle contina y las sentencias anidadas se ejecutan. Si se evala como FALSE, la ejecucin del bucle finaliza. Al final de cada iteracin, se evala (ejecuta) expr3. Cada una de las expresiones puede estar vaca. Que expr2 est vaca significa que el bucle debera correr indefinidamente (PHP implcitamente lo considera como TRUE, al igual que C). Esto puede que no sea tan intil como se podra pensar, puesto que a menudo se quiere salir de un bucle usando una sentencia break condicional en vez de usar la condicin de for. Considera los siguientes ejemplos. Todos ellos muestran nmeros del 1 al 10:
<?php /* ejemplo 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } /* ejemplo 2 */ for ($i = 1; ;$i++) { if ($i > 10) {

Eclipse Soluciones con Poder

Pgina 29

Instituto Tecnolgico Superior de Lerdo. break; } print $i;

Taller de PHP.

/* ejemplo 3 */ $i = 1; for (;;) { if ($i > 10) { break; } print $i; $i++;

/* ejemplo 4 */ for ($i = 1; $i <= 10; print $i, $i++) ; ?>

Por supuesto, el primer ejemplo parece ser el mas elegante (o quizs el cuarto), pero uno puede descubrir que ser capaz de usar expresiones vacas en bucles for resulta til en muchas ocasiones.

foreach
PHP 4 (PHP3 no) incluye una construccin foreach, tal como perl y algunos otros lenguajes. Esto simplemente da un modo fcil de iterar sobre matrices. foreach funciona solamente con matrices y devolver un error si se intenta utilizar con otro tipo de datos variables no inicializadas. Hay dos sintaxis; la segunda es una extensin menor, pero til de la primera:
foreach(expresion_array as $value) sentencia foreach(expresion_array as $key => $value) sentencia

La primera forma recorre el array dado por expresion_array. En cada iteracin, el valor del elemento actual se asigna a $value y el puntero interno del array se avanza en una unidad (as en el siguiente paso, se estar mirando el elemento siguiente). La segunda manera hace lo mismo, salvo que la clave del elemento actual ser asignada a la variable $key en cada iteracin. Puede haber observado que las siguientes son funcionalidades idnticas:
<?php $arr = array("one", "two", "three"); reset ($arr); while (list(, $value) = each ($arr)) { echo "Value: $value<br>\n"; } foreach ($arr as $value) { echo "Value: $value<br>\n"; }

?>

Las siguientes tambin son funcionalidades idnticas:


<?php reset( $arr ); while( list( $key, $value ) = each( $arr ) ) { echo "Key: $key; Valor: $value&lt;br&gt;\n"; } foreach( $arr as $key => $value ) { echo "Key: $key; Valor: $value&lt;br&gt;\n"; } ?>

Eclipse Soluciones con Poder

Pgina 30

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Algunos ejemplos ms para demostrar su uso:


<?php /* foreach ejemplo 1: slo valor*/ $a = array(1, 2, 3, 17); foreach($a as $v) { print "Valor actual de \$a: $v.\n"; } /* foreach ejemplo 2: valor (con clave impresa para ilustrar) */ $a = array(1, 2, 3, 17); $i = 0; /* slo para propsitos demostrativos */ foreach($a as $v) { print "\$a[$i] => $v.\n"; $i++; /* foreach ejemplo 3: clave y valor */ $a = array( "uno" => 1, "dos" => 2, "tres" => 3, "diecisiete" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; /* foreach ejemplo 4: matriz multi-dimensional */ $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach($a as $v1) { foreach ($v1 as $v2) { print "$v2\n"; } /* foreach ejemplo 5: matriz dinmica */ foreach(array(1, 2, 3, 4, 5) as $v) { print "$v\n";

} ?>

break
break escapa de la estructuras de control iterante (bucle) actuales for, while, o switch. break accepta un parmetro opcional, el cual determina cuantas estructuras de control hay que escapar.
<?php $arr = array ('one', 'two', 'three', 'four', 'stop', 'five'); while (list (, $val) = each ($arr)) { if ($val == 'stop') { break; /* Pudimos haber escrito 'break 1;' here. */ } echo "$val<br>\n"; } /* Usando el argumento adicional. */ $i = 0; while (++$i) { switch ($i) { case 5: echo "Al 5<br>\n"; break 1; /* Slo abandona el Switch. */ case 10: echo "Al 10; saliendo<br>\n"; break 2; /* Sale del Switch y del While. */ default: break;

Eclipse Soluciones con Poder

Pgina 31

Instituto Tecnolgico Superior de Lerdo. }

Taller de PHP.

} ?>

continue
continue se usa dentro de la estructura del bucle para saltar el resto de la iteracin actual del bucle y continuar la ejecucin al comienzo de la siguiente iteracin. continue accepta un parmetro opcional, el cual determina cuantos niveles (bluces) hay que saltar antes de continuar con la ejecucin.
<?php while (list ($key, $value) = each ($arr)) { if (!($key % 2)) { // skip odd members continue; } do_something_odd ($value); } $i = 0; while ($i++ < 5) { echo "Outer<br>\n"; while (1) { echo "&nbsp;&nbsp;Middle<br>\n"; while (1) { echo "&nbsp;&nbsp;Inner<br>\n"; continue 3; } echo "Esto nunca se imprime.<br>\n"; } echo "Y esto tampoco.<br>\n"; } ?>

switch
La sentencia switch es similar a una serie de sentencias IF en la misma expresin. En muchas ocasiones, se quiere comparar la misma variable (o expresin) con muchos valores diferentes, y ejecutar una parte de cdigo distinta dependiendo de a qu valor es igual. Para ello sirve la sentencia switch. Los siguientes dos ejemplos son dos modos distintos de escribir la misma cosa, uno usa una serie de sentencias if, y el otro usa la sentencia switch:
<?php if ($i == 0) { print "i equals 0"; } elseif ($i == 1) { print "i equals 1"; } elseif ($i == 2) { print "i equals 2"; } switch ($i) { case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2: print "i equals 2"; break; }

?>

Es importante entender cmo se ejecuta la sentencia switch para evitar errores. La sentencia switch ejecuta lnea por lnea (realmente, sentencia a sentencia). Al comienzo, no se ejecuta cdigo. Slo cuando se encuentra una sentencia case con un valor que coincide con el valor de la expresin switch PHP comienza a ejecutar las sentencias. PHP contina

Eclipse Soluciones con Poder

Pgina 32

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

ejecutando las sentencias hasta el final del bloque switch, o la primera vez que vea una sentencia break. Si no se escribe una sentencia break al final de una lista de sentencias case, PHP seguir ejecutando las sentencias del siguiente case. Por ejemplo:
<?php switch ($i) case 0: print case 1: print case 2: print } ?> { "i es igual a 0"; "i es igual a 1"; "i es igual a 2";

Aqu, si $i es igual a 0, PHP ejecutara todas las sentecias print! Si $i es igual a 1, PHP ejecutara las ltimas dos sentencias print y slo si $i es igual a 2, se obtendra la conducta 'esperada' y solamente se mostrara 'i es igual a 2'. As, es importante no olvidar las sentencias break (incluso aunque pueda querer evitar escribirlas intencionadamente en ciertas circunstancias). En una sentencia switch, la condicin se evala slo una vez y el resultado se compara a cada sentencia case. En una sentencia elseif, la condicin se evala otra vez. Si tu condicin es ms complicada que una comparacin simple y/o est en un bucle estrecho, un switch puede ser ms rpido. La lista de sentencias de un case puede tambin estar vaca, lo cual simplemente pasa el control a la lista de sentencias del siguiente case.
<?php switch ($i) { case 0: case 1: case 2: print "i es menor que 3, pero no negativo"; break; case 3: print "i es 3"; } ?>

Un caso especial es el default case". Este "case" coincide con todo lo que no coincidan los otros case. Por ejemplo:
<?php switch ($i) { case 0: print "i break; case 1: print "i break; case 2: print "i break; default: print "i } ?>

es igual a 0"; es igual a 1"; es igual a 2"; no es igual a 0, 1 o 2";

La expresin case puede ser cualquier expresin que se evale a un tipo simple, es decir, nmeros enteros o de punto flotante y cadenas de texto. No se pueden usar aqu ni arrays ni objetos a menos que se conviertan a un tipo simple.

return
Si se llama desde una funcin, return() termina inmediatamente la ejecucin de la funcin y retorna su argumento como valor de la funcin. return() tambien terminar la ejecucin de una sentencia eval() un script PHP.

Eclipse Soluciones con Poder

Pgina 33

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Si el script actual ha sido incluido requerido con include() require(), el control es transferido al script que llamo al script incluido. Adems, si el script actual fue incluido, el valor dado a return() ser retornado como el valor de la llamada include(). Si return() es invocado desde el script principal, la ejecucin terminar inmediatamente.

require
La sentencia require() incluye y evalua el archivo especificado. require() e include() son idnticas en todos los aspectos excepto en el modo de actuar ante un error. include() produce un Warning mientras que require() produce un Error Fatal. En otras palabras, no dude en utilizar require() si quiere que un fichero no encontrado cuelgue el procesamiento de la pgina. include() no se comporta de esta manera, el script seguir funcionando de todas maneras. Ejemplo 9-1. ejemplos bsicos de require()
<?php require 'prepend.php'; require $somefile; require ('somefile.txt'); ?>

include() La sentencia include() incluye y evala el archivo especificado. Ejemplo 9-2. Ejemplo bsico de la funcin include()
vars.php <?php $color = 'verde'; $fruit = 'manzana'; ?> test.php <?php echo "Una $fruit $color "; include 'vars.php'; echo "Una $fruit $color "; ?>

// Una // Una manzana verde

require_once()
La funcin require_once() incluye y evalua el fichero especificado durante la ejecucin del script. Se comporta de manera similar a require(), con la nica diferencia que si el cdigo ha sido ya incluido, no se volver a incluir. require_once() debera usarse en casos en los que un mismo fichero puede ser incluido y evaluado ms de una vez durante la ejecucin de un script, y se quiere estar seguro que se incluye una sola vez para evitar problemas con redefiniciones de funciones, valores de funciones, etc.

include_once
La funcin include_once() incluye y evala el fichero especificado durante la ejecucin del script. Se comporta de manera similar a include(), con la nica diferencia que si el cdigo ha sido ya incluido, no se volver a incluir. include_once() debera usarse en casos en los que un mismo fichero puede ser incluido y evaluado ms de una vez durante la ejecucin de un script, y se quiere estar seguro que se incluye una sola vez para evitar problemas con redefiniciones de funciones, valores de funciones, etc.

Eclipse Soluciones con Poder

Pgina 34

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

10. Funciones
Funciones definidas por el usuario
Una funcin se puede definir con la siguiente sintaxis: Ejemplo 10-1. Pseudo cdigo para demostrar el uso de funciones
<?php function foo ($arg_1, $arg_2, ..., $arg_n) { echo "Funcin de ejemplo.\n"; return $retval; } ?>

Cualquier instruccin vlida de PHP puede aparecer en el cuerpo de la funcin, incluso otras funciones y definiciones de clases. En PHP3, las funciones deben definirse antes de que se referencen. En PHP4 no existe tal requerimiento. Excepto cuando una funcin es definida condicionalmente como en los ejemplos siguientes. Cuando una funcin es definida condicionalmente como se puede ver en estos dos ejemplos, su definicin debe ser procesada antes de que sea llamada. Ejemplo 10-2. Funciones Condicionales
<?php $makefoo = true; /* No podemos llamar a foo() desde aqu ya que aun no existe, pero si podemos llamar a bar() */ bar(); if ($makefoo) { function foo () { echo "No existo hasta que la ejecucin del programa me alcance.\n"; } } /* Ahora podemos llamar a foo() ya que $makefoo fue evaluada como verdadera */ if ($makefoo) foo(); function bar() { echo "Yo existo inmediatamente una vez que el programa inicia.\n"; } ?>

Ejemplo 10-3. Funciones dentro de funciones


<?php function foo() { function bar() { echo "Yo no existo hasta que foo() es llamada.\n"; } }

Eclipse Soluciones con Poder

Pgina 35

Instituto Tecnolgico Superior de Lerdo. /* Aun no podemos llamar a bar() ya que no existe. */ foo(); /* Ahora podemos llamar a bar(), ya que el proceso de foo() la ha hecho accesible. */ bar(); ?>

Taller de PHP.

PHP no soporta la redefinicin de funciones previamente declaradas. Nota: Los nombres de funciones se pueden llamar con maysculas o minsculas, aunque es una buena costumbre el llamar a las funciones tal y como aparecen en su definicin.

Parmetros de las funciones


La informacin puede suministrarse a las funciones mediante la lista de parmetros, una lista de variables y/o constantes separadas por comas. Ejemplo 10-4. Pasando matrices a funciones
<?php function takes_array($input) { echo "$input[0] + $input[1] = ", $input[0]+$input[1]; } ?>

Pasar parmetros por referencia


Por defecto, los parmetros de una funcin se pasan por valor (de manera que si cambias el valor del argumento dentro de la funcin, no se ve modificado fuera de ella). Si deseas permitir a una funcin modificar sus parmetros, debes pasarlos por referencia. Si quieres que un parmetro de una funcin siempre se pase por referencia, puedes anteponer un ampersand (&) al nombre del parmetro en la definicin de la funcin: Ejemplo 10-5. Pasando parmetros de funciones por referencia
<?php function add_some_extra(&$string) { $string .= ' y algo ms.'; } $str = 'Esto es una cadena, '; add_some_extra($str); echo $str; // Saca 'Esto es una cadena, y algo ms.' ?>

Parmetros por defecto


Una funcin puede definir valores por defecto para los parmetros escalares estilo C++: Ejemplo 10-6. Uso de parmetros por defecto en funciones
<?php function makecoffee ($type = "cappucino") { return "Hacer una taza de $type.\n"; } echo makecoffee (); echo makecoffee ("espresso"); ?>

Eclipse Soluciones con Poder

Pgina 36

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

La salida del fragmento anterior es:


Hacer una taza de cappucino. Hacer una taza de espresso.

El valor por defecto tiene que ser una expresin constante, y no una variable, miembro de una clase llamada a una funcin. Destacar que cuando se usan parmetros por defecto, stos tienen que estar a la derecha de cualquier parmetro sin valor por defecto; de otra manera las cosas no funcionarn de la forma esperada. Considera el siguiente fragmento de cdigo: Ejemplo 10-7. Uso incorrecto de parmetros por defecto en funciones
<?php function makeyogurt ($type = "acidophilus", $flavour) { return "Haciendo un bol de $type $flavour.\n"; } echo makeyogurt ("mora"); // No funcionar de la manera esperada ?>

La salida del ejemplo anterior es:


Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41 Haciendo un bol de mora.

Y ahora, compralo con: Ejemplo 10-8. Uso correcto de parmetros por defecto en funciones
<?php function makeyogurt ($flavour, $type = "acidophilus") { return "Haciendo un bol de $type $flavour.\n"; } echo makeyogurt ("mora"); // funciona como se esperaba ?>

La salida de este ejemplo es:


Haciendo un bol de acidophilus mora.

Devolviendo valores
Los valores se retornan usando la instruccin opcional return. Puede devolverse cualquier tipo de valor, incluyendo listas y objetos. Ejemplo 10-9. Uso de return()
<?php function square ($num) { return $num * $num; } echo square (4); // saca '16'. ?>

No puedes devolver mltiples valores desde una funcin, pero un efecto similar se puede conseguir devolviendo una lista. Ejemplo 10-10. Retornando una matriz para obtener mltiples valores
<?php function small_numbers()

Eclipse Soluciones con Poder

Pgina 37

Instituto Tecnolgico Superior de Lerdo. {

Taller de PHP.

return array (0, 1, 2); } list ($zero, $one, $two) = small_numbers(); ?>

Para retornar una referencia desde una funcin, se tiene que usar el operador de referencias & tanto en la declaracin de la funcin como en la asignacin del valor de retorno a una variable; Ejemplo 10-11. Retornando una referencia desde una funcin
<?php function &returns_reference() { return $someref; } ?> $newref =& returns_reference();

Funciones internas (incorporadas)


PHP tiene incorporadas muchas funciones y construcciones. Existen tambin funciones que requieren extensiones especficas de PHP para que no fallen con un error fatal del tipo "undefined function". Por ejemplo, para usar funciones image, tal como imagecreatetruecolor(), se necesita compilar PHP con soporte para GD. O para usar mysql_connect() se necesita compilar PHP con soporte para MySQL. Existen muchas funciones en el ncleo de PHP que se incluyen en cada versin de PHP, como las funciones string y variable. Una llamada a la funcin phpinfo() get_loaded_extensions() mostrar que extensiones estn cargadas en tu versin de PHP. Es importante entender que devuelve una funcin si la funcin trabaja directamente en el valor entregado a la misma. Por ejemplo, str_replace() devuelve una cadena modificada mientras que usort() trabaja directamente en el valor entregado a la misma.

Eclipse Soluciones con Poder

Pgina 38

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

III. ESCRIBIENDO APLICACIONES CON PHP


11. Formularios
Los Formularios no forman parte de PHP, sino del lenguaje estndar de Internet, HTML, pero como stos van a aparecer muchas veces durante el curso, vamos a dedicar algunas lneas a ellos. Todo formulario comienza con la etiqueta
<FORM ACTION="lo_que_sea.php" METHOD="post/get">.

Con ACTION indicamos el script que va procesar la informacin que recogemos en el formulario, mientras que METHOD nos indica la forma en que se enviarn datos post o get. La etiqueta </FORM> indica el final del formulario. A partir de la etiqueta <FORM> vienen los campos de entrada de datos que pueden ser: Botn de comando
<input type="submit" value="enviar" name="enviar">

Cuadro de texto
<input type="text" name="nombre" size="20" value="jose">

Veamos un ejemplo con PHP: Las siguientes dos pginas tienen el objetivo de preguntar cual es tu equipo de ftbol favorito y desplegar en otra pagina el seleccionado (equipo.htm y equipo.php)
<html> <title>Equipo Favorito</title> <body> <form method=post ACTION="equipo.php"> Cual es tu equipo de ftbol favorito ? <input name="equipo" type "TEXT"> <br> <br> <input type=submit> </form> </body> <html> equipo.htm

equipo.php <html> <body> Tu equipo favorito es: <?php Echo "<h1><B>$equipo</B></h1>"; ?> </body> </html>

Hay que poner especial atencin en el parmetro name de un elemento del formulario ya que es el mismo nombre con el que se le referenciar en php, como pudimos ver en el ejemplo anterior el elemento <input name="equipo" type "TEXT"> lo manejamos en php como $equipo, as es con todos los elementos de formularios.

Cuadro de texto con barras de desplazamiento


<textarea rows="5" name="descripcion" cols="20">Es de color rojo</textarea>

Ahora veamos un ejemplo con PHP: Crearemos un programa PHP que pide WebSites favoritos y los muestra como salida (sites.htm y sites.php).
sites.htm <html> <title>Web Sites Favoritos</title>

Eclipse Soluciones con Poder

Pgina 39

Instituto Tecnolgico Superior de Lerdo. <body> <form method=POST ACTION="sites.php"> Menciname algunos de tus WebSites Favoritos: <br> <textarea name="websites" cols="50" rows="5"> http:// http:// http:// http:// </textarea> <br> <br> <input type=submit> </form> </body> <html>

Taller de PHP.

sites.php <html> <body> Tus webs favoritos son:<br> <?php Echo "<h3><B>$websites</B></h3>"; ?> </body> </html>

Casilla de verificacin o checkbox


<input type="checkbox" name="cambiar" value="ON">

El siguiente programa pregunta lo que haces al levantarte y lo despliega como salida ( checkboxes.htm y checkboxes.php).
checkboxes.htm <HTML> <HEAD></HEAD> <BODY> <FORM METHOD=POST ACTION="checkboxes.php"> Qu haces en cuanto te levantas?<br><br> Lavarme la cara<INPUT NAME="sel1" TYPE="Checkbox" VALUE="Lavarse la Cara"><BR> Asearse la boca<INPUT NAME="sel2" TYPE="Checkbox" VALUE="Asearse los dientes"><BR> Desayunar<INPUT NAME="sel3" TYPE="Checkbox" VALUE="Desayunar" ><BR><BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

<html> <body> <?php if (isset($sel1)) Echo "$sel1 <br>"; if (isset($sel2)) Echo "$sel2 <br>"; if (isset($sel3)) Echo "$sel3 <br>"; ?> </body> </html>

checkboxes.php

Eclipse Soluciones con Poder

Pgina 40

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Botn de radio u opcin


<input type="radio" value="azul" checked name="color">

Ahora veamos un ejemplo con PHP. Este programa nos presenta una suma, nosotros tenemos que elegir la respuesta entre tres opciones posibles y la salida nos muestra la opcin que elegimos (radio.htm y radio.php).
radio.htm <HTML> <BODY> <FORM METHOD=GET ACTION="radio.php"> Cuantos son 2 + 2? <BR> <BR> <INPUT NAME="Resp" TYPE="Radio" VALUE="44">44 <BR> <INPUT NAME="Resp" TYPE="Radio" VALUE="22">22 <BR> <INPUT NAME="Resp" TYPE="Radio" VALUE="4">4 <BR><BR> <INPUT TYPE=SUBMIT> </FORM> </BODY>

radio.php <HTML> <BODY> <?php Echo "seleccionaste $Resp";?> </BODY> </HTML>

Men desplegable:
<select size="1" class="codigo"><select size="1" name="dia"> <option selected value="lunes">lunes</option> <option>martes</option> <option value="miercoles">miercoles</option> </select>

Programa que pregunta opciones para armar una computadora y despliega las opciones elegidas ( lista.htm y lista.php).
<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=GET ACTION="lista.php"> Elije la computadora a comprar<BR><BR> <SELECT NAME="compu"> <OPTION>Pentium IV</OPTION> <OPTION>Celeron</OPTION> <OPTION>Athlon</OPTION> <OPTION>MAC</OPTION> </SELECT> <BR><BR> Selecciona los dispositivos de la computadora<BR><BR> <SELECT NAME="dispo[]" MULTIPLE> <OPTION>KIT MULTIMEDIA</OPTION> <OPTION>QUEMADORA</OPTION> <OPTION>WEB CAM</OPTION> <OPTION>MICROFONO</OPTION> </SELECT> <BR><BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML> lista.htm

Eclipse Soluciones con Poder

Pgina 41

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP. lista.php

<HTML> <BODY> <?php Echo Echo Echo Echo Echo ?> </BODY> </HTML>

"Seleccionaste una computadora: <B>$compu</B> con:<br>"; "$dispo[0]<br>"; "$dispo[1]<br>"; "$dispo[2]<br>"; "$dispo[3]<br>";

Campo oculto:
<input type="hidden" name="edad" value="55">

Este ltimo tipo de campo resulta especialmente til cuando queremos pasar datos ocultos en un formulario. Ahora pasemos a ver ejemplos que necesitan mas cdigo PHP, como son ciclos y arrays, implementndolos en conjunto con los formularios. Para el uso del FOR un programita para crditos bancarios (banco.htm y banco.php).
<HTML> <HEAD></HEAD> <BODY> <B>Crdito bancario</B> <FORM METHOD=POST ACTION="banco.php"> <BR> Cual de estos paquetes te interesa tomar?<BR><BR> <INPUT NAME="valor" TYPE="Radio" VALUE=1000>Nuestro paquete de $1,000 Con el 5.0% interes <BR> <INPUT NAME="valor" TYPE="Radio" VALUE=5000>Nuestro paquete de $5,000 Con el 6.5% interes <BR> <INPUT NAME="valor" TYPE="Radio" VALUE=10000>Nuestro paquete de $10,000 Con el 8.0% interes <BR> <BR> Cuanto es lo que deseas pagar al mes ? <INPUT NAME=pagomes TYPE=Text SIZE=5> <BR> <BR> <INPUT TYPE=SUBMIT VALUE="Pulse aqu para calcular"> </FORM> </BODY> </HTML> banco.htm

banco.php <HTML> <HEAD></HEAD> <BODY> <?php $Duracion=0; switch ($valor) { case 1000: $Interes = 5; break; case 5000: $Interes = 6.5; break; case 10000: $Interes = 8; break;

Eclipse Soluciones con Poder

Pgina 42

Instituto Tecnolgico Superior de Lerdo. default: echo "No seleccionaste ningun paquete favor de presionar el boton back y seleccionar alguno"; exit; } while ($valor > 0) { $Duracion = $Duracion + 1; $Mensualmente = $pagomes - ($valor * $Interes/100); if ($Mensualmente<=0) { echo "Tu necesitas hacer pagos mas grandes!"; exit; } $valor = $valor - $Mensualmente; } echo "La duracion es de: $Duracion meses con un porcentaje de intereses del $Interes."; ?> </BODY> </HTML>

Taller de PHP.

El siguiente programa demuestra como se pueden trabajar los array como elementos hash (estados.php y capital.php).
estados.php <html> <head> <title>Estados de Mxico</title> </head> <body bgcolor="#FFFFFF"> De que estado te gustara conocer su capital? <?php $Estados=array(1=>"Colima","Jalisco","Sinaloa"); echo "<form method=post action='capital.php'>"; echo "<select name='estado'>"; for ($counter=1; $counter<4; $counter++) echo "<option value=$counter>$Estados[$counter]</option>"; echo "</select><br><br>"; echo "<input type=submit>"; echo "</form>"; ?> </body> </html>

capital.php <html> <head> <title>Capitales</title> </head> <body bgcolor="#FFFFFF"> <?php $Capital=array(1=>"Colima","Guadalajara","Culiacan"); for ($counter=0;$counter<4;$counter++) { if ($counter==$estado) { echo "la capital del estado elegido es $Capital[$counter]"; } } ?> </body> </html>

Como podemos observar los dos archivos tienen extensin .php, esto se debe a que es necesario ejecutar cdigo php en los dos, para poder formar dinmicamente las dos pginas. Para tener ms material con formularios realizaremos un programa PHP que contenga varios elementos de formulario juntos:

Eclipse Soluciones con Poder

Pgina 43

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Desarrollar un programa en PHP que pida el Nombre (textbox), el apellido (textbox), la edad (textbox), domicilio (text area), seleccione el rango de sueldo que le gustara ganar (listbox) y que seleccione como considera as mismo su desempeo laboral (radio button). El programa no aceptar curriculums que elijan un sueldo muy bajo, ni un sueldo extremo, ni tampoco si se considera psimo (minicu.htm y minicu.php).
minicu.htm <HTML> <HEAD></HEAD> <BODY> <B>Minicurriculum </B> <FORM METHOD=POST ACTION="minicu.php"> Nombres: <INPUT NAME="nombres" TYPE="Text">Apellidos: <INPUT NAME="apellidos" TYPE="Text">Edad: <INPUT NAME="edad" TYPE="Text"SIZE="3"> <BR><BR> Domicilio: <TEXTAREA NAME="Domicilio" ROWS=4 COLS=40></TEXTAREA> <BR><BR> Que salario deseas ganar? <SELECT NAME="Salario"> <OPTION VALUE=0> Menos de $1000</OPTION> <OPTION VALUE=1000>Entre $1,000 y $3,000</OPTION> <OPTION VALUE=3000>Entre $3,000 y $5,000</OPTION> <OPTION VALUE=5000>mas de $5,000</OPTION> </SELECT> <BR><BR> Como consideras tu desempeo?<BR><BR> <INPUT NAME="Desempe" TYPE="Radio" VALUE=0>Pesimo<BR> <INPUT NAME="Desempe" TYPE="Radio" VALUE=5>Regular<BR> <INPUT NAME="Desempe" TYPE="Radio" VALUE=10>Excelente<BR><BR> <INPUT TYPE=SUBMIT VALUE="Presione cuando este listo(a)"> <INPUT TYPE=RESET VALUE="Borra todo"> </FORM> </BODY> </HTML>

minicu.php <HTML> <BODY> Sr(a) <?php Echo "$nombres $apellidos ";?> en base a su edad (<?php Echo "$edad";?>) y sus aspiraciones <br> econmicas y su auto estimacin hemos determinado que:<br> <?php echo "Salario deseado: $Salario <br>" ; echo "Su desempeo elegido: $Desempe <br>"; if ((($Salario==0) OR ($Salario ==5000)) OR ($Desempe ==0)) { Echo "Usted no cumple los requisitos para ser parte de nuestra empresa"; } else { Echo "Usted cumple satisfactoriamente nuestras aspiraciones"; } ?> </BODY> </HTML>

Eclipse Soluciones con Poder

Pgina 44

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

12. Bases de Datos.


Hasta ahora hemos visto la funciones bsicas de PHP, lo que viene a continuacin ya es sobre la forma en como podemos acceder a bases de datos, veremos como acceder a ellas en MySQL Server.

Qu es MySQL?
Administrador de Base de Datos Una base de datos es un conjunto de datos estructurados. Esto podra ser cualquier cosa, desde una simple lista de compras hasta una galera de pinturas o la gran cantidad de informacin que se maneja en una corporacin. Para agregar, acceder y procesar los datos almacenados en una base de datos computacional, se necesita un sistema administrador de base de datos tal como MySQL. Adems los computadores son muy buenos manejando grandes cantidades de datos, el administrador de base de datos juega un rol central en la computacin, ya sea como utilidad autnoma o parte de otra aplicacin. Sistema administrador de base de datos relacionales Una base de datos relacional almacena datos en tablas separadas, ms bien colocando todos los datos en un gran almacn. Esto agrega velocidad y flexibilidad. Las tablas son enlazadas por relaciones definidas, haciendo posible combinar datos desde varias tablas solicitadas. El SQL forma parte de MySQL, conocido como Lenguaje de Consultas Estructurado, es el lenguaje estandarizado ms comn usado para acceder base de datos. Uso de MySQL MySQL es muy rpido, seguro y fcil de usar. MySQL tambin ha desarrollado un conjunto de caractersticas muy prcticas, en estrecha cooperacin con otros usuarios. MySQL fue desarrollado para manejar grandes bases de datos mucho ms rpido que las soluciones existentes y ha sido usado exitosamente en ambientes de produccin con altas demandas, por varios aos. Aunque est bajo un desarrollo constante, MySQL siempre ofrece conjunto de funciones muy poderoso y eficiente. La conectividad, velocidad y seguridad hace de MySQL una suite poderosa para acceder a bases de datos en Internet.

Creacin de la Base de Datos


Antes de seguir con PHP, vamos a preparar la base de datos(BD) que vamos a utilizar como ejemplo. Como servidor de BD, usaremos MySQL es ideal para pequeas y medianas aplicaciones.(versin 4.X) MySQL soporta el estndar SQL (ANSI), y adems est disponible para distintas plataformas. Una vez instalado MySQL, vamos a crear nuestra BD ejemplo. Se recomienda establecer un password de la base de datos con
# mysqladmin -u root password 'clave'

Ya hemos creado una BD, ahora le aadiremos una tabla y algunos registros, para lo cual teclearemos lo siguiente desde la linea de comandos de mysql.
# create database prueba;

Debemos de forma manual dar de alta nuestra tabla en la lnea de mandos de MySQL.
CREATE TABLE agenda ( id INT NOT NULL AUTO_INCREMENT, nombre CHAR(50), direccion CHAR(50), telefono CHAR(15), email CHAR(30), KEY (id) );

E insertar algunos valores de ejemplo.

Eclipse Soluciones con Poder

Pgina 45

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

INSERT INTO agenda VALUES (0, 'Santos G. Facio Barraza', 'Lerdo, Durango', '7-25-57-07', 'santos.facio@eclipsesoluciones.com.mx' ); INSERT INTO agenda VALUES (1, 'Miguel 'miguel.angel@eclipsesoluciones.com.mx' ); ngel Soto', 'Lerdo, Durango', '725-53-63',

Conexin al MySQL
Para establecer conexin entre nuestro script en PHP y nuestro servidor de Base de Datos MySQL, utilizaremos el siguiente cdigo, el cul explicaremos ms adelante. Script 12-1. Conexin a la base de Datos.
<html> <body> <?php $link = mysql_connect("localhost", "root","password"); mysql_select_db("prueba", $link); $res = mysql_query("SELECT * FROM agenda", $link); echo echo echo echo ?> </body> </html> "Nombre: ".mysql_result($res, 0, "nombre")."<br>"; "Direccin: ".mysql_result($res, 0, "direccion")."<br>"; "Telfono: ".mysql_result($res, 0, "telefono")."<br>"; "E-Mail: ".mysql_result($res, 0, "email")."<br>";

En la primera lnea del script nos encontramos con la funcin mysql_connect(), que abre una conexin con el servidor MySQL en el Host especificado (en este caso la misma mquina en la que est alojada el servidor MySQL, localhost). Tambin debemos especificar un usuario (nobody, root, etc. ), y si fuera necesario un password para el usuario indicado (mysql_connect("localhost", "root", "clave_del_root")). El resultado de la conexin es almacenado en la variable $link. Con mysql_select_db() PHP le dice al servidor que en la conexin $link nos queremos conectar a la base de datos prueba. Podramos establecer distintas conexiones a la BD en diferentes servidores, pero nos conformaremos con una. La siguiente funcin mysql_query(), es la que hace el trabajo duro, usando el identificador de la conexin ($link), enva una instruccin SQL al servidor MySQL para que ste la procese. El resultado de sta operacin es almacenado en la variable $res. Finalmente, mysql_result() es usado para mostrar los valores de los campos devueltos por la consulta ($res). En este ejemplo mostramos los valores del registro 0, que es el primer registro, y mostramos el valor de los campos especificados.

Mostrar los datos de una consulta


Ahora que ya sabemos conectar con el servidor de BD, veremos como mostrar los datos por pantalla. Script 12-2. Consulta de la Base de Datos.
<html> <body> <?php $link = mysql_connect("localhost", "root","password"); mysql_select_db("prueba", $link); $result = mysql_query("SELECT nombre, email FROM agenda", $link); echo "<table border = '1'> \n";

Eclipse Soluciones con Poder

Pgina 46

Instituto Tecnolgico Superior de Lerdo. echo "<tr><td>Nombre</td><td>E-Mail</td></tr> \n"; while ($row = mysql_fetch_row($result)) echo "<tr><td>$row[0]</td><td>$row[1]</td></tr> \n"; echo "</table> \n"; ?> </body> </html>

Taller de PHP.

En este script hemos utilizado la sentencia de control while(), que ejecuta una serie de instrucciones mientras la condicin sea verdadera. En esta ocasin while() evalua la funcin mysql_fetch_row(), que devuelve un array con el contenido del registro actual (que se almacena en $row) y avanza una posicin en la lista de registros devueltos en la consulta SQL. La funcin mysql_fetch_row() tiene un pequeo problema, es que el array que devuelve slo admite referencias numricas a los campos obtenidos de la consulta. El primer campo referenciado es el 0, el segundo el 1 y as sucesivamente. En el siguiente script solucionaremos este pequeo inconveniente. Script 12-3. Consulta modificada de la Base de Datos.
<html> <body> <?php $link = mysql_connect("localhost", "nobody","password"); mysql_select_db("mydb", $link); $result = mysql_query("SELECT nombre, email FROM agenda", $link); if ($row = mysql_fetch_array($result)){ echo "<table border = '1'> \n"; echo "<tr><td>Nombre</td><td>E-Mail</td></tr> \n"; do { echo "<tr><td>".$row["nombre"]."</td><td>".$row["email"]."</td></tr> \n"; } while ($row = mysql_fetch_array($result)); echo "</table> \n"; } else echo " No se ha encontrado ningn registro !"; ?> </body> </html>

Esencialmente, este script hace lo mismo que el anterior. Almacenamos en $row el registro actual con la funcin mysql_fetch_array() que hace exactamente lo mismo que mysql_fetch_row(), con la exepcin que podemos referenciar a los campos por su nombre ($row["email"]), en vez de por un nmero. Con la sentencia if/else, asignamos a $row el primer registro de la consulta, y en caso de no haber ninguno (else) mostramos un mensaje ("No se ha encontrado..."), mientras que con la sentencia do/while, nos aseguramos que se nos muestren todos los registros devueltos por la consulta en caso de haber ms de uno. Hay que destacar la utilizacin del punto (.), como operador para concatenar cadenas.

Un buscador para nuestra base de datos


Vamos a ver una aplicacin, un ejemplo, de todo lo visto hasta ahora. Escribiremos un script que sirva para buscar una determinada cadena (que recibiremos de un formulario, y la almacenamos en la variable $buscar), dentro de nuestra base de datos, concretamente dentro del campo "nombre". En primer lugar escribiremos el texto HTML de la pgina web que nos servir como formulario de entrada, la llamaremos formulario.html.

Eclipse Soluciones con Poder

Pgina 47

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Script 12-4. Formulario entrada para bsquedas


<html> <body> <form method="POST" action="buscador.php"> <strong>Palabra clave:</strong> <input type="text" name="T1" size="20"><br><br> <input type="submit" value="Buscar" name="buscar"> </form> </body> </html> formulario.html

El siguiente script de bsqueda lo llamaremos buscador.php, y ser el encargado de hacer la bsqueda en la BD, y devolver por pantalla los registros encontrados.

Script 12-5. Script bsqueda


<html> <body> <?php if (!isset($buscar)){ echo "Debe especificar una cadena a buscar </html></body> \n"; exit; } $link = mysql_connect("localhost", "nobody","password"); mysql_select_db("prueba", $link); buscador.php

$result = mysql_query("SELECT * FROM agenda WHERE nombre LIKE '%$buscar%' ORDER BY nombre", $link); if ($row = mysql_fetch_array($result)){ echo "<table border = '1'> \n"; //Mostramos los nombres de las columnas echo "<tr> \n"; while ($field = mysql_fetch_field($result)){ echo "<td>$field->name</td> \n"; } echo "</tr> \n"; do { echo "<tr> \n"; echo "<td>".$row["id"]."</td> \n"; echo "<td>".$row["nombre"]."</td> \n"; echo "<td>".$row["direccion"]."</td> \n"; echo "<td>".$row["telefono"]."</td> \n"; echo "<td><a href='mailto:".$row["email"]."'>".$row["email"]."</a></td> \n"; echo "</tr> \n"; } while ($row = mysql_fetch_array($result)); echo "</table> \n";

?> </body> </html>

} else { echo " No se ha encontrado ningn registro !"; }

Lo primero que comprobamos es que el contenido de la variable $buscar que recibimos de la pgina web formulario.html no es una cadena vaca, y sto lo hacemos con la funcin isset() que devuelve 'falso' si la variable que recibe est vaca.

Eclipse Soluciones con Poder

Pgina 48

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

A la funcin le anteponemos el signo de admiracin (!) que es equivalente a un NOT, para convertirlo en 'verdadero' en caso de que la variable est vaca, y en ese caso terminamos la ejecucin del script con exit. Lo ms importante de este script, es sin duda la sentencia SQL que le enviamos al servidor MySQL, y ms concretamente la condicin que le imponemos, WHERE nombre LIKE '%$buscar%'. Con la sentencia LIKE buscamos cualquier ocurrencia de la cadena contenida en $buscar, mientras que con los signos de porcentaje (%) indicamos el lugar de la coincidencia, por ejemplo, si hubisemos puesto nombre LIKE '%$buscar', buscaramos cualquier ocurrencia al final del campo "nombre", mientras que si hubisemos puesto nombre LIKE '$buscar%', buscaramos cualquier ocurrencia al principio del campo "nombre". La ltima novedad que hemos incorporado, es la funcin mysql_fetch_field, con la que obtenemos informacin acerca de las caracterticas de cada campo, como su nombre, tipo, longitud, nombre de la tabla que los contiene, etc.

Aadir registros a nuestra base de datos


En esta leccin vamos ver como podemos aadir nuevos registros a nuesta BD. La obtencin de datos la vamos a hacer a traves de un interfaz de web. En primer lugar vamos a crear una pgina web con un simple formulario, con los campos que deseamos. Script 12-6. Formulario de entrada de datos.
<html> <body> <form method="post" action="add_reg.php"> Nombre :<input type="Text" name="nombre"><br> Direccin:<input type="Text" name="direccion"><br> Telfono :<input type="Text" name="telefono"><br> E-mail :<input type="Text" name="email"><br> <input type="Submit" name="enviar" value="Aceptar informacin"> </form> </body> </html> captura.html

Hemos creado un formulario donde recoger los datos, y una vez introducidos ejecutamos un script llamado add_reg.php, pues veamos como es este script. Script 12-7. Aadir registros
<html> <body> <?php // process form $link = mysql_connect("localhost", "root","password"); mysql_select_db("prueba",$link); $sql = "INSERT INTO agenda (nombre, direccion, telefono, email) "."VALUES ('$nombre', '$direccion', '$telefono', '$email')"; $result = mysql_query($sql); echo "Gracias! Hemos recibido sus datos.\n"; ?> </body> </html>

Como se puede ver, para introducir un nuevo registro, utilizamos la ya conocida funcin mysql_query(), la cul tambin usamos para las consultas, y usaremos para las actualizaciones, es decir una funcin muy completa. Una cosa muy importante, para poder aadir o modificar registros debemos tener permiso para ello en el servidor MySQL, por eso en este caso nos conectamos como root, pero podra ser cualquier otro usuario.

Eclipse Soluciones con Poder

Pgina 49

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Para terminar esta leccin, un pequeo detalle, vamos a combinar la pgina web de formulario y el archivo de script php, en un solo fichero que llamaremos add_reg.php. Script 12-8. Combinacin de formulario y script
<html> <body> <?php if ($enviar) { $link = mysql_connect("localhost", "root","password"); mysql_select_db("prueba",$db); $sql = "INSERT INTO agenda (nombre, direccion, telefono, email) "."VALUES ('$nombre', '$direccion', '$telefono', '$email')"; $result = mysql_query($sql); echo "Gracias! Hemos recibido sus datos.\n"; } else { ?> <form method="post" action="add_reg_comb.php"> Nombre :<input type="Text" name="nombre"><br> Direccin:<input type="Text" name="direccion"><br> Telfono :<input type="Text" name="telefono"><br> E-mail :<input type="Text" name="email"><br> <input type="Submit" name="enviar" value="Aceptar informacin"> </form> <?php } ?> </body> </html> //end if

Modificar registros de nuestra base de datos


Lo primero, es lo primero, para modificar hay que tener permiso para ello en el servidor de BD, el resto nos viene de corrido. Primero seleccionamos el registro que deseamos modificar, luego mandamos una consulta con la modificaciones o ambas cosas a la vez. Suponemos que las modificaciones las recogemos de un formulario como el de la leccin anterior . Script 12-9. Modificar registros (1)
<html> <body> <?php if (isset($id)){ // procesando forma. $link = mysql_connect("localhost", "root","password"); mysql_select_db("prueba",$db); $sql = "SELECT * FROM agenda WHERE id = $id" $result = mysql_query($sql); $sql = "UPDATE agenda SET nombre='$nombre', direccion='$direccion',". "telefono='$telefono', email='$email'"; $result = mysql_query($sql); } else{ echo "Debe especificar un 'id'.\n"; }

?> </body> </html>

Eclipse Soluciones con Poder

Pgina 50

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

Script 12-10. Modificar registros (2)


<html> <body> <?php if (isset($id)){ $link = mysql_connect("localhost", "root","password"); mysql_select_db("prueba",$db); $sql="UPDATE agenda SET nombre='$nombre', direccion='$direccion',". "telefono='$telefono', email='$email' WHERE id=$id"; $result = mysql_query($sql); } else{ echo "Debe especificar un 'id'.\n"; }

?> </body> </html>

Borrar registros de nuestra base de datos


El proceso de borrar un registro es idntico al de modificar, solo que en vez de utilizar UPDATE utilizamos DELETE en la sentencia SQL. Por tanto el script quedara como sigue. Script 12-11. Borrado registros de BD
<html> <body> <?php if (isset($id)){ // procesa forma. $link = mysql_connect("localhost", "root","password"); mysql_select_db("prueba",$db); $sql = "DELETE agenda WHERE id=$id") $result = mysql_query($sql); } else echo "Debe especificar un 'id'.\n"; ?> </body> </html>

Resumen de todo lo visto


Como resumen de todo lo visto hasta ahora, vamos a hacer un script donde se mezcla todo, y algo nuevo. Script 12-12. Conjuncin de los scripts anteriores.
<html> <body> <?php $link = mysql_connect("localhost", "root"); mysql_select_db("prueba",$link); //Comprobamos si hemos recibido datos del formulario (enviar) if ($enviar) { // Si recibimos un id, modificamos, sino aadimos un registro if ($id) { $sql = "UPDATE agenda SET nombre='$nombre', direccion='$direccion',". telefono='$telefono', email='$email' WHERE id=$id"; echo "Registro Actualizado<p>"; } else {

Eclipse Soluciones con Poder

Pgina 51

Instituto Tecnolgico Superior de Lerdo. $sql =

Taller de PHP.

} // Enviamos la sentencia SQL al servidor DB $result = mysql_query($sql);

"INSERT INTO agenda (nombre, direccion, telefono, email) VALUES "."('$nombre', '$direccion', '$telefono', '$email')"; echo "Registro Aadido<p>";

?> </body></html>

} elseif ($delete) { // Borramos un registro $sql = "DELETE FROM agenda WHERE id=$id"; $result = mysql_query($sql); echo "Registro Borrado<p>"; } else { // Esta parte se ejecuta si no hemos presionado el boton enviar, // es decir no venimos de un formulario if (!$id) { // Mostramos todos los registros de nuestra BD $result = mysql_query("SELECT * FROM agenda",$link); while ($myrow = mysql_fetch_array($result)) { echo $myrow["nombre"]." - ".$myrow["direccion"]." - ". $myrow["Telefono"]." - ".$myrow["email"]; echo "<a href=\$PHP_SELF?id=".$myrow["id"]."&delete=yes> Borrar - </a>"; echo "<a href=\$PHP_SELF?id=".$myrow["id"]."> Modificar </a><br>"; } } }

Cabe destacar el uso de $PHP_SELF, esta es una funcin interna de PHP que nos devuelve la direccin del script en el que se ejecuta.

Cmo ahorramos lneas de cdigo?


En las lecciones anteriores hemos aprendido el uso bsico de las funciones de PHP para trabajar con MySQL. Por lo general, todos nuestros scripts tienen partes de cdigo iguales, las funciones include( ) y require( ) nos van ahorrar muchas de estas lneas de cdigo. Ambas funciones hacen una llamada a un determinado archivo pero de dos maneras diferentes, con include( ), insertamos lo que contenga el archivo que llamemos de manera literal en nuestro script, mientras que con require( ) decimos que el script necesitar parte de cdigo que se encuentra en el archivo que llama require( ). Ahora veamos el script de ejemplo para la funcin require( ):
<?php require ("config.inc"); include ("header.inc"); echo $cadena; include ("footer.inc"); ?>

Donde el fichero config.inc tendra algo como sto:


<?php $cadena = "Hola Mundo"; ?>

Eclipse Soluciones con Poder

Pgina 52

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

13. Envo de e-mails


PHP nos ofrece la posibilidad de enviar e-mails de una manera sencilla y fcil, para ello el lenguaje nos proporciona la instruccin mail( )
<?php mail(destinatario, tema, texto del mensaje); ?>

En el parmetro destinatario pondremos la direccin de e-mail a donde se enviar el mensaje, en el parmetro tema el tema o subject del mensaje y en el parmetro texto del mensaje el cuerpo del mensaje en formato texto plano. Existe una sintaxis extendida de la instruccin mail( ) que nos permite aadir informacin adicional a la cabecera del mensaje.
<?php mail(destinatario, tema, texto del mensaje, informacin adicional de cabecera); ?>

En la informacin de cabecera podremos incluir parmetros adicionales al mensaje como Reply-To:, From:, Contenttype:... que nos permiten tener un mayor control sobre el mensaje. Ahora veamos un pequeo ejemplo de cmo enviar un correo electrnico con PHP (email.htm y email.php).
email.htm <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de envi de email</H1> Introduzca su direccion de email: <FORM ACTION="email.php" METHOD="GET"> <INPUT TYPE="text" NAME="direccion"><BR><BR> Formato: <BR> <INPUT TYPE="radio" NAME="tipo" VALUE="plano" CHECKED> Texto plano<BR> <INPUT TYPE="radio" NAME="tipo" VALUE="html"> HTML<BR><BR> <INPUT TYPE="submit" VALUE="Enviar"> </FORM> </body> </html>

<html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de envi de email</H1> <?php $tema; $texto; $cabecera; if ($direccion!=""){ if ($tipo=="plano"){ // Envio en formato texto plano $subject = "Ejemplo de envi de email"; $texto = "Ejemplo de envi de email de texto plano\n\n\n"; $texto .= "http://www.eclipsesoluciones.com.mx"; $from = "FROM: Santos <santos.facio@eclipsesoluciones.com.mx>\n"; } mail($direccion, $subject, $texto, $from);

email.php

Eclipse Soluciones con Poder

Pgina 53

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

else { // Envi en formato HTML $subject = "Ejemplo de envi de email"; $texto = "<html><head><title>Eclipse Soluciones. Taller de PHP</title>"; $texto .= "</head><body>Ejemplo de envi de email de HTML<br><br>\n"; $texto .= "http://www.eclipsesoluciones.com.mx</body></html>"; $type = "Contenttype: text/html\n"; $from = "FROM: Santos <santos.facio@eclipsesoluciones.com.mx>\n"; mail($direccion, $subject, $texto, $type, $from); } echo "Se ha enviado un email a la direccion: ",$direccion," en formato <b>",$tipo,"</b>.";

} ?> <br> </body> </html>

Eclipse Soluciones con Poder

Pgina 54

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

IV. FUENTES CONSULTADAS.


Manual Oficial de PHP. http://www.php.net/manual/es/

Taller de PHP. Universidad del Valle de Atemajac. http://www.univa.mx/

Taller de PHP. Universidad de Colima. Facultad de Telemtica. http://www.ucol.mx/

Taller de Linux, Apache, MySql y PHP. Fundacin de Software Libre, A.C. http://www.fsl.org.mx/

PHP Builder. http://www.phpbuilder.com/

Eclipse Soluciones con Poder

Pgina 55

Instituto Tecnolgico Superior de Lerdo.

Taller de PHP.

TALLER DE PHP

PRESENTADO POR:

Eclipse Soluciones. http://www.eclipsesoluciones.com.mx

Ing. Santos Gpe. Facio Barraza Ing. Miguel ngel Soto Guevara

santos.facio@eclipsesoluciones.com.mx miguel.angel@eclipsesoluciones.com.mx

Cd. Lerdo, Dgo. Octubre de 2005

Eclipse Soluciones con Poder

Pgina 56

Você também pode gostar