PHP4

168
I.S.C. Alejandro Guzmán Zazueta [email protected] 1 Manual de PHP

Transcript of PHP4

Page 1: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

1

Manual de PHP

Page 2: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

2

INDICE 1. PHP Y APACHE

1.1. INTRODUCCIÓN PHP 1.2. INTÉRPRETE 1.3. EJECUCIÓN DE PHP EN EL SERVIDOR 1.4. INSTALACIÓN DE APACHE 1.5. INSTALACIÓN DE PHP 4 1.6. INSTALACIÓN Y CONFIGURACIÓN DE DREAMWEAVER

2. DREAMWEAVER

2.1. BIENVENIDOS A DREAMWEAVER MX 2004 2.2. IMÁGENES. 2.3. INSERTAR TABLA. 2.4. MODIFICAR TABLA. 2.5. FORMULARIOS 2.6. CAMPO DE TEXTO. 2.7. BOTÓN DE OPCIÓN. 2.8. CASILLAS DE VERIFICACIÓN. 2.9. LISTAS Y MENÚS. 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. MENÚS DESPLEGABLES. 2.14. MARCOS.

3. LENGUAJE PHP.

3.1. FORMATO DEL CÓDIGO PHP 3.1.1. Delimitadores 3.1.2. Extensión de los archivos en PHP 3.1.3. Comentarios 3.1.4. Fin de línea

3.2. SINTAXIS BÁSICA 3.2.1. Variables 3.2.2. Tipos de datos

3.2.2.1. Enteros 3.2.2.2. Números en punto flotante 3.2.2.3. Booleano 3.2.2.4. Cadenas 3.2.2.5. Arrays 3.2.2.6. Conversión 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

Page 3: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 Aritméticos 3.2.6.2. Operadores de Asignación 3.2.6.3. Operadores de Comparación 3.2.6.4. Operadores de incremento/decremento 3.2.6.5. Operadores Lógicos 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. Inclusión de archivos

3.3.12.1. require() y include() 3.4. MANEJO DE CADENAS

3.4.1. Visualización de cadenas 3.4.2. Acceso al contenido 3.4.3. Búsqueda en cadenas 3.4.4. Comparación de cadenas 3.4.5. Modificación del contenido

3.4.5.1. Limpieza de cadenas 3.4.5.2. Conversión entre mayúsculas y minúsculas. 3.4.5.3. División 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

Page 4: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

4

3.5.6.1. Modificar un array 3.5.6.2. Usando arrays como pilas

3.6. FUNCIONES 3.6.1. Declaración de una función 3.6.2. Llamada a una función 3.6.3. Paso de parámetros

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. Utilización de cookies en PHP

4.4.1.1. Creación de cookies 4.4.1.2. Eliminación de cookies 4.4.1.3. Consulta de contenidos

4.5. SESIONES EN PHP 4.5.1. Creación de sesiones

4.5.2. Acceso a las variables de sesión 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. Introducción 5.1.2. Conexión a través de ODBC

5.2. INSERT, UPDATE Y DELETE 5.2.1. Introducción 5.2.2. Insertando datos en PHP

5.3. QUERYS Y CURSORES 5.3.1. Introducción 5.3.2. Consultando información en PHP

Page 5: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

5

1. PHP Y APACHE

1.1 INTRODUCCIÓN PHP

PHP es un lenguaje de scripting que permite la generación dinámica 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 añadir dinamismo a las páginas Web y posteriormente fue rediseñado completamente por Zeev Suraski y Andi Gutmans y rebautizado como PHP 3.0. Más tarde se volvió a rediseñar completamente el intérprete, añadiéndole más potencia y nuevas funcionalidades, para dar lugar al lenguaje que hoy se conoce como PHP4.

Es un lenguaje de programación que contiene muchos conceptos de C, Perl y Java. El código PHP está basado en documentos HTML de manera que es muy fácil incorporar información actualizada en un sitio Web.

Para activar y desactivar el <<modo PHP>> dentro de una página 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 %>

CARACTERÍSTICAS

o Es un potente y robusto lenguaje de programación basado en documentos HTML.

o Dispone de librerías de conexión con la gran mayoría de los sistemas de

gestión de bases de datos para el almacenamiento de información permanente en el servidor.

o Proporciona soporte a múltiples protocolos de comunicaciones en Internet

(http, imap, ftp, etc).

o Código fuente abierto: el código del intérprete está accesible para permitir posibles mejoras o sugerencias acerca de su desarrollo.

o Es gratuito. o Portable y multiplataforma: existen versiones del intérprete para múltiples

plataformas. Esto permite que las aplicaciones puedan ser portadas de una plataforma a otra sin necesidad de modificar ni una sola línea de código.

Page 6: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 rápidamente sitios Web

dinámicos.

1.2. INTÉRPRETE Las páginas que contienen exclusivamente código HTML se pueden desarrollar y probar sin la intervención de un servidor Web, ya que el código HTML es interpretado en el navegador del usuario. PHP se ejecuta en el servidor antes de que la página sea enviada al usuario que realizó la petición. Cuando llega una petición a un servidor Web, éste localiza el documento solicitado por el cliente y, en función de una serie de parámetros de la propia configuración del servidor, decide la acción a realizar con el documento.

Fases en la obtención de un documento estático: 1. El usuario pulsa sobre un link solicitando un documento (un archivo HTML, una

imagen en formato jpg, etc.) y el navegador envía la petición al servidor utilizando el protocolo HTTP (protocolo de transferencia de hipertexto),

2. La solicitud llega hasta el servidor Web correspondiente a través de la red. El servidor localiza el documento solicitado.

Documentos estáticos (html, jpg...)

Servidor

RESPUESTA

SOLICITUD

4

1 CLIENTE

32

Page 7: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

7

3. El servidor lee el documento del sistema de archivos y envía al cliente una copia

exacta del mismo. 4. El documento llega al cliente y se visualiza su contenido en el navegador del

usuario.

Fases en la obtención de un documento dinámico: 1. El usuario pulsa sobre un link solicitando un documento (un archivo .phtml o

.php) y el navegador envía la petición al servidor utilizando el protocolo HTTP (protocolo de transferencia de hipertexto).

2. Llega la solicitud al servidor y localiza el documento. Por la extensión del

nombre del archivo determina que se trata de un archivo que contiene código PHP y lanza el intérprete.

3. El intérprete ejecuta el script solicitado y genera un resultado (habitualmente

una página HTML) que se devuelve al servidor para que éste a su vez lo transfiera al cliente.

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 información requerida. Sin embargo, en el servidor el proceso realizado antes de enviar la información ha sido diferente, ya que en el segundo caso ha sido necesaria la intervención del intérprete de PHP para elaborar dinámicamente el contenido.

SCRIPTS PHP

Servidor

RESPUESTA

SOLICITUD

4

1 CLIENTE

32

Page 8: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

8

PHP puede ser instalado al menos de tres modos diferentes: Como un intérprete externo (modo CGI). Como una extensión del servidor (via ISAPI y NSAPI). Como un módulo interno del servidor (disponible solo para Apache).

La interfaz CGI (interfaz de pasarela común) dota de capacidades de comunicación a los servidores Web con otros programas. Esta interfaz de comunicaciones es común 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 información 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 máquina que el propio servidor. Habitualmente se emplean programas escritos en lenguajes como C, C++, Perl, etc.

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 envía la solicitud al servidor. 2. Llega la solicitud al servidor y éste localiza el programa. El servidor determina cómo

debe lanzar la ejecución del mismo.

3. Se ejecuta el programa CGI generando un contenido (habitualmente un documento

HTML) y devuelve el resultado al servidor. Éste reenvía el resultado al cliente que realizó la petición.

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 información enviada desde el cliente es necesario realizar un proceso de decodificación, puesto que dicha información se envía siguiendo las reglas de codificación de URL (permiten identificar de manera única un recurso de internet). Con PHP esto no sucede, dado que el propio intérprete se encargará de realizar el proceso de descodificación.

Aparte del modo CGI, también se puede instalar el intérprete como una extensión del servidor empleando la API correspondiente, o como un módulo adicional del servidor.

Page 9: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

9

1.3. EJECUCIÓN DE PHP EN EL SERVIDOR PHP reside y se ejecuta en la máquina en la que se encuentra el servidor Web. De esta forma el cliente lo único que recibe es el resultado generado (páginas en formato HTML, imágenes 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 página con código PHP o ASP. A diferencia de JavaScript, o de un applet Java, PHP es una tecnología que solamente se ejecuta en el lado del servidor. PHP ha sido diseñado para generar dinámicamente contenidos, y uno de sus puntos fuertes es su gran capacidad para interactuar con multitud de gestores de bases de datos. Además, también puede producir de manera dinámica código que se envía con la página HTML y se ejecuta en el lado del cliente.

1.4. INSTALACIÓN DE APACHE

Lo primero que se debe hacer es instalar el servidor Web; en nuestro caso, instalaremos Apache en su versión para Windows.

Apache es un servidor Open Source, y el más usado por los servidores en todo Internet, se puede encontrar toda la información acerca de él en su página Web: http://www.Apache.org/ (en inglés por supuesto), y se puede “bajar” de la siguiente dirección: 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:

Page 10: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

10

2º - En esta nueva ventana hacer clic en el botón Next y mostrará la siguiente:

3º - Después de haber leído la licencia del Apache y haber seleccionado la casilla de aceptación (I Accept the Terms in the Licence Agreement), hacemos clic en el botón Next, apareciendo la siguiente ventana:

Page 11: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

11

4º De nueva cuenta, hacer clic en el botón Next, y aparecerá esta otra ventana:

5º - En esta ventana se deberá teclear información en cada casilla:

- Network Domain:

Esta casilla presenta varias opciones y que es necesario atender: lo más 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 dirección IP. Nota: Si no sabe cuál es su dirección 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

- Administrator´s Email Adress:

Aquí debe escribir la dirección de correo electrónico del administrador del servidor web; por ejemplo: [email protected]

Después de haber llenado estas casillas, aparecen dos opciones más:

- 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 opción el servidor se pone a la escucha en el puerto 80.

Page 12: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 opción que se desee, hacer clic en el botón Next; entonces aparecerá esta ventana:

En esta ventana se escoge si se quiere hacer una instalación típica o personalizada, comúnmente se elige la instalación personalizada (custom) y luego se presiona el botón Next.

Page 13: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 botón Next. Después de esto, aparecerá un mensaje de confirmación y se da clic en el botón Next para que comience la instalación. Cuando ésta termine, nuevamente aparecerá una ventana, simplemente se hace clic en el botón de Finish y habrá terminado la instalación del servidor.

Una vez hecho lo anterior, es necesario ejecutar el servidor Apache eligiendo la opción Start Apache in Console, abriéndose una ventana (negra) indicando que se está ejecutando el servidor Apache.

Después de esto, abrir el explorador de Internet para ver si realmente el servidor está funcionando.

Una vez abierto, existen varias opciones según se haya llenado el campo network domain:

- Si se ha puesto la dirección IP, en la barra de dirección del explorador se escribe lo siguiente: http://nuestra dirección 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 dirección de dominio, por ejemplo david.com, se pondrá en la barra de dirección del navegador: http://localhost. Si todo es correcto aparecerá una ventana diciendo que el servidor Apache ha sido configurado exitosamente.

Page 14: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

14

1.5. INSTALACIÓN DE PHP 4 La versión de ISAPI se distribuye en un archivo en formato ZIP. Una vez obtenida debe ser descomprimido en la dirección definida (se recomienda emplear el directorio c:\PHP). A continuación se explican los pasos a seguir si el servidor es Apache. Para continuar con la instalación del servidor Apache, siga los siguientes pasos: 1.- Detenga el servidor. 2.- Posiciónese 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 cópielo a la carpeta C:\Windows. Enseguida, abra el archivo php.ini para ser configurado de acuerdo a los siguientes puntos:

Se busca la siguiente línea:

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.

Busque la parte de [sessiones] en la cual se va a configurar la siguiente línea:

session.save_path = /tmp

Aquí debe poner las ruta donde se guardarán los archivos temporales de las sesiones, posteriormente, si no existe la ruta, tendrá que crearla.

Page 15: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

15

Configuración de Apache con PHP

Antes de continuar pare el servidor Apache, y enseguida edite el archivo de configuración 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 líneas: LoadModule php4_module c:/php/sapi/php4Apache2.dll # Le indica al servidor Apache que carge el módulo php4.

Bien, lo siguiente es modificar la línea de DocumentRoot como se muestra a continuación:

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 más adelante), es importante fijarse que la barra sea "/" y no "\".

El siguiente texto a buscar es este:

<Directory "c:/Apache/Apache2/htdocs">

Page 16: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

16

Aquí se debe hacer lo mismo que antes: sustituir el directorio y poner la misma dirección que DocumentRoot, en este caso:

Directory "c:/InetPhp"

Posteriormente se agrega la siguiente línea al archivo de configuración: AddType application/x-httpd-php .php .phtml

Page 17: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

17

Esta última línea indica al servidor Apache que identifique las extensiones .php para que el módulo del intérprete entre en funcionamiento. Vuelva a poner en marcha su servidor Apache.

Page 18: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

18

1.6. INSTALACIÓN Y CONFIGURACIÓN DE DREAMWEAVER

• Inicio -> Todos los programas -> Macromedia -> Dreamweaver.

• Selección de un diseño para el espacio de trabajo. En Windows, la primera vez que inicie Dreamweaver aparecerá un cuadro de diálogo en el cual seleccionaremos codificador. Si cambia de idea posteriormente, podrá cambiar a otro espacio de trabajo distinto a través del cuadro de diálogo Preferencias.

• Definir una carpeta local mediante el asistente para la Definición del sitio. Creará una definición del sitio y definirá una carpeta local mediante el cuadro de diálogo Definición del sitio. Puede usar este cuadro de diálogo en una de estas dos vistas: Básicas o Avanzadas. El método Básico le orientará paso a paso a lo largo del proceso de configuración del sitio. Si prefiere editar información del sitio sin esta orientación, puede hacer clic en la ficha Avanzadas en cualquier momento. El procedimiento siguiente describe cómo configurar las opciones de la versión Básica del cuadro de diálogo, que también se denomina asistente para la Definición 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.

Page 19: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

19

2. En el cuadro de diálogo Administrar sitios, haga clic en Nuevo y seleccione Sitio en el menú emergente. Aparecerá la ventana Definición del Sitio. 3. Si la ventana muestra la ficha Avanzadas, haga clic en Básicas. Aparecerá la primera pantalla del asistente para definir el sitio solicitándole 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 continuación se muestra:

4. Haga clic en Siguiente para continuar. Aparecerá la siguiente pantalla del Asistente preguntándole si desea trabajar con una tecnología de servidor. Seleccione la opción No para indicar que el sitio es estático por el momento, sin páginas dinámicas.

Page 20: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

20

5.- Haga clic en Siguiente para continuar. Aparecerá la siguiente pantalla del asistente preguntándole cómo desea trabajar con los archivos. Seleccione la opción “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 almacenarán los archivos locales de dreamweaver), en caso de no existir créela y selecciónela, como a continuación se muestra:

6. Haga clic en Siguiente para continuar. Aparecerá la siguiente pantalla del Asistente preguntándole cómo se conecta al servidor remoto.

Definir un Sitio remoto

Después 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 "¿Cómo conecta con su servidor remoto?", elija un método para conectar con el sitio remoto. Se elige Local/red (porque el servidor se instaló localmente Apache).

Page 21: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

21

8. Haga clic en el ícono de carpeta situado junto al cuadro de texto y acceda a la carpeta raíz servidor Apache (directorio de archivos remotos). Si lo desea, puede desactivar la opción Actualizar lista de archivos remotos automáticamente para aumentar la velocidad. Como se muestra en la figura anterior. 9. Una vez introducida la información adecuada, haga clic en Siguiente. Aparecerá

la siguiente pantalla del Asistente preguntándole ¿Desea activar la desprotección y protección de archivos para que usted y sus colaboradores no puedan editar el mismo archivo simultáneamente? deberá seleccionar “No, no activar la desprotección y protección”

10. Haga clic en Siguiente para continuar. Aparecerá una pantalla del asistente mostrando un resumen de la configuración. Haga clic en Completado para terminar de configurar el sitio remoto. 11. Haga clic en Listo para cerrar el cuadro de diálogo Administrar sitios.

El panel Archivos mostrará ahora la nueva carpeta raíz local correspondiente al sitio actual. La lista de archivos del panel Archivos actúa como administrador de archivos, ya que permite copiar, pegar, eliminar, mover y abrir archivos como si se tratara del escritorio de la PC.

Page 22: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

22

Cargar los archivos locales

Después de configurar las carpetas local y remota, puede cargar los archivos de la carpeta local al servidor Web. Para que las páginas sean accesibles públicamente, 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 raíz 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 botón 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 operación 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.

Page 23: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

23

Para definir un sitio de Dreamweaver con PHP: 1. En Dreamweaver, seleccione Sitio > Administrar sitios. En el cuadro de diálogo Administrar sitios, seleccione el sitio creado y haga clic en el botón Editar. Aparecerá la ventana Definición del sitio. 2. Si se muestra la ficha Básicas, haga clic en la ficha Avanzadas.

3. En la ficha Avanzadas del cuadro de diálogo Definición del sitio, haga clic en Servidor de prueba en la lista Categoría. Aparecerá la pantalla Servidor de prueba. Dreamweaver necesita los servicios de un servidor de prueba para generar y mostrar contenido dinámico mientras se trabaja. El servidor de prueba puede ser el equipo local, un servidor de desarrollo, un servidor en funcionamiento o un servidor de producción, siempre y cuando permita procesar páginas PHP; ya que se dirige a un servidor capaz de procesar páginas PHP.

Page 24: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

24

4. Seleccione PHP MySQL en el menú emergente Modelo de servidor. 5. En el menú emergente Acceso, elija el mismo método (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 diálogo en la sección categoría seleccionamos página dinámica, en la sección de página dinámica del mismo cuadro seleccionamos PHP. Entre las etiquetas de “<body>” tecleamos el siguiente código:

<body> <p>Esta Página 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 diálogo le asignamos un nombre y en el combo de tipo seleccionamos “archivos php (.php .php3)”. 9. Si queremos ver nuestra página en el iExplorer debemos cargar el archivo en el servidor: a.- Hacemos clic en la flecha azul ubicada en el panel de Archivo.

Page 25: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

25

b.- Aparecerá el siguiente cuadro de diálogo, damos clic en el botón de “sí”.

c. Después hacemos clic en el ícono de “Vista previa/Depurar en explorador”,

en el cuadro emergente seleccione vista previa en iExplorer o F12.

Page 26: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

26

2. DREAMWEAVER

2.1. BIENVENIDOS A DREAMWEAVER MX 2004

Dreamweaver MX 2004 es un editor HTML profesional para diseñar, codificar y desarrollar sitios, páginas y aplicaciones Web. Tanto si desea controlar manualmente el código HTML como si prefiere trabajar en un entorno de edición visual, Dreamweaver le proporciona útiles herramientas que mejorarán su experiencia de creación Web.

Las funciones de edición visual de Dreamweaver permiten crear páginas de forma rápida, sin escribir una sola línea de código. No obstante, si prefiere crear el código manualmente, Dreamweaver también incluye numerosas herramientas y funciones relacionadas con la codificación. Además, Dreamweaver le ayuda a crear aplicaciones Web dinámicas 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 páginas dinámicas con PHP.

2.2. IMÁGENES.

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 imágenes pueden estar sueltas en la carpeta raíz 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, están nuestras imágenes.

Para crear una carpeta dentro de la carpeta raíz del sitio, pulsamos la pestaña 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

Page 27: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

27

Se creará una carpeta con el nombre untitled que habrá que cambiar por el que deseemos tenga nuestra carpeta de imágenes:

Por ejemplo, podemos llamarla imag:

Podemos llevar las imágenes a la carpeta por cualquiera de los procedimientos habituales en Windows. Si por ejemplo, tal como indicábamos 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 menús y luego en Imagen:

Aparecerá la ventana Seleccionar origen de imagen:

Page 28: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

28

Hacemos clic en Escritorio y seleccionamos la imagen: obras.

Aparecerá el mensaje de advertencia diciéndonos que la imagen no está en la carpeta raíz del sitio:

Page 29: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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:

Page 30: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

30

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

Page 31: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

31

2.3. INSERTAR TABLA.

Desde Insertar de la barra de Menús, elegimos Tabla.

Aparecerá una ventana similar a ésta:

Podemos determinar el número de Filas, el número 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 vacíos en el caso de que queramos que tanto el relleno de celda como el espacio de celda sea el mínimo 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 Martes Miércoles Jueves Viernes

Mañana

Tarde

Page 32: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

32

2.4. MODIFICAR TABLA.

Si ponemos el cursor en cualquier punto de la tabla, en la barra de estado, encontraremos una información 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 harán referencia a la celda en la que, en ese momento, esté el cursor:

Desde ese panel podríamos cambiar las propiedades de la celda en cuestión.

Agregamos los datos que están 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 después seleccionar en la Barra de Estado la etiqueta <table>, se seleccionará toda la tabla.

Si ahora vemos las propiedades, éstas serán las propiedades de la tabla y, desde ahí, podremos cambiar las propiedades de la tabla y su configuración.

Page 33: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

33

Podemos modificar el número de Filas en Filas, el número 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 alineación 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 algún cambio en la tabla:

Hemos añadido 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 Martes Miércoles Jueves Viernes

Mañana

Tarde

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:

Page 34: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

34

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

Si pulsamos, por ejemplo, el botón el texto que esté escrito en las celdas de esa fila se colocará centrado en cada una de las celdas. Pulsando, por ejemplo, el botón 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 ratón 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 agruparán en una sola:

Page 35: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

35

Podemos añadir texto o variar las propiedades de las celdas por los procedimientos descritos:

Hemos seleccionado por el método de arrastrar el cursor las celdas anteriores para cambiar el color de fondo:

El resultado es:

Podremos crear vínculos a otras páginas muy fácil con Dreamweaver solo hay que presionar el círculo al lado de la caja de texto en el panel de propiedades de vínculo y soltarlo en la página que queremos que sea la página de enlace.

Page 36: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

36

2.5. FORMULARIOS

Vamos con una de las herramientas más útiles de toda página Web. Es aquella que recoge información del visitante y la almacena en el servidor, o bien, se nos envía a través de una dirección de correo electrónico.

Nota: Otra manera de ver el panel de Insertar es verlo como fichas, damos clic en el botón 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 pestaña

Colocamos el cursor en el sitio en vista diseño o en vista código donde queramos que se

coloque el formulario y damos clic en el ícono .

Aparecerán los límites del formulario representados por un rectángulo cuyos lados son una línea discontinua de color rojo:

Page 37: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

37

A continuación insertaremos una tabla dentro del formulario con dos columnas y varias filas: situamos el cursor dentro del rectángulo de líneas 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 opinión sobre esta página 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:

Page 38: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

38

Ahí podemos elegir la anchura del campo, el número de caracteres máximo, si queremos que conste de una o varias líneas, si queremos que se oculte al ser escrito (tipo contraseña), si queremos que aparezca un texto inicialmente y, lo que es más importante, el nombre que le queremos dar: Quitamos textfield y ponemos: nombre.

Esto también se puede hacer por medio del código haciendo lo siguiente:

<INPUT TYPE=”text” NAME=”nombre” VALU=”valor por defecto” SIZE=”tamaño” MAXLENGTH=”longitude_maxima>

Type=”text” es donde indicamos que es una caja de texto.

TYPE=”password” hacemos que sea de tipo contraseña.

2.7. BOTÓN DE OPCIÓN.

Vamos ahora a preguntar la opinión sobre la página. En la segunda celda de la columna

de la derecha, insertamos un botón de opción .

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:

Page 39: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

39

Y en la parte inferior de la pantalla, aparecerá el panel de propiedades del botón:

En la primera casilla de la izquierda borramos radiobutton y escribimos el nombre de la opción global: opinion. En la segunda casilla, al lado de Valor activado, escribimos lo que corresponda con esta primera opción que puede ser: muy buena. Podemos elegir que esta opción esté activada o desactivada de entrada. Tenemos que escribir a la derecha del botón 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 demás botones de opción correspondientes a este ejemplo. Por lo tanto, los siguientes botones se deberán seguir llamando opinion y en cada caso habrá que escribir lo que corresponde con esa opción. De no llamarse igual, se podrán seleccionar todos y no uno solo que es lo que pretendemos. A esto se le llama grupo de opción.

Para que el segundo botón no quede muy separado del primero, le damos un salto de línea Insertar > texto > caracteres > salto de línea o introduciendo <BR> en el codigo después de “excelente”.

Page 40: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

40

El segundo botón, por ejemplo, debería quedar así:

Ponemos un tercer botón con la opción de que la página es Mala.Bastante mala: Ya sabes el mismo nombre: opinion y como valor activado: mala.

Si queremos colocar otra pregunta de opción debemos llamarla de otra manera para que no se excluyan las selecciones. Por ejemplo, podemos preguntarle al visitante sobre sus conocimientos de informática. El nombre de la opción podría ser conoc_infor (por ejemplo).

Page 41: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

41

El formulario va teniendo este aspecto:

2.8. CASILLAS DE VERIFICACIÓN.

Vamos a insertar ahora casillas de verificación las cuales permiten elegir varias opciones. En nuestro caso, podríamos hacerlo con las cosas que le han gustado.

Introducimos la pregunta en la siguiente celda de la izquierda ¿Qué es lo que más te ha gustado del curso? En la celda de la derecha introducimos la primera casilla de verificación 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 más construida para el formulario visible.

Damos un salto de línea e introducimos nuevas casillas, siempre con el mismo nombre, gustado, y una frase nueva como Valor activado que debe ser una expresión corta de lo que escribamos en el formulario. Esta parte del formulario podría quedar así:

Page 42: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

42

El código es el siguiente:

<INPUT TYPE=”checkbox” NAME=”ingeniero” VALUE=”si” checked>

Donde checked seleccionará la opción por defecto.

2.9. LISTAS Y MENÚS.

A continuación, 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:

Page 43: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 harán al lanzar la página con el navegador.

El código es el siguiente:

<select name="select"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select>

Page 44: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

44

Podemos crear fácilmente la lista ya teniendo un menú solo hay que teclear la opción de lista en el cuadro de propiedades y, en la opción de alto, cuántos se van a ir mostrando en la lista y seleccionando la opción múltiple seleccionamos varias líneas.

Podemos incluir un campo de texto para comentarios. Lo podemos hacer con el botón de

Campo de texto definiendo en las propiedades, o bien, dando directamente al botón: (Área de texto):

Lo introducimos:

Podemos introducir ahora (campo de texto) la dirección de correo electrónico del visitante. En este caso, podemos poner un Valor inicial:

Page 45: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

45

2.10. BOTONES DE BORRAR Y ENVIAR.

Finalmente, tenemos que insertar un botón para enviar el formulario y, si lo deseamos, un botón para borrar todo lo que haya podido escribir el visitante. Empezamos por el de Borrar:

Vamos a colocar el botón de borrar en la última celda de la izquierda alineando a la derecha. Colocamos el cursor en la celda, alineamos y pulsamos el ícono . Por defecto, Dreamweaver coloca el botón de Enviar.

Nosotros modificamos de la siguiente forma:

A continuación, nos colocamos en la celda de la derecha, alineamos a la izquierda, pulsamos el ícono . Aparecerá, de nuevo la ventana anterior que modificamos:

Page 46: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

46

Podemos dar por finalizado nuestro formulario. Queda por definir la acción que queremos que haga una vez relleno. Para usuarios personales, la opción más habitual es el envío por correo electrónico de los datos obtenidos. Esto se hace colocando el cursor en cualquier punto del formulario y eligiendo <form> desde la barra de estado

. Aparecerán las propiedades del formulario:

En Acción escribimos mailto:direcciondecorreo. Por ejemplo: mailto:[email protected]

De todas formas, para que el envío del formulario pueda leerse como un mensaje de correo ordinario, hay que escribir en la etiqueta del formulario del código fuente el atributo enctype="text/plain".

Podemos intentar seleccionarlo del menú: . Si no está ahí, tenemos que escribirlo directamente en el código. Seleccionamos el formulario colocando el cursor y pulsando <form>

<form action=”mailto:[email protected]” method=”post” name=”form1”>

Incluimos lo acordado:

<form action=”mailto:[email protected]” method=”post” name=”form1” enctype=”text/plain”>

Vemos, de nuevo, las propiedades del formulario:

Page 47: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 electrónico.

Antes de dar por concluido el formulario podemos hacer alguna modificación en la tabla, añadiendo algún 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.

Page 48: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

48

2.11. INSERTANDO UN OBJETO MULTIMEDIA.

Sitúe el punto de inserción en la ventana de documento en la que desea insertar el objeto.

1. Inserte el objeto siguiendo uno de estos procedimientos: o En la categoría Común de la barra Insertar, haga clic en el botón Media y

seleccione el botón 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 inserción en el lugar en el que desea insertar un elemento Flash y siga uno de estos procedimientos.

o En la categoría 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 diálogo Guardar elemento Flash.

3. Introduzca un nombre de archivo para el elemento Flash y guárdelo en una ubicación adecuada de su sitio.

4. Haga clic en Aceptar.

Aparece el marcador de posición 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 más que unos recuadros, que pueden situarse en cualquier parte de la página, en los que podemos insertar contenido HTML. Dichas capas pueden ocultarse y traslaparse entre sí, lo que proporciona grandes posibilidades de diseño.

Las capas pueden moverse de una posición a otra de la ventana pulsando sobre el recuadro blanco, y sin soltar el ratón, arrastrándola hacia la nueva posición. También pueden ser redimensionadas pulsando sobre los recuadros negros, y arrastrándolos hasta conseguir el tamaño deseado.

Page 49: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

49

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

2.12.1. Insertar una capa.

Las capas pueden insertarse en una página a través del menú Insertar ->objeto de diseño -> opción Capa. Una vez que se ha insertado la capa, pueden editarse sus atributos, pero para ello hay que seleccionarla primero.

Seleccionarlas a través del panel Capas, que puede abrirse a través del menú Ventana -> capas o con F2.

2.12.2. Formato de una capa.

Las propiedades de la capa se especifican a través 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. También puede ser cambiado a través del panel Capas, haciendo doble clic sobre él.

Page 50: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

50

Iz y Sup indican la distancia en pixeles que hay entre los límites izquierdo y superior del documento y la capa.

An y Al indican la anchura y la altura de la capa. Índice Z es el número de orden de colocación de las capas. Este valor también puede cambiarse a través 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 según el navegador), Inherit (se muestra la capa mientras la página a la que pertenece también se esté mostrando), Visible (muestra la capa, aunque la página no se esté viendo) y Hidden (la capa está oculta). La visibilidad también puede cambiarse a través del panel Capas, pulsando sobre la imagen del ojo. El ojo abierto indica Visible, y el ojo cerrado indica Oculto.

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

