Você está na página 1de 168

1

Manual de PHP

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

2 INDICE 1. PHP Y APACHE 1.1. INTRODUCCIN PHP 1.2. INTRPRETE 1.3. EJECUCIN DE PHP EN EL SERVIDOR 1.4. INSTALACIN DE APACHE 1.5. INSTALACIN DE PHP 4 1.6. INSTALACIN Y CONFIGURACIN DE DREAMWEAVER 2. DREAMWEAVER 2.1. BIENVENIDOS A DREAMWEAVER MX 2004 2.2. IMGENES. 2.3. INSERTAR TABLA. 2.4. MODIFICAR TABLA. 2.5. FORMULARIOS 2.6. CAMPO DE TEXTO. 2.7. BOTN DE OPCIN. 2.8. CASILLAS DE VERIFICACIN. 2.9. LISTAS Y MENS. 2.10. BOTONES DE BORRAR Y ENVIAR. 2.11. INSERTANDO UN OBJETO MULTIMEDIA. 2.12. CAPAS. 2.12.1. Insertar una capa. 2.12.2. Formato de una capa. 2.12.3. Comportamientos en las capas. 2.13. MENS DESPLEGABLES. 2.14. MARCOS. 3. LENGUAJE PHP. 3.1. FORMATO DEL CDIGO PHP 3.1.1. Delimitadores 3.1.2. Extensin de los archivos en PHP 3.1.3. Comentarios 3.1.4. Fin de lnea 3.2. SINTAXIS BSICA 3.2.1. Variables 3.2.2. Tipos de datos 3.2.2.1. Enteros 3.2.2.2. Nmeros en punto flotante 3.2.2.3. Booleano 3.2.2.4. Cadenas 3.2.2.5. Arrays 3.2.2.6. Conversin de tipos 3.2.3. Otros componentes asociados a las variables 3.2.3.1. Variables predefinidas de Apache 3.2.3.2. Variables predefinidas de PHP
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

3 3.2.3.3. mbito de las variables 3.2.3.4. Variables de variables 3.2.3.5. Variables de Formulario 3.2.3.6. Funciones para variables 3.2.4. Constantes 3.2.4.1. Constantes predefinidas de PHP 3.2.5. Expresiones 3.2.6. Operadores 3.2.6.1. Operadores Aritmticos 3.2.6.2. Operadores de Asignacin 3.2.6.3. Operadores de Comparacin 3.2.6.4. Operadores de incremento/decremento 3.2.6.5. Operadores Lgicos 3.2.6.6. Otros Operadores 3.2.6.7. Precedencia de Operadores 3.3. ESTRUCTURAS DE CONTROL 3.3.1 if 3.3.2. else 3.3.3. elseif 3.3.4. Sintaxis Alternativa de Estructuras de Control 3.3.5. while 3.3.6 do..while 3.3.7. for 3.3.8 foreach 3.3.9. switch 3.3.10. break 3.3.11. continue 3.3.12. Inclusin de archivos 3.3.12.1. require() y include() 3.4. MANEJO DE CADENAS 3.4.1. Visualizacin de cadenas 3.4.2. Acceso al contenido 3.4.3. Bsqueda en cadenas 3.4.4. Comparacin de cadenas 3.4.5. Modificacin del contenido 3.4.5.1. Limpieza de cadenas 3.4.5.2. Conversin entre maysculas y minsculas. 3.4.5.3. Divisin de cadenas 3.5. ARREGLOS 3.5.1. Arrays escalares 3.5.2. Arrays asociativos 3.5.3. Arrays multidimensionales 3.5.4. Recorrer un array 3.5.4.1. Recorridos en arrays secuenciales 3.5.4.2. Recorridos en arrays no secuenciales 3.5.5. Ordenar un array 3.5.6. Otras operaciones
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

4 3.5.6.1. Modificar un array 3.5.6.2. Usando arrays como pilas 3.6. FUNCIONES 3.6.1. Declaracin de una funcin 3.6.2. Llamada a una funcin 3.6.3. Paso de parmetros 3.7. FUNCIONES DE FECHA Y HORA

4. MENSAJES HTTP. 4.1. EL PROTOCOLO HTTP. 4.2. ESTRUCTURA DE LOS MENSAJES HTTP. 4.3. Formularios en HTML 4.3.1. El elemento FORM 4.3.2. Envi de formularios al servidor 4.4. ESTRUCTURA DE LAS COOKIES 4.4.1. Utilizacin de cookies en PHP 4.4.1.1. Creacin de cookies 4.4.1.2. Eliminacin de cookies 4.4.1.3. Consulta de contenidos 4.5. SESIONES EN PHP 4.5.1. Creacin de sesiones 4.5.2. Acceso a las variables de sesin 4.5.3. Otra funciones asociadas con el manejo de sesiones 5. ACCESO A BASES DE DATOS 5.1. CONEXIONES USANDO ODBC 5.1.1. Introduccin 5.1.2. Conexin a travs de ODBC 5.2. INSERT, UPDATE Y DELETE 5.2.1. Introduccin 5.2.2. Insertando datos en PHP 5.3. QUERYS Y CURSORES 5.3.1. Introduccin 5.3.2. Consultando informacin en PHP

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

1. PHP Y APACHE 1.1 INTRODUCCIN PHP

PHP es un lenguaje de scripting que permite la generacin dinmica de contenidos en un servidor Web. El nombre de PHP fue empleado por vez primera a principios de 1995 y ha sido utilizado para definir a un conjunto de macros conocido como Personal Home Page Tools. Entre sus principales bondades se pueden destacar: su potencia, alto rendimiento y su facilidad de aprendizaje. Fue creado por Rasmus Lerdof como un conjunto de utilidades para aadir dinamismo a las pginas Web y posteriormente fue rediseado completamente por Zeev Suraski y Andi Gutmans y rebautizado como PHP 3.0. Ms tarde se volvi a redisear completamente el intrprete, aadindole ms potencia y nuevas funcionalidades, para dar lugar al lenguaje que hoy se conoce como PHP4. Es un lenguaje de programacin que contiene muchos conceptos de C, Perl y Java. El cdigo PHP est basado en documentos HTML de manera que es muy fcil incorporar informacin actualizada en un sitio Web. Para activar y desactivar el <<modo PHP>> dentro de una pgina HTML existen varias posibilidades: " Utilizando las etiquetas <? php y ?>. " Empleando las etiquetas cortas (short tags) <? Y ?> " Con la etiqueta <SCRIPT> de HTML: <SCRIPT LANGUAJE= php> y </SCRIPT>. " Con las etiquetas <% y %>

CARACTERSTICAS o Es un potente y robusto lenguaje de programacin basado en HTML. documentos

o Dispone de libreras de conexin con la gran mayora de los sistemas de gestin de bases de datos para el almacenamiento de informacin permanente en el servidor. o Proporciona soporte a mltiples protocolos de comunicaciones en Internet (http, imap, ftp, etc). o Cdigo fuente abierto: el cdigo del intrprete est accesible para permitir posibles mejoras o sugerencias acerca de su desarrollo. o Es gratuito. o Portable y multiplataforma: existen versiones del intrprete para mltiples plataformas. Esto permite que las aplicaciones puedan ser portadas de una plataforma a otra sin necesidad de modificar ni una sola lnea de cdigo.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

6 o Eficiente: PHP consume pocos recursos en el servidor, por lo que con un equipo relativamente sencillo es posible desarrollar interesantes aplicaciones. o Alta velocidad de desarrollo: PHP permite desarrollar rpidamente sitios Web dinmicos.

1.2. INTRPRETE
Las pginas que contienen exclusivamente cdigo HTML se pueden desarrollar y probar sin la intervencin de un servidor Web, ya que el cdigo HTML es interpretado en el navegador del usuario. PHP se ejecuta en el servidor antes de que la pgina sea enviada al usuario que realiz la peticin. Cuando llega una peticin a un servidor Web, ste localiza el documento solicitado por el cliente y, en funcin de una serie de parmetros de la propia configuracin del servidor, decide la accin a realizar con el documento. 9 Fases en la obtencin de un documento esttico:

Servidor
CLIENTE 1 2 SOLICITUD RESPUESTA 4 Documentos estticos (html, jpg...) 3

1.

2.

El usuario pulsa sobre un link solicitando un documento (un archivo HTML, una imagen en formato jpg, etc.) y el navegador enva la peticin al servidor utilizando el protocolo HTTP (protocolo de transferencia de hipertexto), La solicitud llega hasta el servidor Web correspondiente a travs de la red. El servidor localiza el documento solicitado.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

7 3. El servidor lee el documento del sistema de archivos y enva al cliente una copia exacta del mismo. El documento llega al cliente y se visualiza su contenido en el navegador del usuario. 9 Fases en la obtencin de un documento dinmico:

4.

Servidor
CLIENTE 1 SOLICITUD 2 RESPUESTA 4 SCRIPTS PHP 3

1.

El usuario pulsa sobre un link solicitando un documento (un archivo .phtml o .php) y el navegador enva la peticin al servidor utilizando el protocolo HTTP (protocolo de transferencia de hipertexto). Llega la solicitud al servidor y localiza el documento. Por la extensin del nombre del archivo determina que se trata de un archivo que contiene cdigo PHP y lanza el intrprete. El intrprete ejecuta el script solicitado y genera un resultado (habitualmente una pgina HTML) que se devuelve al servidor para que ste a su vez lo transfiera al cliente.

2.

3.

4. Se visualiza el documento en el navegador del usuario. A una solicitud del usuario el proceso es exactamente el mismo: pulsa sobre un link y recibe la informacin requerida. Sin embargo, en el servidor el proceso realizado antes de enviar la informacin ha sido diferente, ya que en el segundo caso ha sido necesaria la intervencin del intrprete de PHP para elaborar dinmicamente el contenido.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

8 PHP puede ser instalado al menos de tres modos diferentes: 9 Como un intrprete externo (modo CGI). 9 Como una extensin del servidor (via ISAPI y NSAPI). 9 Como un mdulo interno del servidor (disponible solo para Apache). La interfaz CGI (interfaz de pasarela comn) dota de capacidades de comunicacin a los servidores Web con otros programas. Esta interfaz de comunicaciones es comn en el sentido de que es exactamente igual para todos los servidores, independientemente de la plataforma sobre la que trabajen. La interfaz CGI establece de una forma clara y precisa la manera en la que se transfiere la informacin entre el servidor Web y otros programas. De esta forma es posible conectar el servidor Web con cualquier tipo de programa que sea capaz de ejecutarse en la misma mquina que el propio servidor. Habitualmente se emplean programas escritos en lenguajes como C, C++, Perl, etc. 9 Pasos que suceden cuando un usuario pulsa sobre un enlace que apunta a un programa CGI: 1. El usuario pulsa sobre un link solicitando un documento (un archivo .cgi o .exe) y el navegador enva la solicitud al servidor. 2. Llega la solicitud al servidor y ste localiza el programa. El servidor determina cmo debe lanzar la ejecucin del mismo.

3. Se ejecuta el programa CGI generando un contenido (habitualmente un documento HTML) y devuelve el resultado al servidor. ste reenva el resultado al cliente que realiz la peticin. 4. Se visualiza el contenido del documento en el navegador del usuario. En los programas CGI desarrollados con lenguajes como Perl o C, cuando se obtiene la informacin enviada desde el cliente es necesario realizar un proceso de decodificacin, puesto que dicha informacin se enva siguiendo las reglas de codificacin de URL (permiten identificar de manera nica un recurso de internet). Con PHP esto no sucede, dado que el propio intrprete se encargar de realizar el proceso de descodificacin. Aparte del modo CGI, tambin se puede instalar el intrprete como una extensin del servidor empleando la API correspondiente, o como un mdulo adicional del servidor.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

1.3. EJECUCIN DE PHP EN EL SERVIDOR


PHP reside y se ejecuta en la mquina en la que se encuentra el servidor Web. De esta forma el cliente lo nico que recibe es el resultado generado (pginas en formato HTML, imgenes en formato gif o jpeg, etc) y no le afecta si ha sido producido por un programa CGI escrito en lenguaje C o por un script escrito en Perl o por una pgina con cdigo PHP o ASP. A diferencia de JavaScript, o de un applet Java, PHP es una tecnologa que solamente se ejecuta en el lado del servidor. PHP ha sido diseado para generar dinmicamente contenidos, y uno de sus puntos fuertes es su gran capacidad para interactuar con multitud de gestores de bases de datos. Adems, tambin puede producir de manera dinmica cdigo que se enva con la pgina HTML y se ejecuta en el lado del cliente.

1.4. INSTALACIN DE APACHE


Lo primero que se debe hacer es instalar el servidor Web; en nuestro caso, instalaremos Apache en su versin para Windows. Apache es un servidor Open Source, y el ms usado por los servidores en todo Internet, se puede encontrar toda la informacin acerca de l en su pgina Web: http://www.Apache.org/ (en ingls por supuesto), y se puede bajar de la siguiente direccin: Apache_2.0.43-win32-x86-no_ssl.exe Bien, una vez bajado el Apache (7 megas aproximadamente) lo que procede es instalarlo; estos son los pasos a seguir: 1 - Dar doble clic sobre el archivo y aparecer la siguiente ventana:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

10

2 - En esta nueva ventana hacer clic en el botn Next y mostrar la siguiente:

3 - Despus de haber ledo la licencia del Apache y haber seleccionado la casilla de aceptacin (I Accept the Terms in the Licence Agreement), hacemos clic en el botn Next, apareciendo la siguiente ventana:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

11 4 De nueva cuenta, hacer clic en el botn Next, y aparecer esta otra ventana:

5 - En esta ventana se deber teclear informacin en cada casilla: - Network Domain: Esta casilla presenta varias opciones y que es necesario atender: lo ms normal es que se prefiera instalar el servidor para ser usado de manera personal. Si por el contrario, desea que el resto del mundo pueda ver las maravillas que puede hacer con PHP, entonces aqu deber indicar su direccin IP. Nota: Si no sabe cul es su direccin IP, lo podr investigar ejecutando, en modo consola, el comando ipconfig. - Server Name: Es el nombre que desea asignar a su servidor Web, por ejemplo www.miServer.com - Administrators Email Adress: Aqu debe escribir la direccin de correo electrnico del administrador del servidor web; por ejemplo: yo_mimo@hotmail.com Despus de haber llenado estas casillas, aparecen dos opciones ms: - For all users in port 80, as a service: instala Apache como un servicio de Windows, es decir que Apache se ejecuta al iniciar el ordenador; eligiendo esta opcin el servidor se pone a la escucha en el puerto 80.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

12 - Only for the current user, on port 8080, when started manually: instala Apache como un programa normal, para ejecutar el servidor lo elegimos en el men de inicio y se abre una ventana para indicar que se est ejecutando Apache. Una vez llenados todos los campos y elegida la opcin que se desee, hacer clic en el botn Next; entonces aparecer esta ventana:

En esta ventana se escoge si se quiere hacer una instalacin tpica o personalizada, comnmente se elige la instalacin personalizada (custom) y luego se presiona el botn Next.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

13 Aqu se elige el directorio donde se desea instalar el Apache, por defecto se instala en Archivos de programa, por lo tanto, se da clic en el botn Next. Despus de esto, aparecer un mensaje de confirmacin y se da clic en el botn Next para que comience la instalacin. Cuando sta termine, nuevamente aparecer una ventana, simplemente se hace clic en el botn de Finish y habr terminado la instalacin del servidor. Una vez hecho lo anterior, es necesario ejecutar el servidor Apache eligiendo la opcin Start Apache in Console, abrindose una ventana (negra) indicando que se est ejecutando el servidor Apache. Despus de esto, abrir el explorador de Internet para ver si realmente el servidor est funcionando. Una vez abierto, existen varias opciones segn se haya llenado el campo network domain: - Si se ha puesto la direccin IP, en la barra de direccin del explorador se escribe lo siguiente: http://nuestra direccin ip:8080 Nota: Lo de 8080 es para indicar al explorador que el servidor est escuchando en el puerto 8080. - Si en el campo Network Domain se indic una direccin de dominio, por ejemplo david.com, se pondr en la barra de direccin del navegador: http://localhost. Si todo es correcto aparecer una ventana diciendo que el servidor Apache ha sido configurado exitosamente.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

14

1.5. INSTALACIN DE PHP 4


La versin de ISAPI se distribuye en un archivo en formato ZIP. Una vez obtenida debe ser descomprimido en la direccin definida (se recomienda emplear el directorio c:\PHP). A continuacin se explican los pasos a seguir si el servidor es Apache. Para continuar con la instalacin del servidor Apache, siga los siguientes pasos: 1.- Detenga el servidor. 2.- Posicinese en el directorio c:\php. 3.- Mueva el archivo php4ts.dll a su directorio \Windows. 4.- Cambie el nombre del archivo php.ini.recommended por el de php.ini y cpielo a la carpeta C:\Windows.

Enseguida, abra el archivo php.ini para ser configurado de acuerdo a los siguientes puntos: 9 Se busca la siguiente lnea: display_errors = off // y se cambia por display_errors = on Se cambia el off a on con la finalidad de que los errores de sintaxis sean mostrados. 9 Busque la parte de [sessiones] en la cual se va a configurar la siguiente lnea: session.save_path = /tmp Aqu debe poner las ruta donde se guardarn los archivos temporales de las sesiones, posteriormente, si no existe la ruta, tendr que crearla.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

15 Configuracin de Apache con PHP Antes de continuar pare el servidor Apache, y enseguida edite el archivo de configuracin de Apache httpd.conf que se encuentra en Inicio (windows) -> Todos los programas -> Apache HTTP Server 2.0.48 -> Configure Apache Server; e incluya las siguientes lneas: LoadModule php4_module c:/php/sapi/php4Apache2.dll # Le indica al servidor Apache que carge el mdulo php4.

Bien, lo siguiente es modificar la lnea de DocumentRoot como se muestra a continuacin: DocumentRoot "c:/Apache/Apache2/htdocs" Esta es la carpeta donde se van a almacenar los archivos .php, .html, etc, lo mejor es cambiarla, por ejemplo vamos a poner: DocumentRoot "c:/InetPhp" (Este directorio se identificar como el directorio remoto ms adelante), es importante fijarse que la barra sea "/" y no "\". El siguiente texto a buscar es este: <Directory "c:/Apache/Apache2/htdocs">
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

16 Aqu se debe hacer lo mismo que antes: sustituir el directorio y poner la misma direccin que DocumentRoot, en este caso: Directory "c:/InetPhp"

Posteriormente se agrega la siguiente lnea al archivo de configuracin: AddType application/x-httpd-php .php .phtml

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

17 Esta ltima lnea indica al servidor Apache que identifique las extensiones .php para que el mdulo del intrprete entre en funcionamiento. Vuelva a poner en marcha su servidor Apache.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

18

1.6. INSTALACIN Y CONFIGURACIN DE DREAMWEAVER


Inicio -> Todos los programas -> Macromedia -> Dreamweaver. Seleccin de un diseo para el espacio de trabajo.

En Windows, la primera vez que inicie Dreamweaver aparecer un cuadro de dilogo en el cual seleccionaremos codificador. Si cambia de idea posteriormente, podr cambiar a otro espacio de trabajo distinto a travs del cuadro de dilogo Preferencias.

Definir una carpeta local mediante el asistente para la Definicin del sitio.

Crear una definicin del sitio y definir una carpeta local mediante el cuadro de dilogo Definicin del sitio. Puede usar este cuadro de dilogo en una de estas dos vistas: Bsicas o Avanzadas. El mtodo Bsico le orientar paso a paso a lo largo del proceso de configuracin del sitio. Si prefiere editar informacin del sitio sin esta orientacin, puede hacer clic en la ficha Avanzadas en cualquier momento. El procedimiento siguiente describe cmo configurar las opciones de la versin Bsica del cuadro de dilogo, que tambin se denomina asistente para la Definicin del sitio. Para definir un sitio: 1. Seleccione Sitio > Administrar sitios (es decir, seleccione Administrar sitios en el men Sitio). Aparece la ventana Administrar sitios.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

19 2. En el cuadro de dilogo Administrar sitios, haga clic en Nuevo y seleccione Sitio en el men emergente. Aparecer la ventana Definicin del Sitio. 3. Si la ventana muestra la ficha Avanzadas, haga clic en Bsicas. Aparecer la primera pantalla del asistente para definir el sitio solicitndole que introduzca un nombre para el sitio. En el cuadro de texto, introduzca un nombre que identifique el sitio en Dreamweaver. Puede elegir el nombre que desee. Por ejemplo, Agz como a continuacin se muestra:

4. Haga clic en Siguiente para continuar. Aparecer la siguiente pantalla del Asistente preguntndole si desea trabajar con una tecnologa de servidor. Seleccione la opcin No para indicar que el sitio es esttico por el momento, sin pginas dinmicas.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

20 5.- Haga clic en Siguiente para continuar. Aparecer la siguiente pantalla del asistente preguntndole cmo desea trabajar con los archivos. Seleccione la opcin Editar localmente y luego cargar al servidor de prueba remoto, y seleccione la carpeta en la cual desea almacenar los archivos que genere (para este ejemplo fue InetDW, en esta se almacenarn los archivos locales de dreamweaver), en caso de no existir crela y seleccinela, como a continuacin se muestra:

6. Haga clic en Siguiente para continuar. Aparecer la siguiente pantalla del Asistente preguntndole cmo se conecta al servidor remoto.

Definir un Sitio remoto Despus de crear un sitio Web, el paso siguiente es publicarlo cargando los archivos en un servidor Web remoto. Antes de continuar, deber disponer de acceso a un servidor Web (Apache), configurado de acuerdo con los pasos anteriores. 7. En el men emergente "Cmo conecta con su servidor remoto?", elija un mtodo para conectar con el sitio remoto. Se elige Local/red (porque el servidor se instal localmente Apache).

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

21

8. Haga clic en el cono de carpeta situado junto al cuadro de texto y acceda a la carpeta raz servidor Apache (directorio de archivos remotos). Si lo desea, puede desactivar la opcin Actualizar lista de archivos remotos automticamente para aumentar la velocidad. Como se muestra en la figura anterior. 9. Una vez introducida la informacin adecuada, haga clic en Siguiente. Aparecer la siguiente pantalla del Asistente preguntndole Desea activar la desproteccin y proteccin de archivos para que usted y sus colaboradores no puedan editar el mismo archivo simultneamente? deber seleccionar No, no activar la desproteccin y proteccin

10. Haga clic en Siguiente para continuar. Aparecer una pantalla del asistente mostrando un resumen de la configuracin. Haga clic en Completado para terminar de configurar el sitio remoto. 11. Haga clic en Listo para cerrar el cuadro de dilogo Administrar sitios. El panel Archivos mostrar ahora la nueva carpeta raz local correspondiente al sitio actual. La lista de archivos del panel Archivos acta como administrador de archivos, ya que permite copiar, pegar, eliminar, mover y abrir archivos como si se tratara del escritorio de la PC.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

22

Cargar los archivos locales Despus de configurar las carpetas local y remota, puede cargar los archivos de la carpeta local al servidor Web. Para que las pginas sean accesibles pblicamente, debe cargarlas incluso aunque el servidor Web se ejecute en el equipo local. 1.- Antes de cargar los archivos en el sitio remoto, como ejemplo cargaremos los archivos en el directorio local del sitio que se encuentran en:
c:\archivos de programas\macromedia\Dreamweaver 2004\samples\GetinStarted\finalsite

Copiar el contenido de la carpeta y mandarlo al directorio local de Dreamweaver. c:\InetDW. 2.- En el panel Archivos (Ventana > Archivos), seleccione la carpeta raz local del sitio. Y deben estar los archivos que se copiaron en el paso anterior, de lo contrario actualice el panel de archivos con F5 o botn actualizar. 3.- Haga clic en el cono de flecha azul Colocar archivos de la barra de herramientas del panel Archivos. Dreamweaver copia todos los archivos en la carpeta. Esta operacin puede ocupar cierto tiempo, ya que Dreamweaver debe cargar todos los archivos en el sitio remoto InetPHP. 4.- Abra el sitio remoto en un navegador para comprobar que todo se ha cargado correctamente.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

