Escolar Documentos
Profissional Documentos
Cultura Documentos
Manual de PHP
2 INDICE 1. PHP Y APACHE 1.1. INTRODUCCIN PHP 1.2. INTRPRETE 1.3. EJECUCIN DE PHP EN EL SERVIDOR 1.4. INSTALACIN DE APACHE 1.5. INSTALACIN DE PHP 4 1.6. INSTALACIN Y CONFIGURACIN DE DREAMWEAVER 2. DREAMWEAVER 2.1. BIENVENIDOS A DREAMWEAVER MX 2004 2.2. IMGENES. 2.3. INSERTAR TABLA. 2.4. MODIFICAR TABLA. 2.5. FORMULARIOS 2.6. CAMPO DE TEXTO. 2.7. BOTN DE OPCIN. 2.8. CASILLAS DE VERIFICACIN. 2.9. LISTAS Y MENS. 2.10. BOTONES DE BORRAR Y ENVIAR. 2.11. INSERTANDO UN OBJETO MULTIMEDIA. 2.12. CAPAS. 2.12.1. Insertar una capa. 2.12.2. Formato de una capa. 2.12.3. Comportamientos en las capas. 2.13. MENS DESPLEGABLES. 2.14. MARCOS. 3. LENGUAJE PHP. 3.1. FORMATO DEL CDIGO PHP 3.1.1. Delimitadores 3.1.2. Extensin de los archivos en PHP 3.1.3. Comentarios 3.1.4. Fin de lnea 3.2. SINTAXIS BSICA 3.2.1. Variables 3.2.2. Tipos de datos 3.2.2.1. Enteros 3.2.2.2. Nmeros en punto flotante 3.2.2.3. Booleano 3.2.2.4. Cadenas 3.2.2.5. Arrays 3.2.2.6. Conversin de tipos 3.2.3. Otros componentes asociados a las variables 3.2.3.1. Variables predefinidas de Apache 3.2.3.2. Variables predefinidas de PHP
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
3 3.2.3.3. mbito de las variables 3.2.3.4. Variables de variables 3.2.3.5. Variables de Formulario 3.2.3.6. Funciones para variables 3.2.4. Constantes 3.2.4.1. Constantes predefinidas de PHP 3.2.5. Expresiones 3.2.6. Operadores 3.2.6.1. Operadores Aritmticos 3.2.6.2. Operadores de Asignacin 3.2.6.3. Operadores de Comparacin 3.2.6.4. Operadores de incremento/decremento 3.2.6.5. Operadores Lgicos 3.2.6.6. Otros Operadores 3.2.6.7. Precedencia de Operadores 3.3. ESTRUCTURAS DE CONTROL 3.3.1 if 3.3.2. else 3.3.3. elseif 3.3.4. Sintaxis Alternativa de Estructuras de Control 3.3.5. while 3.3.6 do..while 3.3.7. for 3.3.8 foreach 3.3.9. switch 3.3.10. break 3.3.11. continue 3.3.12. Inclusin de archivos 3.3.12.1. require() y include() 3.4. MANEJO DE CADENAS 3.4.1. Visualizacin de cadenas 3.4.2. Acceso al contenido 3.4.3. Bsqueda en cadenas 3.4.4. Comparacin de cadenas 3.4.5. Modificacin del contenido 3.4.5.1. Limpieza de cadenas 3.4.5.2. Conversin entre maysculas y minsculas. 3.4.5.3. Divisin de cadenas 3.5. ARREGLOS 3.5.1. Arrays escalares 3.5.2. Arrays asociativos 3.5.3. Arrays multidimensionales 3.5.4. Recorrer un array 3.5.4.1. Recorridos en arrays secuenciales 3.5.4.2. Recorridos en arrays no secuenciales 3.5.5. Ordenar un array 3.5.6. Otras operaciones
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
4 3.5.6.1. Modificar un array 3.5.6.2. Usando arrays como pilas 3.6. FUNCIONES 3.6.1. Declaracin de una funcin 3.6.2. Llamada a una funcin 3.6.3. Paso de parmetros 3.7. FUNCIONES DE FECHA Y HORA
4. MENSAJES HTTP. 4.1. EL PROTOCOLO HTTP. 4.2. ESTRUCTURA DE LOS MENSAJES HTTP. 4.3. Formularios en HTML 4.3.1. El elemento FORM 4.3.2. Envi de formularios al servidor 4.4. ESTRUCTURA DE LAS COOKIES 4.4.1. Utilizacin de cookies en PHP 4.4.1.1. Creacin de cookies 4.4.1.2. Eliminacin de cookies 4.4.1.3. Consulta de contenidos 4.5. SESIONES EN PHP 4.5.1. Creacin de sesiones 4.5.2. Acceso a las variables de sesin 4.5.3. Otra funciones asociadas con el manejo de sesiones 5. ACCESO A BASES DE DATOS 5.1. CONEXIONES USANDO ODBC 5.1.1. Introduccin 5.1.2. Conexin a travs de ODBC 5.2. INSERT, UPDATE Y DELETE 5.2.1. Introduccin 5.2.2. Insertando datos en PHP 5.3. QUERYS Y CURSORES 5.3.1. Introduccin 5.3.2. Consultando informacin en PHP
PHP es un lenguaje de scripting que permite la generacin dinmica de contenidos en un servidor Web. El nombre de PHP fue empleado por vez primera a principios de 1995 y ha sido utilizado para definir a un conjunto de macros conocido como Personal Home Page Tools. Entre sus principales bondades se pueden destacar: su potencia, alto rendimiento y su facilidad de aprendizaje. Fue creado por Rasmus Lerdof como un conjunto de utilidades para aadir dinamismo a las pginas Web y posteriormente fue rediseado completamente por Zeev Suraski y Andi Gutmans y rebautizado como PHP 3.0. Ms tarde se volvi a redisear completamente el intrprete, aadindole ms potencia y nuevas funcionalidades, para dar lugar al lenguaje que hoy se conoce como PHP4. Es un lenguaje de programacin que contiene muchos conceptos de C, Perl y Java. El cdigo PHP est basado en documentos HTML de manera que es muy fcil incorporar informacin actualizada en un sitio Web. Para activar y desactivar el <<modo PHP>> dentro de una pgina HTML existen varias posibilidades: " Utilizando las etiquetas <? php y ?>. " Empleando las etiquetas cortas (short tags) <? Y ?> " Con la etiqueta <SCRIPT> de HTML: <SCRIPT LANGUAJE= php> y </SCRIPT>. " Con las etiquetas <% y %>
o Dispone de libreras de conexin con la gran mayora de los sistemas de gestin de bases de datos para el almacenamiento de informacin permanente en el servidor. o Proporciona soporte a mltiples protocolos de comunicaciones en Internet (http, imap, ftp, etc). o Cdigo fuente abierto: el cdigo del intrprete est accesible para permitir posibles mejoras o sugerencias acerca de su desarrollo. o Es gratuito. o Portable y multiplataforma: existen versiones del intrprete para mltiples plataformas. Esto permite que las aplicaciones puedan ser portadas de una plataforma a otra sin necesidad de modificar ni una sola lnea de cdigo.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
6 o Eficiente: PHP consume pocos recursos en el servidor, por lo que con un equipo relativamente sencillo es posible desarrollar interesantes aplicaciones. o Alta velocidad de desarrollo: PHP permite desarrollar rpidamente sitios Web dinmicos.
1.2. INTRPRETE
Las pginas que contienen exclusivamente cdigo HTML se pueden desarrollar y probar sin la intervencin de un servidor Web, ya que el cdigo HTML es interpretado en el navegador del usuario. PHP se ejecuta en el servidor antes de que la pgina sea enviada al usuario que realiz la peticin. Cuando llega una peticin a un servidor Web, ste localiza el documento solicitado por el cliente y, en funcin de una serie de parmetros de la propia configuracin del servidor, decide la accin a realizar con el documento. 9 Fases en la obtencin de un documento esttico:
Servidor
CLIENTE 1 2 SOLICITUD RESPUESTA 4 Documentos estticos (html, jpg...) 3
1.
2.
El usuario pulsa sobre un link solicitando un documento (un archivo HTML, una imagen en formato jpg, etc.) y el navegador enva la peticin al servidor utilizando el protocolo HTTP (protocolo de transferencia de hipertexto), La solicitud llega hasta el servidor Web correspondiente a travs de la red. El servidor localiza el documento solicitado.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
7 3. El servidor lee el documento del sistema de archivos y enva al cliente una copia exacta del mismo. El documento llega al cliente y se visualiza su contenido en el navegador del usuario. 9 Fases en la obtencin de un documento dinmico:
4.
Servidor
CLIENTE 1 SOLICITUD 2 RESPUESTA 4 SCRIPTS PHP 3
1.
El usuario pulsa sobre un link solicitando un documento (un archivo .phtml o .php) y el navegador enva la peticin al servidor utilizando el protocolo HTTP (protocolo de transferencia de hipertexto). Llega la solicitud al servidor y localiza el documento. Por la extensin del nombre del archivo determina que se trata de un archivo que contiene cdigo PHP y lanza el intrprete. El intrprete ejecuta el script solicitado y genera un resultado (habitualmente una pgina HTML) que se devuelve al servidor para que ste a su vez lo transfiera al cliente.
2.
3.
4. Se visualiza el documento en el navegador del usuario. A una solicitud del usuario el proceso es exactamente el mismo: pulsa sobre un link y recibe la informacin requerida. Sin embargo, en el servidor el proceso realizado antes de enviar la informacin ha sido diferente, ya que en el segundo caso ha sido necesaria la intervencin del intrprete de PHP para elaborar dinmicamente el contenido.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
8 PHP puede ser instalado al menos de tres modos diferentes: 9 Como un intrprete externo (modo CGI). 9 Como una extensin del servidor (via ISAPI y NSAPI). 9 Como un mdulo interno del servidor (disponible solo para Apache). La interfaz CGI (interfaz de pasarela comn) dota de capacidades de comunicacin a los servidores Web con otros programas. Esta interfaz de comunicaciones es comn en el sentido de que es exactamente igual para todos los servidores, independientemente de la plataforma sobre la que trabajen. La interfaz CGI establece de una forma clara y precisa la manera en la que se transfiere la informacin entre el servidor Web y otros programas. De esta forma es posible conectar el servidor Web con cualquier tipo de programa que sea capaz de ejecutarse en la misma mquina que el propio servidor. Habitualmente se emplean programas escritos en lenguajes como C, C++, Perl, etc. 9 Pasos que suceden cuando un usuario pulsa sobre un enlace que apunta a un programa CGI: 1. El usuario pulsa sobre un link solicitando un documento (un archivo .cgi o .exe) y el navegador enva la solicitud al servidor. 2. Llega la solicitud al servidor y ste localiza el programa. El servidor determina cmo debe lanzar la ejecucin del mismo.
3. Se ejecuta el programa CGI generando un contenido (habitualmente un documento HTML) y devuelve el resultado al servidor. ste reenva el resultado al cliente que realiz la peticin. 4. Se visualiza el contenido del documento en el navegador del usuario. En los programas CGI desarrollados con lenguajes como Perl o C, cuando se obtiene la informacin enviada desde el cliente es necesario realizar un proceso de decodificacin, puesto que dicha informacin se enva siguiendo las reglas de codificacin de URL (permiten identificar de manera nica un recurso de internet). Con PHP esto no sucede, dado que el propio intrprete se encargar de realizar el proceso de descodificacin. Aparte del modo CGI, tambin se puede instalar el intrprete como una extensin del servidor empleando la API correspondiente, o como un mdulo adicional del servidor.
10
3 - Despus de haber ledo la licencia del Apache y haber seleccionado la casilla de aceptacin (I Accept the Terms in the Licence Agreement), hacemos clic en el botn Next, apareciendo la siguiente ventana:
11 4 De nueva cuenta, hacer clic en el botn Next, y aparecer esta otra ventana:
5 - En esta ventana se deber teclear informacin en cada casilla: - Network Domain: Esta casilla presenta varias opciones y que es necesario atender: lo ms normal es que se prefiera instalar el servidor para ser usado de manera personal. Si por el contrario, desea que el resto del mundo pueda ver las maravillas que puede hacer con PHP, entonces aqu deber indicar su direccin IP. Nota: Si no sabe cul es su direccin IP, lo podr investigar ejecutando, en modo consola, el comando ipconfig. - Server Name: Es el nombre que desea asignar a su servidor Web, por ejemplo www.miServer.com - Administrators Email Adress: Aqu debe escribir la direccin de correo electrnico del administrador del servidor web; por ejemplo: yo_mimo@hotmail.com Despus de haber llenado estas casillas, aparecen dos opciones ms: - For all users in port 80, as a service: instala Apache como un servicio de Windows, es decir que Apache se ejecuta al iniciar el ordenador; eligiendo esta opcin el servidor se pone a la escucha en el puerto 80.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
12 - Only for the current user, on port 8080, when started manually: instala Apache como un programa normal, para ejecutar el servidor lo elegimos en el men de inicio y se abre una ventana para indicar que se est ejecutando Apache. Una vez llenados todos los campos y elegida la opcin que se desee, hacer clic en el botn Next; entonces aparecer esta ventana:
En esta ventana se escoge si se quiere hacer una instalacin tpica o personalizada, comnmente se elige la instalacin personalizada (custom) y luego se presiona el botn Next.
13 Aqu se elige el directorio donde se desea instalar el Apache, por defecto se instala en Archivos de programa, por lo tanto, se da clic en el botn Next. Despus de esto, aparecer un mensaje de confirmacin y se da clic en el botn Next para que comience la instalacin. Cuando sta termine, nuevamente aparecer una ventana, simplemente se hace clic en el botn de Finish y habr terminado la instalacin del servidor. Una vez hecho lo anterior, es necesario ejecutar el servidor Apache eligiendo la opcin Start Apache in Console, abrindose una ventana (negra) indicando que se est ejecutando el servidor Apache. Despus de esto, abrir el explorador de Internet para ver si realmente el servidor est funcionando. Una vez abierto, existen varias opciones segn se haya llenado el campo network domain: - Si se ha puesto la direccin IP, en la barra de direccin del explorador se escribe lo siguiente: http://nuestra direccin ip:8080 Nota: Lo de 8080 es para indicar al explorador que el servidor est escuchando en el puerto 8080. - Si en el campo Network Domain se indic una direccin de dominio, por ejemplo david.com, se pondr en la barra de direccin del navegador: http://localhost. Si todo es correcto aparecer una ventana diciendo que el servidor Apache ha sido configurado exitosamente.
14
Enseguida, abra el archivo php.ini para ser configurado de acuerdo a los siguientes puntos: 9 Se busca la siguiente lnea: display_errors = off // y se cambia por display_errors = on Se cambia el off a on con la finalidad de que los errores de sintaxis sean mostrados. 9 Busque la parte de [sessiones] en la cual se va a configurar la siguiente lnea: session.save_path = /tmp Aqu debe poner las ruta donde se guardarn los archivos temporales de las sesiones, posteriormente, si no existe la ruta, tendr que crearla.
15 Configuracin de Apache con PHP Antes de continuar pare el servidor Apache, y enseguida edite el archivo de configuracin de Apache httpd.conf que se encuentra en Inicio (windows) -> Todos los programas -> Apache HTTP Server 2.0.48 -> Configure Apache Server; e incluya las siguientes lneas: LoadModule php4_module c:/php/sapi/php4Apache2.dll # Le indica al servidor Apache que carge el mdulo php4.
Bien, lo siguiente es modificar la lnea de DocumentRoot como se muestra a continuacin: DocumentRoot "c:/Apache/Apache2/htdocs" Esta es la carpeta donde se van a almacenar los archivos .php, .html, etc, lo mejor es cambiarla, por ejemplo vamos a poner: DocumentRoot "c:/InetPhp" (Este directorio se identificar como el directorio remoto ms adelante), es importante fijarse que la barra sea "/" y no "\". El siguiente texto a buscar es este: <Directory "c:/Apache/Apache2/htdocs">
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
16 Aqu se debe hacer lo mismo que antes: sustituir el directorio y poner la misma direccin que DocumentRoot, en este caso: Directory "c:/InetPhp"
Posteriormente se agrega la siguiente lnea al archivo de configuracin: AddType application/x-httpd-php .php .phtml
17 Esta ltima lnea indica al servidor Apache que identifique las extensiones .php para que el mdulo del intrprete entre en funcionamiento. Vuelva a poner en marcha su servidor Apache.
18
En Windows, la primera vez que inicie Dreamweaver aparecer un cuadro de dilogo en el cual seleccionaremos codificador. Si cambia de idea posteriormente, podr cambiar a otro espacio de trabajo distinto a travs del cuadro de dilogo Preferencias.
Definir una carpeta local mediante el asistente para la Definicin del sitio.
Crear una definicin del sitio y definir una carpeta local mediante el cuadro de dilogo Definicin del sitio. Puede usar este cuadro de dilogo en una de estas dos vistas: Bsicas o Avanzadas. El mtodo Bsico le orientar paso a paso a lo largo del proceso de configuracin del sitio. Si prefiere editar informacin del sitio sin esta orientacin, puede hacer clic en la ficha Avanzadas en cualquier momento. El procedimiento siguiente describe cmo configurar las opciones de la versin Bsica del cuadro de dilogo, que tambin se denomina asistente para la Definicin del sitio. Para definir un sitio: 1. Seleccione Sitio > Administrar sitios (es decir, seleccione Administrar sitios en el men Sitio). Aparece la ventana Administrar sitios.
19 2. En el cuadro de dilogo Administrar sitios, haga clic en Nuevo y seleccione Sitio en el men emergente. Aparecer la ventana Definicin del Sitio. 3. Si la ventana muestra la ficha Avanzadas, haga clic en Bsicas. Aparecer la primera pantalla del asistente para definir el sitio solicitndole que introduzca un nombre para el sitio. En el cuadro de texto, introduzca un nombre que identifique el sitio en Dreamweaver. Puede elegir el nombre que desee. Por ejemplo, Agz como a continuacin se muestra:
4. Haga clic en Siguiente para continuar. Aparecer la siguiente pantalla del Asistente preguntndole si desea trabajar con una tecnologa de servidor. Seleccione la opcin No para indicar que el sitio es esttico por el momento, sin pginas dinmicas.
20 5.- Haga clic en Siguiente para continuar. Aparecer la siguiente pantalla del asistente preguntndole cmo desea trabajar con los archivos. Seleccione la opcin Editar localmente y luego cargar al servidor de prueba remoto, y seleccione la carpeta en la cual desea almacenar los archivos que genere (para este ejemplo fue InetDW, en esta se almacenarn los archivos locales de dreamweaver), en caso de no existir crela y seleccinela, como a continuacin se muestra:
6. Haga clic en Siguiente para continuar. Aparecer la siguiente pantalla del Asistente preguntndole cmo se conecta al servidor remoto.
Definir un Sitio remoto Despus de crear un sitio Web, el paso siguiente es publicarlo cargando los archivos en un servidor Web remoto. Antes de continuar, deber disponer de acceso a un servidor Web (Apache), configurado de acuerdo con los pasos anteriores. 7. En el men emergente "Cmo conecta con su servidor remoto?", elija un mtodo para conectar con el sitio remoto. Se elige Local/red (porque el servidor se instal localmente Apache).
21
8. Haga clic en el cono de carpeta situado junto al cuadro de texto y acceda a la carpeta raz servidor Apache (directorio de archivos remotos). Si lo desea, puede desactivar la opcin Actualizar lista de archivos remotos automticamente para aumentar la velocidad. Como se muestra en la figura anterior. 9. Una vez introducida la informacin adecuada, haga clic en Siguiente. Aparecer la siguiente pantalla del Asistente preguntndole Desea activar la desproteccin y proteccin de archivos para que usted y sus colaboradores no puedan editar el mismo archivo simultneamente? deber seleccionar No, no activar la desproteccin y proteccin
10. Haga clic en Siguiente para continuar. Aparecer una pantalla del asistente mostrando un resumen de la configuracin. Haga clic en Completado para terminar de configurar el sitio remoto. 11. Haga clic en Listo para cerrar el cuadro de dilogo Administrar sitios. El panel Archivos mostrar ahora la nueva carpeta raz local correspondiente al sitio actual. La lista de archivos del panel Archivos acta como administrador de archivos, ya que permite copiar, pegar, eliminar, mover y abrir archivos como si se tratara del escritorio de la PC.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
22
Cargar los archivos locales Despus de configurar las carpetas local y remota, puede cargar los archivos de la carpeta local al servidor Web. Para que las pginas sean accesibles pblicamente, debe cargarlas incluso aunque el servidor Web se ejecute en el equipo local. 1.- Antes de cargar los archivos en el sitio remoto, como ejemplo cargaremos los archivos en el directorio local del sitio que se encuentran en:
c:\archivos de programas\macromedia\Dreamweaver 2004\samples\GetinStarted\finalsite
Copiar el contenido de la carpeta y mandarlo al directorio local de Dreamweaver. c:\InetDW. 2.- En el panel Archivos (Ventana > Archivos), seleccione la carpeta raz local del sitio. Y deben estar los archivos que se copiaron en el paso anterior, de lo contrario actualice el panel de archivos con F5 o botn actualizar. 3.- Haga clic en el cono de flecha azul Colocar archivos de la barra de herramientas del panel Archivos. Dreamweaver copia todos los archivos en la carpeta. Esta operacin puede ocupar cierto tiempo, ya que Dreamweaver debe cargar todos los archivos en el sitio remoto InetPHP. 4.- Abra el sitio remoto en un navegador para comprobar que todo se ha cargado correctamente.
23 Para definir un sitio de Dreamweaver con PHP: 1. En Dreamweaver, seleccione Sitio > Administrar sitios. En el cuadro de dilogo Administrar sitios, seleccione el sitio creado y haga clic en el botn Editar. Aparecer la ventana Definicin del sitio. 2. Si se muestra la ficha Bsicas, haga clic en la ficha Avanzadas.
3. En la ficha Avanzadas del cuadro de dilogo Definicin del sitio, haga clic en Servidor de prueba en la lista Categora. Aparecer la pantalla Servidor de prueba. Dreamweaver necesita los servicios de un servidor de prueba para generar y mostrar contenido dinmico mientras se trabaja.
El servidor de prueba puede ser el equipo local, un servidor de desarrollo, un servidor en funcionamiento o un servidor de produccin, siempre y cuando permita procesar pginas PHP; ya que se dirige a un servidor capaz de procesar pginas PHP.
24
4. Seleccione PHP MySQL en el men emergente Modelo de servidor. 5. En el men emergente Acceso, elija el mismo mtodo (Local/red) que ha especificado para acceder a la carpeta remota. 6. Damos clic en Aceptar y por ltimo en Listo. 7. Para comprobar que todo funcione correctamente, creamos un documento de php. Seleccionamos Archivo -> Nuevo. En el cuadro de dilogo en la seccin categora seleccionamos pgina dinmica, en la seccin de pgina dinmica del mismo cuadro seleccionamos PHP. Entre las etiquetas de <body> tecleamos el siguiente cdigo:
<body> <p>Esta Pgina fue creada a las <b> <?php echo date("h:i:s a", time()); echo "</b> en una computadora corriendo PHP.</p>"; phpinfo(); ?> </body>
8. Guardamos el archivo. En el cuadro de dilogo le asignamos un nombre y en el combo de tipo seleccionamos archivos php (.php .php3). 9. Si queremos ver nuestra pgina en el iExplorer debemos cargar el archivo en el servidor: a.- Hacemos clic en la flecha azul ubicada en el panel de Archivo.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
c. Despus hacemos clic en el cono de Vista previa/Depurar en explorador, en el cuadro emergente seleccione vista previa en iExplorer o F12.
26
2.2. IMGENES.
Para insertar una imagen es conveniente tenerla previamente guardada en la carpeta del sitio; de lo contrario, Dreamweaver nos advertir para que guardemos una copia en la carpeta correspondiente. Las imgenes pueden estar sueltas en la carpeta raz junto con los archivos de cada uno de los documentos o, mucho mejor, en una carpeta especial dentro del sitio a la que llamaremos imag (nombre de los archivos y carpetas sin acentos) o cualquier otro nombre que nos sugiera que, dentro de esa carpeta, estn nuestras imgenes. Para crear una carpeta dentro de la carpeta raz del sitio, pulsamos la pestaa Archivo de la franja lateral derecha y elegimos Nueva carpeta.
Por cierto, para hacer visible o invisible la franja lateral derecha le damos al cono
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
27 Se crear una carpeta con el nombre untitled que habr que cambiar por el que deseemos tenga nuestra carpeta de imgenes:
Podemos llevar las imgenes a la carpeta por cualquiera de los procedimientos habituales en Windows. Si por ejemplo, tal como indicbamos al principio, la imagen no est previamente guardada en la carpeta, Dreamweaver nos va a sugerir que lo hagamos. Supongamos que queremos insertar una imagen que tenemos guardada en el Escritorio. La imagen se llama obras. Hacemos clic en Insertar de la barra de mens y luego en Imagen:
28
Aparecer el mensaje de advertencia dicindonos que la imagen no est en la carpeta raz del sitio:
30
Todo esto se puede hacer en la barra de Insertar que es un acceso directo para colocar una imagen en nuestra pgina (jpg o gif). Como se muestra en la figura:
31
Podemos determinar el nmero de Filas, el nmero de Columnas, el Ancho de la tabla en pixeles o porcentaje, especificar si queremos que la tabla tenga Borde e indicarle el grosor del borde en su caso. El Relleno de celda hace referencia al espacio que queremos que exista entre el texto, o lo que coloquemos en cada una de las celdas y su borde. El Espacio celda es el espacio que queremos que haya entre una celda y otra. Ambos se indican en pixeles y se pueden quedar vacos en el caso de que queramos que tanto el relleno de celda como el espacio de celda sea el mnimo posible. A modo de ejemplo, vamos a insertar una tabla con 3 filas y 6 columnas y que ocupe el 80% del ancho, un borde de 2 pixeles y un relleno de celda de 5 pixeles: Lunes Maana Tarde Martes Mircoles Jueves Viernes
32
Desde ese panel podramos cambiar las propiedades de la celda en cuestin. Agregamos los datos que estn en el dibujo anterior dentro de cada celda, seleccionando la celda correspondiente e ingresaremos el texto. Seleccionamos cualquiera de las celdas de la tabla para despus seleccionar en la Barra de Estado la etiqueta <table>, se seleccionar toda la tabla.
Si ahora vemos las propiedades, stas sern las propiedades de la tabla y, desde ah, podremos cambiar las propiedades de la tabla y su configuracin.
33 Podemos modificar el nmero de Filas en Filas, el nmero de columnas en Cols, la anchura en An, la altura en Al, el espacio entre los bordes y el contenido en Rell.celda, el espacio entre las celdas en Esp.celda, la alineacin en Alinear, el grosor del borde en Borde, Podemos establecer un color de fondo en Col.Fondo, un color de borde en Col.borde o una imagen en Im. Vamos a realizar algn cambio en la tabla:
Hemos aadido una fila alineada al centro, incrementando el grosor del borde a 5 pixeles, estableciendo un color de fondo y otro diferente para el borde. El resultado es este: Lunes Maana Tarde Martes Mircoles Jueves Viernes
Podemos hacer cambios a una celda concreta, a una fila entera, o a la tabla entera como acabamos de ver. Para hacer cambios a una fila colocamos el cursor en una celda de esa fila y marcamos la etiqueta <tr> de la barra de estado. Quedar seleccionada la fila entera. Desde el panel Propiedades podemos hacer los cambios oportunos:
34 Hemos seleccionado la primera fila. Ahora el panel Propiedades afectar a la fila seleccionada:
Si pulsamos, por ejemplo, el botn el texto que est escrito en las celdas de esa fila se colocar centrado en cada una de las celdas. Pulsando, por ejemplo, el botn el texto escrito pasar a estar en negrita. El resultado ser:
Otra forma de seleccionar filas y/o celdas consiste en situar el cursor en una de las celdas y arrastrar con el ratn hasta donde se desee:
Seleccionamos como ejemplo las cuatro celdas intermedias de la ltima fila. Si le damos, por ejemplo al cono las celdas seleccionadas se agruparn en una sola:
35 Podemos aadir texto o variar las propiedades de las celdas por los procedimientos descritos:
Hemos seleccionado por el mtodo de arrastrar el cursor las celdas anteriores para cambiar el color de fondo:
El resultado es:
Podremos crear vnculos a otras pginas muy fcil con Dreamweaver solo hay que presionar el crculo al lado de la caja de texto en el panel de propiedades de vnculo y soltarlo en la pgina que queremos que sea la pgina de enlace.
36
2.5. FORMULARIOS
Vamos con una de las herramientas ms tiles de toda pgina Web. Es aquella que recoge informacin del visitante y la almacena en el servidor, o bien, se nos enva a travs de una direccin de correo electrnico. Nota: Otra manera de ver el panel de Insertar es verlo como fichas, damos clic en el botn de insertar y seleccionamos ver como fichas.
Colocamos el cursor en el sitio en vista diseo o en vista cdigo donde queramos que se coloque el formulario y damos clic en el cono .
Aparecern los lmites del formulario representados por un rectngulo cuyos lados son una lnea discontinua de color rojo:
37 A continuacin insertaremos una tabla dentro del formulario con dos columnas y varias filas: situamos el cursor dentro del rectngulo de lneas discontinuas, introducimos la tabla y la centramos, para que la tabla no contenga contorno le ponemos 0 a grosor de borde, 4 filas y 2 columnas; seleccionamos <tabla> en el panel de propiedades seleccionamos en alinear -> centro.
38 Ah podemos elegir la anchura del campo, el nmero de caracteres mximo, si queremos que conste de una o varias lneas, si queremos que se oculte al ser escrito (tipo contrasea), si queremos que aparezca un texto inicialmente y, lo que es ms importante, el nombre que le queremos dar: Quitamos textfield y ponemos: nombre.
Esto tambin se puede hacer por medio del cdigo haciendo lo siguiente: <INPUT TYPE=text NAME=nombre MAXLENGTH=longitude_maxima> VALU=valor por defecto SIZE=tamao
Type=text es donde indicamos que es una caja de texto. TYPE=password hacemos que sea de tipo contrasea.
Recuerde que todos los controles de formularios se insertan como la caja de texto en insertar -> formularios ->tipo de formulario que se quiere.
39
En la primera casilla de la izquierda borramos radiobutton y escribimos el nombre de la opcin global: opinion. En la segunda casilla, al lado de Valor activado, escribimos lo que corresponda con esta primera opcin que puede ser: muy buena. Podemos elegir que esta opcin est activada o desactivada de entrada. Tenemos que escribir a la derecha del botn el texto (que est dentro de la celda) que ver el visitante: Muy buena, excelente. El formulario ir quedando as:
Tenemos que seguir insertando los dems botones de opcin correspondientes a este ejemplo. Por lo tanto, los siguientes botones se debern seguir llamando opinion y en cada caso habr que escribir lo que corresponde con esa opcin. De no llamarse igual, se podrn seleccionar todos y no uno solo que es lo que pretendemos. A esto se le llama grupo de opcin. Para que el segundo botn no quede muy separado del primero, le damos un salto de lnea Insertar > texto > caracteres > salto de lnea o introduciendo <BR> en el codigo despus de excelente.
40
Ponemos un tercer botn con la opcin de que la pgina es Mala.Bastante mala: Ya sabes el mismo nombre: opinion y como valor activado: mala.
Si queremos colocar otra pregunta de opcin debemos llamarla de otra manera para que no se excluyan las selecciones. Por ejemplo, podemos preguntarle al visitante sobre sus conocimientos de informtica. El nombre de la opcin podra ser conoc_infor (por ejemplo).
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
41
Damos un salto de lnea e introducimos nuevas casillas, siempre con el mismo nombre, gustado, y una frase nueva como Valor activado que debe ser una expresin corta de lo que escribamos en el formulario. Esta parte del formulario podra quedar as:
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
42
El cdigo es el siguiente: <INPUT TYPE=checkbox NAME=ingeniero VALUE=si checked> Donde checked seleccionar la opcin por defecto.
Le damos un nombre a la Lista/men, por ejemplo, edad y pulsamos Aparecer la siguiente ventana:
43
Vamos escribiendo en los elementos del men. En Valor escribimos lo mismo (ser lo que aparezca al ser enviado el formulario). Pulsando la tecla para incluir el siguiente y la tecla para quitar uno ya introducido. Con las flechas vamos cambiando el orden de las etiquetas de elemento.
Cuando lo tengamos todo le damos Aceptar. Las diferentes etiquetas no aparecen, solo lo harn al lanzar la pgina con el navegador.
El cdigo es el siguiente: <select name="select"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select>
44 Podemos crear fcilmente la lista ya teniendo un men solo hay que teclear la opcin de lista en el cuadro de propiedades y, en la opcin de alto, cuntos se van a ir mostrando en la lista y seleccionando la opcin mltiple seleccionamos varias lneas.
Podemos incluir un campo de texto para comentarios. Lo podemos hacer con el botn de Campo de texto definiendo (rea de texto): en las propiedades, o bien, dando directamente al botn: Lo introducimos:
Podemos introducir ahora (campo de texto) la direccin de correo electrnico del visitante. En este caso, podemos poner un Valor inicial:
45
A continuacin, nos colocamos en la celda de la derecha, alineamos a la izquierda, pulsamos el cono . Aparecer, de nuevo la ventana anterior que modificamos:
46
Podemos dar por finalizado nuestro formulario. Queda por definir la accin que queremos que haga una vez relleno. Para usuarios personales, la opcin ms habitual es el envo por correo electrnico de los datos obtenidos. Esto se hace colocando el cursor en cualquier punto del formulario y eligiendo <form> desde la barra de estado . Aparecern las propiedades del formulario:
En Accin escribimos mailto:direcciondecorreo. Por ejemplo: mailto:a_zazuetag@hotmail.com De todas formas, para que el envo del formulario pueda leerse como un mensaje de correo ordinario, hay que escribir en la etiqueta del formulario del cdigo fuente el atributo enctype="text/plain".
. Si no est ah, Podemos intentar seleccionarlo del men: tenemos que escribirlo directamente en el cdigo. Seleccionamos el formulario colocando el cursor y pulsando <form> <form action=mailto:a_zazuetag@hotmail.com method=post name=form1> Incluimos lo acordado: <form action=mailto:a_zazuetag@hotmail.com method=post name=form1 enctype=text/plain>
47
Nuestro formulario ya tiene que funcionar. Lo guardamos primero, lo lanzamos con el navegador, y realizamos un rellenado de prueba para ver si lo recibimos satisfactoriamente por el correo electrnico. Antes de dar por concluido el formulario podemos hacer alguna modificacin en la tabla, aadiendo algn color de fondo para separar unas filas de otras. Con el cursor (arrastrando) seleccionamos la primera fila:
48
Seleccione Insertar > Elemento Flash > Nombre del elemento Flash.
Aparecer el cuadro de dilogo Guardar elemento Flash. 3. Introduzca un nombre de archivo para el elemento Flash y gurdelo en una ubicacin adecuada de su sitio. 4. Haga clic en Aceptar. Aparece el marcador de posicin del elemento Flash en el documento. Puede modificar las propiedades del elemento Flash mediante el inspector de etiquetas y el inspector de propiedades. Seleccione Archivo > Vista previa en el navegador para obtener una vista previa del elemento Flash.
2.12. CAPAS.
Las capas no son ms que unos recuadros, que pueden situarse en cualquier parte de la pgina, en los que podemos insertar contenido HTML. Dichas capas pueden ocultarse y traslaparse entre s, lo que proporciona grandes posibilidades de diseo. Las capas pueden moverse de una posicin a otra de la ventana pulsando sobre el recuadro blanco, y sin soltar el ratn, arrastrndola hacia la nueva posicin. Tambin pueden ser redimensionadas pulsando sobre los recuadros negros, y arrastrndolos hasta conseguir el tamao deseado.
49 Dentro del recuadro de la capa es posible insertar texto, tablas, imgenes, animaciones flash y todos los elementos que puede contener un documento HTML.
ID de capa es el nombre de la capa. Tambin puede ser cambiado a travs del panel Capas, haciendo doble clic sobre l.
50 Iz y Sup indican la distancia en pixeles que hay entre los lmites izquierdo y superior del documento y la capa.
An y Al indican la anchura y la altura de la capa. ndice Z es el nmero de orden de colocacin de las capas. Este valor tambin puede cambiarse a travs del panel Capas. Una capa ser solapada por aquellas capas cuyo ndice Z sea mayor que el suyo.
Vis indica la visibilidad inicial de la capa. La visibilidad puede ser de cuatro tipos: Default (visibilidad segn el navegador), Inherit (se muestra la capa mientras la pgina a la que pertenece tambin se est mostrando), Visible (muestra la capa, aunque la pgina no se est viendo) y Hidden (la capa est oculta). La visibilidad tambin puede cambiarse a travs del panel Capas, pulsando sobre la imagen del ojo. El ojo abierto indica Visible, y el ojo cerrado indica Oculto.
A travs de Im. fondo y Col. fondo puede indicarse una imagen o un color de fondo para la capa.
51
Cuando ya estableci algn navegador, ya se pueden insertar comportamientos. Lo primero que hay que hacer es seleccionar el objeto sobre el que se ha de aplicar el comportamiento, como puede ser una imagen, un fragmento de texto, capas, etc. Al desplegar el botn del panel Comportamientos aparece la opcin Mostrar eventos, a travs de la cual se haba elegido el navegador. Tambin aparece la lista de todas las acciones posibles para el navegador elegido previamente, de entre las que se puede seleccionar una. Segn el elemento sobre el que se desee aplicar el comportamiento, se podrn elegir unas acciones, mientras que otras no.
52
53
En el men emergente seleccionamos un estilo y le damos un nombre al botn, el tipo de fuente y si queremos asignarle un vnculo desde aqu, adems de todo esto tenemos que guardar el botn en nuestro proyecto. As lo vamos hacer con cada una de las celdas de las tablas. Seleccionamos la capa con tres botnes y le ponemos la propiedad visibilidad (vis) en hidden. Seleccionamos la capa con un solo botn, a la cual le vamos a dar comportamiento dando clic en el panel de comportamiento y seleccionamos el signo + seleccionamos mostrar ocultar- capas, en el men emergente seleccionamos la capa que queremos que se oculte o mostrar y damos en aceptar, se agregar un comportamiento en el panel y a continuacin seleccionamos la accin onMouseMove como se muestra a continuacin:
Despus agregamos otro comportamiento a la misma capa y le damos que nos oculte la capa y en el evento seleccionamos OnMouseOut. Ahora, en el panel capas seleccionamos la capa que tenemos oculta y la posicionamos en la parte que deseemos que aparezca. Teniendo la capa oculta le vamos a dar comportamiento y vamos a agregar el de ocultar mostrar capa y le damos seleccionar la capa, que es a la que le estamos dando el comportamiento mostrar, damos aceptar en el evento OnMouseMove, y agregamos otro evento y a la misma capa damos en ocultar y en el evento OnMouseOut.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
54 Nota: los enlaces se pueden hacer de la forma tradicional, mostrada anteriormente, o en el cuadro de dilogo en donde seleccionamos el botn.
2.14. MARCOS.
Un marco es una zona de una ventana de navegador que puede mostrar un documento HTML independiente de lo que se muestra en el resto de la ventana. Un conjunto de marcos es un archivo HTML que define el diseo y las propiedades de un grupo de marcos, que incluyen el nmero, el tamao, la ubicacin de los marcos y el URL de la pgina que aparece inicialmente en cada marco. El archivo de conjunto de marcos no incluye el contenido HTML que se muestra en el navegador. Para ejemplificar estos crearemos una nueva pgina. Los marcos los podemos localizar en la barra de insertar en la pestaa de diseo
Con la barra Insertar puede crear un conjunto de marcos y mostrar el documento actual en uno de los nuevos marcos. Seleccione un conjunto de marcos predefinido en el submen Insertar > HTML > Marcos. En la categora Diseo de la barra Insertar, haga clic en la flecha situada bajo el botn Marcos y, a continuacin, seleccione un conjunto de marcos predefinido. En la creacin de marcos, los conos de conjunto de marcos proporcionan una representacin visual del conjunto de marcos aplicado al documento actual. El rea azul de un cono de conjunto de marcos representa el documento actual y las reas blancas representan marcos que mostrarn otros documentos.
Ya que tenemos nuestro marco es necesario guardarlo, esto nos har que guardemos cuatro documentos, en virtud de que cada parte de la pgina actual es tratada como una pgina independiente. Una vez seleccionado un marco a travs del panel Marcos, pueden establecerse sus propiedades mediante el inspector de propiedades.
55
Cada marco tiene asignado un nombre, que puede cambiarse a travs de Nombre del marco (parte izquierda de la imagen superior). El nombre no puede contener espacios en blanco. En Origen aparece el nombre del documento HTML que est contenido en el marco. En Bordes puede elegirse si aparecer o no una lnea separando el marco del resto de marcos. En el caso de que se muestre el borde, se puede especificar un color para ste a travs de Color borde. Desplaz. (Desplazamiento) indica si aparecern o no las barras de desplazamiento cuando el documento del marco no pueda visualizarse completamente. Si la opcin Mismo tamao est activa, indica que los usuarios no podrn variar las medidas del marco desde el navegador. El Ancho del margen y el Alto del margen indican la separacin que habr entre el contenido del marco y sus bordes izquierdo-derecho y superior-inferior. Si lo seleccionado es todo el conjunto de marcos (la pgina de marcos), el inspector de propiedades es algo diferente.
En Bordes puede elegirse si aparecer o no una lnea separando los marcos entre s, y puede especificarse un color para ste a travs de Color borde. Tambin es posible establecer un grosor para el borde a travs de Ancho. El campo Columna (o Fila dependiendo del marco elegido en Seleccin Fila Col.) sirve para especificar el tamao del marco, que puede ser en Pixeles, Porcentaje (de la ventana) o Relativo (proporcional al resto de marcos). Normalmente utilizar dos marcos, uno de ellos con tamao en Pixeles, que ser el que contenga la barra de navegacin; y el otro marco con tamao Relativo, para que se ajuste a la ventana. Cuando trabajamos con marcos, queremos poder cargar diferentes documentos en cada uno de ellos. El contenido de alguno de los marcos ha de ser fijo, mientras que el de otros ha de poder variar
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
56 Ahora que ya sabe trabajar con marcos le ser ms fcil entender estos enlaces:.
_blank: Abre el documento vinculado en una ventana nueva del navegador. _parent: Abre el documento vinculado en la ventana del marco que contiene el vnculo o en el conjunto de marcos padre. Como ya sabe, el marco padre es el marco en el que se encuentra el documento inicial, sobre el que se han insertado el resto de los marcos. _self: Es la opcin predeterminada. Abre el documento vinculado en el mismo marco o ventana que el vnculo. _top: Abre el documento vinculado en la ventana completa del navegador, lo cual quiere decir que los marcos de la ventana desaparecern al abrir el vnculo en ella. Mainfram en la pgina de la derecha mostrar el vnculo. Left frame como su nombre lo indica ser en la izquierda. Topframe que ser en la de arriba.
Estos tres ltimos son los nombres que Dreamweaver ha dado a cada uno de los marcos; si nosotros cambiamos uno de ellos, es necesario seleccionar el que hayamos dado al marco para referenciarlo hacia a l.
57
3. LENGUAJE PHP.
3.1 FORMATO DEL CDIGO PHP 3.1.1. Delimitadores
Para facilitar la comprensin de algunos ejemplos, nicamente se indica el cuerpo del cdigo en HTML. PHP esta muy relacionado con el lenguaje de hipertextos HTML; tanto es as que el cdigo PHP aparece normalmente insertado dentro de un documento HTML. El documento PHP, una vez interpretado correctamente en el servidor genera una pgina HTML y para diferenciar ambos lenguajes dentro de un mismo documento se utilizan etiquetas de comienzo y final de cdigo PHP. Las etiquetas mas habituales para delimitar los bloque de cdigo PHP son las siguientes:
<?php echo "Esto es una instruccin PHP"; ?>
Existen otros posibles formatos de etiquetas menos utilizados que el anterior, su utilizacin ser correcta dependiendo de las caractersticas de configuracin seleccionadas en el proceso de instalacin del intrprete de PHP:
<? echo "Esto es una instruccin PHP"; ?>
58
3.1.3. Comentarios
Los comentarios son porciones del programa que se ponen slo para facilitar la documentacin del cdigo, lo primero que hace el intrprete de PHP es quitar todos los comentarios del programa. PHP ofrece la posibilidad de insertar comentarios de tres formas distintas. La primera consiste en emplear dos caracteres / seguidos (//), para comentar una nica lnea de cdigo. La segunda es utilizando el carcter almohadilla #, tambin para comentar una nica lnea de cdigo, con la diferencia que el comentario termina con el retorno de carro de la lnea comentada o con el smbolo de finalizacin de interpretacin de PHP. La tercer tipo de comentario es de tipo multilnea, es decir, nos permite comentar varias lneas de cdigo fuente, de tal forma que el comienzo se indica con la secuencia de caracteres /* y el final con */.
<?php // Esto es un comentario de una lnea echo "Esto es una instruccin PHP <BR>\n"; #Otro comentario echo "Esto es otra instruccin"; /* Esto sera un comentario de varias lneas */ ?>
Hay que tener cuidado con este ultimo tipo de comentarios ya que produce errores.
<?php /* Este comentario /* dar unos errores horribles en la ltima */ palabra */ ?>
59
<?php
60
3.2.2.1. Enteros
Las variables de tipo entero pueden contener nmeros enteros que varan entre un rango de -2 billones y +2 billones y se pueden representar en formato decimal, octal o hexadecimal. Los enteros se pueden especificar usando una de las siguientes sintaxis:
$Entero1 = 1234; # nmero decimal $Entero2 = -123; # un nmero negativo $Entero3 = 0123; # nmero octal (equivalente al 83 decimal) $Entero4 = 0x12; # nmero hexadecimal (equivalente al 18 decimal)
La funcin echo muestra por defecto siempre la informacin en decimal, a pesar de que internamente sta se haya almacenado en la variable con un formato distinto.
<?php $NumeroHexa = 0xA; //En base decimal es un 10 $OtroHexa = 0xE; //En base decimal es un 14 $ResHexa = $NumeroHexa + $OtroHexa; echo "<BR>La suma de \$NumeroHexa + \$OtroHexa es $NumeroHexa + $OtroHexa = $ResHexa\n" ; $NumeroOctal=011; //En base decimal es un 9: 1*8+1 echo "<BR>El nmero octal es: $NumeroOctal\n"; ?>
61
Conviene destacar que PHP define estos nmeros como double, pero que dispone de sinnimos, que son real y float.
3.2.2.3. Booleano
Una variable de este tipo es aquella que nicamente admite dos posibles valores: True o False (en minsculas o maysculas, estos valores son aceptados en cualquier combinacin, debido a que son constantes predefinidas). Significa, respectivamente, cierto y falso y normalmente estas variables almacenan el resultado de evaluar expresiones lgicas. Expresiones de este tipo pueden ser:
<?php $VarBool = True; echo "El valor de la variable es $VarBool <BR>"; $VarBool = (4 - 2 == 3 + 6); //Al ser falsa la expresin se almacena false en $VarBool ?>
Por ltimo, hay que mencionar que PHP trata el valor True como un valor distinto de cero y el valor False como cero.
62
3.2.2.4. Cadenas
Las cadenas de caracteres se pueden especificar usando uno de dos tipos de delimitadores. Si la cadena est encerrada entre dobles comillas (), las variables que estn dentro de la cadena sern expandidas (sujetas a ciertas limitaciones de interpretacin). Como en C y en Perl, el carcter de barra invertida ("\") se puede usar para especificar caracteres especiales: Caracteres protegidos Secuencia
\b \f \n \r \t \\ \$ \" \[0-7]{1,3} \x[0-9A-Fa-f]{1,2} Espacio hacia atrs. Cambio de pgina. Nueva lnea. Retorno de carro. Tabulacin horizontal. Barra invertida. Signo del pesos. Comillas dobles. La secuencia de caracteres que coincida con la expresin regular es un carcter en notacin octal. La secuencia de caracteres que coincida con la expresin regular es un carcter en notacin hexadecimal.
Significado
La segunda forma de delimitar una cadena de caracteres usa el carcter de comilla simple ( ). Las variables no sern evaluadas dentro de una cadena entre comillas simples ni tampoco los caracteres protegidos, simplemente se mostrarn. Siempre se debe utilizar el mismo tipo de comilla para rodear cada cadena. Los siguientes son ejemplos de cadenas: Cadenas Saludos Saludos Incluye dobles comillas Incluye \dobles\ comillas En algunos casos se puede entremezclar el uso de los dos tipos de entrecomillado como ocurre en el penltimo ejemplo. Incluye dobles comillas
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
63 Y el ltimo ejemplo Incluye \dobles\ comillas Hace uso del carcter \ para poder introducir comillas dobles dentro de un texto entrecomillado con comillas dobles. Veamos un ejemplo:
<?php $lenguaje="PHP"; $ver="v6"; echo "<B>Estamos \"trabajando\" con $lenguaje ($ver) </B><BR><BR>"; echo 'La variable $lenguaje contiene: '; echo $lenguaje; echo "<BR>La variable \$ver contiene: $ver"; ?>
Las cadenas se pueden concatenar usando el operador . (punto). Ntese que el operador + (suma) no sirve para esto. $CadenaResultante = Cadena Uno . Cadena Dos El resultado es una sola cadena de caracteres Cadena Uno Cadena Dos contenida en la variable $CadenaResultante.
3.2.2.5. Arrays
Los arrays o matrices son estructuras que permiten el almacenamiento de un conjunto de datos identificados por un ndice bajo un mismo nombre. Se puede construir tantos ndices como se quiera, aunque el uso habitual de los arrays es en forma de matriz unidimensional. La longitud del array se modifica de forma dinmica siempre que le aadimos un nuevo elemento. Los arrays multidimensionales se vern en un captulo posterior. En el caso de PHP, los arrays pueden estar compuestos de elementos de diferente naturaleza (tipo diferente de dato) y su primer ndice o posicin es la 0. Existen arrays especiales denominados asociativos en los que el ndice es un valor de tipo string. La siguiente imagen nos muestra dos posibles estructuras de arrays como un conjunto de elementos, cada uno de los cuales tiene asociada una posicin o una clave: Array con ndice numrico
Cugar Ford 2.500 V6 182
64
Cugar Modelo
2.500 CC
V6 Motor
182 Potencia
Podemos observar que en ambos arrays los ndices son de diferente naturaleza y que pueden existir posiciones o claves sin contenido asociado. Para manejar el array de forma global, utilizamos el nombre asignado a la variable que lo contiene y, para manejar cada uno de sus elementos, tendremos que hacer referencia a su posicin o clave dentro del conjunto global. Con los conocimientos adquiridos en el manejo de Dreamweaver, puede crear en modo de diseo la siguiente tabla.
// la tercera posicin del array esta vaca // por eso le asignamos una cadena sin contenido
// para aadir el ltimo elemento a una matriz // no es necesario poner el nmero de ndice // creamos la matriz asociativa $matriz2['modelo']="cougar"; $matriz2['marca']="ford"; $matriz2['fecha']=null; // para marca una posicin sin contenido use <null> $matriz2['cc']="2.500"; $matriz2['motor']="V6"; $matriz2['potencia']=182; ?>
Habiendo realizado esto, incruste despus del cdigo referente a la lnea de matriz1 <TD BGCOLOR="yellow">matriz1</TD> o en su caso reemplace las lneas que contengan la siguiente instruccin <td> </td> con el cdigo siguiente:
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>"; ?>
66
Para explicar los dos ltimos ejemplos veremos el siguiente. En el ejemplo se suma primeramente una cadena que contiene dos caracteres numricos (10) con una variable $UnNumero, que contiene el valor 25 (un entero). El intrprete detecta que se desea realizar una suma y provoca la conversin de la cadena 25 al valor entero adecuado. A continuacin, se realiza otra suma entre dos cadenas: una con contenido numrico y otra con la cadena 5cinco y, como se puede observar a continuacin, el intrprete convierte la segunda en el valor entero correspondiente (5) hasta que se encuentra con un carcter que no puede convertir (la c):
<?php $UnaCadena = "10"; $OtraCadena = "5cinco"; $UnNumero = 25; $Resultado = $UnaCadena + $UnNumero; echo "Cadena 'sumada' con nmero: $Resultado <BR>\n"; $Resultado = $UnaCadena + $OtraCadena; echo "Cadenas 'sumadas': $Resultado <BR>\n"; ?>
Hay que destacar que una cadena que no contenga caracteres numricos es evaluada como un valor cero a efecto de operar aritmticamente con ella. En PHP se dispone de una serie de sencillas funciones que permiten obtener, comprobar y cambiar los tipos de las variables. La funcin gettype() recibe como parmetro una variable y devuelve una cadena de caracteres que indica su tipo (integer, string, boolean, array, object).
<?php $UnaCadena = "65"; $UnNumero = 25; $Res = settype($UnaCadena, 'integer'); echo "Conversin de cadena a nmero: ", gettype($UnaCadena); echo "<BR>\n"; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
67
$Res = settype($UnNumero, 'string'); echo "Conversin de nmero a cadena: ", gettype($UnNumero), "\n"; ?>
Por otra parte, est la funcin settype(), que recibiendo de parmetros un identificador de variable y una cadena de caracteres, fuerza el cambio de tipo de la variable al indicado por dicha cadena. Dicho de otra manera, este es el famoso Casting, donde se escribe entre parntesis el tipo de dato desead, antes de la variable que se pretende convertir.
$Cadena = 3.1416 es el valor de Pi; $aux = (integer)$Cadena; $aux = (double)$Cadena; //Cadena es igual a 3(entero) //Cadena es igual a 3.1416(punto flotante)
Los forzados de tipo permitidos son los siguientes: (int), (integer) (real), (double), (float) (string) (array) (object)
<?php $UnNumero = 3; $OtroNumero = (int)($UnNumero / 2); echo "El otro nmero es $OtroNumero<BR>\n"; $UnArray = (array)$UnNumero; echo "El primer elemento del array es ", $UnArray[0], "<BR>\n"; $UnObjeto = (object)$UnNumero; echo "El atributo escalar del objeto es ", $UnObjeto->scalar; ?>
fuerza a entero (integer) fuerza a doble (double) fuerza a cadena (string) fuerza a array (array) fuerza a objeto (object)
68
69
Algo importante a tener en cuenta es que slo las variables con nombre pueden ser asignadas por referencia.
<?php $var1 = 25; $var2 = &$var1; // Esta es una asignacin vlida. $var2 = &(24 * 7); // Invlida; referencia una expresin sin nombre. ?>
70
Significado
Indica el nombre del equipo servidor sobre el que se ejecuta el script. Indica el puerto del equipo servidor que usa el servidor Web para la comunicacin. Indica que software esta siendo utilizado en el equipo servidor. Contiene el puerto que utiliza el peticionario para comunicarse con el servidor Web. Contiene la direccin remota desde la que se realiza la peticin. Indica el directorio raz del documento bajo el que se ejecuta el script. Contiene la direccin de la pgina (en caso de haberla) desde la que el navegador salt a la pgina actual.
La variable global $_SERVER es un array asociativo que contiene, entre otras, toda la informacin de las cabeceras tanto de peticin como de respuesta.
<?php echo "Nombre del servidor: <B>$_SERVER[SERVER_NAME]</B><BR>\n"; echo "Puerto local: <B>$_SERVER[SERVER_PORT]</B><BR>\n"; echo "Software: <B>$_SERVER[SERVER_SOFTWARE]</B><BR>\n"; echo "Puerto remoto: <B>$_SERVER[REMOTE_PORT]</B><BR>\n"; echo "Direccin de conexin: <B>$_SERVER[REMOTE_ADDR]</B><BR>\n"; echo "Directorio raz: <B>$_SERVER[DOCUMENT_ROOT]</B><BR>\n"; echo "Nombre del script: <B>$_SERVER[PHP_SELF]</B><BR>\n"; ?>
71
argv
argc
PHP_SELF
_COOKIE
_GET
_POST
72
Este script no producir salida, ya que la orden echo utiliza una versin local de la variable $cadena1, a la que no se ha asignado ningn valor en su mbito. En PHP, las variables globales deben ser declaradas globales dentro de la funcin si van a ser utilizadas dentro de dicha funcin. Veamos un ejemplo:
<?php $cadena1 = "Uno "; // mbito global function Escribe1(){ global $cadena1; echo "Escribe1 = $cadena1 <br>\n"; } Escribe1(); ?>
El script anterior producir la salida "Uno". Al declarar $cadena1 como global dentro de la funcin, todas las referencias a tal variable se referirn a la versin global. No hay lmite al nmero de variables globales que se pueden manipular dentro de una funcin. Un segundo mtodo para acceder a las variables desde un mbito global es usando el array $GLOBALS propio de PHP3. El ejemplo anterior se puede reescribir as:
<?php $cadena1 = "Uno "; // mbito global function Escribe3(){ echo "Escribe3 = "; echo $GLOBALS["cadena1"], "<BR>\n"; } Escribe3(); ?>
El array $GLOBALS es un array asociativo con el nombre de la variable global como clave y los contenidos de dicha variable como el valor del elemento del array.
73
Otra carcterstica importante del mbito de las variables es la variable static. Una variable esttica existe slo en el mbito local de la funcin, pero no pierde su valor cuando la ejecucin del programa abandona este mbito. Consideremos el siguiente ejemplo:
<?php function Test(){ $Var = 0; echo $Var; $Var++; } Test(); ?>
Esta funcin tiene poca utilidad ya que cada vez que es llamada asigna a la variable $Var el valor 0 y representa un "0". La sentencia $Var++, que incrementa la variable, no sirve para nada, ya que en cuanto la funcin termina la variable $Var desaparece. Para hacer una funcin til para contar, que no pierda la pista del valor actual del conteo, la variable $Var debe declararse como esttica:
<?php function Test(){ static $Var = 0; echo $Var; $Var++; } Test(); ?>
Ahora, cada vez que se llame a la funcin Test(), se representar el valor de $Var y se incrementar. Las variables estticas tambin proporcionan una forma de manejar funciones recursivas. Una funcin recursiva es la que se llama a s misma. Se debe tener cuidado al escribir una funcin recursiva, ya que puede ocurrir que se llame a s misma indefinidamente. Hay que asegurarse de implementar una forma adecuada
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
74 de terminar la recursin. La siguiente funcin cuenta recursivamente hasta 10, usando la variable esttica $count para saber cundo parar:
<?php function Test() { static $count = 0; $count++; echo $count; if ($count < 10) { Test (); } } Test(); ?>
Una variable de variable toma el valor de una variable y lo trata como el nombre de una variable. En el ejemplo anterior, Hola, se puede usar como el nombre de otra variable utilizando dos signos de pesos ($$).
<?php $$Var = "Mundo"; ?>
En este momento se han definido y almacenado dos variables en el rbol de smbolos de PHP: $Var, que contiene "Hola", y $Hola que contiene "Mundo". Es ms, la sentencia:
<?php echo "$Var ${$Var}"; ?>
75
Ambas producen el resultado Hola Mundo: Para usar variables de variables con matrices, hay que resolver un problema de ambigedad. Si se escribe $$Var[1] el intrprete necesita saber si nos referimos a utilizar $Var[1] como una variable, o si se pretenda utilizar $$Var como variable y el ndice [1] como ndice de dicha variable. La sintaxis para resolver esta ambigedad es: En $Var[1] como una variable En $$Var como variable y el ndice [1] ${$Var[1]} ${$Var}[1]
76
<table width="800" border="0" align="center" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <tr> <td width="192" height="92"> </td> <td width="147"> </td> <td width="204"> </td> <td width="257"> </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"> </td> <td> </td> <td> </td> <td> </td> </tr> </table> <?php } else { if(($_POST['user'] == 'Usuario1') && ($_POST['psw'] == 'nuevo')) { echo "<center> Bienvenido $_POST[user] "; echo "<br><hr>"; foreach($_POST as $clave => $valor) echo "<i>$clave</I> = $valor <br>"; echo "</center>"; } else { echo "<center><h1>Acceso denegado nombre o contrasea Valido<br> en la base de datos</center></h1>"; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
77
echo "<pre><br><h2><a href='javascript:history.go (-1)'>Volver<h2></a></h2></pre>"; } } ?> </body>
Como se puede observar, el programa escribe el cdigo HTML para generar la tabla, y cada vez que necesita un dato de los que ha introducido el usuario, efecta una llamada al intrprete solicitando la escritura del contenido de la variable cuyo nombre es el mismo que el del campo del formulario (echo $user para el contenido del campo user). Y se genera el siguiente resultado:
Cuando se enva un formulario, tambin es posible usar una imagen en vez del botn submit estndar con una etiqueta como: <input type=image src="image.gif" name="sub">
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
78
Cuando el usuario hace click en cualquier parte de la imagen, el formulario que la acompaa se transmitir al servidor con dos variables adicionales, sub_x y sub_y. Estas contienen las coordenadas del click del usuario dentro de la imagen. Los ms experimentados pueden notar que los nombres de variable enviados por el navegador contienen un guin en vez de un subrayado (guin bajo), pero PHP convierte el guin en subrayado automticamente.
Descripcin
Devuelve el tipo de dato pasado como parmetro, pudiendo devolver como valor: integer, float, string, array, class, object y unknown type. Establece el tipo de dato a guardar en una variable. Tiene dos argumentos: el nombre de la variable y el tipo que se quiere establecer. Con esta funcin podemos realizar conversiones de un tipo de datos a otro. Devolver true si ha tenido xito; en caso contrario devolver false. Indica si una variable ha sido inicializada con un valor, en cuyo caso devuelve true y, en caso contrario devuelve false. Destruye una variable liberando los recursos dedicados a dicha variable. Es necesario indicar como parmetro el nombre de la variable a destruir. Devuelve valor true si la variable an no ha sido inicializada, o bien, tiene un valor igual a 0 o es una cadena vaca y, en caso contrario devuelve false.
isset (variable)
unset (variable)
empty (variable)
Ejemplo:
<?php echo '$cadena '; echo (isset($cadena))?'est ':'no est '; echo "inicializada<BR>"; echo (empty($cadena))?'$cadena est vaca':$cadena; echo "<BR><BR>"; $cadena=""; echo '$cadena '; echo (isset($cadena))?'est ':'no est '; echo "inicializada<BR>"; echo (empty($cadena))?'$cadena est vaca':$cadena; echo "<BR><BR>"; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
79
$cadena="3.1416 es el valor de PI"; echo '$cadena '; echo (isset($cadena))?'est ':'no est'; echo "inicializada<BR>"; echo (empty($cadena))?'cadena est vaca':$cadena; echo "<BR><BR>"; unset($cadena); echo '$cadena '; echo (isset($cadena))?'est ':'no est'; echo "inicializada<BR>"; echo (empty($cadena))?'cadena est vaca':$cadena; ?>
Dado que PHP determina los tipos de las variables y los convierte (generalmente) segn necesita, no siempre resulta obvio de qu tipo es una variable dada en un momento concreto. PHP incluye varias funciones que descubren de qu tipo es una variable y son las siguientes.
80
Funcin
is_int (variable) is_integer (variable) is_long (variable) is_float (variable) is_real (variable) is_double (variable)
Descripcin
Devuelven true si la variable pasada como argumento es de tipo integer; en caso contrario devuelven false.
Devuelven true si la variable pasada como argumento es de tipo float; en caso contrario devuelven false.
is_numeric (variable)
Devuelve true si la variable pasada como argumento es un nmero o una cadena numrica; en caso contrario devuelven false. Devuelve true si la variable pasada como argumento es de tipo lgico; en caso contrario devuelven false. Devuelve true si la variable pasada como argumento es de tipo array; en caso contrario devuelven false. Devuelve true si la variable pasada como argumento es de tipo string; en caso contrario devuelven false. Devuelve true si la variable pasada como argumento es de tipo object; en caso contrario devuelven false.
is_bool (variable)
is_array (variable)
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>'; ?>
81
intval (variable, base), floatval (variable), strval (variable): estas funciones sirven para realizar conversiones de tipos (casting), de modo que convierten a integer, float o string, respectivamente, el valor de la variable que se le pasa como parmetro. Estas funciones no pueden utilizarse para convertir arrays u objetos. En particular la funcin intval () puede recibir adems un segundo parmetro que representa la base a utilizar en la conversin (10-decimal, 8-octal y 16hexadecimal), tomando por defecto la base 10 de los nmeros decimales. Ejemplo:
<?php $cadena=" 38E6"; echo "El valor de \$cadena es: <b> $cadena </b><br><br>"; $aux=intval($cadena); echo "El resultado de convertirla en entero es: $aux <br>"; $aux=intval($cadena,8); echo "El resultado de convertirla en entero octal es: $aux <br>"; $aux=intval($cadena,16); echo "El resultado de convertirla en entero hexadecimal es: $aux <br>"; $aux=floatval($cadena); echo "El resultado de convertirla en float es: $aux <br>"; $aux=strval($cadena); echo "El resultado ede convertirla en cadena es: $aux <br>"; ?>
82
3.2.4. Constantes
Una constante es un identificador para expresar un valor simple. Como el nombre sugiere, este valor no puede variar durante la ejecucin del script. Es sensible a maysculas Por convencin, los identificadores de constantes suelen declararse en maysculas. El nombre de una constante sigue las mismas reglas que una variable en PHP solo que no se necesita anteponer el carcter de pesos ($). El alcance de una constante es global. Solo se puede definir como constantes valores escalares (boolean, integer, float y string ). Una vez definida, no puede ser modificada ni eliminada.
Para obtener el valor de una constante solo es necesario especificar su nombre. En el caso de que queramos expresarla de forma dinmica se utiliza la funcin: constant(constante) Para comprobar la existencia de una constante se usa la funcin: defined(constante)
83
Descripcin Nombre del archivo de comandos o archivo que est siendo interpretado. Nmero de lnea dentro del archivo que est siendo interpretado. Cadena que representa la versin del intrprete. Cadena con el nombre del sistema operativo en el que se esta ejecutando el intrprete de PHP. Verdadero. Falso Informacin sobre errores distintos a los de interpretacin del cual no es posible recuperarse. Informa que el intrprete encontr una sintaxis invlida en el archivo de comandos. Finaliza la ejecucin. Informa que se produjo algo incorrecto que puede provenir o no de un error. La ejecucin contina. Denota un error que no impide la ejecucin. Conjunto con todos los errores que se han producido.
E_PARSE
Las constantes __FILE__ y __LINE__ son muy tiles en la programacin, puesto que se puede generar un programa que ante un error nos indique en qu archivo y lnea se ha producido.
<?php echo "Ejecuto la versin de PHP: ",PHP_VERSION,"<BR>\n"; echo "El sistema operativo es: ",PHP_OS,"<BR>\n"; echo "Estoy en el archivo <B>",__FILE__," lnea ",__LINE__,"</B>"; ?>
84
3.2.5. Expresiones
Se denomina as a cualquier combinacin de constantes, variables, operadores y funciones sintcticas y semnticamente correctas. Las expresiones, al ser evaluadas por PHP, producen valores que pueden ser empleados en la programacin de un script. Hay muchos tipos de expresiones y todas ellas pueden ser evaluadas. As, un valor concreto, sea un entero, una cadena de caracteres u otro tipo, ser una expresin, ya que al ser evaluado dar como resultado su propio valor. Tambin una asignacin es una expresin, ya que sta produce siempre como resultado de la evaluacin el valor que ha sido asignado. La expresin: $MiVar = 5: produce como resultado de la evaluacin el valor 5. Un tipo muy comn de expresiones son las de comparacin, que dan como resultado los valores lgicos TRUE y FALSE, dependiendo de si la comparacin, al ser evaluada, resulta ser cierta o falsa. Una expresin de esta clase sera: 5 + 3 == 6 +1 // que, evidentemente es falsa. Y el resultado de su evaluacin puede ser asignado a una variable: $MiVar = 5 + 3 == 6 +1; // equivale a $MiVar = false Por ltimo, hay que destacar que al evaluar una variable numrica, si sta contiene cualquier valor distinto de cero, el resultado ser TRUE, mientras que si dicho valor es cero, el resultado ser FALSE. Evaluar una cadena vaca genera como resultado FALSE, y cualquier otra cadena, TRUE.
85
Descripcin Suma entre dos nmeros. Diferencia entre dos nmeros Multiplicacin entre dos nmeros Cociente entre dos nmeros Mdulo, resto de la divisin entera entre dos nmeros
86
87
Otro operador condicional es el operador "?:" (o ternario), que funciona como en C y otros muchos lenguajes. (expr1) ? (expr2) : (expr3); La expresin toma el valor expr2 si expr1 se evala a cierto, y expr3 si expr1 se evala a falso.
88
La utilizacin de los operadores de incremento o decremento implica la suma o resta de una unidad sobre el nmero que se aplique.
Estos operadores tienen una carcterstica propia que se refiere al momento en que se realiza el incremento o decremento del valor. Esta propiedad vara segn se escriba el operador como prefijo o sufijo de la variable sobre la que se aplica.
<?php $UnNumero = 10; $OtroNumero = 10; $UnaVar = ++$UnNumero; echo "UnaVar es $UnaVar<BR>\n"; echo "UnNumero es ahora $UnNumero<BR>\n"; $OtraVar = $OtroNumero++; echo "OtraVar es $OtraVar<BR>\n"; echo "OtroNumero es $OtroNumero<BR>\n"; ?>
89 En el caso de que an no quede claro los incrementos y decrementos, aqu est este otro ejemplo:
<?php echo "<h3>Postincremento</h3>"; $a = 5; echo "Debera ser 5: " . $a++ . "<br>\n"; echo "Debera ser 6: " . $a . "<br>\n"; echo "<h3>Preincremento</h3>"; $a = 5; echo "Debera ser 6: " . ++$a . "<br>\n"; echo "Debera ser 6: " . $a . "<br>\n"; echo "<h3>Postdecremento</h3>"; $a = 5; echo "Debera ser 5: " . $a-- . "<br>\n"; echo "Debera ser 4: " . $a . "<br>\n"; echo "<h3>Predecremento</h3>"; $a = 5; echo "Debera ser 4: " . --$a . "<br>\n"; echo "Debera ser 4: " . $a . "<br>\n"; ?>
Nombre
Y O O exclusiva Negacin Y O
Resultado
True si tanto $A como $B son ciertos. True si $A o $B son ciertos. True si $A es cierto o $B es cierto, pero no ambos a la vez. True si $A no es cierto. True si tanto $A como $B son ciertos. True si $A o $B son ciertos.
La razn de las dos variaciones de "Y" y "O" es que operan con distinta precedencia. (Ver precedencia de operadores)
90
91
A menudo, se desea tener ms de una sentencia ejecutada de forma condicional. Por supuesto, no hay necesidad de encerrar cada sentencia con una clusula if. En vez de eso, se pueden agrupar varias sentencias en un grupo de sentencias. Por ejemplo, este cdigo mostrara a es mayor que b si $a fuera mayor que $b, y entonces asignara el valor de $a a $b:
if ($a > $b) { echo "a es mayor que b"; $b = $a; }
Las sentencias if se pueden anidar indefinidamente dentro de otras sentencias if, lo cual proporciona una flexibilidad completa para ejecuciones condicionales en las diferentes partes de tu programa.
3.3.2. else
A menudo queremos ejecutar una sentencia si se cumple una cierta condicin, y una sentencia distinta si la condicin no se cumple. Esto es para lo que sirve else. else extiende una sentencia if para ejecutar una sentencia en caso de que la expresin en la sentencia if se evale como FALSE. Por ejemplo, el siguiente cdigo mostrara a es mayor que b si $a fuera mayor que $b, y a NO es mayor que b en cualquier otro caso:
if ($a > $b) { echo "a es mayor que b"; } else { echo "a NO es mayor que b"; } I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
92 La sentencia else se ejecuta solamente si la expresin if se evala como FALSE, y si hubiera alguna expresin elseif - slo si se evaluaron tambin a FALSE.
3.3.3. elseif
Como su nombre sugiere, es una combinacin de if y else. Como else, extiende una sentencia if para ejecutar una sentencia diferente en caso de que la expresin if original se evala como FALSE. No obstante, a diferencia de else, ejecutar esa expresin alternativa solamente si la expresin condicional elseif se evala como TRUE. Por ejemplo, el siguiente cdigo mostrara a es mayor que b, a es igual a b o a es menor que b:
if ($a > $b) { echo "a es mayor que b"; } elseif ($a == $b) { echo "a es igual que b"; } else { echo "a es mayor que b"; }
Puede haber varios elseifs dentro de la misma sentencia if. La primera expresin elseif (si hay alguna) que se evale como TRUE se ejecutara. En PHP, tambin se puede escribir 'else if' (con dos palabras) y el comportamiento sera idntico al de un 'elseif' (una sola palabra). El significado sintctico es ligeramente distinto (si estas familiarizado con C, es el mismo comportamiento) pero la lnea bsica es que ambos resultaran tener exactamente el mismo comportamiento. La sentencia elseif se ejecuta slo si la expresin if precedente y cualquier expresin elseif precedente se evalan como FALSE, y la expresin elseif actual se evala como TRUE.
93
3.3.5. while
Los bucles while son los tipos de bucle ms simples en PHP. Se comportan como su contrapartida en C. La forma bsica de una sentencia while es: while (expr) sentencia El significado de una sentencia while es simple. Le dice a PHP que ejecute la(s) sentencia(s) anidada(s) repetidamente, mientras la expresin while se evale como TRUE. El valor de la expresin es comprobado cada vez al principio del bucle, as que incluso si este valor cambia durante la ejecucin de la(s) sentencia(s) anidada(s), la ejecucin no parar hasta el fin de la iteracin (cada vez que PHP ejecuta las sentencias en el bucle es una iteracin). A veces, si la expresin while se evala como FALSE desde el principio de todo, la(s) sentencia(s) anidada(s) no se ejecutarn ni siquiera una vez. Como con la sentencia if, se pueden agrupar mltiples sentencias dentro del mismo bucle while encerrando un grupo de sentencias con llaves, o usando la sintaxis alternativa: while (expr): sentencia ... endwhile; Los siguientes ejemplos son idnticos, y ambos imprimen nmeros del 1 al 10:
/* ejemplo 1 */ $i = 1; while ($i <= 10) { echo $i++; /* el valor impreso sera $i antes del incremento (post-incremento) */ }
94
3.3.6 do..while
Los bucles do..while son muy similares a los bucles while, excepto que las condiciones se comprueban al final de cada iteracin en vez de al principio. La principal diferencia frente a los bucles regulares while es que se garantiza la ejecucin de la primera iteracin de un bucle do..while (la condicin se comprueba slo al final de la iteracin), mientras que puede no ser necesariamente ejecutada con un bucle while regular (la condicin se comprueba al principio de cada iteracin, si esta se evala como FALSE desde el principio la ejecucin del bucle finalizar inmediatamente). Hay una sola sintaxis para los bucles dowhile:
$i = 0; do { echo $i; } while ($i>0);
El bucle de arriba se ejecutara exactamente una sola vez, despus de la primera iteracin, cuando la condicin se comprueba, se evala como FALSE ($i no es ms grande que 0) y la ejecucin del bucle finaliza. Los usuarios avanzados de C pueden estar familiarizados con un uso distinto del bucle do...while, para permitir parar la ejecucin en medio de los bloques de cdigo, encapsulandolos con do...while(0), y usando la sentencia break. El siguiente fragmento de cdigo demuestra esto:
do { if ($i < 5) { echo "i no es lo suficientemente grande"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } echo "i es correcto"; ...procesa i... } while(0);
No se preocupes si no entiende esto completamente o en absoluto. Se pueden codificar archivos de comandos e incluso archivos de comandos potentes sin usar esta 'propiedad'.
95
3.3.7. for
Los bucles for son los bucles ms complejos en PHP. Se comportan como su contrapartida en C. La sintaxis de un bucle for es: for (expr1; expr2; expr3) sentencia La primera expresin (expr1) se evala (ejecuta) incondicionalmente una vez al principio del bucle. Al comienzo de cada iteracin, se evala expr2 . Si se evala como TRUE, el bucle contina y las sentencias anidadas se ejecutan. Si se evala como FALSE, la ejecucin del bucle finaliza. Al final de cada iteracin, se evala (ejecuta) expr3. Cada una de las expresiones puede estar vaca. Que expr2 est vaca significa que el bucle debera correr indefinidamente (PHP implicitamente lo considera como TRUE, al igual que C). Esto puede que no sea tan intil como se podra pensar, puesto que a menudo se quiere salir de un bucle usando una sentencia break condicional en vez de usar la condicin de for. Considera los siguientes ejemplos. Todos ellos muestran nmeros del 1 al 10:
/* ejemplo 1 */ for ($i = 1; $i <= 10; $i++) { echo $i; } /* ejemplo 2 */ for ($i = 1;;$i++) { if ($i > 10) { break; } echo $i; } /* ejemplo 3 */ $i = 1; for (;;) { if ($i > 10) { break; } echo $i; $i++; } /* ejemplo 4 */ for ($i = 1; $i <= 10; echo $i, $i++) ;
96 Por supuesto, el primer ejemplo parece ser el mas elegante (o quizs el cuarto), pero uno puede descubrir que ser capaz de usar expresiones vacas en bucles for resulta til en muchas ocasiones. PHP tambin soporta la "sintaxis de dos puntos" alternativa para bucles for. for (expr1; expr2; expr3): sentencia; ...; endfor;
97
3.3.8 foreach
PHP4 (PHP3 no) incluye una construccin foreach, tal como perl y algunos otros lenguajes. Esto simplemente da un modo fcil de iterar sobre arrays. Hay dos sintaxis; la segunda es una extensin menor, pero til de la primera: foreach(expresion_array as $value) sentencia foreach(expresion_array as $key => $value) sentencia La primera forma recorre el array dado por expresion_array. En cada iteracin, el valor del elemento actual se asigna a $value y el puntero interno del array se avanza en una unidad (as en el siguiente paso, se estar mirando el elemento siguiente). La segunda manera hace lo mismo, salvo que la clave del elemento actual ser asignada a la variable $key en cada iteracin. Nota: Cuando foreach comienza su primera ejecucin, el puntero interno a la lista (array) se reinicia automticamente al primer elemento del array. Esto significa que no se necesita llamar a reset() antes de un bucle foreach. Nota: Hay que tener en cuenta que foreach con una copia de la lista (array) especificada y no la lista en si, por ello el puntero de la lista no es modificado como en la construccin each. Puede haber observado que las siguientes son funcionalidades idnticas:
reset( $arr ); while( list( , $value ) = each( $arr ) ) { echo "Valor: $value<br>\n"; } foreach( $arr as $value ) { echo "Valor: $value<br>\n"; }
99
3.3.9. switch
La sentencia switch es similar a una serie de sentencias IF en la misma expresin. En muchas ocasiones, se quiere comparar la misma variable (o expresin) con muchos valores diferentes, y ejecutar una parte de cdigo distinta dependiendo de a qu valor es igual. Para ello sirve la sentencia switch. Los siguientes dos ejemplos son dos modos distintos de escribir la misma cosa, uno usa una serie de sentencias if, y el otro usa la sentencia switch:
if ($i == 0) { echo "i es igual a 0"; } if ($i == 1) { echo "i es igual a 1"; } if ($i == 2) { echo "i es igual a 2"; } switch ($i) { case 0: echo "i es igual a 0"; break; case 1: echo "i es igual a 1"; break; case 2: echo "i es igual a 2"; break; }
Es importante entender cmo se ejecuta la sentencia switch para evitar errores. La sentencia switch ejecuta lnea por lnea (realmente, sentencia a sentencia). Al comienzo, no se ejecuta cdigo. Slo cuando se encuentra una sentencia case con un valor que coincide con el valor de la expresin switch PHP comienza a ejecutar las sentencias. PHP contina ejecutando las sentencias hasta el final del bloque switch, o la primera vez que vea una sentencia break. Si no se escribe una sentencia break al final de una lista de sentencias case, PHP seguir ejecutando las sentencias del siguiente case. Por ejemplo:
switch ($i) { case 0: echo "i es igual a 0"; case 1: echo "i es igual a 1"; case 2: echo "i es igual a 2"; }
Aqu, si $i es igual a 0, PHP ejecutara todas las sentencias echo. Si $i es igual a 1, PHP ejecutara las ltimas dos sentencias echo y slo si $i es igual a 2, se obtendra la conducta 'esperada' y solamente se mostrara 'i es igual a 2'. As, es importante no olvidar las sentencias break (incluso aunque pueda querer evitar escribirlas intencionadamente en ciertas circunstancias). En una sentencia switch, la condicin se evala slo una vez y el resultado se compara a cada sentencia case. En una sentencia elseif, la condicin se evala
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
100 otra vez. Si tu condicin es ms complicada que una comparacin simple y/o est en un bucle estrecho, un switch puede ser ms rpido. La lista de sentencias de un case puede tambin estar vaca, lo cual simplemente pasa el control a la lista de sentencias del siguiente case.
switch ($i) { case 0: case 1: case 2: echo "i es menor que 3, pero no negativo"; break; case 3: echo "i es 3"; }
Un case especial es el default case. Este case coincide con todo lo que no coincidan los otros case. Por ejemplo:
switch ($i) { case 0: echo "i es igual a 0"; break; case 1: echo "i es igual a 1"; break; case 2: echo "i es igual a 2"; break; default: echo "i no es igual a 0, 1 o 2"; }
La expresin case puede ser cualquier expresin que se evale a un tipo simple, es decir, nmeros enteros o de punto flotante y cadenas de texto. No se pueden usar aqu ni arrays ni objetos a menos que se conviertan a un tipo simple. La sintaxis alternativa para las estructuras de control est tambin soportada con switch.
switch ($i): case 0: echo "i es igual 0"; break; case 1: echo "i es igual a 1"; break; case 2: echo "i es igual a 2"; break; default: echo "i no es igual a 0, 1 o 2"; endswitch;
101
3.3.10. break
break escapa de la estructuras de control iterante (bucle) actuales for, while, o switch. break acepta un parmetro opcional, el cual determina cuantas estructuras de control hay que escapar.
$i = 0; while (++$i) { switch ($i) { case 5: echo "Nmero 5<br>\n"; break 1; Salir solo de switch. */ case 10: echo " Nmero 10; quitting<br>\n"; break 2; /* Salir de switch y de while. */ default: break; } }
3.3.11. continue
continue se usa dentro de la estructura del bucle para saltar el resto de la iteracin actual del bucle y continuar la ejecucin al comienzo de la siguiente iteracin. continue accepta un parmetro opcional, el cual determina cuantos niveles (bluces) hay que saltar antes de continuar con la ejecucin.
<?php $i=0; while ($i < 10) { $i++; if (($i == 6)||($i == 7)||($i == 8)) continue; if ($i%2 == 0) echo "$i es par <BR>\n"; else echo "$i es impar <BR>\n"; } // del while echo "Primera instruccin despus del bucle\n"; ?>
102
103
Nota: La sintaxis de documento incrustado fue aadida en PHP 4. Las cadenas se pueden concatenar usando el operador '.' (punto).
104 Imprime una cadena cuya estructura depende del formato descrito en el argumento formato. Esta cadena esta formada por una ristra de caracteres algunos de los cuales se mostrarn directamente, mientras que otros, los que van precedidos del carcter %, conocidos como especificaciones de conversin, son utilizados para formatear la informacin. Cada especificacin de conversin se compone de los siguientes elementos en (orden): 1. Un carcter de relleno opcional-, que se utilizar para rellenar y ajustar el resultado hasta lograr el tamao de cadena correcto, por ejemplo, el espacio en blanco para caracteres (valor por defecto) o el cero para valores numricos. 2. Un carcter de alineamiento opcional-, para indicar si el resultado debe alinearse a la izquierda (carcter -) o a la derecha (valor por defecto). 3. Un indicador de tamao -opcional-, que indica el tamao mnimo de caracteres que ocupar el argumento tras la conversin. 4. Un indicador de precisin opcional-, formado por un punto (.) seguido del nmero de dgitos decimales que debern mostrar los nmeros en punto flotante. No tiene efecto con otros tipos de datos. 5. Finalmente un identificador de tipo de datos, que especifica como se deber de tratar el dato. Los tipos disponibles son:
Smbolo % D B O X X C F E S Tipo de Dato Carcter % Decimales Binarios Octales Hexadecimales (letras minsculas) Hexadecimales (letras maysculas) Caracteres ASCII Punto flotante (signo decimal) Punto flotante (notacin exponencial) Cadenas Tratamiento Carcter % Como entero decimal Como entero binario Como entero Como entero Como entero Como carcter Como float o decimales Como float o decimales Como string
105 El siguiente ejemplo muestra la utilidad de esta funcin para formatear resultados en pantalla:
<html> <head> <title>trabajando con cadenas</title> </head> <body> <center> <h2>Funcin <I> printf </I></h2> <?php $euro=166.386; $anyo=2002; $mes=9; $dia=23; printf("%s--- %02d/%02d/%04d ---</b><br><br>", "<b>Convertidor de euros ", $dia, $mes, $anyo); for ($i=100; $i<1100; $i+=100) printf("%4d Ptas. -> %02.2f %s", $i, $i/$euro, " <br>"); ?> </body> </html>
sprintf (formato [argumentos]): es muy parecida a printf(), pero se diferencia de esta en que devuelve una cadena de caracteres, la cual lo habitual es almacenarla en una variable. Nota: No se debe abusar del uso de estas funciones cuando no haya que aplicar un formato especfico a los datos o el formato no sea importante, porque se obtienen mejores resultados haciendo uso de la funcin echo y concatenando las cadenas con el operador ..
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
106
107
108
109 strncmp (cad1, cad2, long): funciona como strcmp(), solo que permite comparar los long primeros caracteres de dos cadenas. Si alguna cadena es menor que el nmero de caracteres a comparar, se usar su longitud como long para la comparacin. Diferencia maysculas de minsculas. strnatcmp (cad1, cad2): se comporta igual que strcmp(), excepto en que utiliza una comparacin natural de las cadenas alfanumricas. Distingue entre maysculas y minsculas. strnatcasecmp (cad1, cad2): se comporta igual que strnatcmp(), excepto en que no diferencia entre maysculas y minsculas. Veamos un ejemplo con el funcionamiento diferenciado de strcmp() y strnatcmp():
<body> <center> <h2>Funcin <I> strnatcmp </I></h2> <?php $cad1="10000 pts"; $cad2="2500 pts"; echo "<TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'>\n"; echo "<Tr align='center'><Td BGCOLOR='YELLOW'>cadena1 </td>"; echo "<TD>$cad1</TD></tr>\n"; echo "<Tr align='center'><Td BGCOLOR='YELLOW'>cadena2 </td>"; echo "<TD>$cad2</TD></tr>\n"; echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>strcmp(cadena1, cadena2) </td>"; echo "<Td >".strcmp($cad1, $cad2). "</td></tr>\n"; echo "<Tr align='center'>"; echo "<Td BGCOLOR='YELLOW'>strnatcmp(cadena1, cadena2) </td>"; echo "<Td >".strnatcmp($cad1, $cad2). "</td></tr>\n"; echo "</Table>\n"; ?> </body>
110
111
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"; ?>
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>
114
3.5. ARREGLOS
Los arrays o matrices forman una parte muy importante de la programacin en PHP ya que permiten manejar grupos de valores relacionados: nos permiten almacenar mltiples valores en una sola estructura y de esta forma, asociarlos bajo una misma denominacin. Como veremos, PHP tiene gran cantidad de funciones cuyos parmetros, tanto de llamada como de resultados, son variables de tipo array. En especial, son ampliamente utilizados en las funciones ligadas a las bases de datos.
Un array puede combinar elementos de naturaleza distinta: en el ejemplo, valores enteros y cadena de caracteres (que deben aparecer entrecomillados) e, incluso, elementos vacos. Cuando, al generar el array, no indicamos la posicin de sus elementos, estos se van situando secuencialmente respecto a la ltima asignacin realizada sobre el array. La asignacin numrica de posiciones dentro del array no tiene porqu ser secuencial, es decir podemos definir el orden numrico que nos interese. Ejemplo:
115
<?php $matriz1[3]="cougar"; $matriz1[5]="ford"; $matriz1[7]="2.500"; $matriz1[]="V6"; $matriz1[]=172; ?>
La otra forma de definir arrays es utilizar el constructor array () proporcionado por el lenguaje. Este constructor no es una funcin regular; tiene la siguiente definicin: array array (mixed valores, ) Ejemplo de uso del constructor:
<body> <center> <h2>El constructor <I>array</I></h2> <?php $matriz1=array("cougar","ford",null,"2.500","V6",172); ?> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td>indice</Td> <?php for($i=0;$i<=5;$i++) echo "<Td>$i</td>"; ?> <Tr align="center"> <Td BGCOLOR="YELLOW"> $matriz1</Td> <?php echo "<Td> $matriz1[0] </Td>"; echo "<Td> $matriz1[1] </Td>"; echo "<Td> $matriz1[2] </Td>"; echo "<Td> $matriz1[3] </Td>"; echo "<Td> $matriz1[4] </Td>"; echo "<Td> $matriz1[5] </Td>"; ?> </tr> </table> </center> </body>
116 El constructor array() tambin nos permite asignar los elementos del array en el orden en que queramos. Para ello, indicamos el ndice, seguido del smbolo => y el valor del elemento. Por ejemplo:
<body> <center> <h2>El constructor <I>array</I></h2> <?php $matriz1=array("cougar","ford",null,"2.500","V6",172); $matriz2=array(2=>"cougar","ford",1=>null,0=>"2.500","V6",172); ?> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td>indice</Td> <?php for($i=0;$i<=5;$i++) echo "<Td>$i</td>"; ?> <Tr align="center"> <Td BGCOLOR="YELLOW"> $matriz1</Td> <?php echo "<Td> $matriz1[0] </Td>"; echo "<Td> $matriz1[1] </Td>"; echo "<Td> $matriz1[2] </Td>"; echo "<Td> $matriz1[3] </Td>"; echo "<Td> $matriz1[4] </Td>"; echo "<Td> $matriz1[5] </Td>"; ?> </tr> <Tr align="center"> <Td BGCOLOR="YELLOW"> $matriz2</Td> <?php echo "<Td> $matriz2[0] </Td>"; echo "<Td> $matriz2[1] </Td>"; echo "<Td> $matriz2[2] </Td>"; echo "<Td> $matriz2[3] </Td>"; echo "<Td> $matriz2[4] </Td>"; echo "<Td> $matriz2[5] </Td>"; ?> </tr> </table> </center> </body>
117
118
echo "<Td>". $matriz2['motor']." </Td>"; echo "<Td>". $matriz2['potencia']."</Td>"; ?> </tr> </table> </center> </body>
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>
120 Nota: en PHP3 no es posible referirse a arrays multidimensionales directamente dentro de cadenas, es necesario hacer uso del operador de concatenacin para solucionar este problema. En PHP4, sin embargo, todo el problema se soluciona encerrando la referencia al array (dentro de la cadena) entre llaves; tambin se puede hacer uso de la concatenacin de cadenas.
121
122
Otra funcin relacionada con el recorrido de arrays es sizeof(), que obtiene el nmero de elementos del array pasado como argumento en la llamada a la funcin.
123 prev (matriz): devuelve el valor del elemento siguiente al actual (si existe) y retrocede el puntero interno una posicin. En caso de que el elemento actual sea el ltimo del array, devuelve false. end (matriz): coloca el puntero interno en el ltimo elemento de un array escalar. reset (matriz): devuelve el valor del primer elemento del array y sita el puntero interno en su primera posicin. Ejemplo de uso de estas funciones:
<body> <center> <h2>Arrays funcin<br> <I>reset, end, next, prev, current y key</I></h2> <?php $matriz1[3]="cougar"; $matriz1[5]="ford"; $matriz1[7]="2.500"; $matriz1[]="V6"; $matriz1[]=172; $matriz2['modelo']="cougar"; $matriz2['marca']="ford"; $matriz2['cc']="2.500"; $matriz2['fecha']=null; $matriz2['motor']="V6"; $matriz2['potencia']=182; ?> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td>Posicin</Td> <?php echo "<Td BGCOLOR='YELLOW'>".key($matriz1)."</td>"; while (next ($matriz1)){ echo "<Td BGCOLOR='YELLOW'>".key($matriz1)."</td>"; } ?> <Tr> <Tr align='center'> <td BGCOLOR='YELLOW'>Valor</Td> <?php echo "<Td>".reset($matriz1)."</td>"; while (next ($matriz1)){ echo "<Td>".current($matriz1)."</td>"; } ?> </table><br> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'> <Td>Clave</Td> <?php end($matriz2); echo "<Td BGCOLOR='YELLOW'>".key($matriz2)."</td>"; I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
124
while (next ($matriz2)){ echo "<Td BGCOLOR='YELLOW'>".key($matriz2)."</td>"; } ?> <Tr> <Tr align='center'> <td BGCOLOR='YELLOW'>Valor</Td> <?php end($matriz2); echo "<Td BGCOLOR='YELLOW'>".current($matriz2)."</td>"; while (prev ($matriz2)){ echo "<Td BGCOLOR='YELLOW'>".current($matriz2)."</td>"; } ?> </table> </center> </body>
each (matriz): se usa para recorrer arrays (sobre todo los asociativos), pues devuelve un apr de valores correspondientes a la clave y al valor asociado a esa clave. Adems, avanza el puntero interno hasta el siguiente elemento. Si el puntero interno apunta a la ltima posicin del array, la ajacucin de esta funcin devuelve false. list (): asigna una lista de variables en una sola operacin. Suele utilizarse en combinacin con la funcin anteriormente vista, each().
126
127
<td> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'><th colspan='2'>sort()</th> <Tr align='center' BGCOLOR='YELLOW'> <Td>Posicin</Td><Td>Valor</Td></tr> <?php sort($matriz1); while (list($pos,$valor)=each($matriz1)){ echo "<Tr align='center'><td>".$pos."</td>"; echo "<Td>".$valor."</td></tr>"; } ?> </table></td> <td> <TABLE BORDER='1'CELLPADDING='2' CELLSPACING='2'> <Tr align='center' BGCOLOR='YELLOW'><th colspan='2'>rsort()</th> <Tr align='center' BGCOLOR='YELLOW'> <Td>Posicin</Td><Td>Valor</Td></tr> <?php rsort($matriz1); while (list($pos,$valor)=each($matriz1)){ echo "<Tr align='center'><td>".$pos."</td>"; echo "<Td>".$valor."</td></tr>"; } ?> </table></td> </table> </center> </body>
Para evitar el efecto lateral en el que se redefinen los ndices, tanto para los arrays escalares como asociativos, podemos usar las siguientes funciones:
128 asort (matriz): ordena alfanumricamente los valores de los elementos de un array de mayor a menor, pero manteniendo la relacin existente entre los ndices y sus valores asociados. Esto es posible debido a que la ordenacin se hace sobre los elementos del array y no sobre los ndices. arsort (matriz): realiza la ordenacin inversa. ksort (matriz): ordena alfanumricamente las claves de un arrray de menor a mayor manteniendo las correlaciones entre clave y valor asociado. La funcin que realiza la ordenacin inversa es krsort (matriz).
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
130
131
?> <form method="post" action="<?php echo $_SERVER['PHP_SELF']?>"> <TABLE BORDER="0" CELLPANDDING="4" CELLSPACING="6"> <TR ALIGN="center"> <TD> <input name="BOTN" type="submit" value="SHIFT <-"><BR><BR> <input name="dato1" type="text" value="<?php echo "$dato1"?>"><BR><BR> <input name="BOTN" type="submit" value="PUSH ->"> </TD> <TD> <table border="1" CELLPANDDING="2" CELLSPACING="2"> <TR ALIGN="center" BGCOLR="yelow"> <td>Posicion</td><td>Valor</td></tr> <?php while (list($pos,$valor)=each($pila)){ echo "<TR ALIGN='center'><TD>".$pos."</TD>"; echo "<TD>".$valor."</TD></TR>"; } $num=sizeof($pila); reset($pila); ?> </table></td> <TD> <input name="BOTN" type="submit" value="<- UNSHIFT"><BR><BR> <input name="dato2" type="text" value="<?php echo "$dato2" ?>"><BR><BR> <input name="BOTN" type="submit" value="-> POP"> </TD> </TR> </TABLE> <input name="PILA" type="hidden" value="<?php echo implode('-',$pila); ?>"> </form> </body>
132 array_reverse (matriz): devuelve un array como parmetro pero con sus componentes en orden inverso. in_array (elemento_busqueda, matriz): con esta funcin podemos saber si un elemento est contenido dentro de un array.
133
3.6. FUNCIONES
PHP, como la mayora de los lenguajes de programacin, dispone de una herramienta denominada funcin. Una funcin es un trozo de cdigo, que permite desarrollar una tarea concreta y bien definida, que se encuentra separado del resto de instrucciones del programa y al que se le ha dado un nombre para que posteriormente pueda ser referenciado. A travs del nombre se pueden ejecutar las instrucciones referidas por l tantas veces como sea necesario. La utilizacin de funciones permite que un script aparezca escrito como una lista de referencias a las tareas que se deben hacer para crear una pgina de respuesta.
134
136
</TD> <TD BGCOLOR="#FFFBAD"> <?php CuentaRegresiva(5); ?> </TD> </TR> </TABLE>
Dado que en la llamada pasamos valores a la funcin, esta informacin puede suministrarse mediante una lista de variables y/o constantes separadas por comas. El siguiente ejemplo nos muestra una combinacin de estos elementos pasados como argumentos a una funcin:
<H2>Funciones de Usuario<I></I></H2> <?php define("Fin_Cuenta", 0); $mifinal=3; function CuentaRegresiva($inicio, $fin) { for (; $inicio > $fin; $inicio--) echo $inicio, "...<BR>"; echo " Boooooom !"; } ?> <TABLE BORDER="0" CELLPADDING="4" CELLSPACING="6"> <TR ALIGN="CENTER"> <TD BGCOLOR="#FFBBAA"> <?php CuentaRegresiva(11, $mifinal); ?> </TD>
137
<TD BGCOLOR="#FFFBAD"> <?php CuentaRegresiva(8, Fin_Cuenta); ?> </TD> </TR> </TABLE>
PHP permite pasar los parmetros de tres formas distintas: por valor (el comportamiento por defecto que hemos visto en los ejemplos anteriores), por referencia y con parmetros por defecto. Parmetros por valor Cuando pasamos una variable como argumento en la llamada a una funcin, podremos pensar que las modificaciones que se realicen con dicho argumento dentro de la funcin afectan a al variable. En el caso del paso de parmetros por valor, que es la opcin por defecto de PHP, lo que recibe la funcin es una copia del valor de la variable pasada como parmetro; de esta forma, las modificaciones que pueden hacerse dentro del cuerpo de la funcin a la variable parmetro no afectan al valor final de la variable pasada como argumento. Parmetros por referencia En el caso de que queramos que los cambios que se producen en el cuerpo de la funcin afecten a la variable que se pas como argumento en la llamada a la funcin deberemos pasar al parmetro por referencia. Como su propio nombre indica, en este caso, a la funcin le llega una referencia a la variable y, por tanto, los cambios que realice sobre el parmetro se realizan sobre la variable.
138 Para indicar que parmetros se pasan por regencia, hay que marcarlos en la definicin de la funcin, anteponiendo el smbolo ampersand (&) al nombre del parmetro. Parmetros por defecto Los parmetros por defecto son la forma en que PHP implementa los parmetros opcionales en la llamada a las funciones. De este modo, este tipo de parmetros toma un valor predefinido cuando, desde la llamada a la funcin, no se les ha proporcionado ningn argumento. Para definir un parmetro por omisin, hay que, a dems de nombrar el parmetro, escribir el operador de asignacin (=) y, a continuacin, el valor que vaya a recibir el parmetro en caso de no especificarse en la llamada. Cuando se usan parmetros por defecto, estos tienen que situarse al final en la declaracin, es decir, a la derecha de cualquier parmetro normal; de otra manera, las cosas no funcionar de la forma esperada. Cuando se utiliza el valor por defecto de un parmetro, obligatoriamente han de utilizarse todos los valores por defecto de todos aquellos parmetros que se encuentren a su derecha. El siguiente ejemplo nos muestra el uso de estos tres tipos de parmetros:
<H2>Funciones de Usuario<I></I></H2> <?php $mifinal=0; function CuentaRegresiva($inicio, &$fin, $mensaje = " Boooooom !") { for (; $inicio > $fin; $inicio--) echo $inicio, "...<BR>"; $fin += 2; echo $mensaje; } ?> <TABLE BORDER="0" CELLPADDING="4" CELLSPACING="6"> <TR ALIGN="CENTER"> <TD BGCOLOR="#FFBBAA"> <?php // $mifinal vale 0 CuentaRegresiva(6, $mifinal); // $mifinal vale 2 ?> </TD> <TD BGCOLOR="#FFFBAD"> <?php // $mifinal vale 2 CuentaRegresiva(8, $mifinal, " Despierta !"); // $mifinal vale 4 ?> </TD> </TR> </TABLE>
140
Funcin time() checkdate() date() getdate() gettimeofday() gmdate() gmmktime() gmstrftime() microtime() mktime() strftime() strtotime()
Descripcin Obtiene la marca de tiempo UNIX actual Valida una fecha en formato gregoriano Da formato a la hora y fecha locales Obtiene informacin sobre la fecha y la hora locales Obtiene la hora actual Formatea la fecha y la hora a formato GMT Obtiene la marca de tiempo UNIX de una fecha con formato GMT Formatea la fecha y la hora con formato GMT a las caractersticas locales Obtiene la marca de tiempo UNIX actual en microsegundos Obtiene la marca de tiempo UNIX para una fecha dada Formatear la hora actual de acuerdo con las caractersticas locales Traduce una fecha u hora descritas en ingls a su correspondiente marca de tiempo UNIX
time(): Devuelve la marca de tiempo correspondiente al instante en que se ejecuta checkdate(mes, da, ao): Verifica si la fecha que se le pasa como parmetro es una fecha correcta. Esta funcin es bastante til en los formularios en los cuales hay que rellenar campos de tipo fecha. Devuelve un valor verdadero si la fecha dada es vlida; en caso contrario, devuelve un valor falso. Se considera vlida una fecha si:
141 El ao est entre 0 y 32767, ambos incluidos El mes est entre 1 y 12, ambos incluidos El da est en el rango permitido para el mes dado. Se tienen en consideracin los aos bisiestos.
date(formato [,timestamp]): Esta funcin nos permite darle un formato especfico a una cadena que contendr una fecha y una hora. Acepta como parmetro una cadena de formato y un parmetro timestamp; si ste se omite, se tomar el instante de ejecucin de la orden.
Valores a A d D F h H g G i j l L m M n s S t U w Y y z Z "a.m." o "p.m." "A.M." o "P.M." Da del mes con dos dgitos y con cero a la izquierda, de "01" a "31" Da de la semana con tres caracteres, "Fri" Nombre del mes, en texto completo, "January" Hora en formato, de "01" a "12" Hora en formato, de "00" a "23" Hora en formato, de "1" a "12" (sin ceros) Hora en formato; de "0" a "23" (sin ceros) Minutos, de "00" a "59" Da del mes en formato "1" a "31" Da de la semana, en texto completo, "Friday" "1" or "0", 1 si es ao bisiesto y 0 si no lo es Mes de "01" a "12" Mes con tres caracteres, "Jan" Mes de "1" a "12" (sin cero) Segundos de "00" a "59" Sufijo ordinal en ingls, "th", "nd" Nmero de das del mes dado, de "28"a "31" Segundos desde el valor de inicio epoch (01-01-1970) Da de la semana de "0" (domingo) a "6" (sbado) Ao con cuatro dgitos, "2004" Ao con dos dgitos, "04" Da del ao de "0" a "365" Diferencia horaria en segundos de "-43200" a "43200" Descripcin
142 Los caracteres distintos a los que aparecen en la tabla, que estn dentro de la cadena formato, se imprimirn tal cual aparecen. El formato "Z" siempre devuelve "0" en la funcin gmdate().
<?php echo "Hoy es ", date("D"), ", ", date("d"), " de ", date("F"), " de ", date("Y"), "<br>\n"; echo date("\Ho\y e\s D, d \de F \de Y"), "<br>\n"; echo date("\So\\n \l\a\ h:i:s a"), "<br>\n"; echo "La fecha dada ", date("U", 980936503), " fue ", date("D", 980936503), ", ", date("d", 980936503), " de ", date("F", 980936503), " de ", date("Y", 980936503), "<br>\n"; echo "Eran las ", date("h:i:s a", 980936503), "<br>\n"; ?>
Dado que todas las opciones de formato de la funcin date() estn pensadas para la lengua inglesa, construir una frase tan sencilla como: Hoy es Sat, 06 de March de 2004 se puede convertir en una ardua tarea, ya que las letras H, y y s tienen un significado especial. getdate ([timestamp]): Esta funcin devuelve un array asociativo que contiene informacin sobre la fecha y hora asociada a la marca de tiempo, timestamp, pasada como parmetro. En caso de no pasar ningn parmetro a la funcin, sta obtiene la marca de tiempo del instante en que se ejecuta.
143
Clave seconds minutes hours mday wday mon year yday weekday month Identifica los segundos Identifica los minutos Identifica las horas Identifica el da del mes
Descripcin
Identifica, en nmero, el da de la semana Identifica, en nmero, el mes Identifica, en nmero, el ao Identifica, en nmero, el da del ao Identifica, en texto, el da de la semana Identifica, en texto, el mes
<?php function listar($matriz, $titulo) { // Listar el contenido de un array echo "<TABLE BORDER=3 WIDTH=400>\n"; echo "<CAPTION ALIGN=TOP>$titulo</CAPTION>\n"; foreach($matriz as $clave => $valor) { echo "<TR>\n"; echo "<TD ALIGN=CENTER>$clave</TD>\n"; echo "<TD ALIGN=CENTER>$valor</TD>\n"; echo "</TR>\n"; } echo "</TABLE>\n"; } // Se obtiene la hora del sistema $hora = getdate(); listar($hora, "Informacin de la hora del sistema"); ?>
144
gettimeofday(): Esta funcin obtiene la hora actual en un array asociativo, cuya estructura contiene los siguientes campos: Campo sec usec minuteswest dsttime Descripcin Segundos Microsegndos Minutos al oeste del meridiano de Greenwitch Correccin horaria entre los horarios de verano e invierno
gmdate (format [,timestamp]): Esta funcin es muy parecida a la funcin date() anteriormente vista, con la diferencia que la hora devuelta por esta funcin tiene formato GMT (Greenwich Mean Time) A continuacin se muestra un ejemplo donde la hora de la Ciudad de Mxico tiene 6 horas de diferencia con el GMT.
echo "Hora de Mxico ", date("h:i:s a"), "<br>\n"; echo "Hora de Greenwich ", gmdate("h:i:s a"), "<br>\n";
y da como resultado: Hora de Mxico 05:05:30 pm Hora de Greenwich 11:05:30 pm gmmktime (hora, min, seg, mes, da, ao [,is_dst]) Es muy parecida a la funcin mktime(), a excepcin de que los parmetros que se pasan en la llamada a la funcin representan la fecha en formato GMT gmstrftime (format, timestamp): Da formato a una fecha/hora GMT segn las convenciones locales. Al igual que en las funciones anteriores, la fecha devuelta es la de GMT; por lo dems, es muy parecida a la funcin strftime(). microtime(void): Devuelve una cadena compuesta de dos elementos "msec sec", donde, sec, representa los segundo transcurridos desde la fecha inicial de referencia, es decir, el 1 de enero de 1970 a las 00:00:00, mientras que la primera parte, msec, representa los microsegundos restantes. Ambas porciones se devuelven en
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
145 unidades de segundo y esta funcin slo est disponible en los operativos que soporten la llamada al sistema gettimeofday(). mktime (hora, min, seg, mes, da, ao [,is_dst]): Esta funcin devuelve la marca de tiempo (el nmero de segundo transcurridos desde el 1 de enero de 1970 a las 00:00:00), correspondiente a la fecha y hora pasadas a la funcin como parmetros. Esta funcin es especialmente til para realizar clculos matemticos con las fechas o validaciones de ellas. Los parmetros se toman de izquierda a derecha deforma que, si alguno de ellos se omite, se sustituye por el valor de la fecha y hora actual correspondiente. Ninguno de los valores de da, mes y ao pueden tomar el valor 0. El parmetro is_dst se utiliza para indicar si se tiene en cuenta el horario de verano o no, 1 corresponde a horario de verano y 0 si no, por defecto tiene el valor de -1, que indica a PHP que decida cul es el valor correcto del parmetro. strftime(format, timestamp): Esta funcin nos permite dar un formato especfico de fecha y hora a la marca de tiempo que se le pasa como parmetro. En caso de no proporcionar este parmetro, se tomar por defecto la marca de tiempo correspondiente al instante en que se ejecuta la funcin. Los formatos posibles a tener en cuenta se especifican en la siguiente tabla: sistemas
146
Valores %a %A %b %B %c %d %H %I %j %m %M %p %s %w %W %x %X %y %Y %Z %%
Descripcin Nombre del da de la semana abreviado Nombre del da de la semana completo Nombre del mes abreviado Nombre del mes completo Representacin de fecha y hora preferidas en el idioma actual Da del mes en nmero (de 00 a 31) Hora como un nmero de 00 a 23 Hora como un nmero de 01 a 12 Da del ao como un nmero de 001 a 366 Mes como un nmero de 01 a 12 Minutos en nmero de 00 a 59 am o pm, segn la hora dada, o las cadenas correspondientes en el idioma actual Segundos en nmero de 00 a 59 Nmero de la semana en el ao, empezando con el primer domingo como el primer da de la primera semana Nmero de la semana en el ao, empezando con el primer lunes como el primer da de la primera semana Da de la semana en nmero (el domingo es el 0) Representacin preferida de la fecha sin la hora Representacin preferida de la hora sin la fecha Ao en nmero de 00 a 99 Ao en nmero de cuatro cifras Nombre o abreviatura de la zona horaria
A continuacin se muestra el mismo ejemplo anterior para que aparezcan los valores en castellano.
<?php setlocale(LC_ALL, "SP"); //Formateado para Windows echo "Hoy es ", strftime("%A"), ", ", strftime("%d"), " de ", strftime("%B"), " de ", strftime("%Y"), "<br>\n"; echo strftime("Hoy es %A, %d de %B de %Y"), "<br>\n"; echo strftime("Son las %I:%M:%S %a"), "<br>\n"; echo "La fecha dada fue ", strftime("%A", 980936503), " de ", strftime("%B", 980936503), " de ", strftime("%Y", 980936503), "<br>\n"; echo "Eran las ", strftime("%I:%M:%S", 980936503), "<br>\n"; ?>
147
Habrs observado en el ejemplo anterior el uso de la funcin setlocale(). sta no trabaja directamente con fechas, aunque s est relacionada con las funciones que las muestran. La llamada a setlocale() permite establecer el idioma en el que aparecern los valores de las fechas, los caracteres separadores decimales y en general toda aquella informacin que depende de la configuracin regional de la mquina desde la que se ejecuta el script. setlocal(Categora, Pas); Categora: LC_CTYPE para la conversin de cadenas a la configuracin regional. LC_NUMERIC para los separadores numricos. LC_TIME para aplicar formatos de fecha y hora con strftime(). LC_ALL aplica todas las anteriores. Pas Permite especificar el idioma con el que se mostrarn los valores devueltos por las funciones indicadas. Si no se configura ninguno, es decir, es la cadena vaca , se tomarn los valores de las variables de entorno. time(void): Devuelve la hora actual como nmero de segundos transcurridos desde las 00:00:00 del 1 de enero de 1970 GMT (Unix Epoch). strtotime(cad_fecha [,timestamp]): Esta funcin traduce una cadena que contiene un texto en ingles que hacer referencia a una fecha en su correspondiente marca de tiempo relativa a la marca de tiempo dada en el parmetro opcional timestamp, o bien, a ala marca de tiempo actual, si este parmetro no se proporciona en la llamada a la funcin.
148
4. MENSAJES HTTP.
4.1. EL PROTOCOLO HTTP.
Este es un sencillo protocolo cliente-servidor que articula los intercambios de informacin entre los clientes y los servidores web a travs de operaciones simples de tipo solicitud/respuesta. Bsicamente controla el modo en el que los clientes web solicitan recursos de los servidores web y el modo en que stos les envan dichos recursos de vuelta. Todos los recursos proporcionados por un servidor web (documentos HTML, grficos, videos, ficheros de sonido..) estn asociados a un URL(Localizador Uniforme de Recursos).
Respuesta
Componente Comando http Cabeceras de la peticin Lnea en Blanco (separador) Informacin Adicional Resultado de la Peticin Cabeceras de la Respuesta Lnea en Blanco (separador) Informacin Adicional
149 4.3.1. El elemento FORM Todos los controles presentes en el formulario, para que sean efectivos, deben aparecer incluidos dentro de un elemento form de HTML. La etiqueta FORM acta, por tanto, como contenedor de controles. Pero, adems, especifica entre otros: El programa que maneja los datos del formulario una vez haya sido completado y enviado (atributo action). El programa receptor debe ser capaz de interpretar las parejas nombre/valor para poder hacer uso de ellas. La forma en que se envan los datos del usuario al servidor (atributo method). El tipo MINE usado para enviar los datos del formulario (atributo enctype). El valor por defecto de este atributo es application/x-wwwfrom-urlencoded. Juegos de caracteres que acepta el servidor para poder manejar este formulario (atributo accept-charset). Los agentes de usuario pueden avisar al usuario del valor de este atributo y/o restringir al usuario esta posibilidad de, introducir caracteres no reconocidos.
Post: los datos del formulario se incluyen en el cuerpo del mensaje que se enva al agente procesador.
El conjunto de datos del formulario que se enva al agente servidor es una secuencia de parejas nombre_control/valor construida partir de los elementos del formulario. Cada uno de los controles tiene asociado un nombre que viene dado por su atributo name. De igual forma, cada control tiene tanto un valor inicial, como un valor actual, que ambas cadenas de caracteres. Formularios en PHP Cuando se enva un formulario para su procesamiento, se produce el emparejamiento de sus controles, a travs de sus respectivos nombres, con los valores actuales que tienen. Estas parejas variable-valor configuran el conjunto de datos del formulario que se envan al agente servidor. Como hemos visto, dependiendo del mtodo HTTP usado (get o post), una vez la informacin se enviara formando parte de la cadena de consultas (Query string) que configura la solicitud y, otras veces, formando parte del cuerpo del mensaje.
I.S.C. Alejandro Guzmn Zazueta a_zazuetag@hotmail.com
150
PHP, a travs de un conjunto de variables globales, es capaz de recuperar el conjunto de datos del formulario que han sido enviados desde el cliente (esto es, el navegador) para, despus, poder trabajar con ellos. Las tres variables principales para realizar esta operacin son:
Variable
_POST _GET _REQUEST
Contenido
Array que contiene las variables pasadas a travs del mtodo POST su uso es anlogo al array Array que contiene las variables pasadas a travs del mtodo GET su uso es anlogo al array Array que contiene las variables pasadas a travs de cualquier mecanismo de entrada
151
<td></td> </tr> <tr> <td height="13"></td> <td></td> <td></td> </tr> <tr> <td height="398"> </td> <td> </td> <td> </td> <td> </td> </tr> </table> <?php }else{ if(($_POST['user'] == 'David') && ($_POST['psw'] == 'olidav')){ echo "<center> Bienvenido $_POST[user] "; echo "<br><hr>"; foreach($_POST as $clave => $valor) echo "<i>$clave</I> = $valor <br>"; echo "</center>"; }else{ echo "<center><h1>Acceso denegado tu nombre o contrasea no se oncontro <br> en la base de datos<h1>"; echo "<pre><br><h2><a href='javascript:history.go(1)'>Volver<h2></a><pre>"; } } ?> </body> </html>
152
Significado
Indica el nombre que se le ha dado a la cookie. Indica el valor de la cookie, es decir, el contenido que tiene. Indica cual es el tiempo de validez de la cookie. Indica el rango de dominios en los cuales es valida la cookie. Contiene el directorio a partir del cual la cookie tiene validez. Indica que la cookie ser transmitida nicamente por un canal seguro SSL.
Es muy importante tener en cuenta que todo el mantenimiento de las cookies se realiza en la cabecera del mensaje HTTP y, por tanto, deben ser manejadas antes de que se envi cualquier otra informacin al navegador (la parte del cuerpo del mensaje HTTP); en caso contrario, obtendremos un error. Por otra parte, el valor de una cookie tiene preferencia sobre los valores pasados mediante un formulario, es decir, cuando un formulario y una cookie hacen uso de los mismos identificadores, los valores de las cookies sobrescribirn los valores de las entradas del formulario.
153
154
<?php if($accesos>1) echo "Has accedido a esta pgina <B>$accesos</B> veces"; else echo "Es la primera vez que accedes a esta pgina"; ?> <BR><BR><BR> <PRE><A HREF="cookies1.php">Actualizar</A> | HREF="cookies2.php">Eliminar</A></PRE> </CENTER> </BODY> </HTML>
<A
155
Esta funcin crea una nueva sesin y genera el identificador, o retoma la sesin en caso de que ya existiera, utilizando el identificador de sesin que se haba propagado haciendo uso de la URL o de cookies. Como hemos dicho anteriormente, en el instante en que se crea una sesion, se genera un identificador unico para ella. Haciendo uso de la funcion session_id( ), podemos recuperar o modificar dicho valor. Su sintaxis es la siguiente: String session_id ([string id]) Tambin es posible identificar a las sesiones asignndole un nombre especfico. Para ello, utilizaremos la funcin session_name( ) que tiene la siguiente sintaxis: String session_name([string nombre])
Session_destroy ( ): Elimina todos los datos asociados con la sesin actual, sin modificar las variables globales asociadas a la sesin ni la cookie se sesin. Session_unset ( ): Libera todos los recursos asociados a las variables de sesin actualmente registradas. Session_encode ( ): Codifica los datos de la sesin actual en una cadena. Session_encode (datos): Decodifica los datos de una sesin pasados como argumentos en una cadena, generando las variables guardadas en dicha sesin. Session_get_cookie_params ( ): Obtiene los parmetros de la cookie de sesin (duracin, camino, dominio y seguridad), en caso de que este haya sido el mtodo elegido para gestionar las sesiones.
156 Session__set_cookie_params (tiempo [, camino [, dominio [, seguridad] ] ] ): Nos permite cambiar los parmetros de la cookie de sesin actual. session_save_path ( [ string camino] ): Nos permite obtener o modificar la ruta donde se guardan los datos de la sesin actual.
157
//unset($_SESSION['contador']); ?> <HTML> <HEAD> <TITLE>Trabajando con Sesiones</TITLE> </HEAD> <BODY> <CENTER> <H2>Trabajando con Sesiones</H2><BR><BR> <P>Variable <B>'contador'</B> actualizada<BR> de la sesin <B><?php echo $_SESSION['contador'] . "," . $_SESSION['clave']; //echo session_id() ?></B><BR> con nombre <B><?php echo session_name() ?></B> <BR><BR><A HREF="sesiones1.php">volver</A></P> </CENTER> </BODY> </HTML>
158
En esta tendremos que seleccionar el controlador adecuado y dar clic en el botn finalizar. Una vez elegido el controlador nos presentar otra ventana como la siguiente:
159
En esta ventana proporcionaremos el nombre del origen de datos o DSN que va a ser el encargado de establecer la conexin. Posterior a esto presionaremos el botn Seleccionar en donde localizaremos el archivo de la base de datos y pulsaremos aceptar. Al hacer esto el origen creado aparecer en la lista de DSN de sistema. Concluido el proceso anterior, se puede decir que ya estamos listos para emplear la conexin a base de datos en PHP. Cabe mencionar que el nombre de la base de datos a emplear en los siguientes temas es Sistema.mdb, el DSN es SICE, nombre de usuario es sice y la contrasea sice. La base de datos tiene las siguientes tablas: Artculo con los campos, idArticulo, descripcin, existencia, mximo, mnimo, idtipoarticulo (como llave fornea de la tabla Tipoartculo); la tabla tipoarticulo con los campos, idtipoarticulo y tipo. Adems estableciendo una relacin de uno a muchos de la tabla de Tipoarticulo a la de Articulo.
160
161
2. Una vez generado el esquema se procede a modificar algunas de las propiedades del mismo, para hacer esto nos posicionaremos en la parte de cdigo donde localizaremos la siguiente lnea de cdigo:
En esta lnea se modificar la accin del formulario, en donde se escribir el nombre del archivo PHP con el cual se ligara. En este caso se indica que el nombre del archivo es insert.php.
3. Despus de haber hecho esto, se procede a crear el archivo PHP. Para crearlo hay que dirigirse al men Archivo-Nuevo-Pgina dinmica-Seleccionar PHP y presionar el botn crear. La estructura general que tiene el archivo .php es la siguiente: 9 9 9 9 Se establece la conexin con el gestor de base de datos. Se forma la instruccin SQL que ejecutar la insercin. Se manda ejecutar la instruccin SQL. Se cierra la conexin.
162
<?php $clave = $_POST['clave']; $desc = $_POST['desc']; $exi = $_POST['exi']; $max = $_POST['max']; $min = $_POST['min']; $tipo = $_POST['tipo']; // Establece la conexin con el origen de datos $conexion = odbc_connect ("SICE", "sice", "sice"); if (!$conexion) echo "No contesta el servidor."; if (empty($clave) && empty($desc) && empty($tipo)) echo "Falta informacin en las cajas de texto."; else { $insert = "Insert into Articulo (IdArticulo,Descripcion,Existencia,Maximo,Minimo,IdTipoArticulo) values($clave,'$desc',$exi,$max,$min,$tipo);"; $resul = odbc_do($conexion, $insert); if ($resul) echo "Producto insertado"; } odbc_close($conexion); ?>
4. Una vez hecho el archivo .php se procede a cargar los dos archivos al servidor y ejecutar el archivo .htm, para verificar si funciona correctamente la insercin de los datos. Para ejecutarlo necesitamos presionar la tecla F12. 5. Hay que mencionar que el proceso para realizar los update y delete son iguales, excepto por la instruccin SQL que se va a ejecutar en la funcin odbc_do.
163
Como se menciono anteriormente la obtencin de informacin genera una estructura de datos de acuerdo con la ejecucin de la consulta, para manejar esta estructura PHP cuenta con un conjunto de funciones para hacerlo las cuales se detallan a continuacin: 1. odbc_num_fields (cursor); esta funcin proporciona el nmero de campos de los que se compone la estructura de datos, y requiere del parmetro cursor siendo la variable que obtiene el resultado de la ejecucin de la consulta con la instruccin odbc_do. 2. odbc_result (cursor, numero_campo); proporciona el valor del campo, de acuerdo al registro que se este recorriendo. 3. odbc_fetch_row (cursor); permite conocer el tamao de la estructura obtenida por la consulta, adems en un proceso de iteracin determina si hay filas por recorrer devolviendo true en caso afirmativo o false en caso de no haberlas. 4. odbc_free_result (cursor); libera los recursos que genero la obtencin de informacin.
164 9 Se solicita la ejecucin de la instruccin SQL. 9 Se recibe un identificador del cursor donde estn contenidos los datos obtenidos a travs del gestor. 9 Se presenta la informacin obtenida. 9 Se liberan los recursos utilizados y se cierra la conexin. El cdigo del archivo consulta.php se presenta a continuacin:
<form name="form1" method="post" action=""> <table width="691" border="1"> <tr> <td width="35"><div align="center">Clave</div></td> <td width="213"><div align="center">Descripción</div></td> <td width="76"><div align="center">Existencia</div></td> <td width="69"><div align="center">Máximo</div></td> <td width="79"><div align="center">Mínimo</div></td> <td width="179"><div align="center">Tipo de artículo </div></td> </tr> <div align="center"> <?php $desc = $_POST['desc']; $tipo = $_POST['tipo']; // Se establece la conexin con el gestor de BD $conexion = odbc_connect ("SICE","sice","sice"); // Establece si la consulta se hace por medio de un dato o no if (empty($desc)) { $query = "Select IdArticulo,Descripcion,Existencia,Maximo,Minimo,Tipo "; $query .= "from Articulo A inner join TipoArticulo B on (A.IdTipoArticulo=B.IdTipoArticulo) "; $query .= "where B.IdTipoArticulo= $tipo "; $resultado = odbc_do ($conexion, $query); $ncampos = odbc_num_fields ($resultado); $nfilas = 0;//odbc_num_rows ($resultado); // Se recorre el cursor while (odbc_fetch_row ($resultado)) { $nfilas ++; echo "<TR>"; for ($i=1; $i <= $ncampos; $i ++) { echo "<td align='center'>"; if (odbc_result($resultado, $i)) echo odbc_result($resultado, $i); echo "</td>"; } // Llave del for echo "</td>"; echo "\n"; }// Llave del if } else { $query = "Select IdArticulo,Descripcion,Existencia,Maximo,Minimo,Tipo "; $query .= "from Articulo A inner join TipoArticulo B on (A.IdTipoArticulo=B.IdTipoArticulo) "; $query .= "where Descripcion= '$desc'"; $resultado = odbc_do ($conexion, $query); $ncampos = odbc_num_fields ($resultado); $nfilas = odbc_num_rows ($resultado); echo "<TR>"; for ($i=1; $i <= $ncampos; $i++) { echo "<td align='center'>"; if (odbc_result ($resultado, $i)) echo odbc_result ($resultado, $i); echo "</td>"; }// Llave del for
165
echo "</tr>"; echo "\n"; }// Llave del else // Si no hay datos se indica if ($nfilas == 0) { echo "<tr><td colspan=9><center>"; echo "No hay articulos de acuerdo a los parmetros especficados."; echo "</center></td></tr>\n"; } echo "</table>\n"; //echo "<br><hr><br>\n"; // Se liberan los recursos utilizados por la consulta odbc_free_result ($resultado); // Se cierra la conexin odbc_close ($conexion); ?> </form>
3. Una vez hecho el archivo .php se procede a cargar los dos archivos al servidor y ejecutar el archivo .htm. Para verificar si funciona correctamente la consulta se puede introducir un nombre de artculo o simplemente presionar el botn enviar y as ejecutar la consulta de acuerdo al tipo que este seleccionado el el men. Para ejecutarlo necesitamos presionar la tecla F12.
166
Ttulo 1
Ttulo 2
Ttulo 3
Ttulo 4
Ttulo 5
Ttulo 6
Ejemplo en negrita
<br/>
Horizontal rule lnea Introduce una lnea horizontal, no necesita ____________________ horizontal una etiqueta final Prrafo con caracteres en blanco protegidos List entrada de lista Ordered list lista numerada Crea un prrafo en blanco, un espacio vaco Puntos de enumeracin; el smbolo utilizado para la enumeracin depende de la definicin (consulte celdas inferiores) Define el principio y el final de una lista numerada; introducen una sangra
167
168
Fuente courier Teletype, teletipo La negrita tambin es muy til Bold, negrita Fuente grande, por ejemplo, Haba una vez para destacar las letras iniciales Small is beautiful. Para Fuentes pequeas H2O Subscript, subndice 2 10 Superscript, superndice Puede confundirse con los Subrayado, ya no se utiliza enlaces. ste texto est tachado. Tachado, no debe utilizarse