Page 51: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

51

2.12.3. Comportamientos en las capas.

Los comportamientos son acciones que suceden cuando los usuarios realizan algún evento sobre un objeto, como puede ser mover el ratón sobre una imagen, pulsar sobre un texto, hacer doble clic sobre un mapa de imagen, etc.

Los comportamientos no existen como código HTML, se programan en JavaScript. Dreamweaver permite insertarlos a través del panel Comportamientos, por lo que no es necesario escribir ninguna línea de código JavaScript para programarlos.

El panel Comportamientos se puede abrir a través del menú Ventana, opción Comportamientos. También pulsando Mayús+F3.

En este panel hay que desplegar el botón pulsando sobre él, y en Mostrar eventos para elegir una versión de la lista de navegadores. Algunos comportamientos no funcionan para algunos navegadores, por lo que dependiendo del navegador elegido aparecerán 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 algún comportamiento.

Cuando ya estableció algún 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 botón del panel Comportamientos aparece la opción Mostrar eventos, a través de la cual se había elegido el navegador. También aparece la lista de todas las acciones posibles para el navegador elegido previamente, de entre las que se puede seleccionar una. Según el elemento sobre el que se desee aplicar el comportamiento, se podrán elegir unas acciones, mientras que otras no.

Page 52: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

52

Page 53: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

53

2.13. MENÚS 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; después de eso crearemos otra capa un poco más larga para poder insertar una tabla en la cual tendrá una fila y tres columnas. En cada celda vamos a insertar una botón de flash, para hacerlo de clic en el panel de

insertar -> común, y por último, clic en el en ícono de y seleccionamos botones de flash. En el menú emergente seleccionamos un estilo y le damos un nombre al botón, el tipo de fuente y si queremos asignarle un vínculo desde aquí, además de todo esto tenemos que guardar el botón en nuestro proyecto. Así lo vamos hacer con cada una de las celdas de las tablas. Seleccionamos la capa con tres botónes y le ponemos la propiedad visibilidad (vis) en hidden. Seleccionamos la capa con un solo botón, 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 continuación seleccionamos la acción onMouseMove como se muestra a continuación:

Después 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”.

Page 54: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

54

Nota: los enlaces se pueden hacer de la forma tradicional, mostrada anteriormente, o en el cuadro de diálogo en donde seleccionamos el botón.

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 diseño y las propiedades de un grupo de marcos, que incluyen el número, el tamaño, la ubicación de los marcos y el URL de la página 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 página.

Los marcos los podemos localizar en la barra de insertar en la pestaña de diseño

• 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 categoría Diseño de la barra Insertar, haga clic en la flecha situada bajo el botón

Marcos y, a continuación, seleccione un conjunto de marcos predefinido. En la creación de marcos, los íconos de conjunto de marcos proporcionan una representación 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 mostrarán 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 página actual es tratada como una página independiente.

Una vez seleccionado un marco a través del panel Marcos, pueden establecerse sus propiedades mediante el inspector de propiedades.

Page 55: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

55

Cada marco tiene asignado un nombre, que puede cambiarse a través 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 línea separando el marco del resto de marcos. En el caso de que se muestre el borde, se puede especificar un color para éste a través de Color borde.

Desplaz. (Desplazamiento) indica si aparecerán o no las barras de desplazamiento cuando el documento del marco no pueda visualizarse completamente.

Si la opción Mismo tamaño está activa, indica que los usuarios no podrán variar las medidas del marco desde el navegador.

El Ancho del margen y el Alto del margen indican la separación 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 página de marcos), el inspector de propiedades es algo diferente.

En Bordes puede elegirse si aparecerá o no una línea separando los marcos entre sí, y puede especificarse un color para éste a través de Color borde. También es posible establecer un grosor para el borde a través de Ancho.

El campo Columna (o Fila dependiendo del marco elegido en Selección Fila Col.) sirve para especificar el tamaño 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 tamaño en Pixeles, que será el que contenga la barra de navegación; y el otro marco con tamaño 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

Page 56: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

56

Ahora que ya sabe trabajar con marcos le será más fácil 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

vínculo 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 opción predeterminada. Abre el documento vinculado en el mismo marco o ventana que el vínculo.

• _top: Abre el documento vinculado en la ventana completa del navegador, lo cual quiere decir que los marcos de la ventana desaparecerán al abrir el vínculo en ella.

• Mainfram en la página de la derecha mostrará el vínculo. • 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.

Page 57: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

57

3. LENGUAJE PHP. 3.1 FORMATO DEL CÓDIGO PHP 3.1.1. Delimitadores Para facilitar la comprensión de algunos ejemplos, únicamente se indica el cuerpo del código en HTML. PHP esta muy relacionado con el lenguaje de hipertextos HTML; tanto es así que el código PHP aparece normalmente insertado dentro de un documento HTML. El documento PHP, una vez interpretado correctamente en el servidor genera una página HTML y para diferenciar ambos lenguajes dentro de un mismo documento se utilizan etiquetas de comienzo y final de código PHP. Las etiquetas mas habituales para delimitar los bloque de código PHP son las siguientes:

<?php echo "Esto es una instrucción PHP";

?> Existen otros posibles formatos de etiquetas menos utilizados que el anterior, su utilización será correcta dependiendo de las características de configuración seleccionadas en el proceso de instalación del intérprete de PHP:

<? echo "Esto es una instrucción PHP";

?> Existen otras pero en el presente manual usaremos estas. 3.1.2. Extensión de los archivos en PHP La extensión 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 intérprete de PHP o no. Las extensiones que indican al servidor HTTP que el archivo contiene códigos PHP son las siguientes: .php3 Código PHP 3.x .php4 Código PHP4.x

.php Indica código PHP(esta será la que utilizaremos a la hora de guardar nuestros programas PHP)

.phps Utilizada para ver la sintaxis del código resaltado en colores

Page 58: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

58

3.1.3. Comentarios Los comentarios son porciones del programa que se ponen sólo para facilitar la documentación del código, lo primero que hace el intérprete 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 línea de código. La segunda es utilizando el carácter almohadilla “#”, también para comentar una única línea de código, con la diferencia que el comentario termina con el retorno de carro de la línea comentada o con el símbolo de finalización de interpretación de PHP. La tercer tipo de comentario es de tipo multilínea, es decir, nos permite comentar varias líneas de código 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 línea echo "Esto es una instrucción PHP <BR>\n"; #Otro comentario echo "Esto es otra instrucción"; /* Esto sería un comentario de varias líneas */

?>

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 línea

El fin de línea o separación de instrucciones se hace de la misma manera que en C, terminando cada declaración con un punto y coma.

La etiqueta de fin de bloque (?>) implica el fin de la declaración, por lo tanto lo siguiente es equivalente:

<?php echo "Esto es un ejemplo de fin de línea";

?> <?php echo " Esto es un ejemplo de fin de línea " ?>

Page 59: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

59

3.2. SINTAXIS BÁSICA 3.2.1. Variables La forma principal de almacenar valores en el medio de un programa son las variables. Los puntos más importantes a recordar son:

• Todas las variables en PHP comienzan con el símbolo de pesos $, seguido, al menos, por una letra o un guión bajo (“_”) para después continuar por cualquier combinación de letras, de dígitos 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 más recientemente asignado. • Las variables son asignadas e inicializadas con el operador de

asignación '=', con la variable a la izquierda del operador y la expresión a evaluar a la derecha.

• Las variables no tienen un valor intrínseco, 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 minúsculas y mayúsculas. Por ejemplo $Unavariable y $unavariable son variables distintas:

<?php

$Unavariable = "Hola"; //Con 'U' mayúscula $unavariable = "Adiós"; //Con 'u' minúscula 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>";

?>

Page 60: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

60

3.2.2. Tipos de datos PHP soporta los siguientes tipos:

• Entero • Números 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 ejecución, 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 podría forzar la variable o usar la función settype() para ello. Para más información, vea la sección Conversión de Tipos.

3.2.2.1. Enteros

Las variables de tipo entero pueden contener números enteros que varían 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; # número decimal $Entero2 = -123; # un número negativo $Entero3 = 0123; # número octal (equivalente al 83 decimal) $Entero4 = 0x12; # número hexadecimal (equivalente al 18 decimal)

La función ‘echo’ muestra por defecto siempre la información 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 número octal es: $NumeroOctal\n";

?>

Page 61: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

61

3.2.2.2. Números en punto flotante

Los números 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 números como double, pero que dispone de sinónimos, 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 minúsculas o mayúsculas, estos valores son aceptados en cualquier combinación, debido a que son constantes predefinidas). Significa, respectivamente, cierto y falso y normalmente estas variables almacenan el resultado de evaluar expresiones lógicas. 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 expresión 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.

Page 62: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 estén dentro de la cadena serán expandidas (sujetas a ciertas limitaciones de interpretación). Como en C y en Perl, el carácter de barra invertida ("\") se puede usar para especificar caracteres especiales:

Caracteres protegidos

Secuencia Significado \b Espacio hacia atrás. \f Cambio de página. \n Nueva línea. \r Retorno de carro. \t Tabulación horizontal. \\ Barra invertida. \$ Signo del pesos. \" Comillas dobles.

\[0-7]{1,3} La secuencia de caracteres que coincida con la expresión regular es un carácter en notación octal.

\x[0-9A-Fa-f]{1,2} La secuencia de caracteres que coincida con la expresión regular es un carácter en notación hexadecimal.

La segunda forma de delimitar una cadena de caracteres usa el carácter de comilla simple (‘ ’). Las variables no serán evaluadas dentro de una cadena entre comillas simples ni tampoco los caracteres protegidos, simplemente se mostrarán.

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 penúltimo ejemplo.

‘Incluye “dobles” comillas’

Page 63: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

63

Y el último ejemplo

“Incluye \“dobles\” comillas”

Hace uso del carácter “\” 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). Nótese 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 dinámica siempre que le añadimos un nuevo elemento. Los arrays multidimensionales se verán en un capítulo 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 posición 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 posición o una clave:

Array con índice numérico

Cugar Ford 2.500 V6 182

0 1 2 3 4 5 Array con índice string (Asociativo)

Page 64: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

64

Cugar Ford 2.500 V6 182

Modelo Marca Fecha CC Motor 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 posición o clave dentro del conjunto global. Con los conocimientos adquiridos en el manejo de Dreamweaver, puede crear en modo de diseño la siguiente tabla.

Al inicio del cuerpo del programa cree las matrices siguientes: <?php $matriz1[0]="cougar"; $matriz1[1]="ford"; $matriz1[2]=""; // la tercera posición del array esta vacía // por eso le asignamos una cadena sin contenido $matriz1[3]="2.500"; $matriz1[4]="V6"; $matriz1[]=182; // para añadir el último elemento a una matriz // no es necesario poner el número de índice // creamos la matriz asociativa $matriz2['modelo']="cougar"; $matriz2['marca']="ford"; $matriz2['fecha']=null; // para marca una posición sin contenido use <null> $matriz2['cc']="2.500"; $matriz2['motor']="V6"; $matriz2['potencia']=182; ?> Habiendo realizado esto, incruste después del código referente a la línea de matriz1

<TD BGCOLOR="yellow">matriz1</TD> o en su caso reemplace las líneas que contengan la siguiente instrucción

<td>&nbsp;</td> con el código siguiente:

Page 65: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 código referente a la línea 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>";

?>

.

Page 66: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

66

3.2.2.6. Conversión 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 después se asigna un valor entero a la variable $Var, se convierte en una variable entera.

$Var = "0"; // $Var es una cadena (ASCII 48) $Var++; // $Var es la cadena "1" (ASCII 49) $Var += 1; // $Var ahora es un entero (2) $Var = $Var + 1.3; // $Var ahora es un doble (3.3) $Var = 5 + "10 Creditos"; // $Var es entero (15) $Var = 5 + "10 Creditos"; // $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 numéricos (‘10’) con una variable $UnNumero, que contiene el valor 25 (un entero). El intérprete detecta que se desea realizar una suma y provoca la conversión de la cadena ‘25’ al valor entero adecuado. A continuación, se realiza otra suma entre dos cadenas: una con contenido numérico y otra con la cadena “5cinco” y, como se puede observar a continuación, el intérprete convierte la segunda en el valor entero correspondiente (5) hasta que se encuentra con un carácter que no puede convertir (la ‘c’):