23 Para definir un sitio de Dreamweaver con PHP: 1. En Dreamweaver, seleccione Sitio > Administrar sitios. En el cuadro de dilogo Administrar sitios, seleccione el sitio creado y haga clic en el botn Editar. Aparecer la ventana Definicin del sitio. 2. Si se muestra la ficha Bsicas, haga clic en la ficha Avanzadas.

3. En la ficha Avanzadas del cuadro de dilogo Definicin del sitio, haga clic en Servidor de prueba en la lista Categora. Aparecer la pantalla Servidor de prueba. Dreamweaver necesita los servicios de un servidor de prueba para generar y mostrar contenido dinmico mientras se trabaja.

El servidor de prueba puede ser el equipo local, un servidor de desarrollo, un servidor en funcionamiento o un servidor de produccin, siempre y cuando permita procesar pginas PHP; ya que se dirige a un servidor capaz de procesar pginas PHP.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

24

4. Seleccione PHP MySQL en el men emergente Modelo de servidor. 5. En el men emergente Acceso, elija el mismo mtodo (Local/red) que ha especificado para acceder a la carpeta remota. 6. Damos clic en Aceptar y por ltimo en Listo. 7. Para comprobar que todo funcione correctamente, creamos un documento de php. Seleccionamos Archivo -> Nuevo. En el cuadro de dilogo en la seccin categora seleccionamos pgina dinmica, en la seccin de pgina dinmica del mismo cuadro seleccionamos PHP. Entre las etiquetas de <body> tecleamos el siguiente cdigo:
<body> <p>Esta Pgina fue creada a las <b> <?php echo date("h:i:s a", time()); echo "</b> en una computadora corriendo PHP.</p>"; phpinfo(); ?> </body>

8. Guardamos el archivo. En el cuadro de dilogo le asignamos un nombre y en el combo de tipo seleccionamos archivos php (.php .php3). 9. Si queremos ver nuestra pgina en el iExplorer debemos cargar el archivo en el servidor: a.- Hacemos clic en la flecha azul ubicada en el panel de Archivo.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

25 b.- Aparecer el siguiente cuadro de dilogo, damos clic en el botn de s.

c. Despus hacemos clic en el cono de Vista previa/Depurar en explorador, en el cuadro emergente seleccione vista previa en iExplorer o F12.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

26

2. DREAMWEAVER 2.1. BIENVENIDOS A DREAMWEAVER MX 2004


Dreamweaver MX 2004 es un editor HTML profesional para disear, codificar y desarrollar sitios, pginas y aplicaciones Web. Tanto si desea controlar manualmente el cdigo HTML como si prefiere trabajar en un entorno de edicin visual, Dreamweaver le proporciona tiles herramientas que mejorarn su experiencia de creacin Web. Las funciones de edicin visual de Dreamweaver permiten crear pginas de forma rpida, sin escribir una sola lnea de cdigo. No obstante, si prefiere crear el cdigo manualmente, Dreamweaver tambin incluye numerosas herramientas y funciones relacionadas con la codificacin. Adems, Dreamweaver le ayuda a crear aplicaciones Web dinmicas basadas en bases de datos empleando lenguajes de servidor como ASP, ASP.NET, ColdFusion Markup Language (CFML), JSP y PHP. En el presente manual explicaremos con detalle el manejo de pginas dinmicas con PHP.

2.2. IMGENES.
Para insertar una imagen es conveniente tenerla previamente guardada en la carpeta del sitio; de lo contrario, Dreamweaver nos advertir para que guardemos una copia en la carpeta correspondiente. Las imgenes pueden estar sueltas en la carpeta raz junto con los archivos de cada uno de los documentos o, mucho mejor, en una carpeta especial dentro del sitio a la que llamaremos imag (nombre de los archivos y carpetas sin acentos) o cualquier otro nombre que nos sugiera que, dentro de esa carpeta, estn nuestras imgenes. Para crear una carpeta dentro de la carpeta raz del sitio, pulsamos la pestaa Archivo de la franja lateral derecha y elegimos Nueva carpeta.

Por cierto, para hacer visible o invisible la franja lateral derecha le damos al cono
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

27 Se crear una carpeta con el nombre untitled que habr que cambiar por el que deseemos tenga nuestra carpeta de imgenes:

Por ejemplo, podemos llamarla imag:

Podemos llevar las imgenes a la carpeta por cualquiera de los procedimientos habituales en Windows. Si por ejemplo, tal como indicbamos al principio, la imagen no est previamente guardada en la carpeta, Dreamweaver nos va a sugerir que lo hagamos. Supongamos que queremos insertar una imagen que tenemos guardada en el Escritorio. La imagen se llama obras. Hacemos clic en Insertar de la barra de mens y luego en Imagen:

Aparecer la ventana Seleccionar origen de imagen:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

28

Hacemos clic en Escritorio y seleccionamos la imagen: obras.

Aparecer el mensaje de advertencia dicindonos que la imagen no est en la carpeta raz del sitio:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

29 Le decimos que S y se abrir la ventana Copiar archivo como.

Hacemos doble clic sobre la carpeta imag para abrirla.

Le damos Guardar. La imagen se guardar en la carpeta imag y se colocar en el documento:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

30

Todo esto se puede hacer en la barra de Insertar que es un acceso directo para colocar una imagen en nuestra pgina (jpg o gif). Como se muestra en la figura:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

31

2.3. INSERTAR TABLA.


Desde Insertar de la barra de Mens, elegimos Tabla.

Aparecer una ventana similar a sta:

Podemos determinar el nmero de Filas, el nmero de Columnas, el Ancho de la tabla en pixeles o porcentaje, especificar si queremos que la tabla tenga Borde e indicarle el grosor del borde en su caso. El Relleno de celda hace referencia al espacio que queremos que exista entre el texto, o lo que coloquemos en cada una de las celdas y su borde. El Espacio celda es el espacio que queremos que haya entre una celda y otra. Ambos se indican en pixeles y se pueden quedar vacos en el caso de que queramos que tanto el relleno de celda como el espacio de celda sea el mnimo posible. A modo de ejemplo, vamos a insertar una tabla con 3 filas y 6 columnas y que ocupe el 80% del ancho, un borde de 2 pixeles y un relleno de celda de 5 pixeles: Lunes Maana Tarde Martes Mircoles Jueves Viernes

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

32

2.4. MODIFICAR TABLA.


Si ponemos el cursor en cualquier punto de la tabla, en la barra de estado, encontraremos una informacin similar a sta: La etiqueta <body> hace referencia a todo el documento que se visualiza con el navegador. La etiqueta <table> se refiere a la tabla entera, la etiqueta <tr> a la fila en la que est el cursor y la etiqueta <td> a la celda. Observe que la ltima etiqueta est en negrita. Eso quiere decir que es la celda que est seleccionada. Por debajo de esta barra de estado nos encontramos con el panel del Inspector de Propiedades que harn referencia a la celda en la que, en ese momento, est el cursor:

Desde ese panel podramos cambiar las propiedades de la celda en cuestin. Agregamos los datos que estn en el dibujo anterior dentro de cada celda, seleccionando la celda correspondiente e ingresaremos el texto. Seleccionamos cualquiera de las celdas de la tabla para despus seleccionar en la Barra de Estado la etiqueta <table>, se seleccionar toda la tabla.

Si ahora vemos las propiedades, stas sern las propiedades de la tabla y, desde ah, podremos cambiar las propiedades de la tabla y su configuracin.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

33 Podemos modificar el nmero de Filas en Filas, el nmero de columnas en Cols, la anchura en An, la altura en Al, el espacio entre los bordes y el contenido en Rell.celda, el espacio entre las celdas en Esp.celda, la alineacin en Alinear, el grosor del borde en Borde, Podemos establecer un color de fondo en Col.Fondo, un color de borde en Col.borde o una imagen en Im. Vamos a realizar algn cambio en la tabla:

Hemos aadido una fila alineada al centro, incrementando el grosor del borde a 5 pixeles, estableciendo un color de fondo y otro diferente para el borde. El resultado es este: Lunes Maana Tarde Martes Mircoles Jueves Viernes

Podemos hacer cambios a una celda concreta, a una fila entera, o a la tabla entera como acabamos de ver. Para hacer cambios a una fila colocamos el cursor en una celda de esa fila y marcamos la etiqueta <tr> de la barra de estado. Quedar seleccionada la fila entera. Desde el panel Propiedades podemos hacer los cambios oportunos:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

34 Hemos seleccionado la primera fila. Ahora el panel Propiedades afectar a la fila seleccionada:

Si pulsamos, por ejemplo, el botn el texto que est escrito en las celdas de esa fila se colocar centrado en cada una de las celdas. Pulsando, por ejemplo, el botn el texto escrito pasar a estar en negrita. El resultado ser:

Otra forma de seleccionar filas y/o celdas consiste en situar el cursor en una de las celdas y arrastrar con el ratn hasta donde se desee:

Seleccionamos como ejemplo las cuatro celdas intermedias de la ltima fila. Si le damos, por ejemplo al cono las celdas seleccionadas se agruparn en una sola:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

35 Podemos aadir texto o variar las propiedades de las celdas por los procedimientos descritos:

Hemos seleccionado por el mtodo de arrastrar el cursor las celdas anteriores para cambiar el color de fondo:

El resultado es:

Podremos crear vnculos a otras pginas muy fcil con Dreamweaver solo hay que presionar el crculo al lado de la caja de texto en el panel de propiedades de vnculo y soltarlo en la pgina que queremos que sea la pgina de enlace.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

36

2.5. FORMULARIOS
Vamos con una de las herramientas ms tiles de toda pgina Web. Es aquella que recoge informacin del visitante y la almacena en el servidor, o bien, se nos enva a travs de una direccin de correo electrnico. Nota: Otra manera de ver el panel de Insertar es verlo como fichas, damos clic en el botn de insertar y seleccionamos ver como fichas.

Para insertar un formulario: Damos clic en

para que se despliegue el panel:

Si no est ya desplegado, elegimos la pestaa

Colocamos el cursor en el sitio en vista diseo o en vista cdigo donde queramos que se coloque el formulario y damos clic en el cono .

Aparecern los lmites del formulario representados por un rectngulo cuyos lados son una lnea discontinua de color rojo:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

37 A continuacin insertaremos una tabla dentro del formulario con dos columnas y varias filas: situamos el cursor dentro del rectngulo de lneas discontinuas, introducimos la tabla y la centramos, para que la tabla no contenga contorno le ponemos 0 a grosor de borde, 4 filas y 2 columnas; seleccionamos <tabla> en el panel de propiedades seleccionamos en alinear -> centro.

2.6. CAMPO DE TEXTO.


Vamos a hacer, como ejemplo, un formulario que recoja la opinin sobre esta pgina Web. Empezamos con el primer Objeto de formulario: Campo de texto. Situamos el cursor en la primera celda, alineamos a la derecha y escribimos, por ejemplo, Nombre: En la primera celda de la derecha insertamos un campo de texto Dando clic en el panel insertar -> Formulario -> campo de texto. .

Nuestro formulario tendr este aspecto:

Y abajo, aparecer la ventana de

del campo de texto:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

38 Ah podemos elegir la anchura del campo, el nmero de caracteres mximo, si queremos que conste de una o varias lneas, si queremos que se oculte al ser escrito (tipo contrasea), si queremos que aparezca un texto inicialmente y, lo que es ms importante, el nombre que le queremos dar: Quitamos textfield y ponemos: nombre.

Esto tambin se puede hacer por medio del cdigo haciendo lo siguiente: <INPUT TYPE=text NAME=nombre MAXLENGTH=longitude_maxima> VALU=valor por defecto SIZE=tamao

Type=text es donde indicamos que es una caja de texto. TYPE=password hacemos que sea de tipo contrasea.

2.7. BOTN DE OPCIN.


Vamos ahora a preguntar la opinin sobre la pgina. En la segunda celda de la columna de la derecha, insertamos un botn de opcin .

Recuerde que todos los controles de formularios se insertan como la caja de texto en insertar -> formularios ->tipo de formulario que se quiere.

Nuestro formulario tendr este aspecto:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

39

Y en la parte inferior de la pantalla, aparecer el panel de propiedades del botn:

En la primera casilla de la izquierda borramos radiobutton y escribimos el nombre de la opcin global: opinion. En la segunda casilla, al lado de Valor activado, escribimos lo que corresponda con esta primera opcin que puede ser: muy buena. Podemos elegir que esta opcin est activada o desactivada de entrada. Tenemos que escribir a la derecha del botn el texto (que est dentro de la celda) que ver el visitante: Muy buena, excelente. El formulario ir quedando as:

Tenemos que seguir insertando los dems botones de opcin correspondientes a este ejemplo. Por lo tanto, los siguientes botones se debern seguir llamando opinion y en cada caso habr que escribir lo que corresponde con esa opcin. De no llamarse igual, se podrn seleccionar todos y no uno solo que es lo que pretendemos. A esto se le llama grupo de opcin. Para que el segundo botn no quede muy separado del primero, le damos un salto de lnea Insertar > texto > caracteres > salto de lnea o introduciendo <BR> en el codigo despus de excelente.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

40

El segundo botn, por ejemplo, debera quedar as:

Ponemos un tercer botn con la opcin de que la pgina es Mala.Bastante mala: Ya sabes el mismo nombre: opinion y como valor activado: mala.

Si queremos colocar otra pregunta de opcin debemos llamarla de otra manera para que no se excluyan las selecciones. Por ejemplo, podemos preguntarle al visitante sobre sus conocimientos de informtica. El nombre de la opcin podra ser conoc_infor (por ejemplo).
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

41

El formulario va teniendo este aspecto:

2.8. CASILLAS DE VERIFICACIN.


Vamos a insertar ahora casillas de verificacin las cuales permiten elegir varias opciones. En nuestro caso, podramos hacerlo con las cosas que le han gustado. Introducimos la pregunta en la siguiente celda de la izquierda Qu es lo que ms te ha gustado del curso? En la celda de la derecha introducimos la primera casilla de verificacin pulsando en el cono correspondiente. Le ponemos un nombre a la casilla, por ejemplo, gustado, y como primer valor uno de los que se nos puedan ocurrir, por ejemplo, paso a paso (para Valor activado) y una frase un poco ms construida para el formulario visible.

Damos un salto de lnea e introducimos nuevas casillas, siempre con el mismo nombre, gustado, y una frase nueva como Valor activado que debe ser una expresin corta de lo que escribamos en el formulario. Esta parte del formulario podra quedar as:
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

42

El cdigo es el siguiente: <INPUT TYPE=checkbox NAME=ingeniero VALUE=si checked> Donde checked seleccionar la opcin por defecto.

2.9. LISTAS Y MENS.


A continuacin, podemos incluir un men o lista desplegable. La diferencia entre men y lista es que la lista permite varias elecciones y el men una sola. Podemos hacerlo, por ejemplo, preguntando por la edad del visitante. Escribimos la pregunta en la siguiente celda Indica tu edad e incluimos el men en la celda de la derecha pulsando en .

Le damos un nombre a la Lista/men, por ejemplo, edad y pulsamos Aparecer la siguiente ventana:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

43

Vamos escribiendo en los elementos del men. En Valor escribimos lo mismo (ser lo que aparezca al ser enviado el formulario). Pulsando la tecla para incluir el siguiente y la tecla para quitar uno ya introducido. Con las flechas vamos cambiando el orden de las etiquetas de elemento.

Cuando lo tengamos todo le damos Aceptar. Las diferentes etiquetas no aparecen, solo lo harn al lanzar la pgina con el navegador.

El cdigo es el siguiente: <select name="select"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

44 Podemos crear fcilmente la lista ya teniendo un men solo hay que teclear la opcin de lista en el cuadro de propiedades y, en la opcin de alto, cuntos se van a ir mostrando en la lista y seleccionando la opcin mltiple seleccionamos varias lneas.

Podemos incluir un campo de texto para comentarios. Lo podemos hacer con el botn de Campo de texto definiendo (rea de texto): en las propiedades, o bien, dando directamente al botn: Lo introducimos:

Podemos introducir ahora (campo de texto) la direccin de correo electrnico del visitante. En este caso, podemos poner un Valor inicial:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

45

2.10. BOTONES DE BORRAR Y ENVIAR.


Finalmente, tenemos que insertar un botn para enviar el formulario y, si lo deseamos, un botn para borrar todo lo que haya podido escribir el visitante. Empezamos por el de Borrar: Vamos a colocar el botn de borrar en la ltima celda de la izquierda alineando a la . Por derecha. Colocamos el cursor en la celda, alineamos y pulsamos el cono defecto, Dreamweaver coloca el botn de Enviar.

Nosotros modificamos de la siguiente forma:

A continuacin, nos colocamos en la celda de la derecha, alineamos a la izquierda, pulsamos el cono . Aparecer, de nuevo la ventana anterior que modificamos:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

46

Podemos dar por finalizado nuestro formulario. Queda por definir la accin que queremos que haga una vez relleno. Para usuarios personales, la opcin ms habitual es el envo por correo electrnico de los datos obtenidos. Esto se hace colocando el cursor en cualquier punto del formulario y eligiendo <form> desde la barra de estado . Aparecern las propiedades del formulario:

En Accin escribimos mailto:direcciondecorreo. Por ejemplo: mailto:a_zazuetag@hotmail.com De todas formas, para que el envo del formulario pueda leerse como un mensaje de correo ordinario, hay que escribir en la etiqueta del formulario del cdigo fuente el atributo enctype="text/plain".

. Si no est ah, Podemos intentar seleccionarlo del men: tenemos que escribirlo directamente en el cdigo. Seleccionamos el formulario colocando el cursor y pulsando <form> <form action=mailto:a_zazuetag@hotmail.com method=post name=form1> Incluimos lo acordado: <form action=mailto:a_zazuetag@hotmail.com method=post name=form1 enctype=text/plain>

Vemos, de nuevo, las propiedades del formulario:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

47

Nuestro formulario ya tiene que funcionar. Lo guardamos primero, lo lanzamos con el navegador, y realizamos un rellenado de prueba para ver si lo recibimos satisfactoriamente por el correo electrnico. Antes de dar por concluido el formulario podemos hacer alguna modificacin en la tabla, aadiendo algn color de fondo para separar unas filas de otras. Con el cursor (arrastrando) seleccionamos la primera fila:

Y en la ventana de propiedades de la fila:

Elegimos un color de fondo:

Elegimos otro color para la segunda fila y vamos alternando.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

48

2.11. INSERTANDO UN OBJETO MULTIMEDIA.


Site el punto de insercin en la ventana de documento en la que desea insertar el objeto. 1. Inserte el objeto siguiendo uno de estos procedimientos: o En la categora Comn de la barra Insertar, haga clic en el botn Media y seleccione el botn para el tipo de objeto que desea insertar. o Seleccione el objeto adecuado en el submen Insertar > Media. 2. En la ventana de documento, coloque el punto de insercin en el lugar en el que desea insertar un elemento Flash y siga uno de estos procedimientos. o En la categora Elemento Flash de la barra Insertar, haga clic en el cono del elemento Flash que desea insertar.
o

Seleccione Insertar > Elemento Flash > Nombre del elemento Flash.

Aparecer el cuadro de dilogo Guardar elemento Flash. 3. Introduzca un nombre de archivo para el elemento Flash y gurdelo en una ubicacin adecuada de su sitio. 4. Haga clic en Aceptar. Aparece el marcador de posicin del elemento Flash en el documento. Puede modificar las propiedades del elemento Flash mediante el inspector de etiquetas y el inspector de propiedades. Seleccione Archivo > Vista previa en el navegador para obtener una vista previa del elemento Flash.

2.12. CAPAS.
Las capas no son ms que unos recuadros, que pueden situarse en cualquier parte de la pgina, en los que podemos insertar contenido HTML. Dichas capas pueden ocultarse y traslaparse entre s, lo que proporciona grandes posibilidades de diseo. Las capas pueden moverse de una posicin a otra de la ventana pulsando sobre el recuadro blanco, y sin soltar el ratn, arrastrndola hacia la nueva posicin. Tambin pueden ser redimensionadas pulsando sobre los recuadros negros, y arrastrndolos hasta conseguir el tamao deseado.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

49 Dentro del recuadro de la capa es posible insertar texto, tablas, imgenes, animaciones flash y todos los elementos que puede contener un documento HTML.

2.12.1. Insertar una capa.


Las capas pueden insertarse en una pgina a travs del men Insertar ->objeto de diseo -> opcin Capa. Una vez que se ha insertado la capa, pueden editarse sus atributos, pero para ello hay que seleccionarla primero. Seleccionarlas a travs del panel Capas, que puede abrirse a travs del men Ventana -> capas o con F2.

2.12.2. Formato de una capa.


Las propiedades de la capa se especifican a travs de su inspector de propiedades, al igual que casi todo lo que hemos visto hasta el momento.

ID de capa es el nombre de la capa. Tambin puede ser cambiado a travs del panel Capas, haciendo doble clic sobre l.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

50 Iz y Sup indican la distancia en pixeles que hay entre los lmites izquierdo y superior del documento y la capa.

An y Al indican la anchura y la altura de la capa. ndice Z es el nmero de orden de colocacin de las capas. Este valor tambin puede cambiarse a travs del panel Capas. Una capa ser solapada por aquellas capas cuyo ndice Z sea mayor que el suyo.

Vis indica la visibilidad inicial de la capa. La visibilidad puede ser de cuatro tipos: Default (visibilidad segn el navegador), Inherit (se muestra la capa mientras la pgina a la que pertenece tambin se est mostrando), Visible (muestra la capa, aunque la pgina no se est viendo) y Hidden (la capa est oculta). La visibilidad tambin puede cambiarse a travs del panel Capas, pulsando sobre la imagen del ojo. El ojo abierto indica Visible, y el ojo cerrado indica Oculto.

A travs de Im. fondo y Col. fondo puede indicarse una imagen o un color de fondo para la capa.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

51

2.12.3. Comportamientos en las capas.


Los comportamientos son acciones que suceden cuando los usuarios realizan algn evento sobre un objeto, como puede ser mover el ratn sobre una imagen, pulsar sobre un texto, hacer doble clic sobre un mapa de imagen, etc. Los comportamientos no existen como cdigo HTML, se programan en JavaScript. Dreamweaver permite insertarlos a travs del panel Comportamientos, por lo que no es necesario escribir ninguna lnea de cdigo JavaScript para programarlos. El panel Comportamientos se puede abrir a travs del men Ventana, opcin Comportamientos. Tambin pulsando Mays+F3. pulsando sobre l, y en Mostrar eventos En este panel hay que desplegar el botn para elegir una versin de la lista de navegadores. Algunos comportamientos no funcionan para algunos navegadores, por lo que dependiendo del navegador elegido aparecern unos u otros comportamientos posibles. Existen comportamientos que funcionan en Internet Explorer pero no en Netscape o en Mozilla. Una vez elegido un navegador ya no es necesario volver a elegirlo las siguientes veces que se desee insertar algn comportamiento.

Cuando ya estableci algn navegador, ya se pueden insertar comportamientos. Lo primero que hay que hacer es seleccionar el objeto sobre el que se ha de aplicar el comportamiento, como puede ser una imagen, un fragmento de texto, capas, etc. Al desplegar el botn del panel Comportamientos aparece la opcin Mostrar eventos, a travs de la cual se haba elegido el navegador. Tambin aparece la lista de todas las acciones posibles para el navegador elegido previamente, de entre las que se puede seleccionar una. Segn el elemento sobre el que se desee aplicar el comportamiento, se podrn elegir unas acciones, mientras que otras no.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

52

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

53

2.13. MENS DESPLEGABLES.


Para crear un men despegable es necesario crear una capa, dentro de la cual vamos a insertar una tabla de una columna y una fila. A modo de ejemplo solo crearemos uno; despus de eso crearemos otra capa un poco ms larga para poder insertar una tabla en la cual tendr una fila y tres columnas. En cada celda vamos a insertar una botn de flash, para hacerlo de clic en el panel de insertar -> comn, y por ltimo, clic en el en cono de flash. y seleccionamos botones de

En el men emergente seleccionamos un estilo y le damos un nombre al botn, el tipo de fuente y si queremos asignarle un vnculo desde aqu, adems de todo esto tenemos que guardar el botn en nuestro proyecto. As lo vamos hacer con cada una de las celdas de las tablas. Seleccionamos la capa con tres botnes y le ponemos la propiedad visibilidad (vis) en hidden. Seleccionamos la capa con un solo botn, a la cual le vamos a dar comportamiento dando clic en el panel de comportamiento y seleccionamos el signo + seleccionamos mostrar ocultar- capas, en el men emergente seleccionamos la capa que queremos que se oculte o mostrar y damos en aceptar, se agregar un comportamiento en el panel y a continuacin seleccionamos la accin onMouseMove como se muestra a continuacin:

Despus agregamos otro comportamiento a la misma capa y le damos que nos oculte la capa y en el evento seleccionamos OnMouseOut. Ahora, en el panel capas seleccionamos la capa que tenemos oculta y la posicionamos en la parte que deseemos que aparezca. Teniendo la capa oculta le vamos a dar comportamiento y vamos a agregar el de ocultar mostrar capa y le damos seleccionar la capa, que es a la que le estamos dando el comportamiento mostrar, damos aceptar en el evento OnMouseMove, y agregamos otro evento y a la misma capa damos en ocultar y en el evento OnMouseOut.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

54 Nota: los enlaces se pueden hacer de la forma tradicional, mostrada anteriormente, o en el cuadro de dilogo en donde seleccionamos el botn.

2.14. MARCOS.
Un marco es una zona de una ventana de navegador que puede mostrar un documento HTML independiente de lo que se muestra en el resto de la ventana. Un conjunto de marcos es un archivo HTML que define el diseo y las propiedades de un grupo de marcos, que incluyen el nmero, el tamao, la ubicacin de los marcos y el URL de la pgina que aparece inicialmente en cada marco. El archivo de conjunto de marcos no incluye el contenido HTML que se muestra en el navegador. Para ejemplificar estos crearemos una nueva pgina. Los marcos los podemos localizar en la barra de insertar en la pestaa de diseo

Con la barra Insertar puede crear un conjunto de marcos y mostrar el documento actual en uno de los nuevos marcos. Seleccione un conjunto de marcos predefinido en el submen Insertar > HTML > Marcos. En la categora Diseo de la barra Insertar, haga clic en la flecha situada bajo el botn Marcos y, a continuacin, seleccione un conjunto de marcos predefinido. En la creacin de marcos, los conos de conjunto de marcos proporcionan una representacin visual del conjunto de marcos aplicado al documento actual. El rea azul de un cono de conjunto de marcos representa el documento actual y las reas blancas representan marcos que mostrarn otros documentos.

Ya que tenemos nuestro marco es necesario guardarlo, esto nos har que guardemos cuatro documentos, en virtud de que cada parte de la pgina actual es tratada como una pgina independiente. Una vez seleccionado un marco a travs del panel Marcos, pueden establecerse sus propiedades mediante el inspector de propiedades.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

55

Cada marco tiene asignado un nombre, que puede cambiarse a travs de Nombre del marco (parte izquierda de la imagen superior). El nombre no puede contener espacios en blanco. En Origen aparece el nombre del documento HTML que est contenido en el marco. En Bordes puede elegirse si aparecer o no una lnea separando el marco del resto de marcos. En el caso de que se muestre el borde, se puede especificar un color para ste a travs de Color borde. Desplaz. (Desplazamiento) indica si aparecern o no las barras de desplazamiento cuando el documento del marco no pueda visualizarse completamente. Si la opcin Mismo tamao est activa, indica que los usuarios no podrn variar las medidas del marco desde el navegador. El Ancho del margen y el Alto del margen indican la separacin que habr entre el contenido del marco y sus bordes izquierdo-derecho y superior-inferior. Si lo seleccionado es todo el conjunto de marcos (la pgina de marcos), el inspector de propiedades es algo diferente.

En Bordes puede elegirse si aparecer o no una lnea separando los marcos entre s, y puede especificarse un color para ste a travs de Color borde. Tambin es posible establecer un grosor para el borde a travs de Ancho. El campo Columna (o Fila dependiendo del marco elegido en Seleccin Fila Col.) sirve para especificar el tamao del marco, que puede ser en Pixeles, Porcentaje (de la ventana) o Relativo (proporcional al resto de marcos). Normalmente utilizar dos marcos, uno de ellos con tamao en Pixeles, que ser el que contenga la barra de navegacin; y el otro marco con tamao Relativo, para que se ajuste a la ventana. Cuando trabajamos con marcos, queremos poder cargar diferentes documentos en cada uno de ellos. El contenido de alguno de los marcos ha de ser fijo, mientras que el de otros ha de poder variar
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

56 Ahora que ya sabe trabajar con marcos le ser ms fcil entender estos enlaces:.

_blank: Abre el documento vinculado en una ventana nueva del navegador. _parent: Abre el documento vinculado en la ventana del marco que contiene el vnculo o en el conjunto de marcos padre. Como ya sabe, el marco padre es el marco en el que se encuentra el documento inicial, sobre el que se han insertado el resto de los marcos. _self: Es la opcin predeterminada. Abre el documento vinculado en el mismo marco o ventana que el vnculo. _top: Abre el documento vinculado en la ventana completa del navegador, lo cual quiere decir que los marcos de la ventana desaparecern al abrir el vnculo en ella. Mainfram en la pgina de la derecha mostrar el vnculo. Left frame como su nombre lo indica ser en la izquierda. Topframe que ser en la de arriba.

Estos tres ltimos son los nombres que Dreamweaver ha dado a cada uno de los marcos; si nosotros cambiamos uno de ellos, es necesario seleccionar el que hayamos dado al marco para referenciarlo hacia a l.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

57

3. LENGUAJE PHP.
3.1 FORMATO DEL CDIGO PHP 3.1.1. Delimitadores
Para facilitar la comprensin de algunos ejemplos, nicamente se indica el cuerpo del cdigo en HTML. PHP esta muy relacionado con el lenguaje de hipertextos HTML; tanto es as que el cdigo PHP aparece normalmente insertado dentro de un documento HTML. El documento PHP, una vez interpretado correctamente en el servidor genera una pgina HTML y para diferenciar ambos lenguajes dentro de un mismo documento se utilizan etiquetas de comienzo y final de cdigo PHP. Las etiquetas mas habituales para delimitar los bloque de cdigo PHP son las siguientes:
<?php echo "Esto es una instruccin PHP"; ?>

Existen otros posibles formatos de etiquetas menos utilizados que el anterior, su utilizacin ser correcta dependiendo de las caractersticas de configuracin seleccionadas en el proceso de instalacin del intrprete de PHP:
<? echo "Esto es una instruccin PHP"; ?>

Existen otras pero en el presente manual usaremos estas.

3.1.2. Extensin de los archivos en PHP


La extensin de los archivos que se utilizan en PHP es muy importante, ya que, dependiendo de esta, el servidor Web utilizado decide si el documento solicitado debe ser procesado por el intrprete de PHP o no. Las extensiones que indican al servidor HTTP que el archivo contiene cdigos PHP son las siguientes: .php3 .php4 .php .phps Cdigo PHP 3.x Cdigo PHP4.x Indica cdigo PHP(esta ser la que utilizaremos a la hora de guardar nuestros programas PHP) Utilizada para ver la sintaxis del cdigo resaltado en colores

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

58