<?php $UnaCadena = "10"; $OtraCadena = "5cinco"; $UnNumero = 25; $Resultado = $UnaCadena + $UnNumero; echo "Cadena 'sumada' con número: $Resultado <BR>\n"; $Resultado = $UnaCadena + $OtraCadena; echo "Cadenas 'sumadas': $Resultado <BR>\n";

?> Hay que destacar que una cadena que no contenga caracteres numéricos es evaluada como un valor cero a efecto de operar aritméticamente con ella. En PHP se dispone de una serie de sencillas funciones que permiten obtener, comprobar y cambiar los tipos de las variables. La función gettype() recibe como parámetro 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 "Conversión de cadena a número: ", gettype($UnaCadena); echo "<BR>\n";

Page 67: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

67

$Res = settype($UnNumero, 'string'); echo "Conversión de número a cadena: ", gettype($UnNumero), "\n";

?>

Por otra parte, está la función settype(), que recibiendo de parámetros 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 paréntesis el tipo de dato desead, antes de la variable que se pretende convertir. $Cadena = ”3.1416 es el valor de Pi”; $aux = (integer)$Cadena; //Cadena es igual a 3(entero) $aux = (double)$Cadena; //Cadena es igual a 3.1416(punto flotante) Los forzados de tipo permitidos son los siguientes:

(int), (integer) - fuerza a entero (integer) (real), (double), (float) - fuerza a doble (double) (string) - fuerza a cadena (string) (array) - fuerza a array (array) (object) - fuerza a objeto (object) <?php

$UnNumero = 3; $OtroNumero = (int)($UnNumero / 2); echo "El otro número 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;

?>

Page 68: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

68

Page 69: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 expresión a una variable, el valor íntegro de la expresión original se copia en la variable de destino. Esto quiere decir que, por ejemplo, después de asignar el valor de la variable1 a una variable2, los cambios que se efectúen en la variable1 no afectarán 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 también significa que no se produce una copia de valores; por tanto, la asignación ocurre más rápidamente. De cualquier forma, cualquier incremento de velocidad se notará sólo en los bucles críticos 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 código produce la salida 'Soy variable por Referencia' dos veces:

<?php $var1 = 'Referencia'; // Asigna el valor 'Referencia' a $var1 $var2 = &$var1; // Referencia $var1 vía $var2 $var2 = "Soy variable por $var2"; // Modifica $var2 echo $var1; // $var1 también se modifica. echo $var2;

?>

Algo importante a tener en cuenta es que sólo las variables con nombre pueden ser asignadas por referencia.

<?php $var1 = 25; $var2 = &$var1; // Esta es una asignación válida. $var2 = &(24 * 7); // Inválida; referencia una expresión sin nombre.

?>

Page 70: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 información relativa del entorno de ejecución del intérprete 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 versión y configuración de dicho servidor, y otros factores. La siguiente tabla muestra las variables de entorno más utilizadas. Para ver una lista de todas las variables predefinidas disponibles en una instalación por defecto de PHP corriendo como módulo de un Apache se puede usar la función phpinfo():

Variable Significado SERVER_NAME Indica el nombre del equipo servidor sobre el que se ejecuta el script.

SERVER_PORT Indica el puerto del equipo servidor que usa el servidor Web para la comunicación.

SERVER_SOFTWARE Indica que software esta siendo utilizado en el equipo servidor.

REMOTE_PORT Contiene el puerto que utiliza el peticionario para comunicarse con el servidor Web.

REMOTE_ADDR Contiene la dirección remota desde la que se realiza la petición. DOCUMENT_ROOT Indica el directorio raíz del documento bajo el que se ejecuta el script.

http_REFERER Contiene la dirección de la página (en caso de haberla) desde la que el navegador saltó a la página actual.

La variable global $_SERVER es un array asociativo que contiene, entre otras, toda la información de las cabeceras tanto de petición 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 "Dirección de conexión: <B>$_SERVER[REMOTE_ADDR]</B><BR>\n";

echo "Directorio raíz: <B>$_SERVER[DOCUMENT_ROOT]</B><BR>\n"; echo "Nombre del script: <B>$_SERVER[PHP_SELF]</B><BR>\n";

?>

Page 71: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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

argv

Array de argumentos pasados al script. Cuando el script se ejecuta desde la línea de comandos, esto da un acceso, al estilo de C, a los parámetros pasados en línea de comandos. Cuando se le llama mediante el método GET, contendrá la cadena de la petición. Requiere que esté activada la directiva register_argc_argv en el archivo de inicialización.

argc Contiene el número de parámetros de la línea de comandos pasados al script (si se ejecuta desde la línea de comandos). Requiere que esté activada la directiva register_argc_argv

PHP_SELF El nombre del archivo que contiene el script que se esta ejecutando, relativo al directorio raíz de los documentos. Si PHP se está ejecutando como intérprete de línea de comandos, esta variable no está disponible.

_COOKIE Un array asociativo de variables (clave, valor) pasadas al script actual mediante cookies HTTP. Sólo está disponible si el seguimiento de variables ha sido activado mediante la directiva de configuración track_vars o la directiva<?php_track_vars?>.

_GET Un array asociativo de variables (clave, valor) pasadas al script actual mediante el método HTTP GET. Sólo está disponible si --variable tracking-- ha sido activado mediante la directiva de configuración track_vars o la directiva <?php_track_vars?>.

_POST Un array asociativo de variables (clave, valor) pasadas al script actual mediante el método HTTP POST. Sólo está disponible si –variable tracking—ha sido activado mediante la directiva de configuración track_vars o la directiva <?php_track_vars?>.

_POST_FILES Array asociativo que contiene información de los archivos recibidos usando el método POST.

_ENV_VARS Array asociativo de pares (clave, valor) del entorno.

_SERVER_VARS Array asociativo de pares (clave, valor) del servidor

_SESSION_VARS Array asociativo de pares (clave, valor) de sesión

Page 72: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 función está, por defecto, limitada al ámbito local de la función. 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 versión local de la variable $cadena1, a la que no se ha asignado ningún valor en su ámbito. En PHP, las variables globales deben ser declaradas globales dentro de la función si van a ser utilizadas dentro de dicha función. 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 función, todas las referencias a tal variable se referirán a la versión global. No hay límite al número de variables globales que se pueden manipular dentro de una función.

Un segundo método 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.

Page 73: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

73

Otra carácterística importante del ámbito de las variables es la variable static. Una variable estática existe sólo en el ámbito local de la función, pero no pierde su valor cuando la ejecución del programa abandona este ámbito. Consideremos el siguiente ejemplo:

<?php function Test(){

$Var = 0; echo $Var; $Var++; }

Test();

?>

Esta función 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 función termina la variable $Var desaparece. Para hacer una función útil para contar, que no pierda la pista del valor actual del conteo, la variable $Var debe declararse como estática:

<?php function Test(){

static $Var = 0; echo $Var; $Var++; }

Test();

?>

Ahora, cada vez que se llame a la función Test(), se representará el valor de $Var y se incrementará.

Las variables estáticas también proporcionan una forma de manejar funciones recursivas. Una función recursiva es la que se llama a sí misma. Se debe tener cuidado al escribir una función recursiva, ya que puede ocurrir que se llame a sí misma indefinidamente. Hay que asegurarse de implementar una forma adecuada

Page 74: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

74

de terminar la recursión. La siguiente función cuenta recursivamente hasta 10, usando la variable estática $count para saber cuándo 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 ejecución de un determinado programa, existen instrucciones en las que se usen distintos juegos de variables o se quiera generar código dinámicamente. 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 símbolos de PHP: $Var, que contiene "Hola", y $Hola que contiene "Mundo".

Es más, la sentencia:

<?php echo "$Var ${$Var}";

?>