3.1.3. Comentarios
Los comentarios son porciones del programa que se ponen slo para facilitar la documentacin del cdigo, lo primero que hace el intrprete de PHP es quitar todos los comentarios del programa. PHP ofrece la posibilidad de insertar comentarios de tres formas distintas. La primera consiste en emplear dos caracteres / seguidos (//), para comentar una nica lnea de cdigo. La segunda es utilizando el carcter almohadilla #, tambin para comentar una nica lnea de cdigo, con la diferencia que el comentario termina con el retorno de carro de la lnea comentada o con el smbolo de finalizacin de interpretacin de PHP. La tercer tipo de comentario es de tipo multilnea, es decir, nos permite comentar varias lneas de cdigo fuente, de tal forma que el comienzo se indica con la secuencia de caracteres /* y el final con */.
<?php // Esto es un comentario de una lnea echo "Esto es una instruccin PHP <BR>\n"; #Otro comentario echo "Esto es otra instruccin"; /* Esto sera un comentario de varias lneas */ ?>

Hay que tener cuidado con este ultimo tipo de comentarios ya que produce errores.
<?php /* Este comentario /* dar unos errores horribles en la ltima */ palabra */ ?>

3.1.4. Fin de lnea


El fin de lnea o separacin de instrucciones se hace de la misma manera que en C, 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 un ejemplo de fin de lnea"; ?> <?php echo " Esto es un ejemplo de fin de lnea " ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

59

3.2. SINTAXIS BSICA 3.2.1. Variables


La forma principal de almacenar valores en el medio de un programa son las variables. Los puntos ms importantes a recordar son: Todas las variables en PHP comienzan con el smbolo de pesos $, seguido, al menos, por una letra o un guin bajo (_) para despus continuar por cualquier combinacin de letras, de dgitos y de guiones bajos. Las variables no necesitan ser declaradas antes de ser usadas, se crean en el instante en que son utilizadas por primera vez. El valor de una variable es igual al valor ms recientemente asignado. Las variables son asignadas e inicializadas con el operador de asignacin '=', con la variable a la izquierda del operador y la expresin a evaluar a la derecha. Las variables no tienen un valor intrnseco, sino que toman el tipo del ltimo valor asignado. Las variables que se usan antes de ser asignadas tienen un valor por defecto. El nombre de la variable es sensible a minsculas y maysculas. Por ejemplo $Unavariable y $unavariable son variables distintas:
$Unavariable = "Hola"; //Con 'U' mayscula $unavariable = "Adis"; //Con 'u' minscula echo "El contenido de Unavariable es: ", $Unavariable, "<BR>"; echo "El contenido de unavariable es: ", $unavariable, "<BR>"; $Edad = 30; //De tipo entero echo "La edad es: ", $Edad, "<BR>"; $Edad = 25; //De tipo entero echo "La edad es: ", $Edad, "<BR>"; ?>

<?php

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

60

3.2.2. Tipos de datos


PHP soporta los siguientes tipos: Entero Nmeros en punto flotante Booleano Cadena Array Objeto El tipo de una variable normalmente no lo indica el programador; en su lugar, lo decide PHP en tiempo de ejecucin, dependiendo del contexto en el que se utilice esa variable. Si se quisiese obligar a que una variable se convierta a un tipo concreto, se podra forzar la variable o usar la funcin settype() para ello. Para ms informacin, vea la seccin Conversin de Tipos.

3.2.2.1. Enteros
Las variables de tipo entero pueden contener nmeros enteros que varan entre un rango de -2 billones y +2 billones y se pueden representar en formato decimal, octal o hexadecimal. Los enteros se pueden especificar usando una de las siguientes sintaxis:
$Entero1 = 1234; # nmero decimal $Entero2 = -123; # un nmero negativo $Entero3 = 0123; # nmero octal (equivalente al 83 decimal) $Entero4 = 0x12; # nmero hexadecimal (equivalente al 18 decimal)

La funcin echo muestra por defecto siempre la informacin en decimal, a pesar de que internamente sta se haya almacenado en la variable con un formato distinto.
<?php $NumeroHexa = 0xA; //En base decimal es un 10 $OtroHexa = 0xE; //En base decimal es un 14 $ResHexa = $NumeroHexa + $OtroHexa; echo "<BR>La suma de \$NumeroHexa + \$OtroHexa es $NumeroHexa + $OtroHexa = $ResHexa\n" ; $NumeroOctal=011; //En base decimal es un 9: 1*8+1 echo "<BR>El nmero octal es: $NumeroOctal\n"; ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

61

3.2.2.2. Nmeros en punto flotante


Los nmeros en punto flotante ("double") se pueden especificar utilizando la forma decimal o en forma de exponente:
<?php $Flotante1 = 1.234; $Flotante2 = 1.2e3; ?>

Conviene destacar que PHP define estos nmeros como double, pero que dispone de sinnimos, que son real y float.

3.2.2.3. Booleano
Una variable de este tipo es aquella que nicamente admite dos posibles valores: True o False (en minsculas o maysculas, estos valores son aceptados en cualquier combinacin, debido a que son constantes predefinidas). Significa, respectivamente, cierto y falso y normalmente estas variables almacenan el resultado de evaluar expresiones lgicas. Expresiones de este tipo pueden ser:
<?php $VarBool = True; echo "El valor de la variable es $VarBool <BR>"; $VarBool = (4 - 2 == 3 + 6); //Al ser falsa la expresin se almacena false en $VarBool ?>

Por ltimo, hay que mencionar que PHP trata el valor True como un valor distinto de cero y el valor False como cero.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

62

3.2.2.4. Cadenas
Las cadenas de caracteres se pueden especificar usando uno de dos tipos de delimitadores. Si la cadena est encerrada entre dobles comillas (), las variables que estn dentro de la cadena sern expandidas (sujetas a ciertas limitaciones de interpretacin). Como en C y en Perl, el carcter de barra invertida ("\") se puede usar para especificar caracteres especiales: Caracteres protegidos Secuencia
\b \f \n \r \t \\ \$ \" \[0-7]{1,3} \x[0-9A-Fa-f]{1,2} Espacio hacia atrs. Cambio de pgina. Nueva lnea. Retorno de carro. Tabulacin horizontal. Barra invertida. Signo del pesos. Comillas dobles. La secuencia de caracteres que coincida con la expresin regular es un carcter en notacin octal. La secuencia de caracteres que coincida con la expresin regular es un carcter en notacin hexadecimal.

Significado

La segunda forma de delimitar una cadena de caracteres usa el carcter de comilla simple ( ). Las variables no sern evaluadas dentro de una cadena entre comillas simples ni tampoco los caracteres protegidos, simplemente se mostrarn. Siempre se debe utilizar el mismo tipo de comilla para rodear cada cadena. Los siguientes son ejemplos de cadenas: Cadenas Saludos Saludos Incluye dobles comillas Incluye \dobles\ comillas En algunos casos se puede entremezclar el uso de los dos tipos de entrecomillado como ocurre en el penltimo ejemplo. Incluye dobles comillas
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

63 Y el ltimo ejemplo Incluye \dobles\ comillas Hace uso del carcter \ para poder introducir comillas dobles dentro de un texto entrecomillado con comillas dobles. Veamos un ejemplo:
<?php $lenguaje="PHP"; $ver="v6"; echo "<B>Estamos \"trabajando\" con $lenguaje ($ver) </B><BR><BR>"; echo 'La variable $lenguaje contiene: '; echo $lenguaje; echo "<BR>La variable \$ver contiene: $ver"; ?>

Las cadenas se pueden concatenar usando el operador . (punto). Ntese que el operador + (suma) no sirve para esto. $CadenaResultante = Cadena Uno . Cadena Dos El resultado es una sola cadena de caracteres Cadena Uno Cadena Dos contenida en la variable $CadenaResultante.

3.2.2.5. Arrays
Los arrays o matrices son estructuras que permiten el almacenamiento de un conjunto de datos identificados por un ndice bajo un mismo nombre. Se puede construir tantos ndices como se quiera, aunque el uso habitual de los arrays es en forma de matriz unidimensional. La longitud del array se modifica de forma dinmica siempre que le aadimos un nuevo elemento. Los arrays multidimensionales se vern en un captulo posterior. En el caso de PHP, los arrays pueden estar compuestos de elementos de diferente naturaleza (tipo diferente de dato) y su primer ndice o posicin es la 0. Existen arrays especiales denominados asociativos en los que el ndice es un valor de tipo string. La siguiente imagen nos muestra dos posibles estructuras de arrays como un conjunto de elementos, cada uno de los cuales tiene asociada una posicin o una clave: Array con ndice numrico
Cugar Ford 2.500 V6 182

Array con ndice string (Asociativo)

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

64

Cugar Modelo

Ford Marca Fecha

2.500 CC

V6 Motor

182 Potencia

Podemos observar que en ambos arrays los ndices son de diferente naturaleza y que pueden existir posiciones o claves sin contenido asociado. Para manejar el array de forma global, utilizamos el nombre asignado a la variable que lo contiene y, para manejar cada uno de sus elementos, tendremos que hacer referencia a su posicin o clave dentro del conjunto global. Con los conocimientos adquiridos en el manejo de Dreamweaver, puede crear en modo de diseo la siguiente tabla.

Al inicio del cuerpo del programa cree las matrices siguientes:


<?php $matriz1[0]="cougar"; $matriz1[1]="ford"; $matriz1[2]=""; $matriz1[3]="2.500"; $matriz1[4]="V6"; $matriz1[]=182;

// la tercera posicin del array esta vaca // por eso le asignamos una cadena sin contenido

// para aadir el ltimo elemento a una matriz // no es necesario poner el nmero de ndice // creamos la matriz asociativa $matriz2['modelo']="cougar"; $matriz2['marca']="ford"; $matriz2['fecha']=null; // para marca una posicin sin contenido use <null> $matriz2['cc']="2.500"; $matriz2['motor']="V6"; $matriz2['potencia']=182; ?>

Habiendo realizado esto, incruste despus del cdigo referente a la lnea de matriz1 <TD BGCOLOR="yellow">matriz1</TD> o en su caso reemplace las lneas que contengan la siguiente instruccin <td>&nbsp;</td> con el cdigo siguiente:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

65
<?php echo "<TD> $matriz1[0] </TD>"; echo "<TD> $matriz1[1] </TD>"; echo "<TD> $matriz1[2] </TD>"; echo "<TD> $matriz1[3] </TD>"; echo "<TD> $matriz1[4] </TD>"; echo "<TD> $matriz1[5] </TD>"; ?>

y del cdigo referente a la lnea de matriz2 lo siguiente


<?php echo "<TD>". $matriz2['modelo'] ."</TD>"; echo "<TD>". $matriz2['marca'] ."</TD>"; echo "<TD>". $matriz2['fecha'] ."</TD>"; echo "<TD>". $matriz2['cc'] ."</TD>"; echo "<TD>". $matriz2['motor'] ."</TD>"; echo "<TD>". $matriz2['potencia'] ."</TD>"; ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

66

3.2.2.6. Conversin de tipos


Dentro del lenguaje de algunos programadores existe la palabra Type Juggling, que quiere decir, que si se asigna un valor de cadena a la variable $Var, $Var se convierte en una cadena. Si despus se asigna un valor entero a la variable $Var, se convierte en una variable entera.
$Var = "0"; $Var++; $Var += 1; $Var = $Var + 1.3; $Var = 5 + "10 Creditos"; $Var = 5 + "10 Creditos"; // $Var es una cadena (ASCII 48) // $Var es la cadena "1" (ASCII 49) // $Var ahora es un entero (2) // $Var ahora es un doble (3.3) // $Var es entero (15) // $Var es entero (15)

Para explicar los dos ltimos ejemplos veremos el siguiente. En el ejemplo se suma primeramente una cadena que contiene dos caracteres numricos (10) con una variable $UnNumero, que contiene el valor 25 (un entero). El intrprete detecta que se desea realizar una suma y provoca la conversin de la cadena 25 al valor entero adecuado. A continuacin, se realiza otra suma entre dos cadenas: una con contenido numrico y otra con la cadena 5cinco y, como se puede observar a continuacin, el intrprete convierte la segunda en el valor entero correspondiente (5) hasta que se encuentra con un carcter que no puede convertir (la c):
<?php $UnaCadena = "10"; $OtraCadena = "5cinco"; $UnNumero = 25; $Resultado = $UnaCadena + $UnNumero; echo "Cadena 'sumada' con nmero: $Resultado <BR>\n"; $Resultado = $UnaCadena + $OtraCadena; echo "Cadenas 'sumadas': $Resultado <BR>\n"; ?>

Hay que destacar que una cadena que no contenga caracteres numricos es evaluada como un valor cero a efecto de operar aritmticamente con ella. En PHP se dispone de una serie de sencillas funciones que permiten obtener, comprobar y cambiar los tipos de las variables. La funcin gettype() recibe como parmetro una variable y devuelve una cadena de caracteres que indica su tipo (integer, string, boolean, array, object).
<?php $UnaCadena = "65"; $UnNumero = 25; $Res = settype($UnaCadena, 'integer'); echo "Conversin de cadena a nmero: ", gettype($UnaCadena); echo "<BR>\n"; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

67
$Res = settype($UnNumero, 'string'); echo "Conversin de nmero a cadena: ", gettype($UnNumero), "\n"; ?>

Por otra parte, est la funcin settype(), que recibiendo de parmetros un identificador de variable y una cadena de caracteres, fuerza el cambio de tipo de la variable al indicado por dicha cadena. Dicho de otra manera, este es el famoso Casting, donde se escribe entre parntesis el tipo de dato desead, antes de la variable que se pretende convertir.
$Cadena = 3.1416 es el valor de Pi; $aux = (integer)$Cadena; $aux = (double)$Cadena; //Cadena es igual a 3(entero) //Cadena es igual a 3.1416(punto flotante)

Los forzados de tipo permitidos son los siguientes: (int), (integer) (real), (double), (float) (string) (array) (object)
<?php $UnNumero = 3; $OtroNumero = (int)($UnNumero / 2); echo "El otro nmero es $OtroNumero<BR>\n"; $UnArray = (array)$UnNumero; echo "El primer elemento del array es ", $UnArray[0], "<BR>\n"; $UnObjeto = (object)$UnNumero; echo "El atributo escalar del objeto es ", $UnObjeto->scalar; ?>

fuerza a entero (integer) fuerza a doble (double) fuerza a cadena (string) fuerza a array (array) fuerza a objeto (object)

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

68

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

69

3.2.3. Otros componentes asociados a las variables


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 la variable1 a una variable2, los cambios que se efecten en la variable1 no afectarn a la variable2. PHP4 ofrece otra forma de asignar valores a las variables: asignar por referencia. Esto significa que la nueva variable simplemente referencia (en otras palabras, "se convierte en un alias de" o "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. De cualquier forma, cualquier incremento de velocidad se notar slo en los bucles crticos cuando se asignen grandes arrays u objetos. Para asignar por referencia, simplemente se antepone un ampersand (&) al comienzo de la variable cuyo valor se est asignando (la variable fuente). Por ejemplo, el siguiente trozo de cdigo produce la salida 'Soy variable por Referencia' dos veces:
<?php $var1 = 'Referencia'; $var2 = &$var1; $var2 = "Soy variable por $var2"; echo $var1; echo $var2; ?> // Asigna el valor 'Referencia' a $var1 // Referencia $var1 va $var2 // Modifica $var2 // $var1 tambin se modifica.

Algo importante a tener en cuenta es que slo las variables con nombre pueden ser asignadas por referencia.
<?php $var1 = 25; $var2 = &$var1; // Esta es una asignacin vlida. $var2 = &(24 * 7); // Invlida; referencia una expresin sin nombre. ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

70

3.2.3.1. Variables predefinidas de Apache


PHP ofrece una gran cantidad de variables predefinidas a cualquier script que se ejecute en su sistema. Estas variables guardan informacin relativa del entorno de ejecucin del intrprete y del propio PHP. De todas formas, muchas de esas variables no pueden estar completamente documentadas ya que dependen de sobre qu servidor se est ejecutando, la versin y configuracin de dicho servidor, y otros factores. La siguiente tabla muestra las variables de entorno ms utilizadas. Para ver una lista de todas las variables predefinidas disponibles en una instalacin por defecto de PHP corriendo como mdulo de un Apache se puede usar la funcin phpinfo(): Variable
SERVER_NAME SERVER_PORT SERVER_SOFTWARE REMOTE_PORT REMOTE_ADDR DOCUMENT_ROOT http_REFERER

Significado
Indica el nombre del equipo servidor sobre el que se ejecuta el script. Indica el puerto del equipo servidor que usa el servidor Web para la comunicacin. Indica que software esta siendo utilizado en el equipo servidor. Contiene el puerto que utiliza el peticionario para comunicarse con el servidor Web. Contiene la direccin remota desde la que se realiza la peticin. Indica el directorio raz del documento bajo el que se ejecuta el script. Contiene la direccin de la pgina (en caso de haberla) desde la que el navegador salt a la pgina actual.

La variable global $_SERVER es un array asociativo que contiene, entre otras, toda la informacin de las cabeceras tanto de peticin como de respuesta.
<?php echo "Nombre del servidor: <B>$_SERVER[SERVER_NAME]</B><BR>\n"; echo "Puerto local: <B>$_SERVER[SERVER_PORT]</B><BR>\n"; echo "Software: <B>$_SERVER[SERVER_SOFTWARE]</B><BR>\n"; echo "Puerto remoto: <B>$_SERVER[REMOTE_PORT]</B><BR>\n"; echo "Direccin de conexin: <B>$_SERVER[REMOTE_ADDR]</B><BR>\n"; echo "Directorio raz: <B>$_SERVER[DOCUMENT_ROOT]</B><BR>\n"; echo "Nombre del script: <B>$_SERVER[PHP_SELF]</B><BR>\n"; ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

71

3.2.3.2. Variables predefinidas de PHP


La siguiente tabla muestra algunas de las variables que PHP ofrece al programador para facilitar su tarea: Variable Significado
Array de argumentos pasados al script. Cuando el script se ejecuta desde la lnea de comandos, esto da un acceso, al estilo de C, a los parmetros pasados en lnea de comandos. Cuando se le llama mediante el mtodo GET, contendr la cadena de la peticin. Requiere que est activada la directiva register_argc_argv en el archivo de inicializacin. Contiene el nmero de parmetros de la lnea de comandos pasados al script (si se ejecuta desde la lnea de comandos). Requiere que est activada la directiva register_argc_argv El nombre del archivo que contiene el script que se esta ejecutando, relativo al directorio raz de los documentos. Si PHP se est ejecutando como intrprete de lnea de comandos, esta variable no est disponible. Un array asociativo de variables (clave, valor) pasadas al script actual mediante cookies HTTP. Slo est disponible si el seguimiento de variables ha sido activado mediante la directiva de configuracin track_vars o la directiva<?php_track_vars?>. Un array asociativo de variables (clave, valor) pasadas al script actual mediante el mtodo HTTP GET. Slo est disponible si --variable tracking-- ha sido activado mediante la directiva de configuracin track_vars o la directiva <?php_track_vars?>. Un array asociativo de variables (clave, valor) pasadas al script actual mediante el mtodo HTTP POST. Slo est disponible si variable trackingha sido activado mediante la directiva de configuracin track_vars o la directiva <?php_track_vars?>. Array asociativo que contiene informacin de los archivos recibidos usando el mtodo POST. Array asociativo de pares (clave, valor) del entorno. Array asociativo de pares (clave, valor) del servidor Array asociativo de pares (clave, valor) de sesin

argv

argc

PHP_SELF

_COOKIE

_GET

_POST

_POST_FILES _ENV_VARS _SERVER_VARS _SESSION_VARS

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

72

3.2.3.3. mbito de las variables


El mbito de una variable es el contexto dentro del que la variable est definida. Cualquier variable que se use dentro de una funcin est, por defecto, limitada al mbito local de la funcin. Por ejemplo:
<?php $cadena1 = "Uno "; // mbito global function Escribe(){ echo "Escribe = $cadena1 <br>\n"; // Referencia de mbito local } Escribe(); ?>

Este script no producir salida, ya que la orden echo utiliza una versin local de la variable $cadena1, a la que no se ha asignado ningn valor en su mbito. 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 $cadena1 = "Uno "; // mbito global function Escribe1(){ global $cadena1; echo "Escribe1 = $cadena1 <br>\n"; } Escribe1(); ?>

El script anterior producir la salida "Uno". Al declarar $cadena1 como global dentro de la funcin, todas las referencias a tal variable 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 el array $GLOBALS propio de PHP3. El ejemplo anterior se puede reescribir as:
<?php $cadena1 = "Uno "; // mbito global function Escribe3(){ echo "Escribe3 = "; echo $GLOBALS["cadena1"], "<BR>\n"; } Escribe3(); ?>

El array $GLOBALS es un array asociativo con el nombre de la variable global como clave y los contenidos de dicha variable como el valor del elemento del array.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

73

Otra carcterstica 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(){ $Var = 0; echo $Var; $Var++; } Test(); ?>

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

Ahora, cada vez que se llame a la funcin Test(), se representar el valor de $Var 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
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

74 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 (); } } Test(); ?>

3.2.3.4. Variables de variables


PHP tiene la posibilidad de incorporar variables especiales cuyos contenidos son nombre de otras variables. Esto resulta muy til cuando, durante la ejecucin de un determinado programa, existen instrucciones en las que se usen distintos juegos de variables o se quiera generar cdigo dinmicamente. Una variable normal se establece con una sentencia como:
<?php $Var = "Hola"; ?>

Una variable de variable toma el valor de una variable y lo trata como el nombre de una variable. En el ejemplo anterior, Hola, se puede usar como el nombre de otra variable utilizando dos signos de pesos ($$).
<?php $$Var = "Mundo"; ?>

En este momento se han definido y almacenado dos variables en el rbol de smbolos de PHP: $Var, que contiene "Hola", y $Hola que contiene "Mundo". Es ms, la sentencia:
<?php echo "$Var ${$Var}"; ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

75

produce el mismo resultado que:


<?php echo "$Var $Hola"; ?>

Ambas producen el resultado Hola Mundo: Para usar variables de variables con matrices, hay que resolver un problema de ambigedad. Si se escribe $$Var[1] el intrprete necesita saber si nos referimos a utilizar $Var[1] como una variable, o si se pretenda utilizar $$Var como variable y el ndice [1] como ndice de dicha variable. La sintaxis para resolver esta ambigedad es: En $Var[1] como una variable En $$Var como variable y el ndice [1] ${$Var[1]} ${$Var}[1]

3.2.3.5. Variables de Formulario


En PHP se puede tener acceso directo a los valores introducidos por un usuario en los campos de un formulario de una pgina Web. Lo que el programador obtiene es un conjunto de variables cuyos nombres se corresponden con los definidos en el formulario para los distintos campos. <input name="user" type="text" id="user" size="20"> En este caso el atributo NAME contiene la futura variable llamada $user. Para hacerlo ms claro veremos el siguiente ejemplo. formularios.php contiene un formulario que solicita los datos de Usuario y Password, y a travs de la ejecucin de un botn submit, provoca la ejecucin de dicho formulario llamndose a si mismo. Al presionar el botn guarda en la variable $user el valor que se teclee en la caja de texto 1 (la cadena aceptada es Usuario1) y en la variable $psw el valor que contenga la siguiente caja (la cadena aceptada es nuevo)
<body> <?php if(!$_POST) { ?> <center><h1>Teclea tu Nombre de Usuario<br>y tu Contrasea</h1></center> I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

76
<table width="800" border="0" align="center" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <tr> <td width="192" height="92">&nbsp;</td> <td width="147">&nbsp;</td> <td width="204">&nbsp;</td> <td width="257">&nbsp;</td> </tr> <tr> <td height="106"></td> <td rowspan="2" valign="top"><div align="right">USUARIO : <br> <br> PASSWORD : <br> <br> </div></td> <td valign="top"><form action="" method="post" enctype="application/x-www-form-urlencoded" name="form1"> <input name="user" type="text" id="user" size="20"> <br> <br> <input name="psw" type="password" id="psw"> <br> <br> <input type="submit" name="Submit" value="Enviar"> <br> </form></td> <td></td> </tr> <tr> <td height="13"></td> <td></td> <td></td> </tr> <tr> <td height="398">&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> </table> <?php } else { if(($_POST['user'] == 'Usuario1') && ($_POST['psw'] == 'nuevo')) { echo "<center> Bienvenido $_POST[user] "; echo "<br><hr>"; foreach($_POST as $clave => $valor) echo "<i>$clave</I> = $valor <br>"; echo "</center>"; } else { echo "<center><h1>Acceso denegado nombre o contrasea Valido<br> en la base de datos</center></h1>"; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

77
echo "<pre><br><h2><a href='javascript:history.go (-1)'>Volver<h2></a></h2></pre>"; } } ?> </body>

Donde tiene la siguiente estructura.

Como se puede observar, el programa escribe el cdigo HTML para generar la tabla, y cada vez que necesita un dato de los que ha introducido el usuario, efecta una llamada al intrprete solicitando la escritura del contenido de la variable cuyo nombre es el mismo que el del campo del formulario (echo $user para el contenido del campo user). Y se genera el siguiente resultado:

Cuando se enva un formulario, tambin es posible usar una imagen en vez del botn submit estndar con una etiqueta como: <input type=image src="image.gif" name="sub">
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

78

Cuando el usuario hace click en cualquier parte de la imagen, el formulario que la acompaa se transmitir al servidor con dos variables adicionales, sub_x y sub_y. Estas contienen las coordenadas del click del usuario dentro de la imagen. Los ms experimentados pueden notar que los nombres de variable enviados por el navegador contienen un guin en vez de un subrayado (guin bajo), pero PHP convierte el guin en subrayado automticamente.

3.2.3.6. Funciones para variables


PHP proporciona un conjunto de funciones de gran utilidad al tratar con variables. Funcin
gettype (variable)

Descripcin
Devuelve el tipo de dato pasado como parmetro, pudiendo devolver como valor: integer, float, string, array, class, object y unknown type. Establece el tipo de dato a guardar en una variable. Tiene dos argumentos: el nombre de la variable y el tipo que se quiere establecer. Con esta funcin podemos realizar conversiones de un tipo de datos a otro. Devolver true si ha tenido xito; en caso contrario devolver false. Indica si una variable ha sido inicializada con un valor, en cuyo caso devuelve true y, en caso contrario devuelve false. Destruye una variable liberando los recursos dedicados a dicha variable. Es necesario indicar como parmetro el nombre de la variable a destruir. Devuelve valor true si la variable an no ha sido inicializada, o bien, tiene un valor igual a 0 o es una cadena vaca y, en caso contrario devuelve false.

settype (variable, tipo)

isset (variable)

unset (variable)

empty (variable)

Ejemplo:
<?php echo '$cadena '; echo (isset($cadena))?'est ':'no est '; echo "inicializada<BR>"; echo (empty($cadena))?'$cadena est vaca':$cadena; echo "<BR><BR>"; $cadena=""; echo '$cadena '; echo (isset($cadena))?'est ':'no est '; echo "inicializada<BR>"; echo (empty($cadena))?'$cadena est vaca':$cadena; echo "<BR><BR>"; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

79
$cadena="3.1416 es el valor de PI"; echo '$cadena '; echo (isset($cadena))?'est ':'no est'; echo "inicializada<BR>"; echo (empty($cadena))?'cadena est vaca':$cadena; echo "<BR><BR>"; unset($cadena); echo '$cadena '; echo (isset($cadena))?'est ':'no est'; echo "inicializada<BR>"; echo (empty($cadena))?'cadena est vaca':$cadena; ?>

El resultado de visualizar el ejemplo anterior se muestra en la siguiente imagen:

Dado que PHP determina los tipos de las variables y los convierte (generalmente) segn necesita, no siempre resulta obvio de qu tipo es una variable dada en un momento concreto. PHP incluye varias funciones que descubren de qu tipo es una variable y son las siguientes.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

80

Funcin
is_int (variable) is_integer (variable) is_long (variable) is_float (variable) is_real (variable) is_double (variable)

Descripcin
Devuelven true si la variable pasada como argumento es de tipo integer; en caso contrario devuelven false.

Devuelven true si la variable pasada como argumento es de tipo float; en caso contrario devuelven false.

is_numeric (variable)

Devuelve true si la variable pasada como argumento es un nmero o una cadena numrica; en caso contrario devuelven false. Devuelve true si la variable pasada como argumento es de tipo lgico; en caso contrario devuelven false. Devuelve true si la variable pasada como argumento es de tipo array; en caso contrario devuelven false. Devuelve true si la variable pasada como argumento es de tipo string; en caso contrario devuelven false. Devuelve true si la variable pasada como argumento es de tipo object; en caso contrario devuelven false.

is_bool (variable)

is_array (variable)

is_string (variable) is_object (variable)

Ejemplo:
<?php $cadena="Hola a todos"; echo 'La variable $cadena contiene <B>'.$cadena.'</B><BR><BR>'; echo 'La variable $cadena '; echo (is_integer($cadena))?'es ':'no es '; echo 'de tipo entero <BR>'; echo 'La variable $cadena '; echo (is_float($cadena))?'es ':'no es '; echo 'de tipo real <BR>'; echo 'La variable $cadena '; echo (is_string($cadena))?'es ':'no es '; echo 'una cadena de caractes <BR>'; ?>

El resultado se muestra en la siguiente ventana:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

81

intval (variable, base), floatval (variable), strval (variable): estas funciones sirven para realizar conversiones de tipos (casting), de modo que convierten a integer, float o string, respectivamente, el valor de la variable que se le pasa como parmetro. Estas funciones no pueden utilizarse para convertir arrays u objetos. En particular la funcin intval () puede recibir adems un segundo parmetro que representa la base a utilizar en la conversin (10-decimal, 8-octal y 16hexadecimal), tomando por defecto la base 10 de los nmeros decimales. Ejemplo:
<?php $cadena=" 38E6"; echo "El valor de \$cadena es: <b> $cadena </b><br><br>"; $aux=intval($cadena); echo "El resultado de convertirla en entero es: $aux <br>"; $aux=intval($cadena,8); echo "El resultado de convertirla en entero octal es: $aux <br>"; $aux=intval($cadena,16); echo "El resultado de convertirla en entero hexadecimal es: $aux <br>"; $aux=floatval($cadena); echo "El resultado de convertirla en float es: $aux <br>"; $aux=strval($cadena); echo "El resultado ede convertirla en cadena es: $aux <br>"; ?>

El resultado se muestra en la siguiente ventana:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

82

3.2.4. 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. Es sensible a maysculas Por convencin, los identificadores de constantes suelen declararse en maysculas. El nombre de una constante sigue las mismas reglas que una variable en PHP solo que no se necesita anteponer el carcter de pesos ($). El alcance de una constante es global. Solo se puede definir como constantes valores escalares (boolean, integer, float y string ). Una vez definida, no puede ser modificada ni eliminada.

Se puede definir una constante usando la funcin define(constante, valor)


<?php define(PI, 3.1416); echo El valor de PI es , PI; ?>

Para obtener el valor de una constante solo es necesario especificar su nombre. En el caso de que queramos expresarla de forma dinmica se utiliza la funcin: constant(constante) Para comprobar la existencia de una constante se usa la funcin: defined(constante)

3.2.4.1. Constantes predefinidas de PHP


PHP ofrece un largo nmero de constantes predefinidas a cualquier script en ejecucin. Muchas de estas constantes, sin embargo, son creadas por diferentes extensiones, y solo estarn presentes si dichas extensiones estn disponibles, bien por carga dinmica o porque has sido compiladas. Para obtener todas las constantes predefinidas se usa la funcin get_defined_constants(). Algunas de estas constantes son:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

83

Constante __FILE__ __LINE__ PHP_VERSION PHP_OS TRUE FALSE E_ERROR

Descripcin Nombre del archivo de comandos o archivo que est siendo interpretado. Nmero de lnea dentro del archivo que est siendo interpretado. Cadena que representa la versin del intrprete. Cadena con el nombre del sistema operativo en el que se esta ejecutando el intrprete de PHP. Verdadero. Falso Informacin sobre errores distintos a los de interpretacin del cual no es posible recuperarse. Informa que el intrprete encontr una sintaxis invlida en el archivo de comandos. Finaliza la ejecucin. Informa que se produjo algo incorrecto que puede provenir o no de un error. La ejecucin contina. Denota un error que no impide la ejecucin. Conjunto con todos los errores que se han producido.

E_PARSE

E_NOTICE E_WARNING E_ALL

Las constantes __FILE__ y __LINE__ son muy tiles en la programacin, puesto que se puede generar un programa que ante un error nos indique en qu archivo y lnea se ha producido.
<?php echo "Ejecuto la versin de PHP: ",PHP_VERSION,"<BR>\n"; echo "El sistema operativo es: ",PHP_OS,"<BR>\n"; echo "Estoy en el archivo <B>",__FILE__," lnea ",__LINE__,"</B>"; ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

84

3.2.5. Expresiones
Se denomina as a cualquier combinacin de constantes, variables, operadores y funciones sintcticas y semnticamente correctas. Las expresiones, al ser evaluadas por PHP, producen valores que pueden ser empleados en la programacin de un script. Hay muchos tipos de expresiones y todas ellas pueden ser evaluadas. As, un valor concreto, sea un entero, una cadena de caracteres u otro tipo, ser una expresin, ya que al ser evaluado dar como resultado su propio valor. Tambin una asignacin es una expresin, ya que sta produce siempre como resultado de la evaluacin el valor que ha sido asignado. La expresin: $MiVar = 5: produce como resultado de la evaluacin el valor 5. Un tipo muy comn de expresiones son las de comparacin, que dan como resultado los valores lgicos TRUE y FALSE, dependiendo de si la comparacin, al ser evaluada, resulta ser cierta o falsa. Una expresin de esta clase sera: 5 + 3 == 6 +1 // que, evidentemente es falsa. Y el resultado de su evaluacin puede ser asignado a una variable: $MiVar = 5 + 3 == 6 +1; // equivale a $MiVar = false Por ltimo, hay que destacar que al evaluar una variable numrica, si sta contiene cualquier valor distinto de cero, el resultado ser TRUE, mientras que si dicho valor es cero, el resultado ser FALSE. Evaluar una cadena vaca genera como resultado FALSE, y cualquier otra cadena, TRUE.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

85

3.2.6. Operadores 3.2.6.1. Operadores Aritmticos


Los diferentes tipos de operadores de que dispone PHP son: Operador + * / % Ejemplo:
<?php $Num1 = 11; $Num2 = 3; $Cociente = (int)($Num1 / $Num2); $Resto = $Num1 % $Num2; echo "El cociente de $Num1 entre $Num2 es <B>$Cociente</B><BR>\n"; echo "El resto de $Num1 entre $Num2 es <B>$Resto</B><BR>\n"; ?>

Ejemplo 3+5 7-4 2*3 24 / 8 7%2

Descripcin Suma entre dos nmeros. Diferencia entre dos nmeros Multiplicacin entre dos nmeros Cociente entre dos nmeros Mdulo, resto de la divisin entera entre dos nmeros

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

86

3.2.6.2. Operadores de Asignacin


El operador bsico de asignacin es "=". A primera vista podras pensar que es el operador de comparacin "igual que". Pero no. Realmente significa que el operando de la izquierda toma el valor de la expresin a la derecha, (esto es, "toma el valor de"). Variable = expresin El valor de una expresin de asignacin es el propio valor asignado. Esto es, el valor de "$Var = 3" es 3. Esto permite hacer cosas curiosas como $Var = ($b = 4) + 5; // ahora $a es igual a 9, y $b vale 4. Adems del operador bsico de asignacin, existen los "operadores combinados" para todas las operaciones aritmticas y de cadenas que sean binarias. Este operador combinado te permite, de una sola vez, usar una variable en una expresin y luego establecer el valor de esa variable al resultado de la expresin.
Operador = += -= *= /= %= .= Ejemplo $Var = 7 $A += 5 $A -= 5 $A *= 5 $A /= 5 $A %= 5 $B .= Cadena Descripcin Asignacin de un valor a una variable Equivale a $A = $A + 5 Equivale a $A = $A 5 Equivale a $A = $A * 5 Equivale a $A = $A / 5 Equivale a $A = $A % 5 Equivale a $B = $B . Cadena (Concatenacin)

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

87

3.2.6.3. Operadores de Comparacin


Los operadores de comparacin, como su nombre indica, permiten comparar dos valores. Tabla de Operadores de Comparacin
Ejemplo $A == $B $A === $B $A != $B $A !== $B $A < $B $A > $B $A <= $B Nombre Igualdad Identidad Desigualdad No identidad Menor que Mayor que Menor o igual que Resultado True si $A es igual a $B. True si $A es igual a $B y si son del mismo tipo (slo PHP4) True si $A y $B son diferentes. True si $A y $B no son idnticos. True si $A es estrictamente menor que $B. True si $A es estrictamente mayor que $B. True si $A es menor o igual que $B.

Otro operador condicional es el operador "?:" (o ternario), que funciona como en C y otros muchos lenguajes. (expr1) ? (expr2) : (expr3); La expresin toma el valor expr2 si expr1 se evala a cierto, y expr3 si expr1 se evala a falso.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

88

3.2.6.4. Operadores de incremento/decremento


Operador ++ Ejemplo ++ $Var $Var ++ --- $Var $Var -Descripcin Preincremento Postincremento Predecremento Postdecremento

La utilizacin de los operadores de incremento o decremento implica la suma o resta de una unidad sobre el nmero que se aplique.

Estos operadores tienen una carcterstica propia que se refiere al momento en que se realiza el incremento o decremento del valor. Esta propiedad vara segn se escriba el operador como prefijo o sufijo de la variable sobre la que se aplica.
<?php $UnNumero = 10; $OtroNumero = 10; $UnaVar = ++$UnNumero; echo "UnaVar es $UnaVar<BR>\n"; echo "UnNumero es ahora $UnNumero<BR>\n"; $OtraVar = $OtroNumero++; echo "OtraVar es $OtraVar<BR>\n"; echo "OtroNumero es $OtroNumero<BR>\n"; ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

89 En el caso de que an no quede claro los incrementos y decrementos, aqu est este otro ejemplo:
<?php echo "<h3>Postincremento</h3>"; $a = 5; echo "Debera ser 5: " . $a++ . "<br>\n"; echo "Debera ser 6: " . $a . "<br>\n"; echo "<h3>Preincremento</h3>"; $a = 5; echo "Debera ser 6: " . ++$a . "<br>\n"; echo "Debera ser 6: " . $a . "<br>\n"; echo "<h3>Postdecremento</h3>"; $a = 5; echo "Debera ser 5: " . $a-- . "<br>\n"; echo "Debera ser 4: " . $a . "<br>\n"; echo "<h3>Predecremento</h3>"; $a = 5; echo "Debera ser 4: " . --$a . "<br>\n"; echo "Debera ser 4: " . $a . "<br>\n"; ?>

3.2.6.5. Operadores Lgicos


Tabla de Operadores Lgicos Ejemplo
$A and $B $A or $B $A xor $B ! $A $A && $B $A || $B

Nombre
Y O O exclusiva Negacin Y O

Resultado
True si tanto $A como $B son ciertos. True si $A o $B son ciertos. True si $A es cierto o $B es cierto, pero no ambos a la vez. True si $A no es cierto. True si tanto $A como $B son ciertos. True si $A o $B son ciertos.

La razn de las dos variaciones de "Y" y "O" es que operan con distinta precedencia. (Ver precedencia de operadores)

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

90

3.2.6.6. Otros Operadores


Operador . ` Ejemplo $A . $B `dir>mifich.txt` Descripcin Concatena las cadenas de $A y $B. Ejecuta desde el SO el comando que haya entre los acentos graves.

3.2.6.7. Precedencia de Operadores


La precedencia de operadores especifica cmo se agrupan las expresiones. Por ejemplo, en la expresin 1 + 5 * 3, la respuesta es 16 y no 18 porque el operador de multiplicacin ("*") tiene una mayor precedencia que el de adicin ("+"). La siguiente tabla lista la precedencia de operadores, indicndose primero los de mayor precedencia. Tabla de Precedencia de Operadores
Operador ! ~ ++ -- (casting) / * % + - . << >> < <= > >= == != === !== & ^ | && || ?: = += -= *= /= .= %= &= ^= ~= <<= >>= or, xor, and

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

91

3.3. ESTRUCTURAS DE CONTROL 3.3.1 if


La construccin if es una de las ms importantes caractersticas de muchos lenguajes, incluido PHP. Permite la ejecucin condicional de fragmentos de cdigo. PHP carcteriza una estructura if que es similar a la de C. if (expr) sentencia Como se describe en la seccin sobre expresiones, expr se evala a su valor condicional. Si expr se evala como TRUE, PHP ejecutar la sentencia, y si se evala como FALSE - la ignorar. El siguiente ejemplo mostrara a es mayor que b si $a fuera mayor que $b:
if ($a > $b) echo "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:
if ($a > $b) { echo "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.

3.3.2. 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:
if ($a > $b) { echo "a es mayor que b"; } else { echo "a NO es mayor que b"; } I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

92 La sentencia else se ejecuta solamente si la expresin if se evala como FALSE, y si hubiera alguna expresin elseif - slo si se evaluaron tambin a FALSE.

3.3.3. 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, 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:
if ($a > $b) { echo "a es mayor que b"; } elseif ($a == $b) { echo "a es igual que b"; } else { echo "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.

3.3.4. Sintaxis Alternativa de Estructuras de Control


PHP ofrece una sintaxis altenativa para alguna de sus estructuras de control; a saber, if, while, for, y switch. En cada caso, la forma bsica de la sintaxis alternativa es cambiar abrir-llave por dos puntos (:) y cerrar-llave por endif;, endwhile;, endfor;, or endswitch;, respectivamente. La sintaxis alternativa se aplica a else y tambin a elseif. La siguiente es una estructura if con elseif y else en el formato alternativo:
if ($a == 5): echo "a es igual a 5"; echo "..."; elseif ($a == 6): echo "a es igual a 6"; echo "!!!"; else: echo "a no es ni 5 ni 6"; endif; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

93

3.3.5. 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:
/* ejemplo 1 */ $i = 1; while ($i <= 10) { echo $i++; /* el valor impreso sera $i antes del incremento (post-incremento) */ }

/* ejemplo 2 */ $i = 1; while ($i <= 10): echo $i; $i++; endwhile;

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

94

3.3.6 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 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 dowhile:
$i = 0; do { echo $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, encapsulandolos con do...while(0), y usando la sentencia break. El siguiente fragmento de cdigo demuestra esto:
do { if ($i < 5) { echo "i no es lo suficientemente grande"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } echo "i es correcto"; ...procesa i... } while(0);

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

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

95

3.3.7. 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 implicitamente 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:
/* ejemplo 1 */ for ($i = 1; $i <= 10; $i++) { echo $i; } /* ejemplo 2 */ for ($i = 1;;$i++) { if ($i > 10) { break; } echo $i; } /* ejemplo 3 */ $i = 1; for (;;) { if ($i > 10) { break; } echo $i; $i++; } /* ejemplo 4 */ for ($i = 1; $i <= 10; echo $i, $i++) ;

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

96 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. PHP tambin soporta la "sintaxis de dos puntos" alternativa para bucles for. for (expr1; expr2; expr3): sentencia; ...; endfor;

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

97

3.3.8 foreach
PHP4 (PHP3 no) incluye una construccin foreach, tal como perl y algunos otros lenguajes. Esto simplemente da un modo fcil de iterar sobre arrays. 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. Nota: Cuando foreach comienza su primera ejecucin, el puntero interno a la lista (array) se reinicia automticamente al primer elemento del array. Esto significa que no se necesita llamar a reset() antes de un bucle foreach. Nota: Hay que tener en cuenta que foreach con una copia de la lista (array) especificada y no la lista en si, por ello el puntero de la lista no es modificado como en la construccin each. Puede haber observado que las siguientes son funcionalidades idnticas:
reset( $arr ); while( list( , $value ) = each( $arr ) ) { echo "Valor: $value<br>\n"; } foreach( $arr as $value ) { echo "Valor: $value<br>\n"; }

Las siguientes tambin son funcionalidades idnticas:


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

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

98 Algunos ejemplos ms para demostrar su uso:


/* foreach ejemplo 1: slo valor*/ $a = array(1, 2, 3, 17); foreach($a as $v) { echo "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) { echo "\$a[$i] => $k.\n"; } /* foreach ejemplo 3: clave y valor */ $a = array( "uno" => 1, "dos" => 2, "tres" => 3, "diecisiete" => 17 ); foreach($a as $k => $v) { echo "\$a[$k] => $v.\n"; }

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

99

3.3.9. 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:
if ($i == 0) { echo "i es igual a 0"; } if ($i == 1) { echo "i es igual a 1"; } if ($i == 2) { echo "i es igual a 2"; } switch ($i) { case 0: echo "i es igual a 0"; break; case 1: echo "i es igual a 1"; break; case 2: echo "i es igual a 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 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:
switch ($i) { case 0: echo "i es igual a 0"; case 1: echo "i es igual a 1"; case 2: echo "i es igual a 2"; }

Aqu, si $i es igual a 0, PHP ejecutara todas las sentencias echo. Si $i es igual a 1, PHP ejecutara las ltimas dos sentencias echo 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
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

100 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.
switch ($i) { case 0: case 1: case 2: echo "i es menor que 3, pero no negativo"; break; case 3: echo "i es 3"; }

Un case especial es el default case. Este case coincide con todo lo que no coincidan los otros case. Por ejemplo:
switch ($i) { case 0: echo "i es igual a 0"; break; case 1: echo "i es igual a 1"; break; case 2: echo "i es igual a 2"; break; default: echo "i 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. La sintaxis alternativa para las estructuras de control est tambin soportada con switch.
switch ($i): case 0: echo "i es igual 0"; break; case 1: echo "i es igual a 1"; break; case 2: echo "i es igual a 2"; break; default: echo "i no es igual a 0, 1 o 2"; endswitch;

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

101

3.3.10. break
break escapa de la estructuras de control iterante (bucle) actuales for, while, o switch. break acepta un parmetro opcional, el cual determina cuantas estructuras de control hay que escapar.
$i = 0; while (++$i) { switch ($i) { case 5: echo "Nmero 5<br>\n"; break 1; Salir solo de switch. */ case 10: echo " Nmero 10; quitting<br>\n"; break 2; /* Salir de switch y de while. */ default: break; } }

3.3.11. 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 $i=0; while ($i < 10) { $i++; if (($i == 6)||($i == 7)||($i == 8)) continue; if ($i%2 == 0) echo "$i es par <BR>\n"; else echo "$i es impar <BR>\n"; } // del while echo "Primera instruccin despus del bucle\n"; ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

102

3.3.12. Inclusin de archivos


Las funciones que se abordaran en esta seccin se incluyen dentro de las estructuras de control del lenguaje, puesto que pueden influir en gran manera en el flujo de ejecucin e interpretacin de los scripts que las contengan.

3.3.12.1. require() y include()


Las sentencias require() y include() incluyen y evalan el archivo especificado. require() y 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 archivo no encontrado cuelgue el procesamiento de la pgina. include() no se comporta de esta manera, el script seguir funcionando de todas maneras. Asegurarse que include_path este configurado bien. Cualquier variable disponible en esa lnea en el archivo desde donde se hace la inclusin estar disponible en el archivo incluido a partir de ese momento. Ejemplo: Se tiene el siguiente script llamado include2.php:
<?php $resultado=1; for($i=1;$i<=abs($exponente);$i++){ $resultado*=$base; } if ($exponente<0){ $resultado=1/$resultado; } echo "$base<sup>$exponente</sup>"; echo "<b>$resultado<br>"; ?>

y se hace la inclusin de include2.php en include1.php


<?php $base=2; $exponente=8; include("include2.php"); ?>

El cdigo anterior produce la salida: 28 256

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

103

3.4. MANEJO DE CADENAS


Como ya vimos, una cadena se puede delimitar con comillas dobles ( ) o comillas simples( ). Otra forma de delimitar cadenas es usando la sintaxis de documento incrustado ("<<<"). Se debe proporcionar un identificador despus de <<<, despus la cadena, y despus el mismo identificador para cerrar el entrecomillado. He aqu un ejemplo de entrecomillado de cadenas con sintaxis de documento incrustado:
$str = <<<EOD Ejemplo de cadena Expandiendo mltiples lneas usando sintaxis de documento incrustado. EOD;

Nota: La sintaxis de documento incrustado fue aadida en PHP 4. Las cadenas se pueden concatenar usando el operador '.' (punto).

3.4.1. Visualizacin de cadenas


Comenzamos con las funciones que nos permiten visualizar y formatear cadenas de caracteres, permitindonos gestionar, de este modo, la salida de los datos por pantalla: echo (): Muestra informacin por la salida estndar y tiene los siguientes formatos: echo string arg1[, string argn]; echo (string arg1[, string argn]); print (): Muestra una cadena de caracteres por la salida estndar y no soporta ningn atributo de formato de salida, pero si soporta la expansin de variables. Su sintaxis es: print (string cadena); printf(): Imprime informacin por la salida estndar soportando diferentes formatos de salida. Admite mltiples tipos de argumentos a visualizar. Su sintaxis es: printf (string formato[, argumentos])
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

104 Imprime una cadena cuya estructura depende del formato descrito en el argumento formato. Esta cadena esta formada por una ristra de caracteres algunos de los cuales se mostrarn directamente, mientras que otros, los que van precedidos del carcter %, conocidos como especificaciones de conversin, son utilizados para formatear la informacin. Cada especificacin de conversin se compone de los siguientes elementos en (orden): 1. Un carcter de relleno opcional-, que se utilizar para rellenar y ajustar el resultado hasta lograr el tamao de cadena correcto, por ejemplo, el espacio en blanco para caracteres (valor por defecto) o el cero para valores numricos. 2. Un carcter de alineamiento opcional-, para indicar si el resultado debe alinearse a la izquierda (carcter -) o a la derecha (valor por defecto). 3. Un indicador de tamao -opcional-, que indica el tamao mnimo de caracteres que ocupar el argumento tras la conversin. 4. Un indicador de precisin opcional-, formado por un punto (.) seguido del nmero de dgitos decimales que debern mostrar los nmeros en punto flotante. No tiene efecto con otros tipos de datos. 5. Finalmente un identificador de tipo de datos, que especifica como se deber de tratar el dato. Los tipos disponibles son:
Smbolo % D B O X X C F E S Tipo de Dato Carcter % Decimales Binarios Octales Hexadecimales (letras minsculas) Hexadecimales (letras maysculas) Caracteres ASCII Punto flotante (signo decimal) Punto flotante (notacin exponencial) Cadenas Tratamiento Carcter % Como entero decimal Como entero binario Como entero Como entero Como entero Como carcter Como float o decimales Como float o decimales Como string

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

105 El siguiente ejemplo muestra la utilidad de esta funcin para formatear resultados en pantalla:
<html> <head> <title>trabajando con cadenas</title> </head> <body> <center> <h2>Funcin <I> printf </I></h2> <?php $euro=166.386; $anyo=2002; $mes=9; $dia=23; printf("%s--- %02d/%02d/%04d ---</b><br><br>", "<b>Convertidor de euros ", $dia, $mes, $anyo); for ($i=100; $i<1100; $i+=100) printf("%4d Ptas. -> %02.2f %s", $i, $i/$euro, " <br>"); ?> </body> </html>

Se obtiene como resultado

sprintf (formato [argumentos]): es muy parecida a printf(), pero se diferencia de esta en que devuelve una cadena de caracteres, la cual lo habitual es almacenarla en una variable. Nota: No se debe abusar del uso de estas funciones cuando no haya que aplicar un formato especfico a los datos o el formato no sea importante, porque se obtienen mejores resultados haciendo uso de la funcin echo y concatenando las cadenas con el operador ..
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

106

3.4.2. Acceso al contenido


Podemos acceder a cada uno de los caracteres que componen una cadena haciendo referencia a la posicin que ocupan dentro de ella, de igual modo a como referenciamos los diferentes componentes de una matriz o un array. Para ello, se hace indispensable conocer el tamao de la cadena a recorrer. strlen (cadena): devuelve la longitud de la cadena pasada como argumento. El siguiente ejemplo nos muestra un modo bsico de recorrer los diferentes componentes de una cadena:
<html> <head> <title>trabajando con cadenas</title> </head> <body> <center> <h2>Funcin <I> strlen </I></h2> <?php $cadena="saludos"; echo "<TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'>\n"; echo "<TR BGCOLOR='YELLOW'>\n"; echo "<TD>CARCTER</TD><TD>POSICION</TD>\n</tr>\n"; for ($i=0; $i<strlen($cadena); $i++){ echo "<Tr align='center'>"; echo "<TD>".$cadena[$i]."</TD><TD>".$i."</TD></tr>\n"; } echo "</Table>\n"; ?> </body> </html>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

107

3.4.3. Bsqueda en cadenas


Una de las operaciones ms habituales sobre las cadenas es la bsqueda de caracteres y subcadenas componentes, para su posterior tratamiento. Dentro de este tipo de funciones destacan las siguientes: strstr (cadena, cadBusq), strchr(cadena, cadBusq): busca la aparicin de una cadena dentro de otra y devuelve la subcadena comprendida entre la primera aparicin de la cadena buscada (incluyndola) hasta el final de la cadena en que se realiza la bsqueda. En caso de no encontrar la cadena devuelve una cadena vaca. La bsqueda diferencia entre maysculas y minsculas. strrchr (cadena, cadBusq): busca la aparicin de un carcter (aunque se utilice una cadena de bsqueda slo tiene en cuenta su primer carcter) en una cadena y devuelve la subcadena comprendida entre la ltima aparicin del carcter (incluido) hasta el final de la cadena en que se realiza la bsqueda. En caso de no encontrar el carcter en la cadena, se devuelve una cadena vaca. La bsqueda diferencia entre maysculas y minsculas. Si el elemento a buscar no es una cadena, se convierte a entero y se aplica como el valor ordinal de un carcter. stristr (cadena, cadBusq): el comportamiento de esta funcin es igual al de la funcin strstr(), salvo que esta no diferencia entre maysculas y minsculas.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

108

3.4.4. Comparacin de cadenas


Otra operacin comn con cadenas es compararlas para saber cul es mayor. Dentro de este tipo de funciones destacan las siguientes: strcmp (cad1, cad2): compara dos cadenas y devuelve un valor menor que cero, si la segunda cadena es mayor que la primera; mayor que cero, en caso contrario, y cero, si ambas cadenas son iguales. La comparacin distingue entre maysculas y minsculas. strcasecmp (cad1, cad2): se comporta igual que strcmp(), excepto que no diferencia maysculas de minsculas. Veamos un ejemplo con el funcionamiento de ambas funciones.
<body> <center> <h2>Funciones <I> strcmp y strcasecmp </I></h2> <?php $cad1="Atencin"; $cad2="atencin"; echo "<TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'>\n"; echo "<Tr align='center'><Td BGCOLOR='YELLOW'>cadena1 </td>"; echo "<TD>$cad1</TD></tr>\n"; echo "<Tr align='center'><Td BGCOLOR='YELLOW'>cadena2 </td>"; echo "<TD>$cad2</TD></tr>\n"; echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>strcmp(cadena1, cadena2) </td>"; echo "<Td >".strcmp($cad1, $cad2). "</td></tr>\n"; echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>strcasecmp(cadena1, cadena2) </td>"; echo "<Td >".strcasecmp($cad1, $cad2). "</td></tr>\n"; echo "</Table>\n"; ?> </body> </html>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

109 strncmp (cad1, cad2, long): funciona como strcmp(), solo que permite comparar los long primeros caracteres de dos cadenas. Si alguna cadena es menor que el nmero de caracteres a comparar, se usar su longitud como long para la comparacin. Diferencia maysculas de minsculas. strnatcmp (cad1, cad2): se comporta igual que strcmp(), excepto en que utiliza una comparacin natural de las cadenas alfanumricas. Distingue entre maysculas y minsculas. strnatcasecmp (cad1, cad2): se comporta igual que strnatcmp(), excepto en que no diferencia entre maysculas y minsculas. Veamos un ejemplo con el funcionamiento diferenciado de strcmp() y strnatcmp():
<body> <center> <h2>Funcin <I> strnatcmp </I></h2> <?php $cad1="10000 pts"; $cad2="2500 pts"; echo "<TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'>\n"; echo "<Tr align='center'><Td BGCOLOR='YELLOW'>cadena1 </td>"; echo "<TD>$cad1</TD></tr>\n"; echo "<Tr align='center'><Td BGCOLOR='YELLOW'>cadena2 </td>"; echo "<TD>$cad2</TD></tr>\n"; echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>strcmp(cadena1, cadena2) </td>"; echo "<Td >".strcmp($cad1, $cad2). "</td></tr>\n"; echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>strnatcmp(cadena1, cadena2) </td>"; echo "<Td >".strnatcmp($cad1, $cad2). "</td></tr>\n"; echo "</Table>\n"; ?> </body>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

110

3.4.5. Modificacin del contenido 3.4.5.1. Limpieza de cadenas


chop (cadena): devuelve la cadena argumento sin los espacios en blanco y caracteres de fin de lnea que se encuentren al final de la cadena. rtrim (cadena): se comporta igual que chop(). ltrim (cadena): elimina espacios en blanco que se encuentran al principio de una cadena de texto. Recibe como parmetro una cadena de caracteres y devuelve la misma cadena pero sin los espacios iniciales. trim (cadena): elimina los espacios en blanco que se encuentran al principio y al final de una cadena de texto. Recibe como argumento una cadena de caracteres y devuelve como resultado esa cadena sin los espacios iniciales y finales. Veamos un ejemplo de estas cuatro funciones:
<body> <center> <h2>Funcin <I> chop, rtrim, ltrim y trim</I></h2> <?php //6 espacios por delante y 4 por detrs $cadena=" abcdefghi "; echo "<TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'>\n"; echo "<Tr align='center'><Td colspan=2>&nbsp; </td>"; echo "<Td BGCOLOR='YELLOW'>tamao</td></tr>\n"; echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'cadena</td> <td><pre>$cadena</pre></td>"; echo "<Td >".strlen($cadena)."</td>\n<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>chop(cadena)</td>"; echo "<Td> <pre>".chop($cadena)."</pre></td>"; echo "<Td>".strlen(chop($cadena))."</td></tr>\n"; echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>rtrim(cadena)</td>"; echo "<Td> <pre>".rtrim($cadena)."</pre></td>"; echo "<Td>".strlen(rtrim($cadena))."</td></tr>\n"; echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>ltrim(cadena)</td>"; echo "<Td> <pre>".ltrim($cadena)."</pre></td>"; echo "<Td>".strlen(ltrim($cadena))."</td></tr>\n"; echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>trim(cadena)</td>"; echo "<Td> <pre>".trim($cadena)."</pre></td>"; echo "<Td>".strlen(trim($cadena))."</td></tr>\n"; echo "</Table>\n"; ?> </center> </body>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

111

3.4.5.2. Conversin entre maysculas y minsculas.


srtolower (cadena): convierte una cadena de caracteres a minsculas. Recibe como argumento una cadena y devuelve la misma cadena con los caracteres alfabticos en minsculas. strtoupper (cadena): funciona de forma contraria a la funcin anterior. una cadena de caracteres a maysculas. ucfirst (cadena): se encarga de convertir a maysculas el primer carcter de una cadena de caracteres, siempre que este sea alfabtico. Nota: para hacer un uso correcto de esta funcin, hemos de prestar atencin a las caractersticas locales propias de PHP, de modo que tengamos las que necesitamos. ucwords (cadena): se comporta igual que la funcin anterior, salvo que esta convierte a maysculas el primer carcter de cada palabra que compone la cadena, siempre y cuando sean caracteres alfanumricos. Vamos a ver el funcionamiento conjunto de todas estas funciones:
<h2>Funcin <I>strtoupper, strtolower, ucfirst y ucwords</I></h2> <?php $frase ="saludos PARA todos..."; echo "<TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'>\n"; echo "<Tr align='right'>"; echo "<Td BGCOLOR='YELLOW'>frase</td><td>$frase</td>\n"; echo "<Tr align='right'>"; echo "<Td BGCOLOR='YELLOW'>strtoupper(frase)</td>"; echo "<Td>".strtoupper($frase)."</td></tr>\n"; echo "<Tr align='right'>"; echo "<Td BGCOLOR='YELLOW'>strtolower(frase)</td>"; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

112
echo "<Td>".strtolower($frase)."</td></tr>\n"; echo "<Tr align='right'>"; echo "<Td BGCOLOR='YELLOW'>ucfirst(frase)</td>"; echo "<Td>".ucfirst($frase)."</td></tr>\n"; echo "<Tr align='right'>"; echo "<Td BGCOLOR='YELLOW'>ucwords(frase)</td>"; echo "<Td>".ucwords($frase)."</td></tr>\n"; echo "</Table>\n"; ?>

3.4.5.3. Divisin de cadenas


explode (patrn, cadena): devuelve un array resultado de dividir una cadena en diferentes subcadenas. El nmero total de elementos del array puede ser elegido a travs de un parmetro opcional. implode (nexo, cadena): devuelve una cadena resultado de unir todos los elementos de un array en el mismo orden en el que aparecen, pero con una cadena en medio de ellos. Veamos con un ejemplo el funcionamiento conjunto de las funciones anteriores:
<body> <center> <h2>Funcin <I>explode e implode</I></h2> <?php $patron = "-"; $nexo=":"; $limite=5; $cadena= "dato1-dato2-dato3-dato4-dato5"; $datos=explode($patron, $cadena,$limite); echo "<TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'>\n"; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

113
echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>cadena</td><Td>$cadena</td>\n"; echo "<Tr align='center'>"; echo "<Td colspan='2' BGCOLOR='YELLOW'> explode('$patron',cadena,$limite)</td>"; echo "<Tr>\n"; for($i=0;$i<$limite;$i++){ echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>subcadena $i</td>"; echo "<td>$datos[$i]</td></tr>\n"; } echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>implode('$nexo', datos)</td>\n"; echo "<Td>".implode($nexo, $datos)."</td></tr>\n"; echo "<Tr>\n"; echo "</Table>\n"; ?> </center> </body>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

114

3.5. ARREGLOS
Los arrays o matrices forman una parte muy importante de la programacin en PHP ya que permiten manejar grupos de valores relacionados: nos permiten almacenar mltiples valores en una sola estructura y de esta forma, asociarlos bajo una misma denominacin. Como veremos, PHP tiene gran cantidad de funciones cuyos parmetros, tanto de llamada como de resultados, son variables de tipo array. En especial, son ampliamente utilizados en las funciones ligadas a las bases de datos.

3.5.1. Arrays escalares


Un array escalar, o simple, est formado por un conjunto de valores ordenados respecto a un ndice de tipo entero. Este ndice indicar la posicin del elemento dentro de esta coleccin ordenada, de modo que, en cada posicin marcada por el ndice dentro del array, haya un valor. Existen diferentes formas de crear arrays. La ms sencilla consiste en asignar el valor de cada elemento de manera explcita, es decir, indicando cada uno de los valores que lo componen e, incluso la posicin que ocupan dentro del array. El siguiente ejemplo nos muestra estas dos formas equivalentes de definir el mismo array:
<?php $matriz1[0]="cougar"; $matriz1[1]="ford"; $matriz1[3]="2.500"; $matriz1[4]="V6"; $matriz1[5]=172; $matriz2[0]="cougar"; $matriz2[1]="ford"; $matriz2[2]=""; $matriz2[3]="2.500"; $matriz2[4]="V6"; $matriz2[5]=172; ?>

Un array puede combinar elementos de naturaleza distinta: en el ejemplo, valores enteros y cadena de caracteres (que deben aparecer entrecomillados) e, incluso, elementos vacos. Cuando, al generar el array, no indicamos la posicin de sus elementos, estos se van situando secuencialmente respecto a la ltima asignacin realizada sobre el array. La asignacin numrica de posiciones dentro del array no tiene porqu ser secuencial, es decir podemos definir el orden numrico que nos interese. Ejemplo:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

115
<?php $matriz1[3]="cougar"; $matriz1[5]="ford"; $matriz1[7]="2.500"; $matriz1[]="V6"; $matriz1[]=172; ?>

La otra forma de definir arrays es utilizar el constructor array () proporcionado por el lenguaje. Este constructor no es una funcin regular; tiene la siguiente definicin: array array (mixed valores, ) Ejemplo de uso del constructor:
<body> <center> <h2>El constructor <I>array</I></h2> <?php $matriz1=array("cougar","ford",null,"2.500","V6",172); ?> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td>indice</Td> <?php for($i=0;$i<=5;$i++) echo "<Td>$i</td>"; ?> <Tr align="center"> <Td BGCOLOR="YELLOW"> $matriz1</Td> <?php echo "<Td> $matriz1[0] </Td>"; echo "<Td> $matriz1[1] </Td>"; echo "<Td> $matriz1[2] </Td>"; echo "<Td> $matriz1[3] </Td>"; echo "<Td> $matriz1[4] </Td>"; echo "<Td> $matriz1[5] </Td>"; ?> </tr> </table> </center> </body>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

116 El constructor array() tambin nos permite asignar los elementos del array en el orden en que queramos. Para ello, indicamos el ndice, seguido del smbolo => y el valor del elemento. Por ejemplo:
<body> <center> <h2>El constructor <I>array</I></h2> <?php $matriz1=array("cougar","ford",null,"2.500","V6",172); $matriz2=array(2=>"cougar","ford",1=>null,0=>"2.500","V6",172); ?> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td>indice</Td> <?php for($i=0;$i<=5;$i++) echo "<Td>$i</td>"; ?> <Tr align="center"> <Td BGCOLOR="YELLOW"> $matriz1</Td> <?php echo "<Td> $matriz1[0] </Td>"; echo "<Td> $matriz1[1] </Td>"; echo "<Td> $matriz1[2] </Td>"; echo "<Td> $matriz1[3] </Td>"; echo "<Td> $matriz1[4] </Td>"; echo "<Td> $matriz1[5] </Td>"; ?> </tr> <Tr align="center"> <Td BGCOLOR="YELLOW"> $matriz2</Td> <?php echo "<Td> $matriz2[0] </Td>"; echo "<Td> $matriz2[1] </Td>"; echo "<Td> $matriz2[2] </Td>"; echo "<Td> $matriz2[3] </Td>"; echo "<Td> $matriz2[4] </Td>"; echo "<Td> $matriz2[5] </Td>"; ?> </tr> </table> </center> </body>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

117

3.5.2. Arrays asociativos


A diferencia de los arrays simples, los arrays asociativos (tambin conocidos como tablas hash o arrays indexados por cadena) estn formados por un conjunto de calores que estn ordenados respecto a un ndice de tipo string, es decir, una cadena de caracteres. De este modo, nuestro array va a estar compuesto por pares clave- valor, siendo necesario proporcionar la clave para poder acceder al valor almacenado en el array. De igual forma que ocurre con los arrays simples, podemos utilizar el constructor del lenguaje array() para definirlos, o bien, hacerlo especificando de forma exlcita cada uno de sus componentes. Ejemplo:
<body> <center> <h2>Arrays <I>asociativos</I></h2> <?php $matriz1=array("modelo"=>"cougar","marca"=>"ford","fecha"=>null, "cc"=>"2.500","motor"=>"V6","potencia"=>172); $matriz2['modelo']="cougar"; $matriz2['marca']="ford"; $matriz2['fecha']=null; $matriz2['cc']="2.500"; $matriz2['motor']="V6"; $matriz2['potencia']=172; ?> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td></Td> <Td>Modelo</Td> <Td>Marca</Td> <Td>CC</Td> <Td>Motor</Td> <Td>Potencia</Td> </tr> <Tr align="center"> <Td BGCOLOR="YELLOW"> $matriz1</Td> <?php echo "<Td>". $matriz1['modelo']." </Td>"; echo "<Td>". $matriz1['marca']." </Td>"; echo "<Td>". $matriz1['fecha']."</Td>"; echo "<Td>". $matriz1['cc'] ."</Td>"; echo "<Td>". $matriz1['motor'] ."</Td>"; echo "<Td>". $matriz1['potencia']."</Td>"; ?> </tr> <Tr align="center"> <Td BGCOLOR="YELLOW"> $matriz2</Td> <?php echo "<Td>". $matriz2['modelo']." </Td>"; echo "<Td>". $matriz2['marca'] ."</Td>"; echo "<Td>". $matriz2['fecha'] ."</Td>"; echo "<Td>". $matriz2['cc'] ."</Td>"; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

118
echo "<Td>". $matriz2['motor']." </Td>"; echo "<Td>". $matriz2['potencia']."</Td>"; ?> </tr> </table> </center> </body>

3.5.3. Arrays multidimensionales


PHP nos permite definir arrays multidimensionales mediante la combinacin de arrays unidimensionales (que pueden ser tanto de tipo escalar, como asociativos). Los siguientes ejemplos nos muestran las diferentes formas de definirlos: Array multidimensional de tipo escalar:
<body> <center> <h2>Arrays <I>multidimensionales</I></h2> <?php $matriz1[0][0]="peseta"; $matriz1[0][1]=166.386; $matriz1[1][0]="dolar"; $matriz1[1][1]=0.96; $matriz2[0]=array("peseta",166.386); $matriz2[1]=array("dolar",0.96); $matriz3=array(array("peseta",166.386),array("dolar",0.96)); ?> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td></Td> I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

119
<Td>Moneda</Td> <Td>Cambio </Td> </tr> <?php for($i=0;$i<2;$i++){ echo"<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>\matriz1[$i]</td>"; for($j=0;$j<2;$j++){ echo "<Td>".$matriz1[$i][$j]."</td>"; } echo"</Tr>"; } for($i=0;$i<2;$i++){ echo"<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>\matriz2[$i]</td>"; for($j=0;$j<2;$j++){ echo "<Td>".$matriz2[$i][$j]."</td>"; } echo"</Tr>"; } for($i=0;$i<2;$i++){ echo"<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>\matriz3[$i]</td>"; for($j=0;$j<2;$j++){ echo "<Td>".$matriz3[$i][$j]."</td>"; } echo"</Tr>"; } ?> </table> </center> </body>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

120 Nota: en PHP3 no es posible referirse a arrays multidimensionales directamente dentro de cadenas, es necesario hacer uso del operador de concatenacin para solucionar este problema. En PHP4, sin embargo, todo el problema se soluciona encerrando la referencia al array (dentro de la cadena) entre llaves; tambin se puede hacer uso de la concatenacin de cadenas.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

121

3.5.4. Recorrer un array


Una operacin habitual a realizar cuando trabajamos con arrays es recorrerlo para obtener sus elementos, para modificarlos o trabajar con ellos.

3.5.4.1. Recorridos en arrays secuenciales


Recorrer los diferentes elementos que componen un array secuencial es relativamente sencillo, pues, haciendo uso de un bucle e iterando en funcin del valor del ndice podemos realizar la operacin. El problema es conocer a priori el nmero de elementos que componen el array. Precisamente para solventar este problema, PHP proporciona la funcin count(), que devuelve el nmero de elementos que tiene la variable que recibe como argumento. Nota: aunque es habitual que el argumento pasado a la funcin sea un array, podemos aplicar la funcin a cualquier otro tipo de variable, en cuyo caso devolver el valor 1, si la variable tiene valor nulo o 0, si esta an no ha sido inicializada. Una vez conocido el nmero de elementos del array, podemos utilizar un bucle para ir recorriendo sus elementos, ejemplo:
<body> <center> <h2>Arrays funcin<I>count</I></h2> <?php $matriz1[0][0]="peseta"; $matriz1[0][1]=166.386; $matriz1[1][0]="dolar"; $matriz1[1][1]=0.96; $matriz1[2][0]="marco"; $matriz1[2][1]=1.85; ?> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td></Td> <Td>Moneda</Td> <Td>Cambio </Td> </tr> <?php for($i=0;$i<count($matriz1);$i++){ echo"<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>\matriz1[$i]</td>"; for($j=0;$j<count($matriz1[$i]);$j++){ echo "<Td>".$matriz1[$i][$j]."</td>"; } echo"</Tr>"; } ?> </table> </center> </body>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

122

Otra funcin relacionada con el recorrido de arrays es sizeof(), que obtiene el nmero de elementos del array pasado como argumento en la llamada a la funcin.

3.5.4.2. Recorridos en arrays no secuenciales


Un array no secuencial no parece muy fcil de recorrer, puesto que no slo necesitamos saber el nmero de elementos que componen el array, sino tambin su posicin dentro del array. Este mismo problema se presenta con los arrays asociativos, puesto que, adems del nmero de elementos que componen el array, necesitamos conocer las claves para poder acceder a los valores almacenados. Para poder trabajar con arrays estructurados de modo no secuencial, tanto de tipo escalar como asociativos, PHP cuenta con el siguiente conjunto de funciones (estas funciones tambin son aplicables a arrays estructurados secuencialmente): current (matriz): devuelve el valor de la posicin actual del puntero dentro del array: todos los arrays tienen un puntero interno que apunta a la posicin del elemento actual con el que se est trabajando en un momento dado. Devuelve false cuando el puntero est al final del array o cuando el array no contiene ningn elemento. pos (matriz): es idntica a la funcin anterior. Key (matriz): devuelve el ndice de la posicin actual del array pasado como argumento: un nmero, en caso de que el array sea de tipo escalar, o una cadena de caracteres, en el caso de que el array sea de tipo asociativo. next (matriz): devuelve el valor del elemento siguiente al actual (si existe) y avanza el puntero interno una posicin. En caso de que el elemento actual sea el ltimo del array, devuelve false.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

123 prev (matriz): devuelve el valor del elemento siguiente al actual (si existe) y retrocede el puntero interno una posicin. En caso de que el elemento actual sea el ltimo del array, devuelve false. end (matriz): coloca el puntero interno en el ltimo elemento de un array escalar. reset (matriz): devuelve el valor del primer elemento del array y sita el puntero interno en su primera posicin. Ejemplo de uso de estas funciones:
<body> <center> <h2>Arrays funcin<br> <I>reset, end, next, prev, current y key</I></h2> <?php $matriz1[3]="cougar"; $matriz1[5]="ford"; $matriz1[7]="2.500"; $matriz1[]="V6"; $matriz1[]=172; $matriz2['modelo']="cougar"; $matriz2['marca']="ford"; $matriz2['cc']="2.500"; $matriz2['fecha']=null; $matriz2['motor']="V6"; $matriz2['potencia']=182; ?> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td>Posicin</Td> <?php echo "<Td BGCOLOR='YELLOW'>".key($matriz1)."</td>"; while (next ($matriz1)){ echo "<Td BGCOLOR='YELLOW'>".key($matriz1)."</td>"; } ?> <Tr> <Tr align='center'> <td BGCOLOR='YELLOW'>Valor</Td> <?php echo "<Td>".reset($matriz1)."</td>"; while (next ($matriz1)){ echo "<Td>".current($matriz1)."</td>"; } ?> </table><br> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td>Clave</Td> <?php end($matriz2); echo "<Td BGCOLOR='YELLOW'>".key($matriz2)."</td>"; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

124
while (next ($matriz2)){ echo "<Td BGCOLOR='YELLOW'>".key($matriz2)."</td>"; } ?> <Tr> <Tr align='center'> <td BGCOLOR='YELLOW'>Valor</Td> <?php end($matriz2); echo "<Td BGCOLOR='YELLOW'>".current($matriz2)."</td>"; while (prev ($matriz2)){ echo "<Td BGCOLOR='YELLOW'>".current($matriz2)."</td>"; } ?> </table> </center> </body>

each (matriz): se usa para recorrer arrays (sobre todo los asociativos), pues devuelve un apr de valores correspondientes a la clave y al valor asociado a esa clave. Adems, avanza el puntero interno hasta el siguiente elemento. Si el puntero interno apunta a la ltima posicin del array, la ajacucin de esta funcin devuelve false. list (): asigna una lista de variables en una sola operacin. Suele utilizarse en combinacin con la funcin anteriormente vista, each().

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

125 Ejemplo de recorrido:


<body> <center> <h2>Arrays funciones <I>each y list</I></h2> <?php $matriz1[3]="cougar"; $matriz1[5]="ford"; $matriz1[7]="2.500"; $matriz1[]="V6"; $matriz1[]=172; $matriz2['modelo']="cougar"; $matriz2['marca']="ford"; $matriz2['cc']="2.500"; $matriz2['fecha']=null; $matriz2['motor']="V6"; $matriz2['potencia']=182; ?> <TABLE BORDER='0'CELLPADDING='4' CELLSPACING='6'> <Tr align="center"><td> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td>Posicin</Td><Td>Valor</Td></tr> <?php while (list($pos,$valor)=each($matriz1)){ echo "<Tr align='center'><td>".$pos."</td>"; echo "<Td>".$valor."</td></tr>"; } ?> </table></td><td> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td>Clave</Td><Td>Valor</Td></tr> <?php while (list($clave,$valor)=each($matriz2)){ echo "<Tr align='center'><td>".$clave."</td>"; echo "<Td>".$valor."</td></tr>"; } ?> </table></td></tr> </table> </center> </body>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

126

3.5.5. Ordenar un array


Funciones para ordenar los elementos de un array sort (matriz): ordena alfanumricamente los valores de los elementos de un array de menor a mayor. Para ordenar de manera inversa, disponemos de la funcin rsort (matriz). Nota: si aplicamos estas funciones a arrays asociativos, estos perdern sus claves y se convertirn en arrays simples o escalares. Ejemplo:
<body> <center> <h2>Arrays funciones <I>each y list</I></h2> <?php $matriz1[0]="Madrid"; $matriz1[1]="Zaragoza"; $matriz1[2]="Bilbao"; $matriz1[3]="Valencia"; $matriz1[4]="Lerida"; $matriz1[4]="Alicante"; ?> <TABLE BORDER='0'CELLPADDING='4' CELLSPACING='6'> <Tr align="center"> <td> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'><th colspan='2'>Array Original</th> <Tr align='center' BGCOLOR='YELLOW'> <Td>Posicin</Td><Td>Valor</Td></tr> <?php while (list($pos,$valor)=each($matriz1)){ echo "<Tr align='center'><td>".$pos."</td>"; echo "<Td>".$valor."</td></tr>"; } ?> </table></td>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

127
<td> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'><th colspan='2'>sort()</th> <Tr align='center' BGCOLOR='YELLOW'> <Td>Posicin</Td><Td>Valor</Td></tr> <?php sort($matriz1); while (list($pos,$valor)=each($matriz1)){ echo "<Tr align='center'><td>".$pos."</td>"; echo "<Td>".$valor."</td></tr>"; } ?> </table></td> <td> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'><th colspan='2'>rsort()</th> <Tr align='center' BGCOLOR='YELLOW'> <Td>Posicin</Td><Td>Valor</Td></tr> <?php rsort($matriz1); while (list($pos,$valor)=each($matriz1)){ echo "<Tr align='center'><td>".$pos."</td>"; echo "<Td>".$valor."</td></tr>"; } ?> </table></td> </table> </center> </body>

Para evitar el efecto lateral en el que se redefinen los ndices, tanto para los arrays escalares como asociativos, podemos usar las siguientes funciones:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

128 asort (matriz): ordena alfanumricamente los valores de los elementos de un array de mayor a menor, pero manteniendo la relacin existente entre los ndices y sus valores asociados. Esto es posible debido a que la ordenacin se hace sobre los elementos del array y no sobre los ndices. arsort (matriz): realiza la ordenacin inversa. ksort (matriz): ordena alfanumricamente las claves de un arrray de menor a mayor manteniendo las correlaciones entre clave y valor asociado. La funcin que realiza la ordenacin inversa es krsort (matriz).

3.5.6. Otras operaciones


A continuacin veremos un grupo de funciones que nos sern de gran utilidad a la hora de trabajar con un array ya existente.

3.5.6.1. Modificar un array


Las siguientes funciones nos permiten modificar el tamao de un array aadiendo elementos o uniendo diferentes arrays en uno solo. array_merge (matriz1, matriz2): Combina en un solo array los valores de los arrays que recibe como argumentos. Los elementos van siendo aadidos al array precedente. Si estamos juntando arrays asociativos, hay que tener en cuenta que las claves con igual nombre no se aaden al array, sino que se actualizan con el ltimo valor suministrado. array_walk (matriz, func_usuario [, parmetro]): nos permite aplicar una funcin definida por el usuario a cada uno de los elementos de una array. La funcin func_usuario () recibe al menos dos parmetros (el valor del elemento y su clave asociada); si func_usuario () necesitara ms parmetros, se pasan como parmetros a la funcin array_walk (). Una vez aplicada la funcin, el puntero interno del array se encontrar al final de l. Ejemplo:
<?php $precios["prod1"]=1500; $precios["prod2"]=1000; $precios["prod3"]=800; $precios["prod6"]=100; $precios["prod7"]=500; while(list($pos,$valor)=each($precios)){ echo "$pos "; printf ("%4d Ptas. <br>", $valor); } function aEuros($valor,$clave){ $valor=$valor/166.386; } I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

129
array_walk($precios, 'aEuros'); reset($precios); echo <br>; while(list($pos, $valor)=each($precios)){ echo "$pos "; printf("%02.2f <br>",$valor); } ?>

Salida: prod1 1500 Ptas. prod2 1000 Ptas. prod3 800 Ptas. prod6 100 Ptas. prod7 500 Ptas. prod1 1500.00 prod2 1000.00 prod3 800.00 prod6 100.00 prod7 500.00

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

130

3.5.6.2. Usando arrays como pilas


Las pilas son estructuras de datos en las que la insercin y la recuperacin de los datos que almacenan se realizan bajo un orden prefijado. Son estructuras con una gestin de tipo LIFO (last in, first out), es decir, el ltimo en llegar es el primero en salir. PHP proporciona las siguientes funciones que nos permiten trabajar con los arrays como si fueran pilas. array_push (matriz, valor1 [, valor2, ]): inserta uno ms elementos al final de matriz. Devuelve el nuevo nmero de elementos. array_pop (matriz): devuelve y elimina el ltimo elemento del array (el que se corresponde con la cima de la pila). array_shift (matriz): devuelve y elimina el primer elemento del array (el que se corresponde con la base de la pila). array_unshift (matriz, valor1 [, valor2, ]): inserta uno ms elementos al principio del array. Devuelve el nmeor total de elementos contenidos en l. Ejemplo:
<body> <?php if (empty($_POST['PILA'])) { $pila=array("Juan martinez"," patricia juarez", "Jose hernandez","Edith cuevas"); $dato1=""; $dato2=""; $BOTN=""; } else { $PILA=$_POST['PILA']; $dato1=$_POST['dato1']; $dato2=$_POST['dato2']; $BOTN=$_POST['BOTN']; $pila=explode("-",$PILA); switch($BOTN){ case "SHIFT <-":$dato1=array_shift($pila); break; case "PUSH ->":array_push($pila,$dato1); break; case "-> POP":$dato2=array_pop($pila); break; case "<- UNSHIFT":array_unshift($pila,$dato2); break; } } I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

131
?> <form method="post" action="<?php echo $_SERVER['PHP_SELF']?>"> <TABLE BORDER="0" CELLPANDDING="4" CELLSPACING="6"> <TR ALIGN="center"> <TD> <input name="BOTN" type="submit" value="SHIFT <-"><BR><BR> <input name="dato1" type="text" value="<?php echo "$dato1"?>"><BR><BR> <input name="BOTN" type="submit" value="PUSH ->"> </TD> <TD> <table border="1" CELLPANDDING="2" CELLSPACING="2"> <TR ALIGN="center" BGCOLR="yelow"> <td>Posicion</td><td>Valor</td></tr> <?php while (list($pos,$valor)=each($pila)){ echo "<TR ALIGN='center'><TD>".$pos."</TD>"; echo "<TD>".$valor."</TD></TR>"; } $num=sizeof($pila); reset($pila); ?> </table></td> <TD> <input name="BOTN" type="submit" value="<- UNSHIFT"><BR><BR> <input name="dato2" type="text" value="<?php echo "$dato2" ?>"><BR><BR> <input name="BOTN" type="submit" value="-> POP"> </TD> </TR> </TABLE> <input name="PILA" type="hidden" value="<?php echo implode('-',$pila); ?>"> </form> </body>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

132 array_reverse (matriz): devuelve un array como parmetro pero con sus componentes en orden inverso. in_array (elemento_busqueda, matriz): con esta funcin podemos saber si un elemento est contenido dentro de un array.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

133

3.6. FUNCIONES
PHP, como la mayora de los lenguajes de programacin, dispone de una herramienta denominada funcin. Una funcin es un trozo de cdigo, que permite desarrollar una tarea concreta y bien definida, que se encuentra separado del resto de instrucciones del programa y al que se le ha dado un nombre para que posteriormente pueda ser referenciado. A travs del nombre se pueden ejecutar las instrucciones referidas por l tantas veces como sea necesario. La utilizacin de funciones permite que un script aparezca escrito como una lista de referencias a las tareas que se deben hacer para crear una pgina de respuesta.

3.6.1. Declaracin de una funcin


function Nombre_de_la_Funcin($param1, $param2, ..., $paramN) { // Cdigo PHP asociado a la funcin codigo_PHP return valor; //Esta sentencia es opcional } Como se puede ver, son necesarios los siguientes componentes: La palabra reservada function Nombre_de_la_Funcin indica el nombre por el que el usuario va a identificar a las sentencias ah incluidas. ($param1, $param2, ..., $paramN) representa la lista de parmetros necesarios para que la funcin pueda ser ejecutada. Los parmetros han de expresarse siempre entre parntesis y separados por comas. Incluso si la funcin no necesita ningn parmetro, debern aparecer la pareja de parntesis. codigo_php representa el conjunto de sentencias que se van a ejecutar cada vez que se haga una llamada a la funcin. return es la sentencia que se debe utilizar cuando se quiere que la funcin devuelva un valor. Si la funcin no devuelve ningn valor puede omitirse. En PHP4 no existe ninguna limitacin para definir las funciones, pero basado en las reglas de estilo, se recomienda sean definidas al principio del script.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

134

3.6.2. Llamada a una funcin


Una vez declarada la funcin, sta no se ejecuta hasta que se le llama desde cualquier parte del script. Para llamar a una funcin, slo hay que escribir una sentencia que contenga el nombre de la funcin y, entre parntesis, los valores de los argumentos de llamada de ella. En el momento en que ocurre esto, la ejecucin del programa salta inmediatamente a la primera lnea de la funcin llamada. Despus de ejecutar las sentencias que componen el cuerpo de la funcin, el programa salta de nuevo a la posicin en que fue llamada la funcin y contina su ejecucin. El resultado es el mismo que se hubiese obtenido al insertar todas las sentencias de la funcin en ala posicin de llamada a ella. Para volver a hacer uso de la funcin, simplemente hay que volver a llamarla: una funcin puede ser llamada tantas veces como se necesite. El siguiente ejemplo nos muestra una forma sencilla de cmo definir y llamar a una funcin. Como podemos observar, se trata de una funcin declarada sin parmetros.
<H2>Funciones de Usuario<I></I></H2> <?php function CuentaRegresiva() { for ($i = 10; $i > 0; $i--) echo $i, "...<BR>"; echo " Boooooom !"; } ?> <TABLE BORDER="0" CELLPADDING="4" CELLSPACING="6"> <TR ALIGN="CENTER"> <TD BGCOLOR="#FFBBAA"> <?php CuentaRegresiva(); ?> </TD> <TD BGCOLOR="#FFFBAD"> <?php CuentaRegresiva(); ?> </TD> </TR> </TABLE>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

135 El resultado se muestra en la siguiente imagen:

3.6.3. Paso de Parmetros


En ocasiones, necesitaremos definir funciones que aceptan parmetros o argumentos. De esta forma conseguimos que la funcin se ms utilizable dentro del propsito general para el que est definida. Por ejemplo, podemos querer utilizar una funcin mltiples veces a lo largo del programa, pero algunos de sus valores internos pueden variar con cada llamada. La mejor solucin a este problema es definir una funcin que pueda aceptar argumentos en su llamada para cada valor con el que queramos trabajar. El siguiente ejemplo muestra una modificacin de la funcin presente en el cdigo anterior para que el inicio de la cuenta pueda ser configurable por el usuario. Como podemos observar, los parmetros se utilizan como variables dentro del cuerpo de la funcin:
<H2>Funciones de Usuario<I></I></H2> <?php function CuentaRegresiva($inicio) { for ($i = $inicio; $i > 0; $i--) echo $i, "...<BR>"; echo " Boooooom !"; } ?> <TABLE BORDER="0" CELLPADDING="4" CELLSPACING="6"> <TR ALIGN="CENTER"> <TD BGCOLOR="#FFBBAA"> <?php CuentaRegresiva(8); ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

136
</TD> <TD BGCOLOR="#FFFBAD"> <?php CuentaRegresiva(5); ?> </TD> </TR> </TABLE>

El resultado se muestra en la siguiente imagen:

Dado que en la llamada pasamos valores a la funcin, esta informacin puede suministrarse mediante una lista de variables y/o constantes separadas por comas. El siguiente ejemplo nos muestra una combinacin de estos elementos pasados como argumentos a una funcin:
<H2>Funciones de Usuario<I></I></H2> <?php define("Fin_Cuenta", 0); $mifinal=3; function CuentaRegresiva($inicio, $fin) { for (; $inicio > $fin; $inicio--) echo $inicio, "...<BR>"; echo " Boooooom !"; } ?> <TABLE BORDER="0" CELLPADDING="4" CELLSPACING="6"> <TR ALIGN="CENTER"> <TD BGCOLOR="#FFBBAA"> <?php CuentaRegresiva(11, $mifinal); ?> </TD>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

137
<TD BGCOLOR="#FFFBAD"> <?php CuentaRegresiva(8, Fin_Cuenta); ?> </TD> </TR> </TABLE>

El resultado se muestra en la siguiente imagen:

PHP permite pasar los parmetros de tres formas distintas: por valor (el comportamiento por defecto que hemos visto en los ejemplos anteriores), por referencia y con parmetros por defecto. Parmetros por valor Cuando pasamos una variable como argumento en la llamada a una funcin, podremos pensar que las modificaciones que se realicen con dicho argumento dentro de la funcin afectan a al variable. En el caso del paso de parmetros por valor, que es la opcin por defecto de PHP, lo que recibe la funcin es una copia del valor de la variable pasada como parmetro; de esta forma, las modificaciones que pueden hacerse dentro del cuerpo de la funcin a la variable parmetro no afectan al valor final de la variable pasada como argumento. Parmetros por referencia En el caso de que queramos que los cambios que se producen en el cuerpo de la funcin afecten a la variable que se pas como argumento en la llamada a la funcin deberemos pasar al parmetro por referencia. Como su propio nombre indica, en este caso, a la funcin le llega una referencia a la variable y, por tanto, los cambios que realice sobre el parmetro se realizan sobre la variable.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

138 Para indicar que parmetros se pasan por regencia, hay que marcarlos en la definicin de la funcin, anteponiendo el smbolo ampersand (&) al nombre del parmetro. Parmetros por defecto Los parmetros por defecto son la forma en que PHP implementa los parmetros opcionales en la llamada a las funciones. De este modo, este tipo de parmetros toma un valor predefinido cuando, desde la llamada a la funcin, no se les ha proporcionado ningn argumento. Para definir un parmetro por omisin, hay que, a dems de nombrar el parmetro, escribir el operador de asignacin (=) y, a continuacin, el valor que vaya a recibir el parmetro en caso de no especificarse en la llamada. Cuando se usan parmetros por defecto, estos tienen que situarse al final en la declaracin, es decir, a la derecha de cualquier parmetro normal; de otra manera, las cosas no funcionar de la forma esperada. Cuando se utiliza el valor por defecto de un parmetro, obligatoriamente han de utilizarse todos los valores por defecto de todos aquellos parmetros que se encuentren a su derecha. El siguiente ejemplo nos muestra el uso de estos tres tipos de parmetros:
<H2>Funciones de Usuario<I></I></H2> <?php $mifinal=0; function CuentaRegresiva($inicio, &$fin, $mensaje = " Boooooom !") { for (; $inicio > $fin; $inicio--) echo $inicio, "...<BR>"; $fin += 2; echo $mensaje; } ?> <TABLE BORDER="0" CELLPADDING="4" CELLSPACING="6"> <TR ALIGN="CENTER"> <TD BGCOLOR="#FFBBAA"> <?php // $mifinal vale 0 CuentaRegresiva(6, $mifinal); // $mifinal vale 2 ?> </TD> <TD BGCOLOR="#FFFBAD"> <?php // $mifinal vale 2 CuentaRegresiva(8, $mifinal, " Despierta !"); // $mifinal vale 4 ?> </TD> </TR> </TABLE>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

139 El resultado se muestra en la siguiente imagen:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

140

3.7. FUNCIONES DE FECHA Y HORA


En casi todos los sistemas informticos hay una fecha de inicio comn, a partir de la cual se empieza a contar el tiempo. En el caso de los sistemas UNIX la fecha elegida como comienzo es el da 1 de enero de 1970 a las 00:00:00 GMT, fecha en que se conoce como el principio de la era UNIX. El contador de tiempo se conoce como marca de tiempo (timestamp) y representa el nmero de segundos transcurridos desde una fecha dada. En PHP todas las funciones de fecha/hora que trabajan con marcas de tiempo hacen referencia a esta fecha. La siguiente tabla nos muestra el resumen de las funciones de fecha/hora proporcionadas por PHP, al igual que una breve descripcin de ellas:

Funcin time() checkdate() date() getdate() gettimeofday() gmdate() gmmktime() gmstrftime() microtime() mktime() strftime() strtotime()

Descripcin Obtiene la marca de tiempo UNIX actual Valida una fecha en formato gregoriano Da formato a la hora y fecha locales Obtiene informacin sobre la fecha y la hora locales Obtiene la hora actual Formatea la fecha y la hora a formato GMT Obtiene la marca de tiempo UNIX de una fecha con formato GMT Formatea la fecha y la hora con formato GMT a las caractersticas locales Obtiene la marca de tiempo UNIX actual en microsegundos Obtiene la marca de tiempo UNIX para una fecha dada Formatear la hora actual de acuerdo con las caractersticas locales Traduce una fecha u hora descritas en ingls a su correspondiente marca de tiempo UNIX

time(): Devuelve la marca de tiempo correspondiente al instante en que se ejecuta checkdate(mes, da, ao): Verifica si la fecha que se le pasa como parmetro es una fecha correcta. Esta funcin es bastante til en los formularios en los cuales hay que rellenar campos de tipo fecha. Devuelve un valor verdadero si la fecha dada es vlida; en caso contrario, devuelve un valor falso. Se considera vlida una fecha si:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

141 El ao est entre 0 y 32767, ambos incluidos El mes est entre 1 y 12, ambos incluidos El da est en el rango permitido para el mes dado. Se tienen en consideracin los aos bisiestos.

date(formato [,timestamp]): Esta funcin nos permite darle un formato especfico a una cadena que contendr una fecha y una hora. Acepta como parmetro una cadena de formato y un parmetro timestamp; si ste se omite, se tomar el instante de ejecucin de la orden.
Valores a A d D F h H g G i j l L m M n s S t U w Y y z Z "a.m." o "p.m." "A.M." o "P.M." Da del mes con dos dgitos y con cero a la izquierda, de "01" a "31" Da de la semana con tres caracteres, "Fri" Nombre del mes, en texto completo, "January" Hora en formato, de "01" a "12" Hora en formato, de "00" a "23" Hora en formato, de "1" a "12" (sin ceros) Hora en formato; de "0" a "23" (sin ceros) Minutos, de "00" a "59" Da del mes en formato "1" a "31" Da de la semana, en texto completo, "Friday" "1" or "0", 1 si es ao bisiesto y 0 si no lo es Mes de "01" a "12" Mes con tres caracteres, "Jan" Mes de "1" a "12" (sin cero) Segundos de "00" a "59" Sufijo ordinal en ingls, "th", "nd" Nmero de das del mes dado, de "28"a "31" Segundos desde el valor de inicio epoch (01-01-1970) Da de la semana de "0" (domingo) a "6" (sbado) Ao con cuatro dgitos, "2004" Ao con dos dgitos, "04" Da del ao de "0" a "365" Diferencia horaria en segundos de "-43200" a "43200" Descripcin

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

142 Los caracteres distintos a los que aparecen en la tabla, que estn dentro de la cadena formato, se imprimirn tal cual aparecen. El formato "Z" siempre devuelve "0" en la funcin gmdate().
<?php echo "Hoy es ", date("D"), ", ", date("d"), " de ", date("F"), " de ", date("Y"), "<br>\n"; echo date("\Ho\y e\s D, d \de F \de Y"), "<br>\n"; echo date("\So\\n \l\a\ h:i:s a"), "<br>\n"; echo "La fecha dada ", date("U", 980936503), " fue ", date("D", 980936503), ", ", date("d", 980936503), " de ", date("F", 980936503), " de ", date("Y", 980936503), "<br>\n"; echo "Eran las ", date("h:i:s a", 980936503), "<br>\n"; ?>

que generarn como resultado las siguientes fechas y horas:

Dado que todas las opciones de formato de la funcin date() estn pensadas para la lengua inglesa, construir una frase tan sencilla como: Hoy es Sat, 06 de March de 2004 se puede convertir en una ardua tarea, ya que las letras H, y y s tienen un significado especial. getdate ([timestamp]): Esta funcin devuelve un array asociativo que contiene informacin sobre la fecha y hora asociada a la marca de tiempo, timestamp, pasada como parmetro. En caso de no pasar ningn parmetro a la funcin, sta obtiene la marca de tiempo del instante en que se ejecuta.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

143

Clave seconds minutes hours mday wday mon year yday weekday month Identifica los segundos Identifica los minutos Identifica las horas Identifica el da del mes

Descripcin

Identifica, en nmero, el da de la semana Identifica, en nmero, el mes Identifica, en nmero, el ao Identifica, en nmero, el da del ao Identifica, en texto, el da de la semana Identifica, en texto, el mes

<?php function listar($matriz, $titulo) { // Listar el contenido de un array echo "<TABLE BORDER=3 WIDTH=400>\n"; echo "<CAPTION ALIGN=TOP>$titulo</CAPTION>\n"; foreach($matriz as $clave => $valor) { echo "<TR>\n"; echo "<TD ALIGN=CENTER>$clave</TD>\n"; echo "<TD ALIGN=CENTER>$valor</TD>\n"; echo "</TR>\n"; } echo "</TABLE>\n"; } // Se obtiene la hora del sistema $hora = getdate(); listar($hora, "Informacin de la hora del sistema"); ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

144

gettimeofday(): Esta funcin obtiene la hora actual en un array asociativo, cuya estructura contiene los siguientes campos: Campo sec usec minuteswest dsttime Descripcin Segundos Microsegndos Minutos al oeste del meridiano de Greenwitch Correccin horaria entre los horarios de verano e invierno

gmdate (format [,timestamp]): Esta funcin es muy parecida a la funcin date() anteriormente vista, con la diferencia que la hora devuelta por esta funcin tiene formato GMT (Greenwich Mean Time) A continuacin se muestra un ejemplo donde la hora de la Ciudad de Mxico tiene 6 horas de diferencia con el GMT.
echo "Hora de Mxico ", date("h:i:s a"), "<br>\n"; echo "Hora de Greenwich ", gmdate("h:i:s a"), "<br>\n";

y da como resultado: Hora de Mxico 05:05:30 pm Hora de Greenwich 11:05:30 pm gmmktime (hora, min, seg, mes, da, ao [,is_dst]) Es muy parecida a la funcin mktime(), a excepcin de que los parmetros que se pasan en la llamada a la funcin representan la fecha en formato GMT gmstrftime (format, timestamp): Da formato a una fecha/hora GMT segn las convenciones locales. Al igual que en las funciones anteriores, la fecha devuelta es la de GMT; por lo dems, es muy parecida a la funcin strftime(). microtime(void): Devuelve una cadena compuesta de dos elementos "msec sec", donde, sec, representa los segundo transcurridos desde la fecha inicial de referencia, es decir, el 1 de enero de 1970 a las 00:00:00, mientras que la primera parte, msec, representa los microsegundos restantes. Ambas porciones se devuelven en
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

145 unidades de segundo y esta funcin slo est disponible en los operativos que soporten la llamada al sistema gettimeofday(). mktime (hora, min, seg, mes, da, ao [,is_dst]): Esta funcin devuelve la marca de tiempo (el nmero de segundo transcurridos desde el 1 de enero de 1970 a las 00:00:00), correspondiente a la fecha y hora pasadas a la funcin como parmetros. Esta funcin es especialmente til para realizar clculos matemticos con las fechas o validaciones de ellas. Los parmetros se toman de izquierda a derecha deforma que, si alguno de ellos se omite, se sustituye por el valor de la fecha y hora actual correspondiente. Ninguno de los valores de da, mes y ao pueden tomar el valor 0. El parmetro is_dst se utiliza para indicar si se tiene en cuenta el horario de verano o no, 1 corresponde a horario de verano y 0 si no, por defecto tiene el valor de -1, que indica a PHP que decida cul es el valor correcto del parmetro. strftime(format, timestamp): Esta funcin nos permite dar un formato especfico de fecha y hora a la marca de tiempo que se le pasa como parmetro. En caso de no proporcionar este parmetro, se tomar por defecto la marca de tiempo correspondiente al instante en que se ejecuta la funcin. Los formatos posibles a tener en cuenta se especifican en la siguiente tabla: sistemas

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

146

Valores %a %A %b %B %c %d %H %I %j %m %M %p %s %w %W %x %X %y %Y %Z %%

Descripcin Nombre del da de la semana abreviado Nombre del da de la semana completo Nombre del mes abreviado Nombre del mes completo Representacin de fecha y hora preferidas en el idioma actual Da del mes en nmero (de 00 a 31) Hora como un nmero de 00 a 23 Hora como un nmero de 01 a 12 Da del ao como un nmero de 001 a 366 Mes como un nmero de 01 a 12 Minutos en nmero de 00 a 59 am o pm, segn la hora dada, o las cadenas correspondientes en el idioma actual Segundos en nmero de 00 a 59 Nmero de la semana en el ao, empezando con el primer domingo como el primer da de la primera semana Nmero de la semana en el ao, empezando con el primer lunes como el primer da de la primera semana Da de la semana en nmero (el domingo es el 0) Representacin preferida de la fecha sin la hora Representacin preferida de la hora sin la fecha Ao en nmero de 00 a 99 Ao en nmero de cuatro cifras Nombre o abreviatura de la zona horaria

A continuacin se muestra el mismo ejemplo anterior para que aparezcan los valores en castellano.
<?php setlocale(LC_ALL, "SP"); //Formateado para Windows echo "Hoy es ", strftime("%A"), ", ", strftime("%d"), " de ", strftime("%B"), " de ", strftime("%Y"), "<br>\n"; echo strftime("Hoy es %A, %d de %B de %Y"), "<br>\n"; echo strftime("Son las %I:%M:%S %a"), "<br>\n"; echo "La fecha dada fue ", strftime("%A", 980936503), " de ", strftime("%B", 980936503), " de ", strftime("%Y", 980936503), "<br>\n"; echo "Eran las ", strftime("%I:%M:%S", 980936503), "<br>\n"; ?>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

147

Habrs observado en el ejemplo anterior el uso de la funcin setlocale(). sta no trabaja directamente con fechas, aunque s est relacionada con las funciones que las muestran. La llamada a setlocale() permite establecer el idioma en el que aparecern los valores de las fechas, los caracteres separadores decimales y en general toda aquella informacin que depende de la configuracin regional de la mquina desde la que se ejecuta el script. setlocal(Categora, Pas); Categora: LC_CTYPE para la conversin de cadenas a la configuracin regional. LC_NUMERIC para los separadores numricos. LC_TIME para aplicar formatos de fecha y hora con strftime(). LC_ALL aplica todas las anteriores. Pas Permite especificar el idioma con el que se mostrarn los valores devueltos por las funciones indicadas. Si no se configura ninguno, es decir, es la cadena vaca , se tomarn los valores de las variables de entorno. time(void): Devuelve la hora actual como nmero de segundos transcurridos desde las 00:00:00 del 1 de enero de 1970 GMT (Unix Epoch). strtotime(cad_fecha [,timestamp]): Esta funcin traduce una cadena que contiene un texto en ingles que hacer referencia a una fecha en su correspondiente marca de tiempo relativa a la marca de tiempo dada en el parmetro opcional timestamp, o bien, a ala marca de tiempo actual, si este parmetro no se proporciona en la llamada a la funcin.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

148

4. MENSAJES HTTP.
4.1. EL PROTOCOLO HTTP.
Este es un sencillo protocolo cliente-servidor que articula los intercambios de informacin entre los clientes y los servidores web a travs de operaciones simples de tipo solicitud/respuesta. Bsicamente controla el modo en el que los clientes web solicitan recursos de los servidores web y el modo en que stos les envan dichos recursos de vuelta. Todos los recursos proporcionados por un servidor web (documentos HTML, grficos, videos, ficheros de sonido..) estn asociados a un URL(Localizador Uniforme de Recursos).

4.2. ESTRUCTURA DE LOS MENSAJES HTTP.


Las peticiones y repuestas se envan como mensajes de texto que se componen en dos partes, una cabecera y un cuerpo (ambos elementos se separan en el mensaje mediante una lnea en blanco). Solo existen dos tipos de mensajes, uno para realizar peticiones y otro para responderlas. Las peticiones siempre cuentan con cabecera y, en algunas ocasiones, con cuerpo; sin embargo, las respuestas en la mayora de las ocasiones cuentan con ambos componentes. La estructura de estos mensajes se puede resumir en la siguiente tabla:

Tipo de Mensaje Peticin

Respuesta

Componente Comando http Cabeceras de la peticin Lnea en Blanco (separador) Informacin Adicional Resultado de la Peticin Cabeceras de la Respuesta Lnea en Blanco (separador) Informacin Adicional

4.3. Formularios en HTML


Un formulario HTML es una seccin de un documento que contiene texto normal, etiquetas HTML y elementos especiales llamados controles (casillas de verificacin o checkboxes, radiobotones, mens desplegables, etc.) y rtulos (labels) asociados a estos controles Los usuarios normalmente completan un formulario modificando sus controles (introduciendo texto, seleccionando objetos de un men, etc.), antes de enviar el formulario a un agente para que lo procese (por ejemplo, a un servidor Web, a un servidor de correo, etc.).

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

149 4.3.1. El elemento FORM Todos los controles presentes en el formulario, para que sean efectivos, deben aparecer incluidos dentro de un elemento form de HTML. La etiqueta FORM acta, por tanto, como contenedor de controles. Pero, adems, especifica entre otros: El programa que maneja los datos del formulario una vez haya sido completado y enviado (atributo action). El programa receptor debe ser capaz de interpretar las parejas nombre/valor para poder hacer uso de ellas. La forma en que se envan los datos del usuario al servidor (atributo method). El tipo MINE usado para enviar los datos del formulario (atributo enctype). El valor por defecto de este atributo es application/x-wwwfrom-urlencoded. Juegos de caracteres que acepta el servidor para poder manejar este formulario (atributo accept-charset). Los agentes de usuario pueden avisar al usuario del valor de este atributo y/o restringir al usuario esta posibilidad de, introducir caracteres no reconocidos.

4.3.2. Envi de formularios al servidor


El atributo method del elemento form especifica el mtodo HTTP usado para enviar los datos del formulario al agente procesador.

Post: los datos del formulario se incluyen en el cuerpo del mensaje que se enva al agente procesador.

El conjunto de datos del formulario que se enva al agente servidor es una secuencia de parejas nombre_control/valor construida partir de los elementos del formulario. Cada uno de los controles tiene asociado un nombre que viene dado por su atributo name. De igual forma, cada control tiene tanto un valor inicial, como un valor actual, que ambas cadenas de caracteres. Formularios en PHP Cuando se enva un formulario para su procesamiento, se produce el emparejamiento de sus controles, a travs de sus respectivos nombres, con los valores actuales que tienen. Estas parejas variable-valor configuran el conjunto de datos del formulario que se envan al agente servidor. Como hemos visto, dependiendo del mtodo HTTP usado (get o post), una vez la informacin se enviara formando parte de la cadena de consultas (Query string) que configura la solicitud y, otras veces, formando parte del cuerpo del mensaje.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

150

PHP, a travs de un conjunto de variables globales, es capaz de recuperar el conjunto de datos del formulario que han sido enviados desde el cliente (esto es, el navegador) para, despus, poder trabajar con ellos. Las tres variables principales para realizar esta operacin son:

Variable
_POST _GET _REQUEST

Contenido
Array que contiene las variables pasadas a travs del mtodo POST su uso es anlogo al array Array que contiene las variables pasadas a travs del mtodo GET su uso es anlogo al array Array que contiene las variables pasadas a travs de cualquier mecanismo de entrada

Ejemplo de paso de valores de formulario a la misma pgina:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Documento sin t&iacute;tulo</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <?php if(!$_POST){ ?> <center><h1>Antes de acceder tienes que teclear tu nombre de Usuario<br> y tu Contrasea</h1></center> <table width="800" border="0" align="center" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <tr> <td width="192" height="92">&nbsp;</td> <td width="147">&nbsp;</td> <td width="204">&nbsp;</td> <td width="257">&nbsp;</td> </tr> <tr> <td height="106"></td> <td rowspan="2" valign="top"><div align="right">USUARIO : <br> <br> PASSWORD : <br> <br> </div></td> <td valign="top"><form name="form1" method="post" action=""> <input name="user" type="text" id="user" size="20"> <br> <br> <input name="psw" type="password" id="psw"> <br> <br> <input type="submit" name="Submit" value="Enviar"> <br> </form></td> I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

151
<td></td> </tr> <tr> <td height="13"></td> <td></td> <td></td> </tr> <tr> <td height="398">&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> </table> <?php }else{ if(($_POST['user'] == 'David') && ($_POST['psw'] == 'olidav')){ echo "<center> Bienvenido $_POST[user] "; echo "<br><hr>"; foreach($_POST as $clave => $valor) echo "<i>$clave</I> = $valor <br>"; echo "</center>"; }else{ echo "<center><h1>Acceso denegado tu nombre o contrasea no se oncontro <br> en la base de datos<h1>"; echo "<pre><br><h2><a href='javascript:history.go(1)'>Volver<h2></a><pre>"; } } ?> </body> </html>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

152

4.4. ESTRUCTURA DE LAS COOKIES


Bsicamente, las cookies son archivos de texto ASCII que almacenan informacin siguiendo una estructura bsica de pares identificadores = valor. Su tamao es relativamente pequeo, no superando en ningn caso los 4 Kb. El modo en que almacenan, los directorios en que se almacenan y resto de caractersticas propias de una operacin de lectura/escritura sobre disco dependen en gran manera del sistema operativo y del navegador que tenga instalado el equipo cliente. De igual forma, la posibilidad de hacer uso de cookies dependen de que el software utilizado pueda acceder a la aplicacin Web (normalmente un navegador) cuente con estas caractersticas y que, adems, este habilitada. La siguiente tabla nos muestra la estructura bsica de una cookie: Elemento
Nombre Valor Caducidad Dominio Ruta Seguro

Significado
Indica el nombre que se le ha dado a la cookie. Indica el valor de la cookie, es decir, el contenido que tiene. Indica cual es el tiempo de validez de la cookie. Indica el rango de dominios en los cuales es valida la cookie. Contiene el directorio a partir del cual la cookie tiene validez. Indica que la cookie ser transmitida nicamente por un canal seguro SSL.

Es muy importante tener en cuenta que todo el mantenimiento de las cookies se realiza en la cabecera del mensaje HTTP y, por tanto, deben ser manejadas antes de que se envi cualquier otra informacin al navegador (la parte del cuerpo del mensaje HTTP); en caso contrario, obtendremos un error. Por otra parte, el valor de una cookie tiene preferencia sobre los valores pasados mediante un formulario, es decir, cuando un formulario y una cookie hacen uso de los mismos identificadores, los valores de las cookies sobrescribirn los valores de las entradas del formulario.

4.4.1. Utilizacin de cookies en PHP


PHP propone una sola funcin para el manejo bsico de cookies (creacin y borrado) cuya sintaxis es la siguiente: Int setcookie (string nombre [, string valor] [, int caducidad] [, string ruta] [, string dominio] . [, int seguro]); Para acceder al contenido, se har uso de una variable global, tal y como veremos mas adelante.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

153

4.4.1.1. Creacin de cookies


Como se puede observar en la definicin de la funcin setcookie ( ), cada uno de los parmetro coinciden con los elementos que componen la estructura bsica de una cookie. Tambin vemos que el nico argumento obligatorio en la llamada al la funcin es el nombre que se le asigna a la cookie. Sin embargo, en el caso de la creacin es necesario, al menos, que se asigne un valor inicial. Cuando no queremos hacer uso de los parmetros de tipo string, se deben remplazar con la cadena vaca () y los tipo int, con el valor 0. si no usamos el parmetro caducidad, se tomara por defecto el tiempo que dure la sesin de trabajo activa en el navegador. De igual modo, si no se utilizan los parmetros ruta y dominio, se tomara por defecto el camino y el dominio del servidor en los cuales se ha creado la cookie.

4.4.1.2. Eliminacin de cookies


Como ya sabemos, para borrar una cookie, usamos la misma funcin que para crearla: setcookie ( ), solo que en este caso la llamada de la funcin solo contendr como parmetro el nombre de la cookie que deseamos eliminar del sistema. Setcookie(nombre_de_la_cookie) ;

4.4.1.3. Consulta de contenidos


Para poder acceder a los contenidos de las cookies, PHP proporciona una variable global consiste en un array asociativo formado por todas las variables pasadas a travs de las cookies. El la variable $_COOKIE: $_COOKIE[nombre_de_la_cookie] Ejemplo de Cookes.
<?php $accesos=1; if(isset($_COOKIE['num_accesos'])){//ver si fue inicializada la cooke $accesos=$_COOKIE['num_accesos']+1; } setcookie("num_accesos",$accesos,time()+3600); ?> <HTML> <HEAD> <TITLE>Trabajando con Cookies</TITLE> </HEAD> <BODY> <CENTER> <H2>Trabajando con cookies</H2><br> <H3>Contador de accesos</H3> I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

154
<?php if($accesos>1) echo "Has accedido a esta pgina <B>$accesos</B> veces"; else echo "Es la primera vez que accedes a esta pgina"; ?> <BR><BR><BR> <PRE><A HREF="cookies1.php">Actualizar</A> | HREF="cookies2.php">Eliminar</A></PRE> </CENTER> </BODY> </HTML>

<A

Ejemplo de eliminacin de una cooke.


<?php setcookie("num_accesos"); ?> <HTML> <HEAD> <TITLE>Trabajando con Cookies</TITLE> </HEAD> <BODY> <CENTER> <H2>Trabajando con cookies</H2><br> <H3>Contador de accesos borrado</H3> <BR><BR><BR> <PRE><A HREF="cookies1.php">volver</A></PRE> </CENTER> </BODY> </HTML>

4.5. SESIONES EN PHP


A lo largo de este capitulo hemos visto que tenemos tres formas bsicas de hacer que la informacin generada en un script estuviera disponible en scripts diferentes al de creacin; utilizando formularios, pasando las variables y sus valores a travs de la URL, o bien, definiendo cookies.

4.5.1. Creacin de sesiones


La configuracin por defecto PHP tiene deshabilitadas las sesiones; esto quiere decir que, cuando queremos hacer uso de ellas, debemos indicrselo de forma explicita. Cambiando la configuracin (modificando el valor de la directiva session.auto_start a 1 en el archivo de configuracin php.ini), podemos activar por defecto las sesiones en PHP de modo que en el primer acceso de cada usuario a nuestro sistema se le crea una sesin. El modo principal de activar el uso de sesiones cuando lo deseemos es hacer uso de la funcin session_start ( ) cuya sintaxis es la siguiente: bool session_start ( )
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

155

Esta funcin crea una nueva sesin y genera el identificador, o retoma la sesin en caso de que ya existiera, utilizando el identificador de sesin que se haba propagado haciendo uso de la URL o de cookies. Como hemos dicho anteriormente, en el instante en que se crea una sesion, se genera un identificador unico para ella. Haciendo uso de la funcion session_id( ), podemos recuperar o modificar dicho valor. Su sintaxis es la siguiente: String session_id ([string id]) Tambin es posible identificar a las sesiones asignndole un nombre especfico. Para ello, utilizaremos la funcin session_name( ) que tiene la siguiente sintaxis: String session_name([string nombre])

4.5.2. Acceso a las variables de sesin


El modo de acceso a las variables de sesin es a travs del array asociativo $_SESSION disponible como variable global ($HTTP_SESSIONS_VARS en las versiones anteriores a la 4.2.0)

4.5.3. Otra funciones asociadas con el manejo de sesiones


En este apartado se muestra alguna de las funciones mas representativas que PHP proporciona para el trabajo con sesiones.

Session_destroy ( ): Elimina todos los datos asociados con la sesin actual, sin modificar las variables globales asociadas a la sesin ni la cookie se sesin. Session_unset ( ): Libera todos los recursos asociados a las variables de sesin actualmente registradas. Session_encode ( ): Codifica los datos de la sesin actual en una cadena. Session_encode (datos): Decodifica los datos de una sesin pasados como argumentos en una cadena, generando las variables guardadas en dicha sesin. Session_get_cookie_params ( ): Obtiene los parmetros de la cookie de sesin (duracin, camino, dominio y seguridad), en caso de que este haya sido el mtodo elegido para gestionar las sesiones.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

156 Session__set_cookie_params (tiempo [, camino [, dominio [, seguridad] ] ] ): Nos permite cambiar los parmetros de la cookie de sesin actual. session_save_path ( [ string camino] ): Nos permite obtener o modificar la ruta donde se guardan los datos de la sesin actual.

Ejemplo de sessiones y creacin de variables de session:


<?php session_start(); if (isset($_SESSION['contador'])) { $_SESSION['contador']++; } else { $_SESSION['contador'] = 0; $_SESSION['clave']= 12; } $nombre_anterior = session_name('SESION_CONTADOR'); ?> <HTML> <HEAD> <TITLE>Trabajando con Sesiones</TITLE> </HEAD> <BODY> <CENTER> <H2>Trabajando con Sesiones</H2> <TABLE BORDER="1" CELLPADDING="2" CELLSPACING="4"> <TR ALIGN="center" BGCOLOR="yellow"> <TD COLSPAN="2"><B>Informacin de la Sesin</B></TD> </TR> <TR> <TD BGCOLOR="yellow">ID</TD> <TD><?php echo session_id() ?></TD> </TR> <TR> <TD BGCOLOR="yellow">Nmero de accesos</TD> <TD><?php echo $_SESSION['contador'] . ", " . $_SESSION['clave'];?></TD> </TR> <TR> <TD BGCOLOR="yellow">Nombre actual</TD> <TD><?php echo session_name() ?></TD> </TR> <TR> <TD BGCOLOR="yellow">Nombre anterior</TD> <TD><?php echo $nombre_anterior ?></TD> </TR> </TABLE> <BR><PRE> <A HREF="sesiones1.php">Actualizar</A> | <A HREF="sesiones2.php">Ver Resetear contador</A> </PRE> </CENTER> </BODY> </HTML>

Eliminacin de la variable de session:


<?php session_start(); I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

157

//unset($_SESSION['contador']); ?> <HTML> <HEAD> <TITLE>Trabajando con Sesiones</TITLE> </HEAD> <BODY> <CENTER> <H2>Trabajando con Sesiones</H2><BR><BR> <P>Variable <B>'contador'</B> actualizada<BR> de la sesin <B><?php echo $_SESSION['contador'] . "," . $_SESSION['clave']; //echo session_id() ?></B><BR> con nombre <B><?php echo session_name() ?></B> <BR><BR><A HREF="sesiones1.php">volver</A></P> </CENTER> </BODY> </HTML>

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

158

5. ACCESO A BASES DE DATOS

5.1. CONEXIONES USANDO ODBC 5.1.1. Introduccin


Una vez que el servidor Web ha solicitado al intrprete de PHP la ejecucin de un determinado script, este se puede encontrar con sentencias que pretenden manipular los datos almacenados en una base de datos. La forma en que el intrprete de PHP y la base de datos se pueden conectar es a travs de un ODBC (Open Database Connectivity). Este consiste en una API estndar, donde para utilizarla hace falta instalar.

5.1.2. Conexin a travs de ODBC


En entornos con sistema operativo Windows, la conexin con ODBC se establece en la opcin de Fuentes de Datos ODBC, y para entrar a esta opcin tenemos dos formas: 1. En Windows 98 y Me: situarnos en el men Inicio-Panel de control-Fuentes de datos ODBC. En Windows XP y 2000: entrar en el men Inicio-Panel de controlHerramientas administrativas-Orgenes de datos (ODBC). 2. Buscar el archivo odbcad32.exe, esto se puede hacer por medio del men InicioBuscar-Archivos y carpetas En esta opcin nos colocaremos en la pestaa que hace mencin a DSN de sistema, en esta pulsaremos el botn Agregar, al hacer esto nos proporcionar la siguiente ventana:

En esta tendremos que seleccionar el controlador adecuado y dar clic en el botn finalizar. Una vez elegido el controlador nos presentar otra ventana como la siguiente:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

159

En esta ventana proporcionaremos el nombre del origen de datos o DSN que va a ser el encargado de establecer la conexin. Posterior a esto presionaremos el botn Seleccionar en donde localizaremos el archivo de la base de datos y pulsaremos aceptar. Al hacer esto el origen creado aparecer en la lista de DSN de sistema. Concluido el proceso anterior, se puede decir que ya estamos listos para emplear la conexin a base de datos en PHP. Cabe mencionar que el nombre de la base de datos a emplear en los siguientes temas es Sistema.mdb, el DSN es SICE, nombre de usuario es sice y la contrasea sice. La base de datos tiene las siguientes tablas: Artculo con los campos, idArticulo, descripcin, existencia, mximo, mnimo, idtipoarticulo (como llave fornea de la tabla Tipoartculo); la tabla tipoarticulo con los campos, idtipoarticulo y tipo. Adems estableciendo una relacin de uno a muchos de la tabla de Tipoarticulo a la de Articulo.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

160

5.2. Insert, Update y Delete 5.2.1. Introduccin


Una de las funciones que se emplea con las bases de datos es la insercin, la cual facilita la inclusin de informacin que posteriormente se tratar de forma pertinente. Para llevar a cabo esto PHP proporciona funciones que nos permitirn adicionar informacin desde una pgina hacia la base de datos: 1. odbc_connect (DSN,Usuario,Contrasea); esta funcin establece la conexin con el gestor de bases de datos, y necesita los siguientes parmetros: DSN, generado a partir de una conexin con ODBC; Usuario es el proporcionado al realizar la conexin con ODBC, si se genero un ODBC con SQL el nombre del usuario por defecto es SA; Contrasea es la que se coloca al generar un ODBC, para darle seguridad a la base de datos. Devuelve false en caso de no tener xito en la conexin. 2. odbc_do (conexin, instruccin_SQL); ejecuta la instruccin SQL (insert, update o delete) asociada con la conexin establecida con odbc_connect. Devuelve false en caso de haber un error en la ejecucin. 3. odbc_close (conexin); cierra la conexin que se abri con la funcin odbc_connect.

5.2.2. Insertando datos en PHP


Para llevar a cabo la insercin de informacin a travs de una interfaz desarrollada en PHP, se efectan los siguientes pasos: 1. Crear un nuevo archivo html en Dreamweaver, con la finalidad de formar el esquema para introducir datos. En este archivo inserta un formulario y dentro de este coloca las etiquetas, cajas de texto y botnes para ingresar informacin, el esquema se genera a partir de la tabla de su base de datos en la cual desee introducir informacin. Un ejemplo de esquema se muestra a continuacin: NOTA: es muy importante destacar la inclusin del formulario para su posterior trabajo con los archivos PHP, que nos brindarn la base para realizar la conexin con la base de datos.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

161

2. Una vez generado el esquema se procede a modificar algunas de las propiedades del mismo, para hacer esto nos posicionaremos en la parte de cdigo donde localizaremos la siguiente lnea de cdigo:

En esta lnea se modificar la accin del formulario, en donde se escribir el nombre del archivo PHP con el cual se ligara. En este caso se indica que el nombre del archivo es insert.php.

3. Despus de haber hecho esto, se procede a crear el archivo PHP. Para crearlo hay que dirigirse al men Archivo-Nuevo-Pgina dinmica-Seleccionar PHP y presionar el botn crear. La estructura general que tiene el archivo .php es la siguiente: 9 9 9 9 Se establece la conexin con el gestor de base de datos. Se forma la instruccin SQL que ejecutar la insercin. Se manda ejecutar la instruccin SQL. Se cierra la conexin.

Para este ejemplo el cdigo del archivo insert.php es el siguiente:

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

162
<?php $clave = $_POST['clave']; $desc = $_POST['desc']; $exi = $_POST['exi']; $max = $_POST['max']; $min = $_POST['min']; $tipo = $_POST['tipo']; // Establece la conexin con el origen de datos $conexion = odbc_connect ("SICE", "sice", "sice"); if (!$conexion) echo "No contesta el servidor."; if (empty($clave) && empty($desc) && empty($tipo)) echo "Falta informacin en las cajas de texto."; else { $insert = "Insert into Articulo (IdArticulo,Descripcion,Existencia,Maximo,Minimo,IdTipoArticulo) values($clave,'$desc',$exi,$max,$min,$tipo);"; $resul = odbc_do($conexion, $insert); if ($resul) echo "Producto insertado"; } odbc_close($conexion); ?>

4. Una vez hecho el archivo .php se procede a cargar los dos archivos al servidor y ejecutar el archivo .htm, para verificar si funciona correctamente la insercin de los datos. Para ejecutarlo necesitamos presionar la tecla F12. 5. Hay que mencionar que el proceso para realizar los update y delete son iguales, excepto por la instruccin SQL que se va a ejecutar en la funcin odbc_do.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

163

5.3. Querys y cursores 5.3.1. Introduccin


La obtencin y presentacin de informacin de una base de datos se puede hacer en PHP mediante una consulta (query) y el empleo de cursores, siendo estos quienes hacen el recorrido por la estructura que contiene los datos extrados por la ejecucin de la consulta. Estructura de datos obtenida por la Cursor

Como se menciono anteriormente la obtencin de informacin genera una estructura de datos de acuerdo con la ejecucin de la consulta, para manejar esta estructura PHP cuenta con un conjunto de funciones para hacerlo las cuales se detallan a continuacin: 1. odbc_num_fields (cursor); esta funcin proporciona el nmero de campos de los que se compone la estructura de datos, y requiere del parmetro cursor siendo la variable que obtiene el resultado de la ejecucin de la consulta con la instruccin odbc_do. 2. odbc_result (cursor, numero_campo); proporciona el valor del campo, de acuerdo al registro que se este recorriendo. 3. odbc_fetch_row (cursor); permite conocer el tamao de la estructura obtenida por la consulta, adems en un proceso de iteracin determina si hay filas por recorrer devolviendo true en caso afirmativo o false en caso de no haberlas. 4. odbc_free_result (cursor); libera los recursos que genero la obtencin de informacin.

5.3.2. Consultando informacin en PHP


Para tener una nocin general del procedimiento a seguir para la ejecucin de una consulta se describen los siguientes pasos: 1. Se repiten los primeros 2 pasos del apartado 5.2.2 Insertando datos en PHP, pero para este caso el nombre del archivo ser consulta.php. 2. Despus de haber hecho lo anterior se pasa a crear el archivo .php, de la siguiente manera: ir al men Archivo-Nuevo-Pgina dinmica-Seleccionar PHP y pulsar el botn crear. La estructura general que tiene el archivo .php es la siguiente: 9 Se establece la conexin con la base de datos. 9 Se forma la instruccin SQL que ejecutar la consulta.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

164 9 Se solicita la ejecucin de la instruccin SQL. 9 Se recibe un identificador del cursor donde estn contenidos los datos obtenidos a travs del gestor. 9 Se presenta la informacin obtenida. 9 Se liberan los recursos utilizados y se cierra la conexin. El cdigo del archivo consulta.php se presenta a continuacin:
<form name="form1" method="post" action=""> <table width="691" border="1"> <tr> <td width="35"><div align="center">Clave</div></td> <td width="213"><div align="center">Descripci&oacute;n</div></td> <td width="76"><div align="center">Existencia</div></td> <td width="69"><div align="center">M&aacute;ximo</div></td> <td width="79"><div align="center">M&iacute;nimo</div></td> <td width="179"><div align="center">Tipo de art&iacute;culo </div></td> </tr> <div align="center"> <?php $desc = $_POST['desc']; $tipo = $_POST['tipo']; // Se establece la conexin con el gestor de BD $conexion = odbc_connect ("SICE","sice","sice"); // Establece si la consulta se hace por medio de un dato o no if (empty($desc)) { $query = "Select IdArticulo,Descripcion,Existencia,Maximo,Minimo,Tipo "; $query .= "from Articulo A inner join TipoArticulo B on (A.IdTipoArticulo=B.IdTipoArticulo) "; $query .= "where B.IdTipoArticulo= $tipo "; $resultado = odbc_do ($conexion, $query); $ncampos = odbc_num_fields ($resultado); $nfilas = 0;//odbc_num_rows ($resultado); // Se recorre el cursor while (odbc_fetch_row ($resultado)) { $nfilas ++; echo "<TR>"; for ($i=1; $i <= $ncampos; $i ++) { echo "<td align='center'>"; if (odbc_result($resultado, $i)) echo odbc_result($resultado, $i); echo "</td>"; } // Llave del for echo "</td>"; echo "\n"; }// Llave del if } else { $query = "Select IdArticulo,Descripcion,Existencia,Maximo,Minimo,Tipo "; $query .= "from Articulo A inner join TipoArticulo B on (A.IdTipoArticulo=B.IdTipoArticulo) "; $query .= "where Descripcion= '$desc'"; $resultado = odbc_do ($conexion, $query); $ncampos = odbc_num_fields ($resultado); $nfilas = odbc_num_rows ($resultado); echo "<TR>"; for ($i=1; $i <= $ncampos; $i++) { echo "<td align='center'>"; if (odbc_result ($resultado, $i)) echo odbc_result ($resultado, $i); echo "</td>"; }// Llave del for

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

165
echo "</tr>"; echo "\n"; }// Llave del else // Si no hay datos se indica if ($nfilas == 0) { echo "<tr><td colspan=9><center>"; echo "No hay articulos de acuerdo a los parmetros especficados."; echo "</center></td></tr>\n"; } echo "</table>\n"; //echo "<br><hr><br>\n"; // Se liberan los recursos utilizados por la consulta odbc_free_result ($resultado); // Se cierra la conexin odbc_close ($conexion); ?> </form>

3. Una vez hecho el archivo .php se procede a cargar los dos archivos al servidor y ejecutar el archivo .htm. Para verificar si funciona correctamente la consulta se puede introducir un nombre de artculo o simplemente presionar el botn enviar y as ejecutar la consulta de acuerdo al tipo que este seleccionado el el men. Para ejecutarlo necesitamos presionar la tecla F12.

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

166

Anexo I. COMANDOS GENERALES DE HTML. Resumen de las etiquetas HTML ms importantes.


Etiquetas <ul></ul> HTML
<html> </html> <head> </head> <title> </title> <body> </body> <h1></h1> <h2></h2> <h3></h3> <h4></h4> <h5></h5> <h6></h6> <b></b> <i></i> <u></u> &nbsp; <p></p> Unordered list lista Significado con vietas Hyper Text Markup Language Cabecera Ttulo Cuerpo Heading 1 Ttulo 1 Ttulo 2 Ttulo 3 Ttulo 4 Ttulo 5 Ttulo 6 Bold negrita Italics cursiva Underlined subrayado Non breaking space Paragraph prrafo Define el principio y el final de una lista no numerada;Propiedades introducen una sangra Definen el principio y el final del documento Definen el principio y el final de la cabecera Parte de la cabecera, el contenido aparece en la lnea de cabecera Definen el principio y el final del cuerpo principal del texto Negrita, tamao mayor Negrita, tamao grande Negrita, tamao medio Negrita, normal Negrita, pequeo Negrita, muy pequeo Atributo de texto Atributo de texto Atributo de texto, no es aconsejable utilizar subrayados por que existe el peligro de confundirlo con hipervnculos Caracter en blanco protegido Define un prrafo y crea automticamente un espacio entre un prrafo y el siguiente. La etiqueta final no es imprescindible Crea un salto de lnea, no necesita una etiqueta final 1. ste es el primer punto Representacin 2. ste es el segundo punto

Ttulo 1
Ttulo 2
Ttulo 3
Ttulo 4
Ttulo 5
Ttulo 6

Ejemplo en negrita

La cursiva esta inclinada


El subrayado parece ms importante 12 de octubre ste es un (breve) prrafo. sta es otro prrafo ms largo. sta es una mini-oracin. sta oracin empieza con una lnea nueva, pero no introduce ningn prrafo nuevo.

<br/>

Break salto de lnea

</hr> <p>&nbsp;</p> <li></li> <ol></ol>

Horizontal rule lnea Introduce una lnea horizontal, no necesita ____________________ horizontal una etiqueta final Prrafo con caracteres en blanco protegidos List entrada de lista Ordered list lista numerada Crea un prrafo en blanco, un espacio vaco Puntos de enumeracin; el smbolo utilizado para la enumeracin depende de la definicin (consulte celdas inferiores) Define el principio y el final de una lista numerada; introducen una sangra

Consultar celdas inferiores ste es el primer punto ste es el segundo punto

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

167

3.0.2 Colores para enlaces y fuentes


Nombre ingls black silver gray white maroon red purple fuchsia green lime olive yellow navy blue teal aqua hexadecimal #000000 #c0c0c0 #808080 #ffffff #800000 #ff0000 #800080 #ff00ff #008000 #00ff00 #808000 #ffff00 #000080 #0000ff #008080 #00ffff Nombre espaol (negro) (plateado) (gris) (blanco) (marrn) (rojo) (lila) (fucsia) (verde oscuro) (verde limn) (verde oliva) (amarillo) (azul oscuro) (azul) (verde azulado) (azul cielo)

3.0.3 Atributos de la etiqueta body


Atributo background bgcolor text link vlink alink Notas Grfico de fondo Color de fondo Color de texto Vnculo no visitado Vnculo visitado Vnculo activo, color cuando se hace clic con le ratn en el enlace Ejemplo background=jeffe.gif bgcolor=yellow text=#800080 link=green vlink=red alink=white

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

168

3.0.4 Opciones avanzadas de configuracin de la fuente


Notas Texto de definicin, HTML significa Lenguaje de <dfn>...</dfn> explicacin de conceptos, marcado de hipertexto con frecuencia en cursiva <h2>...</h2> 6 niveles de ttulo en total ste es un ttulo 2 Enftico, resaltado, con <cm>...</cm> resaltado frecuencia en negrita Muy enftico, con frecuencia <strong>...</strong> strong en negrita Introduzca ahormad home, y siga Para el cdigo fuente <code>...</code> escribiendo informtico Introduzca en primer lugar El texto que debe <kbd>...<kbd> reproducir cd, y a continuacin introducirse con el teclado dir Consulte tambin Dave Raggett Notas bibliogrficas, <cite>...</cite> u. A. :HTML 4. Addison-Wesley normalmente en cursiva 1998. Se muestra el texto tal y <samp>...</samp> Observe $!%; t y lo ver. como se ha introducido Para citas cortas en el texto, Hola, dijo el caracol, vuelvo a <q>...</q> tambin pueden utilizarse estar aqu comillas <i>...</I> <tt>...</tt> <b>...</b> <big>...</big> <small>...</small> <sub>...</sub> <sup>...</sup> <u>...</u> <strike>...</strike> Esto esta en cursiva Italics, cursiva Cdigo fuente Representacin en navegador

Fuente courier Teletype, teletipo La negrita tambin es muy til Bold, negrita Fuente grande, por ejemplo, Haba una vez para destacar las letras iniciales Small is beautiful. Para Fuentes pequeas H2O Subscript, subndice 2 10 Superscript, superndice Puede confundirse con los Subrayado, ya no se utiliza enlaces. ste texto est tachado. Tachado, no debe utilizarse

I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com

Você também pode gostar