Page 75: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 ambigüedad. Si se escribe $$Var[1] el intérprete necesita saber si nos referimos a utilizar $Var[1] como una variable, o si se pretendía utilizar $$Var como variable y el índice [1] como índice de dicha variable. La sintaxis para resolver esta ambigüedad es: En $Var[1] como una variable ${$Var[1]} En $$Var como variable y el índice [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 página 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 más claro veremos el siguiente ejemplo. formularios.php contiene un formulario que solicita los datos de Usuario y Password, y a través de la ejecución de un botón submit, provoca la ejecución de dicho formulario llamándose a si mismo. Al presionar el botón 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 Contraseña</h1></center>

Page 76: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 contraseña

Valido<br> en la base de datos</center></h1>";

Page 77: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 código HTML para generar la tabla, y cada vez que necesita un dato de los que ha introducido el usuario, efectúa una llamada al intérprete 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 envía un formulario, también es posible usar una imagen en vez del botón submit estándar con una etiqueta como: <input type=image src="image.gif" name="sub">

Page 78: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

78

Cuando el usuario hace click en cualquier parte de la imagen, el formulario que la acompaña 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 más experimentados pueden notar que los nombres de variable enviados por el navegador contienen un guión en vez de un subrayado (guión bajo), pero PHP convierte el guión en subrayado automáticamente.

3.2.3.6. Funciones para variables

PHP proporciona un conjunto de funciones de gran utilidad al tratar con variables.

Función Descripción

gettype (variable) Devuelve el tipo de dato pasado como parámetro, pudiendo devolver como valor: integer, float, string, array, class, object y unknown type.

settype (variable, tipo)

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 función podemos realizar conversiones de un tipo de datos a otro. Devolverá true si ha tenido éxito; en caso contrario devolverá false.

isset (variable) Indica si una variable ha sido inicializada con un valor, en cuyo caso devuelve true y, en caso contrario devuelve false.

unset (variable) Destruye una variable liberando los recursos dedicados a dicha variable. Es necesario indicar como parámetro el nombre de la variable a destruir.

empty (variable) Devuelve valor true si la variable aún no ha sido inicializada, o bien, tiene un valor igual a 0 o es una cadena vacía y, en caso contrario devuelve false.

Ejemplo:

<?php echo '$cadena ';

echo (isset($cadena))?'está ':'no está '; echo "inicializada<BR>"; echo (empty($cadena))?'$cadena está vacía':$cadena; echo "<BR><BR>"; $cadena=""; echo '$cadena '; echo (isset($cadena))?'está ':'no está '; echo "inicializada<BR>"; echo (empty($cadena))?'$cadena está vacía':$cadena; echo "<BR><BR>";

Page 79: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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á vacía':$cadena; echo "<BR><BR>"; unset($cadena); echo '$cadena '; echo (isset($cadena))?'está ':'no está'; echo "inicializada<BR>"; echo (empty($cadena))?'cadena está vacía':$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) según 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.

Page 80: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

80

Función Descripción

is_int (variable) is_integer (variable) is_long (variable)

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

is_float (variable) is_real (variable) is_double (variable)

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 número o una cadena numérica; en caso contrario devuelven false.

is_bool (variable) Devuelve true si la variable pasada como argumento es de tipo lógico; en caso contrario devuelven false.

is_array (variable) Devuelve true si la variable pasada como argumento es de tipo array; en caso contrario devuelven false.

is_string (variable) Devuelve true si la variable pasada como argumento es de tipo string; en caso contrario devuelven false.

is_object (variable) Devuelve true si la variable pasada como argumento es de tipo object; en caso contrario devuelven false.

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:

Page 81: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 parámetro. Estas funciones no pueden utilizarse para convertir arrays u objetos. En particular la función intval () puede recibir además un segundo parámetro que representa la base a utilizar en la conversión (10-decimal, 8-octal y 16-hexadecimal), tomando por defecto la base 10 de los números 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:

Page 82: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 ejecución

del script. • Es sensible a mayúsculas • Por convención, los identificadores de constantes suelen declararse en

mayúsculas. • El nombre de una constante sigue las mismas reglas que una variable en

PHP solo que no se necesita anteponer el carácter 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 función

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 dinámica se utiliza la función:

constant(constante)

Para comprobar la existencia de una constante se usa la función:

defined(constante)

3.2.4.1. Constantes predefinidas de PHP

PHP ofrece un largo número de constantes predefinidas a cualquier script en ejecución. Muchas de estas constantes, sin embargo, son creadas por diferentes extensiones, y solo estarán presentes si dichas extensiones están disponibles, bien por carga dinámica o porque has sido compiladas. Para obtener todas las constantes predefinidas se usa la función get_defined_constants(). Algunas de estas constantes son:

Page 83: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

83

Constante Descripción

__FILE__ Nombre del archivo de comandos o archivo que está siendo interpretado.

__LINE__ Número de línea dentro del archivo que está siendo interpretado. PHP_VERSION Cadena que representa la versión del intérprete.

PHP_OS Cadena con el nombre del sistema operativo en el que se esta ejecutando el intérprete de PHP.

TRUE Verdadero.

FALSE Falso

E_ERROR Información sobre errores distintos a los de interpretación del cual no es posible recuperarse.

E_PARSE Informa que el intérprete encontró una sintaxis inválida en el archivo de comandos. Finaliza la ejecución.

E_NOTICE Informa que se produjo algo incorrecto que puede provenir o no de un error. La ejecución continúa.

E_WARNING Denota un error que no impide la ejecución.

E_ALL Conjunto con todos los errores que se han producido.

Las constantes __FILE__ y __LINE__ son muy útiles en la programación, puesto que se puede generar un programa que ante un error nos indique en qué archivo y línea se ha producido.

<?php echo "Ejecuto la versión de PHP: ",PHP_VERSION,"<BR>\n"; echo "El sistema operativo es: ",PHP_OS,"<BR>\n"; echo "Estoy en el archivo <B>",__FILE__," línea ",__LINE__,"</B>";

?>

Page 84: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

84

3.2.5. Expresiones

Se denomina así a cualquier combinación de constantes, variables, operadores y funciones sintácticas y semánticamente correctas. Las expresiones, al ser evaluadas por PHP, producen valores que pueden ser empleados en la programación 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 expresión, ya que al ser evaluado dará como resultado su propio valor. También una asignación es una expresión, ya que ésta produce siempre como resultado de la evaluación el valor que ha sido asignado. La expresión:

$MiVar = 5:

produce como resultado de la evaluación el valor 5.

Un tipo muy común de expresiones son las de comparación, que dan como resultado los valores lógicos TRUE y FALSE, dependiendo de si la comparación, al ser evaluada, resulta ser cierta o falsa. Una expresión de esta clase sería:

5 + 3 == 6 +1 // que, evidentemente es falsa.

Y el resultado de su evaluación 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 numérica, 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 vacía genera como resultado FALSE, y cualquier otra cadena, TRUE.

Page 85: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

85

3.2.6. Operadores

3.2.6.1. Operadores Aritméticos

Los diferentes tipos de operadores de que dispone PHP son:

Operador Ejemplo Descripción + 3 + 5 Suma entre dos números. - 7 - 4 Diferencia entre dos números * 2 * 3 Multiplicación entre dos números / 24 / 8 Cociente entre dos números

% 7 % 2 Módulo, resto de la división entera entre dos números

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";

?>

Page 86: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

86

3.2.6.2. Operadores de Asignación

El operador básico de asignación es "=". A primera vista podrías pensar que es el operador de comparación "igual que". Pero no. Realmente significa que el operando de la izquierda toma el valor de la expresión a la derecha, (esto es, "toma el valor de").

Variable = expresión

El valor de una expresión de asignación 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.

Además del operador básico de asignación, existen los "operadores combinados" para todas las operaciones aritméticas y de cadenas que sean binarias. Este operador combinado te permite, de una sola vez, usar una variable en una expresión y luego establecer el valor de esa variable al resultado de la expresión.

Operador Ejemplo Descripción

= $Var = 7 Asignación de un valor a una variable

+= $A += 5 Equivale a $A = $A + 5

-= $A -= 5 Equivale a $A = $A – 5

*= $A *= 5 Equivale a $A = $A * 5

/= $A /= 5 Equivale a $A = $A / 5

%= $A %= 5 Equivale a $A = $A % 5

.= $B .= “Cadena” Equivale a $B = $B . “Cadena” (Concatenación)

Page 87: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

87

3.2.6.3. Operadores de Comparación

Los operadores de comparación, como su nombre indica, permiten comparar dos valores.

Tabla de Operadores de Comparación

Ejemplo Nombre Resultado

$A == $B Igualdad True si $A es igual a $B.

$A === $B Identidad True si $A es igual a $B y si son del mismo tipo (sólo PHP4)

$A != $B Desigualdad True si $A y $B son diferentes.

$A !== $B No identidad True si $A y $B no son idénticos.

$A < $B Menor que True si $A es estrictamente menor que $B.

$A > $B Mayor que True si $A es estrictamente mayor que $B.

$A <= $B Menor o igual que 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 expresión toma el valor expr2 si expr1 se evalúa a cierto, y expr3 si expr1 se evalúa a falso.

Page 88: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

88

3.2.6.4. Operadores de incremento/decremento

Operador Ejemplo Descripción

++ ++ $Var Preincremento

$Var ++ Postincremento

-- -- $Var Predecremento

$Var -- Postdecremento

La utilización de los operadores de incremento o decremento implica la suma o resta de una unidad sobre el número que se aplique.

Estos operadores tienen una carácterística propia que se refiere al momento en que se realiza el incremento o decremento del valor. Esta propiedad varía según 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";

?>

Page 89: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

89

En el caso de que aún no quede claro los incrementos y decrementos, aquí está este otro ejemplo:

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

?>

3.2.6.5. Operadores Lógicos

Tabla de Operadores Lógicos

Ejemplo Nombre Resultado $A and $B Y True si tanto $A como $B son ciertos.

$A or $B O True si $A o $B son ciertos.

$A xor $B O exclusiva True si $A es cierto o $B es cierto, pero no ambos a la vez.

! $A Negación True si $A no es cierto.

$A && $B Y True si tanto $A como $B son ciertos.

$A || $B O True si $A o $B son ciertos.

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

Page 90: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

90

3.2.6.6. Otros Operadores

Operador Ejemplo Descripción . $A . $B Concatena las cadenas de $A y $B.

` `dir>mifich.txt` Ejecuta desde el SO el comando que haya entre los acentos graves.

3.2.6.7. Precedencia de Operadores

La precedencia de operadores especifica cómo se agrupan las expresiones. Por ejemplo, en la expresión 1 + 5 * 3, la respuesta es 16 y no 18 porque el operador de multiplicación ("*") tiene una mayor precedencia que el de adición ("+").

La siguiente tabla lista la precedencia de operadores, indicándose primero los de mayor precedencia.

Tabla de Precedencia de Operadores

Operador ! ~ ++ -- (casting)

/ * %

+ - .

<< >>

< <= > >=

== != === !==

&

^

|

&&

||

?:

= += -= *= /= .= %= &= ^= ~= <<= >>=

or, xor, and

Page 91: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

91

3.3. ESTRUCTURAS DE CONTROL

3.3.1 if

La construcción if es una de las más importantes características de muchos lenguajes, incluido PHP. Permite la ejecución condicional de fragmentos de código. PHP carácteriza una estructura if que es similar a la de C.

if (expr) sentencia

Como se describe en la sección sobre expresiones, expr se evalúa a su valor condicional. Si expr se evalúa como TRUE, PHP ejecutará la sentencia, y si se evalúa como FALSE - la ignorará.

El siguiente ejemplo mostraría 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 más de una sentencia ejecutada de forma condicional. Por supuesto, no hay necesidad de encerrar cada sentencia con una cláusula if. En vez de eso, se pueden agrupar varias sentencias en un grupo de sentencias. Por ejemplo, este código mostraría a es mayor que b si $a fuera mayor que $b, y entonces asignaría 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 condición, y una sentencia distinta si la condición no se cumple. Esto es para lo que sirve else. else extiende una sentencia if para ejecutar una sentencia en caso de que la expresión en la sentencia if se evalúe como FALSE. Por ejemplo, el siguiente código mostraría 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"; }

Page 92: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

92

La sentencia else se ejecuta solamente si la expresión if se evalúa como FALSE, y si hubiera alguna expresión elseif - sólo si se evaluaron también a FALSE.

3.3.3. elseif

Como su nombre sugiere, es una combinación de if y else. Como else, extiende una sentencia if para ejecutar una sentencia diferente en caso de que la expresión if original se evalúa como FALSE. No obstante, a diferencia de else, ejecutará esa expresión alternativa solamente si la expresión condicional elseif se evalúa como TRUE. Por ejemplo, el siguiente código mostraría 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 expresión elseif (si hay alguna) que se evalúe como TRUE se ejecutaría. En PHP, también se puede escribir 'else if' (con dos palabras) y el comportamiento sería idéntico al de un 'elseif' (una sola palabra). El significado sintáctico es ligeramente distinto (si estas familiarizado con C, es el mismo comportamiento) pero la línea básica es que ambos resultarían tener exactamente el mismo comportamiento.

La sentencia elseif se ejecuta sólo si la expresión if precedente y cualquier expresión elseif precedente se evalúan como FALSE, y la expresión elseif actual se evalúa 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 básica 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 también 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;

Page 93: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

93

3.3.5. while

Los bucles while son los tipos de bucle más simples en PHP. Se comportan como su contrapartida en C. La forma básica 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 expresión while se evalúe como TRUE. El valor de la expresión es comprobado cada vez al principio del bucle, así que incluso si este valor cambia durante la ejecución de la(s) sentencia(s) anidada(s), la ejecución no parará hasta el fin de la iteración (cada vez que PHP ejecuta las sentencias en el bucle es una iteración). A veces, si la expresión while se evalúa como FALSE desde el principio de todo, la(s) sentencia(s) anidada(s) no se ejecutarán ni siquiera una vez.

Como con la sentencia if, se pueden agrupar múltiples 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 idénticos, y ambos imprimen números del 1 al 10:

/* ejemplo 1 */ $i = 1; while ($i <= 10) { echo $i++; /* el valor impreso sería $i antes del incremento (post-incremento) */ } /* ejemplo 2 */ $i = 1; while ($i <= 10): echo $i; $i++; endwhile;

Page 94: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 iteración en vez de al principio. La principal diferencia frente a los bucles regulares while es que se garantiza la ejecución de la primera iteración de un bucle do..while (la condición se comprueba sólo al final de la iteración), mientras que puede no ser necesariamente ejecutada con un bucle while regular (la condición se comprueba al principio de cada iteración, si esta se evalúa como FALSE desde el principio la ejecución del bucle finalizará inmediatamente).

Hay una sola sintaxis para los bucles do…while:

$i = 0; do { echo $i; } while ($i>0);

El bucle de arriba se ejecutaría exactamente una sola vez, después de la primera iteración, cuando la condición se comprueba, se evalúa como FALSE ($i no es más grande que 0) y la ejecución del bucle finaliza.

Los usuarios avanzados de C pueden estar familiarizados con un uso distinto del bucle do...while, para permitir parar la ejecución en medio de los bloques de código, encapsulandolos con do...while(0), y usando la sentencia break. El siguiente fragmento de código 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'.

Page 95: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

95

3.3.7. for

Los bucles for son los bucles más complejos en PHP. Se comportan como su contrapartida en C. La sintaxis de un bucle for es:

for (expr1; expr2; expr3) sentencia

La primera expresión (expr1) se evalúa (ejecuta) incondicionalmente una vez al principio del bucle.

Al comienzo de cada iteración, se evalúa expr2 . Si se evalúa como TRUE, el bucle continúa y las sentencias anidadas se ejecutan. Si se evalúa como FALSE, la ejecución del bucle finaliza.

Al final de cada iteración, se evalúa (ejecuta) expr3.

Cada una de las expresiones puede estar vacía. Que expr2 esté vacía significa que el bucle debería correr indefinidamente (PHP implicitamente lo considera como TRUE, al igual que C). Esto puede que no sea tan inútil como se podría pensar, puesto que a menudo se quiere salir de un bucle usando una sentencia break condicional en vez de usar la condición de for.

Considera los siguientes ejemplos. Todos ellos muestran números 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++) ;

Page 96: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

96

Por supuesto, el primer ejemplo parece ser el mas elegante (o quizás el cuarto), pero uno puede descubrir que ser capaz de usar expresiones vacías en bucles for resulta útil en muchas ocasiones.

PHP también soporta la "sintaxis de dos puntos" alternativa para bucles for.

for (expr1; expr2; expr3): sentencia; ...; endfor;

Page 97: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

97

3.3.8 foreach

PHP4 (PHP3 no) incluye una construcción foreach, tal como perl y algunos otros lenguajes. Esto simplemente da un modo fácil de iterar sobre arrays. Hay dos sintaxis; la segunda es una extensión 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 iteración, 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 iteración.

Nota: Cuando foreach comienza su primera ejecución, el puntero interno a la lista (array) se reinicia automáticamente 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 construcción each.

Puede haber observado que las siguientes son funcionalidades idénticas:

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

Las siguientes también son funcionalidades idénticas:

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"; }

Page 98: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

98

Algunos ejemplos más para demostrar su uso: /* foreach ejemplo 1: sólo 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; /* sólo para propósitos 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"; }

Page 99: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

99

3.3.9. switch

La sentencia switch es similar a una serie de sentencias IF en la misma expresión. En muchas ocasiones, se quiere comparar la misma variable (o expresión) con muchos valores diferentes, y ejecutar una parte de código 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 cómo se ejecuta la sentencia switch para evitar errores. La sentencia switch ejecuta línea por línea (realmente, sentencia a sentencia). Al comienzo, no se ejecuta código. Sólo cuando se encuentra una sentencia case con un valor que coincide con el valor de la expresión switch PHP comienza a ejecutar las sentencias. PHP continúa 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 ejecutaría todas las sentencias echo. Si $i es igual a 1, PHP ejecutaría las últimas dos sentencias echo y sólo si $i es igual a 2, se obtendría la conducta 'esperada' y solamente se mostraría '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 condición se evalúa sólo una vez y el resultado se compara a cada sentencia case. En una sentencia elseif, la condición se evalúa

Page 100: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

100

otra vez. Si tu condición es más complicada que una comparación simple y/o está en un bucle estrecho, un switch puede ser más rápido.

La lista de sentencias de un case puede también estar vacía, 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 expresión case puede ser cualquier expresión que se evalúe a un tipo simple, es decir, números 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á también 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;

Page 101: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

101

3.3.10. break

break escapa de la estructuras de control iterante (bucle) actuales for, while, o switch.

break acepta un parámetro opcional, el cual determina cuantas estructuras de control hay que escapar.

$i = 0; while (++$i) { switch ($i) { case 5: echo "Número 5<br>\n"; break 1; Salir solo de switch. */ case 10: echo " Número 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 iteración actual del bucle y continuar la ejecución al comienzo de la siguiente iteración.

continue accepta un parámetro opcional, el cual determina cuantos niveles (bluces) hay que saltar antes de continuar con la ejecución.

<?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 instrucción después del bucle\n"; ?>

Page 102: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

102

3.3.12. Inclusión de archivos

Las funciones que se abordaran en esta sección se incluyen dentro de las estructuras de control del lenguaje, puesto que pueden influir en gran manera en el flujo de ejecución e interpretación de los scripts que las contengan.

3.3.12.1. require() y include()

Las sentencias require() y include() incluyen y evalúan el archivo especificado. require() y include() son idénticas 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 página. 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 línea en el archivo desde donde se hace la inclusión 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 inclusión de include2.php en include1.php

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

El código anterior produce la salida: 28 256

Page 103: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 después de <<<, después la cadena, y después 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 múltiples líneas usando sintaxis de documento incrustado.

EOD;

Nota: La sintaxis de documento incrustado fue añadida en PHP 4.

Las cadenas se pueden concatenar usando el operador '.' (punto).

3.4.1. Visualización de cadenas

Comenzamos con las funciones que nos permiten visualizar y formatear cadenas de caracteres, permitiéndonos gestionar, de este modo, la salida de los datos por pantalla:

• echo (): Muestra información por la salida estándar y tiene los siguientes formatos:

echo string arg1[, string argn];

echo (string arg1[, string argn]);

• print (): Muestra una cadena de caracteres por la salida estándar y no soporta ningún atributo de formato de salida, pero si soporta la expansión de variables. Su sintaxis es:

print (string cadena);

• printf(): Imprime información por la salida estándar soportando diferentes formatos de salida. Admite múltiples tipos de argumentos a visualizar. Su sintaxis es:

printf (string formato[, argumentos])

Page 104: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 mostrarán directamente, mientras que otros, los que van precedidos del carácter “%”, conocidos como especificaciones de conversión, son utilizados para formatear la información. Cada especificación de conversión se compone de los siguientes elementos en (orden):

1. Un carácter de relleno –opcional-, que se utilizará para rellenar y ajustar el resultado hasta lograr el tamaño de cadena correcto, por ejemplo, el espacio en blanco para caracteres (valor por defecto) o el cero para valores numéricos.

2. Un carácter de alineamiento –opcional-, para indicar si el resultado debe alinearse a la izquierda (carácter “-”) o a la derecha (valor por defecto).

3. Un indicador de tamaño -opcional-, que indica el tamaño mínimo de caracteres que ocupará el argumento tras la conversión.

4. Un indicador de precisión –opcional-, formado por un punto (“.”) seguido del número de dígitos decimales que deberán mostrar los números 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:

Símbolo Tipo de Dato Tratamiento % Carácter % Carácter % D Decimales Como entero decimal B Binarios Como entero binario O Octales Como entero X Hexadecimales (letras

minúsculas) Como entero

X Hexadecimales (letras mayúsculas)

Como entero

C Caracteres ASCII Como carácter F Punto flotante (signo decimal) Como float o decimales E Punto flotante (notación

exponencial) Como float o decimales

S Cadenas Como string

Page 105: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

105

El siguiente ejemplo muestra la utilidad de esta función para formatear resultados en pantalla:

<html> <head> <title>trabajando con cadenas</title> </head> <body> <center> <h2>Función <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 específico a los datos o el formato no sea importante, porque se obtienen mejores resultados haciendo uso de la función echo y concatenando las cadenas con el operador “.”.

Page 106: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

106

3.4.2. Acceso al contenido

Podemos acceder a cada uno de los caracteres que componen una cadena haciendo referencia a la posición 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 tamaño de la cadena a recorrer.

• strlen (cadena): devuelve la longitud de la cadena pasada como argumento. El siguiente ejemplo nos muestra un modo básico de recorrer los diferentes componentes de una cadena:

<html> <head> <title>trabajando con cadenas</title> </head> <body> <center> <h2>Función <I> strlen </I></h2> <?php

$cadena="saludos"; echo "<TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'>\n"; echo "<TR BGCOLOR='YELLOW'>\n"; echo "<TD>CARÁCTER</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>

Page 107: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

107

3.4.3. Búsqueda en cadenas

Una de las operaciones más habituales sobre las cadenas es la búsqueda 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 aparición de una cadena dentro de otra y devuelve la subcadena comprendida entre la primera aparición de la cadena buscada (incluyéndola) hasta el final de la cadena en que se realiza la búsqueda. En caso de no encontrar la cadena devuelve una cadena vacía. La búsqueda diferencia entre mayúsculas y minúsculas.

• strrchr (cadena, cadBusq): busca la aparición de un carácter (aunque se utilice una cadena de búsqueda sólo tiene en cuenta su primer carácter) en una cadena y devuelve la subcadena comprendida entre la última aparición del carácter (incluido) hasta el final de la cadena en que se realiza la búsqueda. En caso de no encontrar el carácter en la cadena, se devuelve una cadena vacía. La búsqueda diferencia entre mayúsculas y minúsculas. Si el elemento a buscar no es una cadena, se convierte a entero y se aplica como el valor ordinal de un carácter.

• stristr (cadena, cadBusq): el comportamiento de esta función es igual al de la función strstr(), salvo que esta no diferencia entre mayúsculas y minúsculas.

Page 108: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

108

3.4.4. Comparación de cadenas

Otra operación común con cadenas es compararlas para saber cuál 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 comparación distingue entre mayúsculas y minúsculas.

• strcasecmp (cad1, cad2): se comporta igual que strcmp(), excepto que no diferencia mayúsculas de minúsculas.

Veamos un ejemplo con el funcionamiento de ambas funciones.

<body> <center> <h2>Funciones <I> strcmp y strcasecmp </I></h2> <?php

$cad1="Atención"; $cad2="atención"; 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>

Page 109: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 número de caracteres a comparar, se usará su longitud como long para la comparación. Diferencia mayúsculas de minúsculas.

• strnatcmp (cad1, cad2): se comporta igual que strcmp(), excepto en que utiliza una comparación “natural” de las cadenas alfanuméricas. Distingue entre mayúsculas y minúsculas.

• strnatcasecmp (cad1, cad2): se comporta igual que strnatcmp(), excepto en que no diferencia entre mayúsculas y minúsculas.

Veamos un ejemplo con el funcionamiento diferenciado de strcmp() y strnatcmp():

<body> <center> <h2>Función <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>

Page 110: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

110

3.4.5. Modificación 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 línea 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 parámetro 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>Función <I> chop, rtrim, ltrim y trim</I></h2> <?php

//6 espacios por delante y 4 por detrás $cadena=" abcdefghi "; echo "<TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'>\n"; echo "<Tr align='center'><Td colspan=2>&nbsp; </td>"; echo "<Td BGCOLOR='YELLOW'>tamaño</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>

Page 111: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

111

3.4.5.2. Conversión entre mayúsculas y minúsculas.

• srtolower (cadena): convierte una cadena de caracteres a minúsculas. Recibe como argumento una cadena y devuelve la misma cadena con los caracteres alfabéticos en minúsculas.

• strtoupper (cadena): funciona de forma contraria a la función anterior. una

cadena de caracteres a mayúsculas. • ucfirst (cadena): se encarga de convertir a mayúsculas el primer carácter

de una cadena de caracteres, siempre que este sea alfabético.

Nota: para hacer un uso correcto de esta función, hemos de prestar atención a las características locales propias de PHP, de modo que tengamos las que necesitamos.

• ucwords (cadena): se comporta igual que la función anterior, salvo que esta convierte a mayúsculas el primer carácter de cada palabra que compone la cadena, siempre y cuando sean caracteres alfanuméricos.

Vamos a ver el funcionamiento conjunto de todas estas funciones:

<h2>Función <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>";

Page 112: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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. División de cadenas

• explode (patrón, cadena): devuelve un array resultado de dividir una cadena en diferentes subcadenas. El número total de elementos del array puede ser elegido a través de un parámetro 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>Función <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";

Page 113: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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>

Page 114: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

114

3.5. ARREGLOS

Los arrays o matrices forman una parte muy importante de la programación en PHP ya que permiten manejar grupos de valores relacionados: nos permiten almacenar múltiples valores en una sola estructura y de esta forma, asociarlos bajo una misma denominación. Como veremos, PHP tiene gran cantidad de funciones cuyos parámetros, 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 posición del elemento dentro de esta colección ordenada, de modo que, en cada posición marcada por el índice dentro del array, haya un valor.

Existen diferentes formas de crear arrays. La más sencilla consiste en asignar el valor de cada elemento de manera explícita, es decir, indicando cada uno de los valores que lo componen e, incluso la posición 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 vacíos.

Cuando, al generar el array, no indicamos la posición de sus elementos, estos se van situando secuencialmente respecto a la última asignación realizada sobre el array. La asignación numérica de posiciones dentro del array no tiene porqué ser secuencial, es decir podemos definir el orden numérico que nos interese. Ejemplo:

Page 115: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 función regular; tiene la siguiente definición:

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>

Page 116: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

116

El constructor array() también nos permite asignar los elementos del array en el orden en que queramos. Para ello, indicamos el índice, seguido del símbolo “=>” 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>

Page 117: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

117

3.5.2. Arrays asociativos

A diferencia de los arrays simples, los arrays asociativos (también conocidos como tablas hash o arrays indexados por cadena) están formados por un conjunto de calores que están 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 exlícita 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>";

Page 118: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 combinación 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>

Page 119: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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>

Page 120: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

120

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

Page 121: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

121

3.5.4. Recorrer un array

Una operación 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 función del valor del índice podemos realizar la operación. El problema es conocer a priori el número de elementos que componen el array. Precisamente para solventar este problema, PHP proporciona la función count(), que devuelve el número de elementos que tiene la variable que recibe como argumento.

Nota: aunque es habitual que el argumento pasado a la función sea un array, podemos aplicar la función a cualquier otro tipo de variable, en cuyo caso devolverá el valor 1, si la variable tiene valor nulo o 0, si esta aún no ha sido inicializada. Una vez conocido el número de elementos del array, podemos utilizar un bucle para ir recorriendo sus elementos, ejemplo:

<body> <center> <h2>Arrays función<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>

Page 122: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

122

Otra función relacionada con el recorrido de arrays es sizeof(), que obtiene el número de elementos del array pasado como argumento en la llamada a la función.

3.5.4.2. Recorridos en arrays no secuenciales

Un array no secuencial no parece muy fácil de recorrer, puesto que no sólo necesitamos saber el número de elementos que componen el array, sino también su posición dentro del array. Este mismo problema se presenta con los arrays asociativos, puesto que, además del número 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 también son aplicables a arrays estructurados secuencialmente):

current (matriz): devuelve el valor de la posición actual del puntero dentro del array: todos los arrays tienen un puntero interno que apunta a la posición 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 ningún elemento.

pos (matriz): es idéntica a la función anterior.

Key (matriz): devuelve el índice de la posición actual del array pasado como argumento: un número, 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 posición. En caso de que el elemento actual sea el último del array, devuelve false.

Page 123: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

123

prev (matriz): devuelve el valor del elemento siguiente al actual (si existe) y retrocede el puntero interno una posición. 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 sitúa el puntero interno en su primera posición.

Ejemplo de uso de estas funciones:

<body> <center> <h2>Arrays función<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>Posición</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>";

Page 124: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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. Además, avanza el puntero interno hasta el siguiente elemento. Si el puntero interno apunta a la última posición del array, la ajacución de esta función devuelve false.

list (): asigna una lista de variables en una sola operación. Suele utilizarse en combinación con la función anteriormente vista, each().

Page 125: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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>Posición</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>

Page 126: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

126

3.5.5. Ordenar un array

Funciones para ordenar los elementos de un array

sort (matriz): ordena alfanuméricamente los valores de los elementos de un array de menor a mayor. Para ordenar de manera inversa, disponemos de la función rsort (matriz).

Nota: si aplicamos estas funciones a arrays asociativos, estos perderán sus claves y se convertirán 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>Posición</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>

Page 127: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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>Posición</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>Posición</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:

Page 128: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

128

asort (matriz): ordena alfanuméricamente los valores de los elementos de un array de mayor a menor, pero manteniendo la relación existente entre los índices y sus valores asociados. Esto es posible debido a que la ordenación se hace sobre los elementos del array y no sobre los índices.

arsort (matriz): realiza la ordenación inversa.

ksort (matriz): ordena alfanuméricamente las claves de un arrray de menor a mayor manteniendo las correlaciones entre clave y valor asociado. La función que realiza la ordenación inversa es krsort (matriz).

3.5.6. Otras operaciones

A continuación veremos un grupo de funciones que nos serán 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 tamaño de un array añadiendo 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 añadidos al array precedente. Si estamos juntando arrays asociativos, hay que tener en cuenta que las claves con igual nombre no se añaden al array, sino que se actualizan con el último valor suministrado.

array_walk (matriz, func_usuario [, parámetro]): nos permite aplicar una función definida por el usuario a cada uno de los elementos de una array. La función func_usuario () recibe al menos dos parámetros (el valor del elemento y su clave asociada); si func_usuario () necesitara más parámetros, se pasan como parámetros a la función array_walk (). Una vez aplicada la función, 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; }

Page 129: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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

Page 130: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

130

3.5.6.2. Usando arrays como pilas

Las pilas son estructuras de datos en las que la inserción y la recuperación de los datos que almacenan se realizan bajo un orden prefijado. Son estructuras con una gestión 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 ó más elementos al final de matriz. Devuelve el nuevo número 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 ó más elementos al principio del array. Devuelve el númeor 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=""; $BOTÓN=""; } else { $PILA=$_POST['PILA']; $dato1=$_POST['dato1']; $dato2=$_POST['dato2']; $BOTÓN=$_POST['BOTÓN']; $pila=explode("-",$PILA); switch($BOTÓN){ 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; } }

Page 131: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

131

?> <form method="post" action="<?php echo $_SERVER['PHP_SELF']?>"> <TABLE BORDER="0" CELLPANDDING="4" CELLSPACING="6"> <TR ALIGN="center"> <TD> <input name="BOTÓN" type="submit" value="SHIFT <-"><BR><BR> <input name="dato1" type="text" value="<?php echo "$dato1"?>"><BR><BR> <input name="BOTÓN" 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="BOTÓN" type="submit" value="<- UNSHIFT"><BR><BR> <input name="dato2" type="text" value="<?php echo "$dato2" ?>"><BR><BR> <input name="BOTÓN" type="submit" value="-> POP"> </TD> </TR> </TABLE> <input name="PILA" type="hidden" value="<?php echo implode('-',$pila); ?>"> </form> </body>

Page 132: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

132

array_reverse (matriz): devuelve un array como parámetro pero con sus componentes en orden inverso.

in_array (elemento_busqueda, matriz): con esta función podemos saber si un elemento está contenido dentro de un array.

Page 133: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

133

3.6. FUNCIONES PHP, como la mayoría de los lenguajes de programación, dispone de una herramienta denominada función. Una función es un trozo de código, 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 través del nombre se pueden ejecutar las instrucciones referidas por él tantas veces como sea necesario. La utilización de funciones permite que un script aparezca escrito como una lista de referencias a las tareas que se deben hacer para crear una página de respuesta. 3.6.1. Declaración de una función

function Nombre_de_la_Función($param1, $param2, ..., $paramN) {

// Código PHP asociado a la función codigo_PHP return valor; //Esta sentencia es opcional

} Como se puede ver, son necesarios los siguientes componentes: La palabra reservada function

Nombre_de_la_Función indica el nombre por el que el usuario va a identificar a las sentencias ahí incluidas. ($param1, $param2, ..., $paramN) representa la lista de parámetros necesarios para que la función pueda ser ejecutada. Los parámetros han de expresarse siempre entre paréntesis y separados por comas. Incluso si la función no necesita ningún parámetro, deberán aparecer la pareja de paréntesis. codigo_php representa el conjunto de sentencias que se van a ejecutar cada vez que se haga una llamada a la función. return es la sentencia que se debe utilizar cuando se quiere que la función devuelva un valor. Si la función no devuelve ningún valor puede omitirse. En PHP4 no existe ninguna limitación para definir las funciones, pero basado en las reglas de estilo, se recomienda sean definidas al principio del script.

Page 134: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

134

3.6.2. Llamada a una función Una vez declarada la función, ésta no se ejecuta hasta que se le llama desde cualquier parte del script. Para llamar a una función, sólo hay que escribir una sentencia que contenga el nombre de la función y, entre paréntesis, los valores de los argumentos de llamada de ella. En el momento en que ocurre esto, la ejecución del programa salta inmediatamente a la primera línea de la función llamada. Después de ejecutar las sentencias que componen el cuerpo de la función, el programa salta de nuevo a la posición en que fue llamada la función y continúa su ejecución. El resultado es el mismo que se hubiese obtenido al insertar todas las sentencias de la función en ala posición de llamada a ella. Para volver a hacer uso de la función, simplemente hay que volver a llamarla: una función puede ser llamada tantas veces como se necesite. El siguiente ejemplo nos muestra una forma sencilla de cómo definir y llamar a una función. Como podemos observar, se trata de una función declarada sin parámetros.

<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>

Page 135: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

135

El resultado se muestra en la siguiente imagen:

3.6.3. Paso de Parámetros En ocasiones, necesitaremos definir funciones que aceptan parámetros o argumentos. De esta forma conseguimos que la función se más utilizable dentro del propósito general para el que está definida. Por ejemplo, podemos querer utilizar una función múltiples veces a lo largo del programa, pero algunos de sus valores internos pueden variar con cada llamada. La mejor solución a este problema es definir una función que pueda aceptar argumentos en su llamada para cada valor con el que queramos trabajar. El siguiente ejemplo muestra una modificación de la función presente en el código anterior para que el inicio de la cuenta pueda ser configurable por el usuario. Como podemos observar, los parámetros se utilizan como variables dentro del cuerpo de la función:

<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); ?>

Page 136: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 función, esta información puede suministrarse mediante una lista de variables y/o constantes separadas por comas. El siguiente ejemplo nos muestra una combinación de estos elementos pasados como argumentos a una función:

<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>

Page 137: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

137

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

El resultado se muestra en la siguiente imagen:

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

Page 138: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

138

Para indicar que parámetros se pasan por regencia, hay que marcarlos en la definición de la función, anteponiendo el símbolo ampersand (&) al nombre del parámetro. Parámetros por defecto Los parámetros por defecto son la forma en que PHP implementa los parámetros opcionales en la llamada a las funciones. De este modo, este tipo de parámetros toma un valor predefinido cuando, desde la llamada a la función, no se les ha proporcionado ningún argumento. Para definir un parámetro por omisión, hay que, a demás de nombrar el parámetro, escribir el operador de asignación (“=”) y, a continuación, el valor que vaya a recibir el parámetro en caso de no especificarse en la llamada. Cuando se usan parámetros por defecto, estos tienen que situarse al final en la declaración, es decir, a la derecha de cualquier parámetro normal; de otra manera, las cosas no funcionará de la forma esperada. Cuando se utiliza el valor por defecto de un parámetro, obligatoriamente han de utilizarse todos los valores por defecto de todos aquellos parámetros que se encuentren a su derecha. El siguiente ejemplo nos muestra el uso de estos tres tipos de parámetros:

<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>

Page 139: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

139

El resultado se muestra en la siguiente imagen:

Page 140: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

140

3.7. FUNCIONES DE FECHA Y HORA En casi todos los sistemas informáticos hay una fecha de inicio común, 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 día 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 número 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 descripción de ellas:

Función Descripción

time() Obtiene la marca de tiempo UNIX actual

checkdate() Valida una fecha en formato gregoriano

date() Da formato a la hora y fecha locales

getdate() Obtiene información sobre la fecha y la hora locales

gettimeofday() Obtiene la hora actual

gmdate() Formatea la fecha y la hora a formato GMT

gmmktime() Obtiene la marca de tiempo UNIX de una fecha con formato GMT

gmstrftime() Formatea la fecha y la hora con formato GMT a las características locales

microtime() Obtiene la marca de tiempo UNIX actual en microsegundos

mktime() Obtiene la marca de tiempo UNIX para una fecha dada

strftime() Formatear la hora actual de acuerdo con las características locales

strtotime() Traduce una fecha u hora descritas en inglés a su correspondiente marca de tiempo UNIX

time(): Devuelve la marca de tiempo correspondiente al instante en que se ejecuta checkdate(mes, día, año): Verifica si la fecha que se le pasa como parámetro es una fecha correcta. Esta función 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 válida; en caso contrario, devuelve un valor falso. Se considera válida una fecha si:

Page 141: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

141

• El año está entre 0 y 32767, ambos incluidos • El mes está entre 1 y 12, ambos incluidos • El día está en el rango permitido para el mes dado. Se tienen en

consideración los años bisiestos. date(formato [,timestamp]): Esta función nos permite darle un formato específico a una cadena que contendrá una fecha y una hora. Acepta como parámetro una cadena de formato y un parámetro timestamp; si éste se omite, se tomará el instante de ejecución de la orden.

Valores Descripción

a "a.m." o "p.m."

A "A.M." o "P.M."

d Día del mes con dos dígitos y con cero a la izquierda, de "01" a "31"

D Día de la semana con tres caracteres, "Fri"

F Nombre del mes, en texto completo, "January"

h Hora en formato, de "01" a "12"

H Hora en formato, de "00" a "23"

g Hora en formato, de "1" a "12" (sin ceros)

G Hora en formato; de "0" a "23" (sin ceros)

i Minutos, de "00" a "59"

j Día del mes en formato "1" a "31"

l Día de la semana, en texto completo, "Friday"

L "1" or "0", 1 si es año bisiesto y 0 si no lo es

m Mes de "01" a "12"

M Mes con tres caracteres, "Jan"

n Mes de "1" a "12" (sin cero)

s Segundos de "00" a "59"

S Sufijo ordinal en inglés, "th", "nd"

t Número de días del mes dado, de "28"a "31"

U Segundos desde el valor de inicio ’epoch’ (01-01-1970)

w Día de la semana de "0" (domingo) a "6" (sábado)

Y Año con cuatro dígitos, "2004"

y Año con dos dígitos, "04"

z Día del año de "0" a "365"

Z Diferencia horaria en segundos de "-43200" a "43200"

Page 142: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

142

Los caracteres distintos a los que aparecen en la tabla, que estén dentro de la cadena formato, se imprimirán tal cual aparecen. El formato "Z" siempre devuelve "0" en la función 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 generarán como resultado las siguientes fechas y horas:

Dado que todas las opciones de formato de la función date() están 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 función devuelve un array asociativo que contiene información sobre la fecha y hora asociada a la marca de tiempo, timestamp, pasada como parámetro. En caso de no pasar ningún parámetro a la función, ésta obtiene la marca de tiempo del instante en que se ejecuta.

Page 143: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

143

Clave Descripción

seconds Identifica los segundos

minutes Identifica los minutos

hours Identifica las horas

mday Identifica el día del mes

wday Identifica, en número, el día de la semana

mon Identifica, en número, el mes

year Identifica, en número, el año

yday Identifica, en número, el día del año

weekday Identifica, en texto, el día de la semana

month 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, "Información de la hora del sistema");

?>

Page 144: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

144

gettimeofday(): Esta función obtiene la hora actual en un array asociativo, cuya estructura contiene los siguientes campos:

Campo Descripción sec Segundos usec Microsegúndos

minuteswest Minutos al oeste del meridiano de Greenwitch dsttime Corrección horaria entre los horarios de verano e invierno

gmdate (format [,timestamp]): Esta función es muy parecida a la función date() anteriormente vista, con la diferencia que la hora devuelta por esta función tiene formato GMT (Greenwich Mean Time) A continuación se muestra un ejemplo donde la hora de la Ciudad de México tiene –6 horas de diferencia con el GMT.

echo "Hora de México ", date("h:i:s a"), "<br>\n"; echo "Hora de Greenwich ", gmdate("h:i:s a"), "<br>\n";

y da como resultado:

Hora de México 05:05:30 pm Hora de Greenwich 11:05:30 pm

gmmktime (hora, min, seg, mes, día, año [,is_dst]) Es muy parecida a la función mktime(), a excepción de que los parámetros que se pasan en la llamada a la función representan la fecha en formato GMT gmstrftime (format, timestamp): Da formato a una fecha/hora GMT según las convenciones locales. Al igual que en las funciones anteriores, la fecha devuelta es la de GMT; por lo demás, es muy parecida a la función 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

Page 145: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

145

unidades de segundo y esta función sólo está disponible en los sistemas operativos que soporten la llamada al sistema gettimeofday(). mktime (hora, min, seg, mes, día, año [,is_dst]): Esta función devuelve la marca de tiempo (el número de segundo transcurridos desde el 1 de enero de 1970 a las 00:00:00), correspondiente a la fecha y hora pasadas a la función como parámetros. Esta función es especialmente útil para realizar cálculos matemáticos con las fechas o validaciones de ellas. Los parámetros 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 día, mes y año pueden tomar el valor 0. El parámetro 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 cuál es el valor correcto del parámetro. strftime(format, timestamp): Esta función nos permite dar un formato específico de fecha y hora a la marca de tiempo que se le pasa como parámetro. En caso de no proporcionar este parámetro, se tomará por defecto la marca de tiempo correspondiente al instante en que se ejecuta la función. Los formatos posibles a tener en cuenta se especifican en la siguiente tabla:

Page 146: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

146

Valores Descripción

%a Nombre del día de la semana abreviado

%A Nombre del día de la semana completo

%b Nombre del mes abreviado

%B Nombre del mes completo

%c Representación de fecha y hora preferidas en el idioma actual

%d Día del mes en número (de 00 a 31)

%H Hora como un número de 00 a 23

%I Hora como un número de 01 a 12

%j Día del año como un número de 001 a 366

%m Mes como un número de 01 a 12

%M Minutos en número de 00 a 59

%p ‘am’ o ‘pm’, según la hora dada, o las cadenas correspondientes en el idioma actual

%s Segundos en número de 00 a 59

%w Número de la semana en el año, empezando con el primer domingo como el primer día de la primera semana

%W Número de la semana en el año, empezando con el primer lunes como el primer día de la primera semana

%x Día de la semana en número (el domingo es el 0)

%X Representación preferida de la fecha sin la hora

%y Representación preferida de la hora sin la fecha

%Y Año en número de 00 a 99

%Z Año en número de cuatro cifras

%% Nombre o abreviatura de la zona horaria A continuación 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";

?>

Page 147: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

147

Habrás observado en el ejemplo anterior el uso de la función 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 aparecerán los valores de las fechas, los caracteres separadores decimales y en general toda aquella información que depende de la configuración regional de la máquina desde la que se ejecuta el script. setlocal(Categoría, País);

• Categoría:

LC_CTYPE para la conversión de cadenas a la configuración regional. LC_NUMERIC para los separadores numéricos. LC_TIME para aplicar formatos de fecha y hora con strftime(). LC_ALL aplica todas las anteriores.

• País

Permite especificar el idioma con el que se mostrarán los valores devueltos por las funciones indicadas. Si no se configura ninguno, es decir, es la cadena vacía “”, se tomarán los valores de las variables de entorno.

time(void): Devuelve la hora actual como número de segundos transcurridos desde las 00:00:00 del 1 de enero de 1970 GMT (Unix Epoch). strtotime(cad_fecha [,timestamp]): Esta función 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 parámetro opcional timestamp, o bien, a ala marca de tiempo actual, si este parámetro no se proporciona en la llamada a la función.

Page 148: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

148

4. MENSAJES HTTP. 4.1. EL PROTOCOLO HTTP. Este es un sencillo protocolo cliente-servidor que articula los intercambios de información entre los clientes y los servidores web a través de operaciones simples de tipo solicitud/respuesta. Básicamente controla el modo en el que los clientes web solicitan recursos de los servidores web y el modo en que éstos les envían dichos recursos de vuelta. Todos los recursos proporcionados por un servidor web (documentos HTML, gráficos, videos, ficheros de sonido..) están asociados a un URL(Localizador Uniforme de Recursos). 4.2. ESTRUCTURA DE LOS MENSAJES HTTP. Las peticiones y repuestas se envían como mensajes de texto que se componen en dos partes, una cabecera y un cuerpo (ambos elementos se separan en el mensaje mediante una línea 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 mayoría de las ocasiones cuentan con ambos componentes. La estructura de estos mensajes se puede resumir en la siguiente tabla:

Tipo de Mensaje Componente Comando http Cabeceras de la petición Línea en Blanco (separador)

Petición

Información Adicional Resultado de la Petición Cabeceras de la Respuesta Línea en Blanco (separador)

Respuesta

Información Adicional 4.3. Formularios en HTML Un formulario HTML es una sección de un documento que contiene texto normal, etiquetas HTML y elementos especiales llamados controles (casillas de verificación o checkboxes, radiobotones, menús desplegables, etc.) y rótulos (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.).

Page 149: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 actúa, por tanto, como contenedor de controles. Pero, además, 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 envían 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-www-from-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 método 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 envía al agente procesador.

El conjunto de datos del formulario que se envía 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 envía un formulario para su procesamiento, se produce el emparejamiento de sus controles, a través de sus respectivos nombres, con los valores actuales que tienen. Estas parejas variable-valor configuran el conjunto de datos del formulario que se envían al agente servidor. Como hemos visto, dependiendo del método HTTP usado (get o post), una vez la información se enviara formando parte de la cadena de consultas (Query string) que configura la solicitud y, otras veces, formando parte del cuerpo del mensaje.

Page 150: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

150

PHP, a través 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, después, poder trabajar con ellos. Las tres variables principales para realizar esta operación son:

Variable Contenido _POST Array que contiene las variables pasadas a través del método

POST su uso es análogo al array _GET Array que contiene las variables pasadas a través del método

GET su uso es análogo al array _REQUEST Array que contiene las variables pasadas a través de cualquier

mecanismo de entrada Ejemplo de paso de valores de formulario a la misma página: <!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 Contraseña</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>

Page 151: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 contraseña 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>

Page 152: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

152

4.4. ESTRUCTURA DE LAS COOKIES Básicamente, las cookies son archivos de texto ASCII que almacenan información siguiendo una estructura básica de pares identificadores = valor. Su tamaño es relativamente pequeño, no superando en ningún caso los 4 Kb. El modo en que almacenan, los directorios en que se almacenan y resto de características propias de una operación 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 aplicación Web (normalmente un navegador) cuente con estas características y que, además, este habilitada. La siguiente tabla nos muestra la estructura básica de una cookie:

Elemento Significado Nombre Indica el nombre que se le ha dado a la cookie. Valor Indica el valor de la cookie, es decir, el contenido que tiene. Caducidad Indica cual es el tiempo de validez de la cookie. Dominio Indica el rango de dominios en los cuales es valida la cookie. Ruta Contiene el directorio a partir del cual la cookie tiene validez. Seguro 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 información 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 sobrescribirán los valores de las entradas del formulario. 4.4.1. Utilización de cookies en PHP PHP propone una sola función para el manejo básico de cookies (creación 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.

Page 153: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

153

4.4.1.1. Creación de cookies Como se puede observar en la definición de la función setcookie ( ), cada uno de los parámetro coinciden con los elementos que componen la estructura básica de una cookie. También vemos que el único argumento obligatorio en la llamada al la función es el nombre que se le asigna a la cookie. Sin embargo, en el caso de la creación es necesario, al menos, que se asigne un valor inicial. Cuando no queremos hacer uso de los parámetros de tipo string, se deben remplazar con la cadena vacía (“”) y los tipo int, con el valor 0. si no usamos el parámetro caducidad, se tomara por defecto el tiempo que dure la sesión de trabajo activa en el navegador. De igual modo, si no se utilizan los parámetros 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. Eliminación de cookies Como ya sabemos, para borrar una cookie, usamos la misma función que para crearla: setcookie ( ), solo que en este caso la llamada de la función solo contendrá como parámetro 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 través 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>

Page 154: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

154

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

Ejemplo de eliminación 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 básicas de hacer que la información generada en un script estuviera disponible en scripts diferentes al de creación; utilizando formularios, pasando las variables y sus valores a través de la URL, o bien, definiendo cookies. 4.5.1. Creación de sesiones La configuración por defecto PHP tiene deshabilitadas las sesiones; esto quiere decir que, cuando queremos hacer uso de ellas, debemos indicárselo de forma explicita. Cambiando la configuración (modificando el valor de la directiva session.auto_start a 1 en el archivo de configuración 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 sesión. El modo principal de activar el uso de sesiones cuando lo deseemos es hacer uso de la función session_start ( ) cuya sintaxis es la siguiente: bool session_start ( )

Page 155: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

155

Esta función crea una nueva sesión y genera el identificador, o retoma la sesión en caso de que ya existiera, utilizando el identificador de sesión que se había 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]) También es posible identificar a las sesiones asignándole un nombre específico. Para ello, utilizaremos la función session_name( ) que tiene la siguiente sintaxis: String session_name([string nombre]) 4.5.2. Acceso a las variables de sesión El modo de acceso a las variables de sesión es a través 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 sesión

actual, sin modificar las variables globales asociadas a la sesión ni la cookie se sesión.

• Session_unset ( ): Libera todos los recursos asociados a las variables de

sesión actualmente registradas.

• Session_encode ( ): Codifica los datos de la sesión actual en una cadena.

• Session_encode (datos): Decodifica los datos de una sesión pasados

como argumentos en una cadena, generando las variables guardadas en dicha sesión.

• Session_get_cookie_params ( ): Obtiene los parámetros de la cookie de

sesión (duración, camino, dominio y seguridad), en caso de que este haya sido el método elegido para gestionar las sesiones.

Page 156: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

156

• Session__set_cookie_params (tiempo [, camino [, dominio [, seguridad] ] ] ): Nos permite cambiar los parámetros de la cookie de sesión actual.

• session_save_path ( [ string camino] ): Nos permite obtener o modificar la ruta donde se guardan los datos de la sesión actual.

Ejemplo de sessiones y creación 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>Información de la Sesión</B></TD> </TR> <TR> <TD BGCOLOR="yellow">ID</TD> <TD><?php echo session_id() ?></TD> </TR> <TR> <TD BGCOLOR="yellow">Número 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 y Resetear contador</A> </PRE> </CENTER> </BODY> </HTML> Eliminación de la variable de session: <?php session_start();

Page 157: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 sesión <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>

Page 158: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

158

5. ACCESO A BASES DE DATOS 5.1. CONEXIONES USANDO ODBC 5.1.1. Introducción Una vez que el servidor Web ha solicitado al intérprete de PHP la ejecución 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 intérprete de PHP y la base de datos se pueden conectar es a través de un ODBC (Open Database Connectivity). Este consiste en una API estándar, donde para utilizarla hace falta instalar. 5.1.2. Conexión a través de ODBC En entornos con sistema operativo Windows, la conexión con ODBC se establece en la opción de “Fuentes de Datos ODBC”, y para entrar a esta opción 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 control-Herramientas administrativas-Orígenes de datos (ODBC).

2. Buscar el archivo odbcad32.exe, esto se puede hacer por medio del menú Inicio-Buscar…-Archivos y carpetas…

En esta opción nos colocaremos en la pestaña que hace mención a DSN de sistema, en esta pulsaremos el botón Agregar…, al hacer esto nos proporcionará la siguiente ventana:

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

Page 159: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

159

En esta ventana proporcionaremos el nombre del origen de datos o DSN que va a ser el encargado de establecer la conexión. Posterior a esto presionaremos el botón 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 conexión 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 contraseña sice. La base de datos tiene las siguientes tablas: Artículo con los campos, idArticulo, descripción, existencia, máximo, mínimo, idtipoarticulo (como llave foránea de la tabla Tipoartículo); la tabla tipoarticulo con los campos, idtipoarticulo y tipo. Además estableciendo una relación de uno a muchos de la tabla de Tipoarticulo a la de Articulo.

Page 160: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

160

5.2. Insert, Update y Delete 5.2.1. Introducción Una de las funciones que se emplea con las bases de datos es la inserción, la cual facilita la inclusión de información que posteriormente se tratará de forma pertinente. Para llevar a cabo esto PHP proporciona funciones que nos permitirán adicionar información desde una página hacia la base de datos:

1. odbc_connect (“DSN”,”Usuario”,”Contraseña”); esta función establece la conexión con el gestor de bases de datos, y necesita los siguientes parámetros: DSN, generado a partir de una conexión con ODBC; Usuario es el proporcionado al realizar la conexión con ODBC, si se genero un ODBC con SQL el nombre del usuario por defecto es SA; Contraseña 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 conexión.

2. odbc_do (conexión, instrucción_SQL); ejecuta la instrucción SQL (insert, update o delete) asociada con la conexión establecida con odbc_connect. Devuelve false en caso de haber un error en la ejecución.

3. odbc_close (conexión); cierra la conexión que se abrió con la función odbc_connect.

5.2.2. Insertando datos en PHP Para llevar a cabo la inserción de información a través de una interfaz desarrollada en PHP, se efectúan 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 botónes para ingresar información, el esquema se genera a partir de la tabla de su base de datos en la cual desee introducir información. Un ejemplo de esquema se muestra a continuación:

NOTA: es muy importante destacar la inclusión del formulario para su posterior trabajo con los archivos PHP, que nos brindarán la base para realizar la conexión con la base de datos.

Page 161: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 código donde localizaremos la siguiente línea de código:

En esta línea se modificará la acción 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. Después de haber hecho esto, se procede a crear el archivo PHP. Para crearlo hay que dirigirse al menú Archivo-Nuevo…-Página dinámica-Seleccionar PHP y presionar el botón crear. La estructura general que tiene el archivo .php es la siguiente:

Se establece la conexión con el gestor de base de datos. Se forma la instrucción SQL que ejecutará la inserción. Se manda ejecutar la instrucción SQL. Se cierra la conexión.

Para este ejemplo el código del archivo insert.php es el siguiente:

Page 162: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

162

<?php $clave = $_POST['clave']; $desc = $_POST['desc']; $exi = $_POST['exi']; $max = $_POST['max']; $min = $_POST['min']; $tipo = $_POST['tipo']; // Establece la conexión 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 información 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 inserción 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 instrucción SQL que se va a ejecutar en la función odbc_do.

Page 163: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

163

5.3. Querys y cursores 5.3.1. Introducción La obtención y presentación de información 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 extraídos por la ejecución de la consulta.

Como se menciono anteriormente la obtención de información genera una estructura de datos de acuerdo con la ejecución de la consulta, para manejar esta estructura PHP cuenta con un conjunto de funciones para hacerlo las cuales se detallan a continuación:

1. odbc_num_fields (cursor); esta función proporciona el número de campos de los que se compone la estructura de datos, y requiere del parámetro cursor siendo la variable que obtiene el resultado de la ejecución de la consulta con la instrucción 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 tamaño de la estructura obtenida por la consulta, además en un proceso de iteración 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 obtención de información.

5.3.2. Consultando información en PHP Para tener una noción general del procedimiento a seguir para la ejecución 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. Después de haber hecho lo anterior se pasa a crear el archivo .php, de la siguiente manera: ir al menú Archivo-Nuevo…-Página dinámica-Seleccionar PHP y pulsar el botón crear. La estructura general que tiene el archivo .php es la siguiente:

Se establece la conexión con la base de datos. Se forma la instrucción SQL que ejecutará la consulta.

Estructura de datos obtenida por la

Cursor

Page 164: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

164

Se solicita la ejecución de la instrucción SQL. Se recibe un identificador del cursor donde están contenidos los datos

obtenidos a través del gestor. Se presenta la información obtenida. Se liberan los recursos utilizados y se cierra la conexión.

El código del archivo consulta.php se presenta a continuación:

<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 conexión 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

Page 165: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

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 parámetros específicados."; 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 conexión 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 artículo o simplemente presionar el botón enviar y así ejecutará la consulta de acuerdo al tipo que este seleccionado el el menú. Para ejecutarlo necesitamos presionar la tecla F12.

Page 166: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

166

Anexo I. COMANDOS GENERALES DE HTML. Resumen de las etiquetas HTML más importantes.

Etiquetas HTML Significado Propiedades Representación

<html> </html>

Hyper Text Markup Language

Definen el principio y el final del documento

<head> </head> Cabecera Definen el principio y el final de la

cabecera

<title> </title> Título Parte de la cabecera, el contenido aparece

en la línea de cabecera

<body> </body> Cuerpo Definen el principio y el final del cuerpo

principal del texto

<h1></h1> Heading 1 – Título 1 Negrita, tamaño mayor Título 1 <h2></h2> Título 2 Negrita, tamaño grande Título 2 <h3></h3> Título 3 Negrita, tamaño medio Título 3 <h4></h4> Título 4 Negrita, normal Título 4

<h5></h5> Título 5 Negrita, pequeño Título 5

<h6></h6> Título 6 Negrita, muy pequeño Título 6

<b></b> Bold – negrita Atributo de texto Ejemplo en negrita

<i></i> Italics – cursiva Atributo de texto La cursiva esta inclinada

<u></u> Underlined – subrayado

Atributo de texto, no es aconsejable utilizar subrayados por que existe el peligro de confundirlo con hipervínculos

El subrayado parece más importante

&nbsp; Non breaking space Caracter en blanco protegido 12 de octubre

<p></p> Paragraph – párrafo Define un párrafo y crea automáticamente un espacio entre un párrafo y el siguiente. La etiqueta final no es imprescindible

Éste es un (breve) párrafo. Ésta es otro párrafo más largo.

<br/> Break – salto de línea Crea un salto de línea, no necesita una etiqueta final

Ésta es una mini-oración. Ésta oración empieza con una línea nueva, pero no introduce ningún párrafo nuevo.

</hr> Horizontal rule – línea horizontal

Introduce una línea horizontal, no necesita una etiqueta final ____________________

<p>&nbsp;</p> Párrafo con caracteres en blanco protegidos

Crea un párrafo en blanco, un espacio vacío

<li></li> List – entrada de lista Puntos de enumeración; el símbolo utilizado para la enumeración depende de la definición (consulte celdas inferiores)

Consultar celdas inferiores

<ol></ol> Ordered list – lista numerada

Define el principio y el final de una lista numerada; introducen una sangría

Éste es el primer punto Éste es el segundo punto

<ul></ul> Unordered list – lista con viñetas

Define el principio y el final de una lista no numerada; introducen una sangría

1. Éste es el primer punto 2. Éste es el segundo punto

Page 167: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

167

3.0.2 Colores para enlaces y fuentes

Nombre inglés hexadecimal Nombre español black #000000 (negro) silver #c0c0c0 (plateado) gray #808080 (gris) white #ffffff (blanco) maroon #800000 (marrón) red #ff0000 (rojo) purple #800080 (lila) fuchsia #ff00ff (fucsia) green #008000 (verde oscuro) lime #00ff00 (verde limón) olive #808000 (verde oliva) yellow #ffff00 (amarillo) navy #000080 (azul oscuro) blue #0000ff (azul) teal #008080 (verde azulado) aqua #00ffff (azul cielo)

3.0.3 Atributos de la etiqueta body

Atributo Notas Ejemplo background Gráfico de fondo background=”jeffe.gif” bgcolor Color de fondo bgcolor=”yellow” text Color de texto text=”#800080” link Vínculo no visitado link=”green” vlink Vínculo visitado vlink=”red”

alink Vínculo activo, color cuando se hace clic con le ratón en el enlace

alink=”white”

Page 168: PHP4

I.S.C. Alejandro Guzmán Zazueta [email protected]

168

3.0.4 Opciones avanzadas de configuración de la fuente

Código fuente Representación en navegador Notas

<dfn>...</dfn> HTML significa Lenguaje de marcado de hipertexto

Texto de definición, explicación de conceptos, con frecuencia en cursiva

<h2>...</h2> Éste es un título 2 6 niveles de título en total

<cm>...</cm> resaltado Enfático, resaltado, con frecuencia en negrita

<strong>...</strong> strong Muy enfático, con frecuencia en negrita

<code>...</code> Introduzca ahormad home, y siga escribiendo

Para el código fuente informático

<kbd>...<kbd> Introduzca en primer lugar reproducir cd, y a continuación dir

El texto que debe introducirse con el teclado

<cite>...</cite> Consulte también Dave Raggett u. A. :HTML 4. Addison-Wesley 1998.

Notas bibliográficas, normalmente en cursiva

<samp>...</samp> Observe $!%; t y lo verá. Se muestra el texto tal y como se ha introducido

<q>...</q> Hola, dijo el caracol, vuelvo a estar aquí

Para citas cortas en el texto, también pueden utilizarse comillas

<i>...</I> Esto esta en cursiva Italics, cursiva

<tt>...</tt> Fuente courier Teletype, teletipo <b>...</b> La negrita también es muy útil Bold, negrita

<big>...</big> Había una vez… Fuente grande, por ejemplo, para destacar las letras iniciales

<small>...</small> Small is beautiful. Para Fuentes pequeñas <sub>...</sub> H2O Subscript, subíndice <sup>...</sup> 102 Superscript, superíndice

<u>...</u> Puede confundirse con los enlaces. Subrayado, ya no se utiliza

<strike>...</strike> Éste texto está tachado. Tachado, no debe utilizarse