Você está na página 1de 165

Programacin en PHP y Bases de datos

Pgina 1 de 1

Mdulo 1

Programacin en PHP y Bases de datos

Mdulo 1: Introduccin a los lenguajes web.


Instalacin de un servidor web Objetivos
En este primer apartado, vamos a examinar una serie de aspectos relacionados de manera general con el mundo de la programacin web (servidores, lenguajes, ...), para acabar centrndonos en el lenguaje PHP Nuestros objetivos :

Reconocer los diferentes lenguajes existentes para programacin web. Comprender la funcionamiento general del protocolo HTTP de acuerdo al modelo cliente/servidor, ejemplificado en el caso de PHP. Instalar y configurar el software necesario tanto en Windows como en Linux para el desarrollo de aplicaciones PHP. Conocer herramientas de desarrollo.

Contenidos

Introduccin a los lenguajes web. Servidores web: Instalacin y configuracin de Apache y PHP. Paquetes integrados de desarrollo: EasyPHP (Windows) y XAMPP (Windows/Linux) Instalacin y configuracin IDE para PHP: Maguma (Windows). Instalacin y configuracin IDE para PHP: Bluefish y Nvu (linux).

ndice de apartados

Introduccin a los lenguajes web Lenguajes del lado del servidor: PHP Instalacin de componentes en WindowsXP Instalacin de componentes en Linux Entornos de edicin Windows Entornos de edicin Linux

Introduccin a los lenguajes web

Pgina 1 de 3

Mdulo 1

Programacin en PHP y Bases de datos

Mdulo 1: Introduccin a los lenguajes web.


Instalacin de un servidor web

Introduccin a los lenguajes web

Uno de los conceptos centrales en Internet es el de pgina web. Las pginas web, en tanto que documento hipermedia, se han revelado con el paso de los aos como un medio de comunicacin muy potente, de cuya evolucin da cuenta tanto su aceptacin popular en su aplicacin a multitud de actividades de la vida cotidiana como, ya en lo estrictamente tcnico, la variedad actual de lenguajes y tecnologas de diseo web de que disponemos. En la actualidad nos encontramos, pues, con un gran abanico de herramientas que, ms all de dotar a las pginas web de una apariencia atractiva, son capaces de introducir un componente dinmico e interactivo que aumenta su versatilidad a la hora de atender a requerimientos ms exigentes. sta ltima caracterstica se consigue por medio de scripts programables segn algn lenguaje orientado a la programacin web. Hoy son nombres ms que populares el Javascript / VisualScript, los CGI en Perl o C, Java, VisualNet, ASP y PHP, entre otros. Pero existen diferencias entre estas tecnologas o lenguajes mencionados. Sin perder la idea de pgina web, podemos decir que en Internet podemos encontrar, de manera general, dos tipos de pginas:

las que se presentan sin contenidos "amoldables" a diferentes necesidades y sin funcionalidades ms all del hipermedia (que llamaremos estticas). las pginas que tienen capacidades especiales y ofrecen un margen de interactividad mayor (que llamaremos dinmicas).

Pginas estticas
Las primeras pginas son las que denominamos pginas estticas, construidas a partir del lenguaje HTML. Para ser precisos, el HTML no es lenguaje de programacin, sino ms bien, se trata de un lenguaje descriptivo que tiene como objeto dar formato al texto, imgenes u otro objeto que pretendamos visualizar en el navegador (incluso, en este sentido, se hace necesaria la aportacin de algn lenguaje adicional como CSS para la mejora de sus prestaciones). Estas pginas son muy sencillas de crear, aunque ofrecen pocas ventajas tanto a los desarrolladores como a los visitantes, ya que, como hemos dicho, slo se pueden presentar textos planos acompaados de imgenes y a lo sumo contenidos multimedia como pueden ser videos o sonidos. En efecto, el lenguaje HTML no permite realizar un simple clculo matemtico o crear una pgina de la nada a partir de una base de datos.

Pginas dinmicas
Es esta deficiencia del lenguaje HTML la que ha hecho necesaria la introduccin de otros lenguajes complementarios mucho ms verstiles y de una dificultad mayor, susceptibles de dar respuesta de manera inteligente a las demandas del navegador y a la automatizacin de determinadas tareas tediosas e irremediables como pueden ser las actualizaciones, el tratamiento de pedidos de una tienda virtual... Estos lenguajes, capaces de recrear a partir de la implementacin de ciertos "scripts", pginas automatizadas, concretan la idea de pgina dinmica.

Introduccin a los lenguajes web

Pgina 2 de 3

Lenguajes de lado del servidor o del cliente


Ya en el contexto del diseo de pginas dinmicas, hemos de hacer una distincin importante: debemos distinguir entre aquellas cuyo cdigo es interpretado en su totalidad por el cliente (es decir, el navegador) y aquellas otras en las que parte del cdigo es preinterpretado por un servidor. Abundemos algo ms en esta idea. El navegador es una especie de aplicacin capaz de interpretar el cdigo HTML (principalmente) incluido en una pgina web y presentar como resultado el documento que acabamos viendo por pantalla. Cuando, por ejemplo, nosotros pinchamos sobre un enlace hipertexto, estamos realizando una peticin de un fichero HTML residente en el servidor, el cual es enviado e interpretado por nuestro navegador (el cliente) a travs de una comunicacin mediatizada por el protocolo HTTP. Sin embargo, si la pgina que pedimos est hecha con algn lenguaje de programacin para generar contenidos dinmicos (no es, por tanto, nicamente un archivo HTML), el navegador ser incapaz de interpretarla. En este caso, ser de todo punto necesario que sea el propio servidor quien ejecute e interprete el cdigo adicional no HTML, para luego enviarlos al cliente (navegador) en forma de un archivo HTML totalmente legible por l (en la pgina siguiente, volveremos sobre esta idea). A continuacin, citamos algunas de las consecuencias ms significativas que obtendramos a resultas de esta distincin:

un lenguaje de lado del cliente es totalmente independiente del servidor, lo cual permite que la pgina pueda ser albergada en cualquier sitio, ya que nicamente depende del navegador. un lenguaje del lado del servidor es independiente del cliente por lo que es mucho menos rgido respecto al cambio de un navegador a otro o respecto a las versiones del mismo. los scripts en lenguaje del lado del servidor son almacenados, obviamente, en ste, que es quien los ejecuta y traduce a HTML, por lo que su cdigo queda inaccesible para el usuario, que solo recibe cdigo HTML. Sin embargo, el cdigo de los scripts en lenguajes de lado del cliente, s que suele ser visualizable desde el navegador (por ejemplo, como ocurre en el caso de Javascript). aspectos como el acceso a Base de Datos o almacenamiento externo de informacin estn reservados mayormente a lenguajes de lado del servidor.

Lenguajes de lado del cliente

Un ejemplo de lenguaje de script del lado del cliente que permite generar contenidos dinmicos sera Javascript ( o bien, su versin Microsoft, VBScript). Este lenguaje se utiliza tanto del lado del cliente -como soporte a la interaccin del usuariocomo en pginas de Internet interactivas (DHTML), como del lado del servidor, dentro de las tecnologas de pginas dinmicas. Su cdigo se inserta dentro del cdigo HTML de las pginas web a fin de aportar algn tipo de interactividad como pueder ser el movimiento de imgenes por la pantalla, la exposicin de mens de navegacin interactivos, el control del las propiedades de visulaizacin de objetos en el navegador, etc.; no hay casi ninguna pgina web que no incorpore alguna rutina en lenguaje (java)script. En suma, los scripts en este lenguaje no generan ningn tipo de cdigo compilado, simplemente el navegador se encarga de interpretarlo una vez se ha descargado la pgina HTML en el que su cdigo es embebido en el ordenador del cliente.

Introduccin a los lenguajes web

Pgina 3 de 3

En la siguente pgina estudiaremos con algo ms de detenimiento los lenguajes del lado del servidor (como es el caso de PHP), en relacin a la dinmica de funcionamiento del servidor que les da soporte.

Lenguajes del lado del servidor:PHP

Pgina 1 de 4

Mdulo 1

Programacin en PHP y Bases de datos

Mdulo 1: Introduccin a los lenguajes web.


Instalacin de un servidor web

Lenguajes del lado del servidor: PHP

En la pgina anterior acabamos hablando de lenguajes cuyo cdigo se interpreta en el cliente. Ahora lo haremos de aquellos en los que la interpretacin se hace en el servidor, previo envo de la pgina al cliente. Para escribir pginas dinmicas de servidor existen varios lenguajes. Podemos citar algunos que cuentan con mayor aceptacin:

Practical Extraction and Report Language ( PERL): es un lenguaje de programacin desarrollado por Larry Wall (lwall at netlabs.com) inspirado en otras herramientas de UNIX. PERL es el lenguaje ms utilizado para la creacin de programas CGI en los servidores web. Es ms rpido que los programas shell script de UNIX, puede leer y escribir ficheros binarios, y puede procesar ficheros grandes. La ventaja ms importante de PERL sobre C es que PERL no necesita ser recompilado, es un lenguaje interpretado. Active Server Pages (ASP): es una tecnologa del lado servidor de Microsoft para pginas web generadas dinmicamente, que ha sido comercializada como un anexo a Internet Information Server (IIS). EL estndard ASP permite poder utilitzar cualquier lenguaje para la programacin, si bin Microsoft favorece que se utilice el VBScript, y en segundo trmino el JScript (versin del estndard Javascript hecha por Microsoft). En teora, y mediante la programacin, es posible adaptar versiones de lenguajes como Pascal, C y otros, para utilizarlos dentro de pginas ASP. Java Server Pages (JSP): es la tecnologa para generar pginas web de forma dinmica en el servidor, desarrollado por Sun Microsystems, basado en scripts que utilizan una variante del lenguaje Java. La tecnologa JSP, o de JavaServer Pages, es una tecnologa Java que permite a los programadores generar dinmicamente HTML, XML o algn otro tipo de pgina web. Esta tecnologa permite al cdigo Java y a algunas acciones predefinidas ser embebidas en el contenido esttico. La principal ventaja de JSP frente a otros lenguajes es que permite integrarse con clases Java (.class) lo que permite separar en niveles las aplicaciones web, almacenando en clases java las partes que consumen ms recursos as como las que requieren ms seguridad, y dejando la parte encargada de formatear el documento 'html ' en el archivo jsp. Adems Java se caracteriza por ser un lenguaje que puede ejecutarse en cualquier sistema, lo que sumado a jsp le da mucha versatilidad.

Lenguajes del lado del servidor:PHP

Pgina 2 de 4

Hipertext Preprocesor (PHP)

PHP (acrnimo recursivo de "PHP: Hypertext Preprocessor", originado inicialmente del nombre PHP Tools, o Personal Home Page Tools) es un lenguaje de programacin interpretado. Aunque fue concebido en el tercer trimestre de 1994 por Rasmus Lerdorf no fue hasta el da 8 de Junio de 1995 que fue lanzada la versin 1.0. Se utiliza entre otras cosas para la programacin de pginas web activas, y se destaca por su capacidad de mezclarse con el cdigo HTML. Aunque su creacin y desarrollo se da en el mbito de los sistemas libres, bajo la licencia GNU, existe adems un compilador comercial denominado (Zend Optimizer). El desarrollo del cdigo abierto por un lado y el firme respaldo comercial por el otro, han llevado a PHP a alcanzar una popularidad ms que notable. El nuevo soporte JAVA y DCOM, las avanzadas caractersticas de XML y las mejoras de la programacin orientada a objetos (POO) que incorpora su ltima versin PHP5, han incrementado la aceptacin de PHP en entornos comerciales, y lo han convertido en una herramienta viable para la programacin en entornos empresariales. Caractersticas

Posee una sintaxis semejenate de la de C. Dispone de una alta conectividad con la mayora de Sistemas de Gestin de Bases de Datos. Es Open-Source y de obtencin gratuita. Portable y multiplataforma (W95, 98, 2000, XP, NT, Unix, Linux...); lo cual permite su desarrollo desde S.O de base heterogneos. Proporciona soporte para la mayora de protocolos de comunicacin de Internet (HTTP, IMAP, FTP, LDAP, INMP...). Desde su versin 4, incorpora la posibilidad de desarrollar segn la metodologa de orientacin a objetos, si bien es desde la versin 5 cuando todos los conceptos de este paradigma estn disponibles .

Funcionamiento cliente/servidor en PHP


En este punto queremos reincidir en algo ya comentado en la pgina anterior. Nos referimos al funcionamiento del servidor y su interpretacin del cdigo PHP, a cada solicitud de un cliente. La siguiente figura ilustra el proceso de comunicacin peticin/respuesta de una pgina PHP por parte de un cliente a un servidor de HTTP como Apache.

Lenguajes del lado del servidor:PHP

Pgina 3 de 4

Figura 1. Esquema de comunicacin cliente/servidor

El proceso, por tanto, seguira los siguientes pasos:

El cliente (navegador) enva una solicitud a travs de HTTP (por ejemplo, una pgina "ejemplo.php") al servidor web.

Figura 2. Solicitud de pgina por parte del cliente

El servidor web reacciona, lee el cdigo del script pone en funcionamiento el intrprete de PHP para que convierta en HTML el cdigo PHP existente (como el servidor es el nico que ejecuta el cdigo, el cliente nunca podr verlo, a lo sumo puede observar el resultado en HTML). Un cdigo PHP (en negrita) de una pgina, embebido en HTML, podra ser ste ...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Ejemplo funcionamiento cliente/servidor_PHP</title> </head> <body> <h2> Ejemplo de funcionamiento cliente/servidor en PHP</h2> <?php

Lenguajes del lado del servidor:PHP

Pgina 4 de 4

$dia_num = date('d'); $dia_nom = date('l'); $mes = date('F'); $anyo = date('Y'); echo "<br> Today is <b>$dia_num $dia_nom, $mes of $anyo </b>"; ?> </body> </html>

... del cual, una vez interpretado por el servidor, obtendramos finalmente una pgina de cdigo HTML ... <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Ejemplo funcionamiento cliente/servidor_PHP</title> </head> <body> <h2> Ejemplo de funcionamiento cliente/servidor en PHP</h2> <br> Today is <b>09 Tuesday, August of 2005 </b> </body> </html> ... que sera enviada por ste como respuesta al cliente y visualizada en su navegador.

Figura 3. Respuesta por parte del servidor y su resultado en el cliente.

Instalacin de componentes en WIN XP

Pgina 1 de 11

Mdulo 1

Programacin en PHP y Bases de datos

Mdulo 1: Introduccin a los lenguajes web.


Instalacin de un servidor web

Instalacin de componentes en Windows XP


En esta pgina y siguientes vamos a exponer el procedimiento de instalacin y configuracin del software necesario para el desarrollo de pginas web en Windows y en Linux (ya que presentan, como puede imaginarse, dinmicas de funcionamiento diferentes). Ms en concreto, instalaremos:

Un servidor web (Apache) El intrprete PHP (lenguaje de programacin) El MySQL (Servidor de Bases de Datos)

Instalacin en Windows XP
El proceso de instalacin en Windows puede acometerse de 2 maneras (tambin, cabe decir, en Linux):

una rpida y sencilla: supone instalar alguno de los paquetes integrados de aplicaciones que automatizan y ajustan todas las herramientas necesarias para ponerse a trabajar. otra manual y ms laboriosa: supone la instalacin y configuracin separada de cada componente, que en el caso de Windows no abordaremos, pero s en el de Linux.

Instalacin rpida
Dentro de la enorme variedad de paquetes existentes (Foxserv, Nusphere, Appserv), aconsejaremos la instalacin de uno de estos dos:

EasyPHP XAMPP

Tras un simple proceso de instalacin, en el que en este caso no nos vamos a detener, XAMPP ofrece un entorno mnimo mediante el cual podemos controlar cada uno de los servicios que son instalados:

Instalacin de componentes en WIN XP

Pgina 2 de 11

Figura 1. XAMPP en Windows

Como se puede apreciar a partir de la imagen, podemos controlador la actividad tanto del servidor Apache, como del de MySQL, como tambin el del FTP (FileZillaFTP) y de correo (Mercury). Pulsando en el botn "Explore", accederemos a la carpeta (htdocs) donde se alojan todos los scripts que creemos. Pero vamos a detenernos a explicar pormenorizadamente la instalacin de EasyPHP.v.1.8 . Este paquete instala los siguientes componentes:
z z z z

servidor Apache 1.3.27 PHP 4.3.3 MySQL 4.0.15 phpMyAdmin 2.5.3

Instalacin de EasyPHP.v.1.7 Una vez hayamos descargado el paquete desde la web de EasyPHP, lanzamos el fichero de instalacin y se nos mostrar la pantalla de seleccin de idioma durante la instalacin.

Instalacin de componentes en WIN XP

Pgina 3 de 11

Figura 2. Pantalla 1 de instalacin de EasyPHP

En la siguiente pantalla, aparece el mensaje de bienvenida. Pulsamos en "Segent".

Figura 3. Instalacin de EasyPHP

A continuacin, se nos muestran las pantallas de aceptacin de la licencia. La aceptamos y seguimos con la pulsacin en "Segent".

Instalacin de componentes en WIN XP

Pgina 4 de 11

Figura 4. Instalacin de EasyPHP

Figura 5. Instalacin de EasyPHP

En las siguientes pantallas, elegimos el punto de instalacin del software en nuestro sistema y el nombre que daremos al acceso directo:

Figura 6. Instalacin de EasyPHP

Instalacin de componentes en WIN XP

Pgina 5 de 11

Figura 7. Instalacin de EasyPHP

Una vez introducidos estos datos, continuaremos con la instalacin:

Figura 8. Instalacin de EasyPHP

Instalacin de componentes en WIN XP

Pgina 6 de 11

La siguiente pantalla nos avisar de la correcta finalizacin del proceso de instalacin:

Figura 9. Instalacin de EasyPHP

A continuacin, se lanzar un pequea aplicacin residente, desde la cual podemos controlar los servicios instalados y otras opciones que ofrece este paquete. Al igual que en XAMPP, podemos lanzar o parar los servidores de Apache y MySQL.

Figura 10. Instalacin de EasyPHP

El botn con una especie de gran "e" a la parte izquierda, nos da acceso mediante un men a un conjunto de opciones a travs de las cuales podemos visualizar los "logs" - ficheros de configuracin, extensiones instaladas en PHP, etc... (ver ms abajo)

Instalacin de componentes en WIN XP

Pgina 7 de 11

Figura 11. Instalacin de EasyPHP

En concreto, la opcin de "Administracin" abre en el navegador una pgina incluida en el paquete que nos permite acceder a cierta informacin sobre el software instalado. Veamos ahora las opciones disponibles con ms detalle.

Figura 12. Instalacin de EasyPHP

Opciones del men EasyPHP.

Instalacin de componentes en WIN XP

Pgina 8 de 11

Una vez comprobemos que los servidores estn en funcionamiento (los iconos con los semforos aparecern en verde), pasamos a examinar las opciones disponibles:

Ayuda : lleva a algunos enlaces con ayuda sobre como opera 'EasyPHP', como comenzar con PHP o bien como llegar a las FAQ de EasyPHP.

Figura 13. submen de "Ayuda"

Ficheros 'log' : nos permite ver el contenido de los ficheros ".log" del Apache y del MySQL; estos recogen las incidencias que se producen en el funcionamento y son, por tanto, muy tiles a la hora de buscar los posibles problemas de funcionamento que puedan surgir. Configuracin : da acceso a un submen desde el cual podemos acceder a los ficheros de configuracin o bien a las bases de datos (ver figura 2).

Subopciones: Apache: accedemos, con el "Bloc de Notas" del Windows, al fichero 'httpd.conf ', que contiene todas las directivas de configuracin del servidor web Apache. Extensiones PHP: con esta opcin se abre un cuadro donde se listan las extensiones (bibliotecas) disponibles de PHP y su estado, esto es, si estn instalados o no. Con vista a las prcticas posteriores, podemos activar ya la opcin correspondiente a la biblioteca grfica GD (php_gd2).

Figura 14. submen de "Configuracin"

PHP : esta opcin solo est disponible con los servidores parados. Abre, con el

Instalacin de componentes en WIN XP

Pgina 9 de 11

"Bloc de Notas ", el fichero de configuracin del PHP (php.ini).

MySql: abre el fichero de configuracin del servidor de base de datos. Este fichero se llama "my.ini" y se encuentra en la carpeta c:\windows. PhpMyAdmin: abre el navegador con la aplicacin de gestin de las bases de datos PHPMyAdmin (y no el fichero "config.inc.php" , que es el que contiene su configuracin). EasyPHP: da acceso al cuadro de configuracin de 'EasyPHP' que hemos visto antes con informacin del estado de funcionamento y control de 'EasyPHP'.

"Iniciar EasyPHP al iniciar el Windows (solo administradores)" . Har que automticamente se ejecute 'EasyPHP' al iniciarse el Windows. "Iniciar servidores cuando esta aplicacin se haya iniciado" . Inicia los servidores al mismo tiempo que 'EasyPHP' se ejecuta. "Comprobar nuevas versiones al inicio del sistema". Comprobacin de la existencia de nuevas versiones de 'EasyPHP' cada vez que se inicia. "Uso automtica de las modificaciones al configurar el servidor". En el caso de modificar los ficheros de configuracin 'httpd.conf o my.ini', el sistema reinicia los servidores, para cargar los nuevos valores configurados.

Explorar: permite ver el contenido del directorio raz de nuestro servidor (www). Administracin: esta opcin nos redirecciona a la pgina de administracin de EasyPHP, http://localhost/home/. Web local: pinchando sobre esta opcin se abrir el navegador con la pgina inicial, por defecto, de nuestro servidor web. Ms abajo haremos un comentario. Si el servidor est parado, esta opcin no se puede seleccionar. Reiniciar: permite parar y volver a lanzar el servidor. Recordemos que si hacemos cambios en la configuracin del servidor hay que volver a ponerlo en marcha. Si el servidor esta parado, esta opcin no est, obviamente, disponible. Iniciar/Parar: esta opcin no necesita comentario.

Poniendo a prueba a EasyPHP

El servidor Apache est accesible localmente por medio de las direcciones http://localhost/ o http://127.0.0.1/. Si el ordenador en el cual se ha efectuado la instalacin forma parte de una red, se puede acceder a la pgina inicial de vuestro servidor desde otra mquina, que actuar como cliente. Habra que introducir desde el ordenador cliente cualquiera de esta dos direcciones:

http://nombre_del_servidor/ (nombre de red del servidor) http://direccin_ip_servidor/ (direccin IP del servidor)

Comprobemos ahora el correcto funcionamiento PHP. Para ello, podemos acceder a la opcin "Administracin" de "EasyPHP", que nos llevar a la direccin http://localhost/home/ y (o bin http://127.0.0.1/home/) accederemos a la pgina de administracin de EasyPHP. Una vez all, en el apartado de "PHP 4.3.10" y uno de sus enlaces con el nombre "PHPINFO". Esta enlace ejecuta un script que contiene una llamada a la funcin de PHP llamada phpinfo () , la cual devuelve informacin sobre la configuracin, versin del PHP instalado, sistema

Instalacin de componentes en WIN XP

Pgina 10 de 11

operativo, servidor sobre el cual corre, extensiones instaladas, variables del servidor, etc... Si esta pantalla se carga sin problemas, sabremos que el Apache ha interpretado correctamente su cdigo PHP.

Figura 15. "phpinfo" en ejecucin

Si surgen problemas con el EasyPHP Si, una vez hecha la instalacin, el EasyPHP no acaba de funcionar bien, podra suceder alguna de estas cosas: > Instalaciones previas.

Comprueba que no existen versiones anteriores instaladas de 'EasyPHP' o de algn otro paquete (AppServ, FoxServ, etc.) o de alguno de sus componentes (Apache, Mysql). Por ejemplo, el puerto que utiliza el servidor Apache es el 80, si ste ya est siendo utilizado habra que escoger otro. Con la aplicacin tcpview se pueden consultar cules son los puertos utilizados en un momento dado.

> Cortafuegos o firewalls. Si existe un cortafuegos en el sistema (muy probable en el caso de tener como S.O un Windows XP) conviene asegurarse que ste no tiene los puertos que necesitamos para nuestros servicios cerrados.

Instalacin de componentes en WIN XP

Pgina 11 de 11

> Apache y MySQL como servicio.

Puede darse el caso que Apache no arranque y no se est produciendo ninguna de las causas anteriores. Una posible solucin al problema consiste en seleccionar la opcin "Iniciar los servidores como un servicio (solo administradores)" en el cuadro de configuracin de EasyPHP que hemos comentado anteriormente. De esta manera tanto Apache como MySql operarn como a un servicio de Windows ms.

> FAQ de EasyPHP

Por ltimo, aadir que puede encontrarse ms informacin de ayuda en el FAQ de EasyPHP.

Instalacin de componentes en Linux

Pgina 1 de 15

Mdulo 1

Programacin en PHP y Bases de datos

Mdulo 1: Introduccin a los lenguajes web.


Instalacin de un servidor web

Instalacin de componentes en Linux (Lliurex)


Al igual que en Windows necesitaremos instalar los tres servicios que en el punto anterior se detallaron: el servidor web (Apache), el intrprete de PHP, y el servidor de bases de datos (MySQL).

Instalacin en Linux (Lliurex)


El proceso de instalacin en linux puede acometerse de 2 maneras:

Paquete integrado: supone instalar alguno de los paquetes integrados de aplicaciones que automatizan y ajustan todas las herramientas necesarias para ponerse a trabajar. Instalacin de paquetes: supone la instalacin y configuracin separada de cada componente, pero es la forma ms eficiente y adecada de hacerlo en linux.

Instalacin del paquete integrado Hemos seleccionado XAMPP como paquete integrado. Instalaremos en Lliurex este paquete y veremos como comprobar que todo esta listo para empezar a trabajar. Solo necesitamos 4 pasos para realizar la instalacin del paquete integrado: Paso 1: Descargar el paquete de la siguiente pgina: http://www.apachefriends.org Seleccionaremos el sistema operativo y la versin a descargar, el fichero a descargar se llama xampp-lijnux-1.4.15.tar.gz y ocupa 39 MB. Este paquete instalar los siguientes componentes (entre muchos otros):

Apache 2.0.54 PHP 5.0.4 MySQL 4.1.13 phpMyAdmin 2.6.3-PL1

Paso 2: Descomprimir el archivo.


Abrir un terminar de linux como administrador root: su. Extraer el archivo al directorio /opt: tar xvfz xampp-linux-1.4.15.tar.gz -C /opt

Ahora XAMPP ya est instalado en el directorio /opt/lampp.

Instalacin de componentes en Linux

Pgina 2 de 15

Paso 3: Poner en marcha. Para ello solo hay que ejecutar la siguiente sentencia: /opt/lampp/lampp start Si todo ha funcionado correctamente veremos la siguiente pantalla:

Figura 1. Start de XAMPP.

Apache, el interprete de PHP y MySQL estan en marcha. Paso 4: Comprobacin. Todo ha sido bastante sencillo, pero debemos comprobar que realmente todo funciona. Para ello, en nuestro navegador teclear la siguiente direccin: http://localhost Ahora debemos ver la pgina principal de XAMPP que contiene algnunos enlaces para comprobar el software instalado y algunos pequeos programa de ejemplo.

Instalacin de componentes en Linux

Pgina 3 de 15

Figura 2. Pgina de Bienvenida de XAMPP.

Una vez comprobado que Apache sirve la pgina principal de XAMPP podemos ver que software ha instalado y si lo ha instalado correctamente, pulsamos sobre la opcin status y veremos la siguiente pantalla:

Instalacin de componentes en Linux

Pgina 4 de 15

Figura 3. Status de XAMPP.

Se puede comprobar que MySQL y PHP estan activados. Y podemos llamar a otra herramienta, muy til, que veremos ms adelante como es phpMyAdmin.

Instalacin de componentes en Linux

Pgina 5 de 15

Figura 4. Herramientas de XAMPP.

En el apartado de "Demos" podemos ejecutar un pequeo programa phpinfo() que nos muestra informacin sobre la configuracin, versin del PHP instalado, sistema operativo, servidor sobre el cual corre, extensiones instaladas, variables del servidor, etc ... Si esta pantalla se carga sin problemas, sabremos que el Apache ha interpretado correctamente su cdigo PHP.

Instalacin de componentes en Linux (Lliurex)

Algunos de los parmetros para poner en marcha XAMPP son los siguientes:

Parmetros start

Descripcin Comienza XAMPP.

Instalacin de componentes en Linux

Pgina 6 de 15

stop restart startapache startmysql stopapache stopmysql

Para XAMPP. Para y comienza XAMPP. Comienza solo Apache. Comienza solo MySQL. Para Apache. Para MySQL.

Configuracin: para poder cambiar la configuracin de cada uno de los servicios instalado es necesario conocer, donde estn sus ficheros de configuracin, en la tabla siguiente se muestra esta informacin: Fichero Directorio /opt/lampp/bin/ /opt/lampp/htdocs/ /opt/lampp/etc/httpd.conf /opt/lampp/etc/my.cnf /opt/lampp/etc/php.ini

contenido Comandos de XAMPP, por ejemplo el monitor de MySQL. Documentacin de Apache. Configuracin de Apache. Configuracin de MySQL. Configuracin de PHP.

/opt/lampp/phpmyadmin/config.inc.php Configuracin de phpmyadmin.

Para parar XAMPP simplemente debemos escribir el siguiente comando: /opt/lampp/lampp stop Y podremos ver: Stopping LAMPP 1.4.15... LAMPP: Stopping Apache... LAMPP: Stopping MySQL... LAMPP stopped. Para desinstalar el paquete debemos escribir: rm -rf /opt/lampp

Instalacin de paquetes. Para explicar el procedimiento de instalacin de paquetes, partiremos de una instalacin reciente de "Lliurex" en disco duro y utilizaremos Synaptic para seleccionar e instalar los paquetes instalados. Necesitaremos tener una conexin a internet configurada y funcionando. Podemos encontrar el gestor de paquetes sysnaptic, en las herramientas del sistema del men "Aplicaciones". Lo primero que haremos es comprobar que repositorios tenemos por defecto. En el men superior, opcin de "configuracin", aparece un submen con el nombre repositorios, si

Instalacin de componentes en Linux

Pgina 7 de 15

pulsamos obtendremos la siguiente pantalla:

Figura 5. Repositorio Lliurex.

Pulsaremos sobre el botn Nuevo y daremos de alta un nuevo repositorio, estos son los datos del nuevo repositorio.

Figura 6. Nuevo repositorio Debian.

Despus de pulsar el botn de aceptar, pediremos al gestor que recarge la lista de paquetes conocidos, botn recargar, esta funcin tardar ms o menos tiempo dependiendo de la

Instalacin de componentes en Linux

Pgina 8 de 15

conexin a internet que tengamos. Si realizamos una bsqueda, botn buscar, de paquetes que contengan la palabra "Apache2", podremos seleccionar los paquetes para instalar. Para seleccionar un paquete, situarse encima de l, pulsar el botn derecho del ratn y seleccionar marcar para instalacin. La mayora de la veces la seleccin de un paquete conlleva la seleccin de otros. Estos son los paquetes que debn quedar selecionados:

Figura 7. Paquetes seleccionados para el servidor Apache2.

Despus de pulsar el botn Aplicar el gestor de paquetes se conectar con el repositorio e instalar los paquetes seleccionados:

Instalacin de componentes en Linux

Pgina 9 de 15

Figura 8. Descarga e instalacin de paquetes.

El mismo procedimiento seguiremos con el servidor de bases de datos Mysql y el interprete de php, a continuacin se muestran los paquetes que deben ser instalados en ambos casos:

Instalacin de componentes en Linux

Pgina 10 de 15

Figura 9. Paquetes seleccionados para el servidor MySQL.

Instalacin de componentes en Linux

Pgina 11 de 15

Figura 10. Paquetes seleccionados para el interprete de PHP.

Una vez comprobado que tenemos todos los paquetes instalados (realizar la comprobacin), comprobaremos que funcionan los servidores. Comenzaremos por el servidor web: Apache2. Para comprobar el funcionamiento tan solo tenemos que abrir un navegador y escribir la siguiente direccin http://localhost, si funciona el servidor web obtendremos la siguiente pantalla:

Figura 11. Comprobacin de que Apache2 funciona.

Instalacin de componentes en Linux

Pgina 12 de 15

Para comprobar que tenemos el servidor de bases de datos funcionando, tan solo tenemos que abrir una terminal como root y ejecutar el comando "mysql", obtendremos la siguiente pantalla:

Figura 12. Comprobacin de que MySQL funciona.

Salir escribiendo el comando "exit". Por ltimo para comprobar que el servidor web interpreta cdigo php, ejecutaremos un pequeo programa que muestra las variables de php. El fichero es el siguiente phpinfo.php. Bajar el fichero, alojarlo en "/var/www/" y con el navegador cargar la siguiente direccin: http://localhost/phpinfo.php Si todo ha funcionado correctamente, obtendremos la siguiente pantalla:

Instalacin de componentes en Linux

Pgina 13 de 15

Figura 13. Comprobacin de que el interprete de php funciona.

Configuracin de la seccin parmetros globales del fichero Httpd.conf (serrvidor web Apache). Todos los parmetros que se establecen dentro de esta seccin son globales para el funcionamiento del servidor, por lo que no admiten estar dentro de ninguna directiva. Para el caso de apache2, el fichero de configuracin se denomina apache2.conf, y a diferencia del tradicional httpd.conf tiene modulos de configuracin en ficheros externos que se incluyen.
z

ServerRoot: especifica la ubicacin del directorio raz donde se encuentra instalado el Apache, a partir del cual se crea el rbol de directorios comentado anteriormente. Esta directiva no debera cambiar a no ser que se mueva la carpeta de instalacin de apache a otro directorio. Se encuentra disponible a travs del mdulo Core. TimeOut: el valor se utiliza para configurar, medido en segundos, tres parmetros:

El tiempo tal que puede tardar una peticin en ser recibida entera. La cantidad de tiempo que espera entre recepcin de paquetes TCP. La cantidad de tiempo entre ACK's en transmisiones TCP.

Pasado este tiempo se produce un mensaje de error en el que se indica que se ha consumido el tiempo mximo de espera. Establecer un valor muy pequeo puede dar lugar a que los usuarios reciban este mensaje de error, y establecer un valor muy pequeo dar lugar a una sobrecarga de la mquina. Se encuentra disponible a travs del mdulo Core. KeepAlive: especifica si se utilizarn conexiones persistentes, es decir, que todas las peticiones de un usuario se atendern con la misma conexin. Se encuentra disponible a travs del mdulo Core. MaxKeepAliveRequests: nmero mximo de conexiones persistentes. (nmero mximo de usuarios concurrentes si KeepAlive esta en ON). Para establecer este parmetro, hay que tener en cuenta el ancho de banda de salida de nuestro servidor, por el cual deber ser enviada toda la informacin, si se establece un valor muy grande respecto al ancho de banda, el tiempo de respuesta se ver incrementado para cada usuario. Se encuentra disponible a travs del mdulo Core. KeepAliveTimeout: tiempo que espera en segundos entre peticiones de un usuario, antes de considerar que este ha terminado, y cerrar su conexin. Si el valor es muy pequeo provocar que algunos usuarios no puedan visualizar la pgina debido a que el nmero mximo de conexiones persistentes se ha superado, mientras que si se establece un valor muy grande se estarn utilizando muchos recursos de la mquina. Se encuentra disponible a travs del mdulo Core.

Listen: esta directiva permite especificar que puerto se utilizar para atender las peticiones. Por defecto se utiliza el puerto 80 (www), tambin permite especificar que direcciones IP atender, por defecto todas. Para atender dos direcciones IP distintas, con distintos puerto, se utilizara:

Listen 192.168.255.5:80 Listen 192.168.255.8:8080 Se encuentra disponible a travs de varios mdulos beos, leader, mpm_winnt,

Instalacin de componentes en Linux

Pgina 14 de 15

mpmt_os2, perchild, prefork, threadpool worker


z

LoadModule: Directiva que sirve para cargar mdulos que incluyen distintas funcionalidades. La sintaxis es: LoadModule nombreModulo ubicacionFichero Se encuentra disponible a travs del mdulo mod_so.

Descripcin de las directivas de funcionamiento.

Esta es la seccin principal de configuracin del servidor, en ella podemos encontrar las siguientes opciones:
z

ServerAdmin: especifica la direccin de correo electrnico del administrador, esta direccin aparece en los mensajes de error, para permitir al usuario notificar un error al administrador. No puede estar dentro de ninguna seccin. Se encuentra disponible a travs del mdulo Core. ServerName: especifica el nombre y el puerto que el servidor utiliza para identificarse, normalmente se determina automticamente, pero es recomendable especificarlo explcitamente para que no haya problemas al iniciar el servidor. Si el servidor no tiene un nombre registrado en las DNS, se recomienda poner su nmero IP. No puede estar dentro de ninguna seccin. La sintaxis es: ServerName direccionIP:Puerto p.e. ServerName localhost:80 Se encuentra disponible a travs del mdulo Core.

DocumentRoot: la carpeta raz que se ubica en el servidor, desde la que se servirn los documentos. Por defecto, todas las peticiones, tendrn como raz esta carpeta, a no ser que se utilicen alias (directorios virutales en IIS) Por defecto, la carpeta raz suele estar en la carpeta "/var/www/" o en la carpeta htdocs, que se encuentra en la carpeta de instalacin de Apache. No puede estar dentro de ninguna seccin. Si se cambia este directorio por otro, es muy importante que se ponga el nuevo valor, no solo en esta lnea, sino tambin en la seccin "<Directory>" en la que se establecen los parmetros de configuracin de este directorio. Esta lnea empieza por "<Directory> " seguido de la carpeta raz que originalmente hay en DocumentRoot. Se encuentra disponible a travs del mdulo Core.

DirectoryIndex: especifica el fichero por defecto que buscar en cada directorio, en caso de que no se especifique ninguno. Por defecto es index.html. Es decir, que si por ejemplo se pone en el navegador: www.desarrolloweb.com el servidor por defecto servir www.desarrolloweb.com/index.html En esta directiva se pueden especificar ms de un fichero, la sintaxis es la siguiente: DirectoryIndex fichero1 fichero2 fichero3 El orden con el que se especifica el nombre de fichero determinar la prioridad a la hora de decidir que fichero es el que se muestra.

Instalacin de componentes en Linux

Pgina 15 de 15

La directiva se puede encontrar fuera de cualquier seccin, dentro de una seccin o dentro de un fichero ".htaccess". Se encuentra disponible a travs del mdulo mod_dir.
z

AccessFileName: es el nombre del fichero de configuracin que se buscar en cada uno de los directorios del servidor para conocer la configuracin del mismo. Este fichero permite configurar el comportamiento de cada uno de los directorios individualmente. Para que esta configuracin funcione, la directiva AllowOverride tiene que tener un valor que lo permita. No puede estar dentro de ninguna seccin. El nombre de fichero que se especifica por defecto es el del fichero ".htaccess". Como medida de seguridad, la configuracin del Apache establece que no se muestre la existencia de este fichero a ningn usuario, aunque este establecida la opcin de listado de directorios. Si se decide cambiar el nombre, habr que redefinir la seguridad para que no se muestre el contenido del nuevo fichero. Esto se hace en el fichero httpd.conf en una seccin File como la que se presenta a continuacin en la que se establece que todos los ficheros que comiencen por .ht no se mostrarn. <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> Se encuentra disponible a travs del mdulo Core.

Entornos de desarrollo.

Pgina 1 de 10

Mdulo 1

Programacin en PHP y Bases de datos

Mdulo 1: Introduccin a los lenguajes web.


Instalacin de un servidor web

En este apartado queremos referirnos a las diferentes opciones existentes en la actualidad para el desarrollo de scripts en PHP. Estos entornos facilitan el desarrollo del cdigo, su depuracin, etc. A continuacin, ofrecemos un pequeo listado de diferentes soluciones de software libre/propietario tanto para Windows como para Linux, para pasar posteriormente a explicar la instalacin, a modo de ejemplo, veremos un entorno para Windows (Maguma) y en Linux (Bluefish y Nvu) en el siguiente apartado del tema. ndice: Entornos de edicin para PHP

Maguma Open Studio PHP (Windows) Bluefish editor (Linux) Nvu versin 1.0 (linux)

En la web cyberzoide.developpez.com puede encontrarse una exhaustiva compartiva de herramientas de edicin para PHP.

Entornos de edicin para PHP


Entornos de edicin:

Dreamveawer MX2004: el programa de edicin web para Windows por excelencia. En su ltima versin dispone de una barra de accesos rpidos a funciones para PHP (tambin para otros lenguajes). Incorpora funcin de autocompletar, colorea el cdigo, etc.

Figura 1. Barra de herramientas de PHP en Dreamveawer

HTMLKit: un editor de HTML para Windows con conectores (plug-in) para PHP, coloracin de cdigo, ayuda del PHP integrable y con una amplia comunidad de usuarios. Quanta Plus: editor para Linux (KDE) con buenas prestaciones. HAPedit: entorno de desarrollo para Windows de cdigo abierto, gratuito y modular.

Entornos de desarrollo.

Pgina 2 de 10

Colorea HTML, PHP, ASP, JavaScript, CSS, SQL. Compilacin de cdigo PHP, integracin de la documentacin oficial de PHP, gestin de proyectos, cliente FTP, etc. Anjuta DevStudio: editor para Linux (Gnome) con coloracin de cdigo, funcin de autocompletar, etc. Maguma Studio PHP : versin de cdigo abierto para Windows de este IDE. Presenta coloracin del cdigo, gestin de proyectos, ejecucin de scripts desde el mismo entorno, etc. Instalaremos este software a continuacin.

Maguma Open Studio PHP (Windows)


El programa se puede conseguir desde la web http://www.maguma.com , entrando en su seccin "Products". El programa es gratuito en su versin "Open Studio", pero se nos informa que pagando 19 se tiene la posiblidad de adquirir la versin "Pro", que incluye un gestor CVS y un "sistema de ventanas especial". La descarga del programa puede efectuarse por dos vas: 1) desde la misma pgina, previo registro como usuario 2) accediendo a "Sourceforge.net" , tal y como aparece en uno de los enlaces disponibles. Una vez dispongamos del fichero instalador, procederemos con la instalacin:

Figura 2. Instalacin de Maguma Open Studio (1)

Pulsamos en "Next" en esta primera pantalla de bienvenida, para pasar a la pantalla de la licencia, la cual aceptaremos, y acabar pulsando nuevamente en el botn "Next".

Entornos de desarrollo.

Pgina 3 de 10

Figura 3. Instalacin de Maguma Open Studio (2)

En la siguiente pantalla (figura 3) se nos pregunta acerca de aquellos componentes de apoyo que deseamos instalar. Marcamos las dos primeras casillas que instalarn manuales de consulta para HTML, CSS y PHP. El tercer componente permite instalar un debugger para la correccin de cdigo previa compilacin (se deja al alumno la opcin de hacerlo y probarlo).

Entornos de desarrollo.

Pgina 4 de 10

Figura 4. Instalacin de Maguma Open Studio (3)

En la siguiente pantalla, se nos ofrece la posibilidad de seleccionar la carpeta de destino para Maguma:

Figura 5. Instalacin de Maguma Open Studio (4)

Acto seguido, tenemos la posiblidad de confirmar la creacin de iconos de acceso directo al

Entornos de desarrollo.

Pgina 5 de 10

programa en el Escritorio o en la barra de accesos rpidos y, por otro lado, de asociar las extensiones de ficheros tipo PHP a Maguma .

Figura 6. Instalacin de Maguma Open Studio (5)

Y, por ltimo, se nos da un informe de todo aquello que va a instalarse. Pulsando en el botn "Install", procederemos con la instalacin.

Entornos de desarrollo.

Pgina 6 de 10

Figura 7. Instalacin de Maguma Open Studio (6)

Si todo ha ido bien, se nos mostrar una ltima pantalla en la que se nos confirmar la finalizacin del proceso de instalacin:

Figura 8. Instalacin de Maguma Open Studio (6)

Configuracin de Maguma Open Studio PHP


Una vez instalado, lo primero que debemos hacer es acudir a la opcin "Preferences" dentro del men "View" para hacer algunos ajustes generales.

Entornos de desarrollo.

Pgina 7 de 10

Figura 9. Men de preferencias en Maguma Open Studio

En la parte izquierda de la ventana, tenemos las diferentes categoras sobre las que realizar ajustes. En nuestro caso, comentaremos solo las bsicas al objeto de hacer el entorno operativo. Desde el apartado "PHP Parsing", indicaremos a Maguma cmo utilizaremos el PHP. Ya que tenemos un servidor web instalado, elegimos la segunda opcin "Using an existing websever".

Figura 10. Men de preferencias en Maguma Open Studio

Entornos de desarrollo.

Pgina 8 de 10

A continuacin, pasamos a la opcin "PHP Interpreter" en la introduciremos la ruta al intrprete de PHP.

Figura 11. Men de preferencias en Maguma Open Studio

Y, por ltimo, indicaremos en la opcin "Server Settings" la ruta de la carpeta "htdocs" (carpeta en la que vamos depositando todas las pginas PHP que desarrollemos).

Entornos de desarrollo.

Pgina 9 de 10

Figura 12. Men de preferencias en Maguma Open Studio

Con los ajustes previos, garantizamos la operatividad bsica con el entorno. Ajustes secundarios, que dejamos a eleccin del alumno, seran, por ejemplo, la definicin de colores distintivos para el cdigo (opcin "Colors" en "Editor"), la definicin de combinacin de teclas de acceso rpido (opcin "Editor Keys" en "Editor"), la definicin de macros (a partir de la opcin "Autocomplete" en "Editor") o la activacin/desactivacin y configuracin de la aparicin de informacin automtica sobre la sintaxis de las funciones de PHP en la escritura de cdigo (opcin "Function Insight " en "Editor").

Funcionamiento.
Por ltimo, por lo que a Maguma se refiere, comentaremos algn aspecto sobre el entorno de edicin. Vistas Tenemos acceso a tres "vistas" diferentes, a las cuales podemos acceder mediante las pestaas superiores:

Editor View: es la ventana de trabajo. Internal Preview: es una ventana de previsualizacin interna desde la cual podemos ver el resultado de ejecutar el script sin tener que recurrir al navegador (en el caso, por ejemplo, de estar usando formularios, esta opcin no funcionar correctamente). External Preview: pulsando sobre esta pestaa accederemos al navegador que tengamos definido por defecto en el Windows.

Entornos de desarrollo.

Pgina 10 de 10

Ventana flotante (Tool Box). En esta ventana , podemos encontrar informaciones diversas (Toolbox, informacin sobre las clases, Snnipet Library, etc.).

Figura 13.Ventana flotante

En la figura anterior se muestra la "Snippet Library". Si seleccionamos la macro "do connect", se generar el cdigo necesario para una conexin a la Base de Datos MySQL, de la cual hablaremos en apartados posteriores. El contenido de esta ventana viene dado por la seleccin hecha en el men "View".

Algunas caractersticas reseables.


Revisin de la sintaxis mientras se escriben palabras reservadas de PHP. Ayuda "en lnea" que agiliza la escritura de cdigo. Posibilidad de definir "puntos de ruptura" (disponible en el men "Run" --> "Toogle Breakpoint") ) y "seguimiento de variables" (men "Run" --> "Add watches"). Posibilidad de confirgurar opciones de FTP (desde "File" --> "FTP Manager"). Faciladades para el trabajo con clases (por un lado, en la ventana flotante o "Tool Box", encontramos el "Class Browser"; por otro, con la 'opcin de men "Tools" --> "Use Class Wizard" se abre un cuadro de gestin de clases. Posibilidad de de depurar cdigo (si en la instalacin incluimos el debugger).

Editores Linux

Pgina 1 de 12

Mdulo 1

Programacin en PHP y Bases de datos

Mdulo 1: Introduccin a los lenguajes web.


Instalacin de un servidor web

En este apartado queremos referirnos a las diferentes opciones existentes en la actualidad para el desarrollo de scripts en PHP. Estos entornos facilitan el desarrollo del cdigo, su depuracin, etc. ndice

Bluefish editor (Linux) Nvu versin 1.0 (Linux)

En la web cyberzoide.developpez.com puede encontrarse una exhaustiva compartiva de herramientas de edicin para PHP.

Bluefish editor (Linux)


Bluefish es un editor para programadores y diseadores web experimentados. Reconoce diversos lenguajes de programacin y de marcas, pero se centra en la edicin de sitios web dinmicos e interactivos. Bluefish es un proyecto open source con licencia GPL. Para ms informacin, podemos visitar la pgina principal de Bluefish en: http://bluefish.openoffice.nl/

No ser necesario realizar instalacin, puesto que Lliurex lleva instalada la versin 1.0 en castellano.

Editores Linux

Pgina 2 de 12

Figura 1. Bluefish versin 1.0

Bluefish es una potente herramienta de edicin de pginas Web que soporta mltiples lenguajes tanto de programacin como de marcas. Permite la creacin de pginas web tanto estticas como dinmicas. Bluefish permite un control total sobre el cdigo, ya que se edita manualmente desde un editor texto WYSIWYG. Para facilitar el proceso de edicin, Bluefish incorpora un gran nmero de caractersticas que hacen ms sencilla la creacin de pginas. Posee diversos mtodos para insertar cdigo y marcas de texto a travs de barras de herramientas, cajas de dilogos y mens predefinidos y personalizados por el usuario. Posee diversas funcionalidades como el resaltado sintctico, bsqueda y reemplazo avanzado, escalabilidad y referencias de funciones de lenguajes.

Bluefish posee diversas caractersticas, siendo las ms significativas las siguientes:

Interfaz WYSIWYG: Lo que se ve es lo que se necesita. Interfaz de mltiples documentos: Permite tener abiertos ms de 500 documentos simultneamente. Resaltado de sintaxis personalizable, basado en expresiones regulares, con soporte para subpatrones. Hay incluidos patrones por defecto para diversos lenguajes como C, ColdFusion, Gettext po, HTML, Java, Pascal, Perl, PHP, Python, XML. Soporte de mltiples codificaciones. Bluefish puede convertir entre diversos juegos de caracteres, soporta caracteres multibyte, unicode, UTF-8, etc. Diversos asistentes para inicio rpidos, tablas, marcos, etc. Ventana de insercin de imgenes con todas las caractersticas deseables. Cajas de dilogo para muchas marcas HTML con todos sus atributos. Barra de herramientas HTML y mens desplegables. Buena funcionalidad de deshacer/rehacer.

Editores Linux

Pgina 3 de 12

Barra de herramientas personalizable por el usuario que permite un rpido acceso a las funciones ms utilizadas. Creacin de miniaturas de imagen y enlazado automtico con la imagen original. Fcil creacin de mltiples miniaturas de imagen para fcil creacin de un lbum de fotos o pginas de capturas de pantallas. Integracin con muchos programas configurable por el usuario, incluyendo aplicaciones como weblint, tidy, make, javac, etc. Referencia de funciones basada en XML. Actualmente, estn incluidas referencias para HTML y PHP. Tambin est disponible una referencia para GTK. Tambin puede crearse una referencia de funciones propia.

Editores Linux

Pgina 4 de 12

Figura 2 Bluefish versin 1.0

En dicha ventana principal se observan distintas zonas:

Barra de Men:

Archivo: Con las opciones tpicas de abrir y guardar archivos, as como cerrar. Tambin permite abrir una pgina en Internet (Abrir URL). Otra opcin interesante es la opcin Abrir avanzado que permite realizar bsquedas avanzadas dentro del sistema de archivos para encontrar un determinado documento.

Editores Linux

Pgina 5 de 12

Edicin: Opciones de Deshacer/Rehacer, as como las de cortar, copiar y pegar. Tambin estn las opciones de buscar y reemplazar. Adems, la bsqueda y reemplazo permite utilizar expresiones regulares, con toda la potencia que esto supone. Otra caracterstica interesante es que permite reemplazar caracteres ASCII o de una codificacin determinada por entidades HTML : es decir, convierte los acentos y las ees como acute. As mismo, est la opcin de desplazar un bloque de texto a la derecha o a la izquierda, lo cual viene muy bien para estructurar el cdigo. Si se selecciona la opcin Preferencias se muestra una ventana con mltiples pestaas, donde se pueden personalizar multitud de aspectos de la edicin en Bluefish.

Ver: Permite mostrar y ocultar las distintas barras de herramientas y el panel izquierdo. Etiquetas: En esta opcin estn la mayora de etiquetas HTML, organizadas en distintos submens. Al seleccionar una opcin, se insertan las etiquetas HTML correspondientes en el texto.

Dilogos: Esta opcin tambin permite generar automticamente cdigo HTML de una manera sencilla. Cuando se selecciona una opcin, se muestra una caja de dilogo con parmetros que ha de rellenar el usuario. Al pulsar el botn Aceptar se genera en el documento el cdigo HTML correspondiente. Por ejemplo, la opcin Inicio rpido genera todo el encabezado de inicio de una pgina HTML. Documento : Aqu se incluyen algunas opciones que afectan a todo el documento. Por ejemplo, se puede incrementar o decrementar la tabulacin para clarificar el texto, activar/desactivar opciones como el Resaltar sintaxis, Sangrado automtico, Ajuste de lnea o Nmero de lnea. Tambin puede indicarse el tipo de documento. Esto es til a la hora de que el resaltado de sintaxis sea el adecuado. Tambin se puede establecer la codificacin del documento (si se trabaja con UTF-8 o con ISO8859-15). Adems, se puede revisar la ortografa y contar las palabras del documento, as como visualizar el archivo que se est editando en una ventana flotante aparte.

Ir: Permite desplazarse por los mltiples documentos abiertos, as como ir a una lnea determinada dentro de un documento. Proyecto: Los proyectos son una especie de Guardar estado de Bluefish. Todos los archivos abiertos cuando se guarda el proyecto, se abren automticamente la siguiente vez que se abre el proyecto. Adems, se puede establecer un directorio base local, de forma que la raz del rbol de exploracin del panel izquierdo ser dicho directorio. Si Bluefish est instalado con soporte de gnome-vfs, el directorio base puede ser remoto. Externo: Aqu se incluyen algunas herramientas externas a la aplicacin pero que pueden ser invocadas desde aqu. Para que funcionen, estas herramientas debern estar instaladas en el sistema y correctamente configuradas. Por ejemplo, para que funcione el Analizador de cdigo HTML, debe estar instalado el paquete Weblint (aptget install weblint) y para el Validador de cdigo HTML, el paquete Tidy (aptget install tidy). Tambin permite visualizar la pgina web que se est editando en distintos navegadores, para ver la apariencia final. Evidentemente, para que funcione la opcin de un navegador en concreto, dicho navegador debe estar instalado en el sistema.

Ayuda: Muestra una caja de dilogo con los crditos de la aplicacin.

Editores Linux

Pgina 6 de 12

Barra de herramientas principal: Incluye botones con las acciones ms habituales, tales como Nuevo, Abrir, Guardar, Cortar, Copiar, Pegar, Buscar, Deshacer,... Barra de herramientas HTML: Contiene la mayora de etiquetas HTML. Los botones estn clasificados en diferentes pestaas. En cada una de ellas hay una categora de etiquetas HTML. La primera pestaa es la Barra rpida, que inicialmente est vaca. En esta barra se pueden aadir los botones que se deseen de manera que el usuario se configure una barra personalizada. Para aadir un botn a esta barra, hacer clic derecho sobre el botn y seleccionar la opcin Aadir de la barra rpida. Men personalizado: Adems de la Barra rpida, Bluefish permite crear un men personalizado. Por defecto viene con uno, con funciones para diversos lenguajes de programacin (DHTML, Active HTML, apache, docbook, HTML, php, sql, C Programming, Replace). Seleccionando la opcin Men personalizado -> Editar men se muestra una caja de dilogo para poder aadir y modificar las entradas al men. Barra de estado: Situada en la zona inferior de la ventana, muestra informacin sobre las acciones efectuadas. Para comprender su uso observe lo que sucede cuando presiona los diferentes botones, etc. Panel izquierdo: En la zona izquierda de la zona de trabajo, se muestra un panel con un rbol de exploracin del sistema de archivos. Las carpetas pueden desplegarse o replegarse. Haciendo clic derecho sobre las carpetas y archivos, se abre un men contextual con mltiples funciones de manipulacin de archivos. Pulsando en la pestaa inferior con el dibujo de un libro, se muestra una referencia bastante completa tanto de HTML, como PHP. Una funcin muy til que proporciona GTK+ es tearoffs. Seleccionar una opcin de men, por ejemplo Archivo, y presionar sobre la pequea lnea punteada. Aparecer una nueva ventana flotante que contiene todos los submens de Archivo. De esta manera es posible acceder a las funciones de un men de forma mucho ms rpida. Ntese que el men sigue siendo accesible no slo desde la ventana aparecida, sino tambin desde el men de la ventana principal. Por desgracia no hay manera de grabar su estado y posicin de modo que, al reiniciar Bluefish, no habr ningn men flotante.

Crear un nuevo documento. Seleccionar la opcin de men Archivo -> Nuevo. Tambin se puede seleccionar el primer botn de la Barra de herramientas Principal o pulsar la combinacin de teclas Ctrl+N. Aparecer una nueva pestaa con un archivo de nombre Sin ttulo en blanco. Para introducir el encabezado inicial de una pgina HTML, se puede seleccionar la opcin de men Dilogos -> General -> Inicio Rpido, que mostrar un dilogo para elegir el tipo de documento, as como el ttulo, las etiquetas META y establecer estilos. Al pulsar en el botn Aceptar, se insertar el cdigo HTML en el documento.

Editores Linux

Pgina 7 de 12

Figura 3 Bluefish: dialogo inicio rpido.

Ya se puede empezar a introducir texto y etiquetas HTML, para ello se puede hacer uso de la Barra de Herramientas y de las opciones de men Etiquetas y Dilogos. Cuando se selecciona una opcin de men o un botn, el cdigo HTML se inserta en la posicin donde est el cursor en ese momento. Se inserta la etiqueta de inicio y la de cierre y el cursor se sita entre las dos. Si teniendo seleccionado un texto, se selecciona una etiqueta HTML, entonces la etiqueta de inicio se inserta al principio del texto seleccionado y la de cierre al final del mismo. Algunas opciones habituales estn tambin disponibles en el men contextual (clic derecho del ratn), tales como cortar, copiar, pegar, etc.. S se hace clic derecho sobre una etiqueta, aparece una opcin ms Editar etiqueta, que segn qu tipo de etiqueta sea, mostrar un dilogo u otro. Por ejemplo, si se hace clic derecho sobre la etiqueta H2, y se selecciona la opcin Editar etiqueta, se mostrar un dilogo donde poder indicar propiedades de la etiqueta. Guardar un archivo.

Seleccionar la opcin de men Archivo -> Guardar o Archivo -> Guardar Como si se desea guardar con otro nombre. En este ltimo caso se mostrar una ventana para seleccionar la ubicacin e introducir el nombre del archivo. Si se tienen varios documentos abiertos, el que se guardar es el que est activo en ese momento (el que se muestra en la ventana principal). Tambin existe la opcin Guardar todo, que guarda todos los archivos abiertos en ese momento. Si se desea validar la correccin de la pgina HTML, se puede realizar desde la opcin de men Externo -> Caja de salida -> Validador HTML Tidy. Se abrir una ventana en la zona inferior con el resultado de la validacin. Recordar que es necesario tener instalado el paquete Tidy para que esta opcin funcione. Si se desea ver la pgina HTML que se est creando en un navegador para comprobar el efecto final, seleccionando la opcin de men Externo se abre la pgina con el navegador que se seleccione. Evidentemente, para que funcione la opcin de un navegador en concreto, dicho navegador debe estar instalado en el sistema.

Editores Linux

Pgina 8 de 12

Estableciendo las preferencias. Existen mltiples caractersticas de Bluefish que se pueden personalizar a travs de la opcin de men Edicin -> Preferencias. Aparecer una ventana con diez pestaas. Adems tambin se muestran los tpicos botones de Aceptar, Aplicar y Cancelar.

Figura 4 Bluefish: preferencias.

Editor: Se puede establecer el tipo y tamao de la fuente del editor de texto, el nmero de acciones de deshacer y algunas opciones para marcadores. HTML: Se indica si las etiquetas HTML se insertan en minsculas (por defecto) o maysculas. Tambin permite el uso de etiquetas HTML antiguas. En la actualidad, la W3 recomienda usar CSS para dar formato a los documentos y no las antiguas etiquetas (por ejemplo, font o center). Archivos: Se puede especificar la codificacin del archivo (ISO-8859, UTF-8, ...), la creacin de copias de respaldo, opciones del Explorador de archivos (panel izquierdo) y otras opciones relacionadas con archivos. Interfaz de usuarios: Se puede especificar el tamao inicial de la ventana principal y del panel izquierdo, as como establecer qu barras de herramientas se muestran al iniciar, o si las opciones del men Externo se muestran en submens o no. Tambin se puede establecer la fuente y la posicin de las pestaas del documento. Imgenes: Se puede establecer un sufijo para las miniaturas y el formato en que se almacenarn. Tipos de archivo: Aqu se indican las extensiones de los archivos para cada lenguaje, as como algunos parmetros adicionales. Tambin se pueden aadir y borrar Tipos de archivo. Resaltado de sintaxis: Se puede personalizar el resaltado de la sintaxis por el usuario. Seleccionando el tipo de archivo, se muestran los patrones definidos para l. Seleccionando un patrn, se pueden ver sus caractersticas y modificarlas.

Editores Linux

Pgina 9 de 12

Programas externos: Aqu se gestionan las entradas del men Externo, pudiendo aadirse o quitarse opciones de men. Por ejemplo, si se desea visualizar la pgina web con el navegador Firefox, aadir en la caja de texto Examinar una etiqueta que es la que se mostrar en el men. Introducir en la caja de texto Comando la orden para abrirlo (Firefox %s). Luego seleccionar el botn Aadir. Analizadores de salida: Aqu se gestionan los analizadores de salida (weblint, tidy, javac), pudindose aadir nuevos. Servidores: De momento, esta seccin nicamente posee una opcin para activar la compatibilidad con servidores que funcionen con CES (Sistema de Gestin de Contenidos) Zope.

NVU Versin 1.0 Castellano (Linux).


El software libre que pretende hacer la competencia a programas como el FrontPage de Microsoft o el Dreamweaver de Macromedia ha presentado recientemente su versin 1.0 final, despus de ms de un ao de desarrollo. NVU est basado en el compositor de pginas HTML del antiguo Netscape, que posteriormente pas a formar parte de la suite integrada Mozilla, y respaldado por Linspire (antigua Lindows), que con ste software parece completar la trada de aplicaciones destinadas al entorno domstico para competir directamente con sus homlogas para Windows y/o Mac (las otras dos son Lsongs, un clon de iTunes, y Lphoto para gestionar fotografas digitales). Dos de las principales bazas de NVU son el hecho de ser software libre, lo que garantiza entre otras libertades que se pueda disponer de su cdigo fuente, y por otra parte que sea multiplataforma. Desde el site oficial (www.nvu.com) se pueden descargar los paquetes para los tres principales sistemas operativos, Windows, Mac OS X y Linux, y con el cdigo fuente se pueden hacer ports para otros sistemas como Solaris o BeOS. Un dato destacable es que la interfaz de usuario gestiona las diferentes pginas que estemos editando (ficheros HTML) mediante un sistema de pestaas, idntico al que utilizan los navegadores web Firefox o Safari. En general, la interfaz es altamente personalizable, pudiendo cambiar por ejemplo todos los botones de la barra de acceso rpido. NVU incluye tambin un editor de hojas de estilo CSS (Cascading Style Sheets), que ya estaba disponible como add-on para el compositor de pginas de Mozilla. Tambin tenemos un fcil mecanismo para incluir formularios en nuestras pginas. Y cuando queramos comprobar si nuestra pgina sigue las normas marcadas por el W3C (World Wide Web Consortium, el organismo internacional encargado de marcar los estndares para los lenguajes utilizados en programacin de pginas web), podemos invocar muy fcilmente el W3C's HTML Validator. En un futuro se preve hacer accesible tambin la herramienta de validacin de CSS del mismo W3C. Algunas de sus funciones principales son:

Edicin de pginas WYSIWYG (lo que ves, es lo que obtienes), convirtiendo la creacin web en algo tan sencillo como tipear una letra con su procesador de textos. Administracin de archivos integrada va FTP. Cdigo HTML fiable, capaz de funcionar con los navegadores ms populares de la actualidad. Intercambio entre el modo WYSIWYG y HTML utilizando pestaas. Posibilidad de trabajar con mltiples pginas a la vez. Poderoso soporte para formularios, tablas y plantillas.

Instalacin de nvu 1.0. La instalacin del editor es muy sencilla, tan solo tenemos que descargar el fichero, descomprimirlo, y crear un enlace al fichero de inicio de nvu. Podemos descargar nvu 1.0 desde su pgina oficial: http://www.nvu.com

Editores Linux

Pgina 10 de 12

Figura 5. Descarga de NVU 1.0.

Podemos descargar la traduccin al castellano en: http://nave.escomposlinux.org/productos/nvu/ En la misma pgina nos indican las instrucciones de instalacin de la traduccin. Una vez tengamos los dos ficheros descargados, descomprimimos el fichero de nvu en la carpeta que deseemos trabajar, en esta carpeta hay un fichero llamado nvu, que tras ejecutarlo obtendremos la siguiente pantalla:

Editores Linux

Pgina 11 de 12

Figura 6. Pantalla principal de NVU 1.0.

Para crear un enlace desde el escritorio, pulsar el botn derecho del ratn y seleccionar la opcin de crear un lanzador, rellenar los campos que se solicitan, como se muestra en la siguiente pantalla:

Figura 7. Crear un acceso directo a NVU 1.0.

Para incorporar la traduccin al castellano, seguir los siguientes pasos:


Ejecutar NVU. En el men superior, pulsar sobre herramientas y seleccionar la opcin Extensiones. Pulsar el botn instalar y seleccionar el fichero descargado.

Editores Linux

Pgina 12 de 12

Pulsar Install now.

Figura 8. Instalacin de la traduccin de NVU 1.0.

Si reiniciamos nvu lo encontraremos en castellano.

Figura 9. Pantalla principal de NVU 1.0 en castellano.

Programacin en PHP y Bases de datos

Pgina 1 de 1

Mdulo 2

Programacin en PHP y Bases de datos

Lenguaje PHP
Objectivos y contenidos
En este mdulo se vern las caractersticas ms importantes del lenguaje PHP.

Sintaxis bsica de PHP. Variables: tipos y declaracin. Constantes. Expresiones y operadores. Sentencias de control.

Sintaxis bsica de PHP

Pgina 1 de 4

Mdulo 2

Programacin en PHP y Bases de datos

Sintaxis bsica de PHP


El objetivo de este punto es ver las diferencias entre HTML y PHP y comenzar a familializarnos con la sintaxis de este lenguaje.

"Bienvenidos a PHP"
Escribiremos una pgina en HTML y otra en PHP con el mismo contenido, en PHP aadiremos comentarios, variables e incluiremos ficheros con cdigo externo.

Bienvenidos a PHP en HTML El cdigo que se puede ver a continuacin es muy sencillo. Es un simple mensaje de saludo en HTML. <html> Bienvenidos a <b>PHP</b><br> <i>Saludos</i> </html>
Listado 1. "Bienvenidos" en HTML

Hacemos lo mismo en PHP El resultado ser identico pero se generar de forma diferente en PHP. Copiar el cdigo que aparece a continuacin en vuestro editor y guardarlo con el siguiente nombre hola.php. Observar que el resultado es el mismo. <html> HTML<br> ------------------<br> Bienvenidos a <b>PHP</b> <br> <i>Saludos</i> <br><br><br> <?php echo "PHP<br>"; echo "------------------<br>"; echo "Bienvenidos a <b>PHP</b>"; echo "<br>"; echo "<i>Saludos</i>"; echo "<br><br><br>"; ?> </html>
Listado 2. "Bienvenidos" en PHP

Si analizamos el cdigo podremos observar las siguientes cosas:

El cdigo PHP debe ir precedido por el siguiente signo "<?php" y se seala el final del

Sintaxis bsica de PHP

Pgina 2 de 4

cdigo con "?>" (tambin se acepta iniciarlo solamente con "<?"). Adems podremos incluir el cdigo en cualquier sitio y tantas veces como sea necesario.

En PHP podemos escribir cdigo HTML, esto lo conseguiremos mediante la orden echo. Todo lo que este detrs de esta sentencia y tenga una correcta sintaxis se mostrar en la pgina resultante. PHP no analiza la validaz del cdigo HTML que lleva insertado, este lo realizar el navegador correspondiente.

Por ltimo es necesario marcar el final de lnea con un punto y coma (;). Si no lo hacemos se producir un error a la hora de generar la pgina. Normalmente los servidores estan configurados para que revisen el cdigo incluido en pginas que tienen la extensin .php. Por lo que, aunque nosotros escribamos cdigo php en una pgina cuya extensin es .html , el servidor no lo interpretar y, por lo tanto, el resultado no ser el esperado.

Saltos de lnea. En el navegador, comprobar el cdigo HTML creado, visualizando la pgina anterior. Recordad que se puede ver con la opcin de men Ver | Cdigo fuente (Internet Explorer 6.0) o bien Ver | Origen de la pgina (Netscape 7.0) y obtendremos algo parecido a lo siguiente. <html> HTML<br> -----------------<br> Bienvenidos a <b>PHP</b> <br> <i>Saludos</i> <br><br><br> PHP<br>------------------<br>Bienvenidos a <b>PHP</b><br><i>Saludos</i><br><br><br></html>
Listado 3. Cdigo HTML generado por PHP sin saltos de lnea.

Los saltos de lnea escritos directamente en el editor no se correponden con los generados mediante el cdigo PHP. Esto no afecta al funcionamiento de la pgina HTML, pero puede llegar a ser confuso, a la hora de analizar el cdigo HTML creado. Podemos solucionarlo aadiendo un salto de lnea de cdigo (\n) al final de cada lnea. Esta lnea no afecta el cdigo HTML generado pero si que producir una presentacin ms clara cuando veamos el cdigo fuente. <?php echo "PHP<br> \n"; echo "------------------<br> \n"; echo "Bienvenidos a <b>PHP</b> \n"; echo "<br> \n"; echo "<i>Saludos</i> \n"; echo "<br><br><br> \n"; ?>
Listado 4. Saltos de lnea.

Y el resultado esta vez sera: <html> HTML<br> -----------------<br> Bienvenidos a <b>PHP</b> <br> <i>Saludos</i> <br><br><br>

Sintaxis bsica de PHP

Pgina 3 de 4

PHP<br> ------------------<br> Bienvenidos a <b>PHP</b> <br> <i>Saludos</i> <br><br><br> </html>


Listado 5. Cdigo HTML generado en PHP con saltos de lnea

Signos de escape. Para hacer un salto de lnea en el cdigo, tenemos que utilizar un signo de escape (\) en combinacin con otro carcter (\n). La siguiente tabla muestra algunos de los signos de escape ms utilizados: cdigo \n \r \t resultado Crea una nueva lnea. Crea un salto de parrafo. Crea una tabulacin.

Igualmente, este signo puede servir para "emmascarar" signos especiales, que se utilizan ya en la sintaxis del lenguaje, como: cdigo \' \$ \\ \" resultado Comillas simples. Signo dlar (este signo precede a todas las variables en PHP). La misma barra invertida. Comillas dobles.

En el cdigo siguiente la palabra PHP de la ltima frase ser mostrada entre comillas dobles, gracias al enmascaramiento. En caso contrario, quedara cortada la cadena y dara un error. Tambin se podra evitar este problema alternando comillas simples. <?php echo "PHP<br> \n"; echo "------------------<br> \n"; echo "Bienvenidos a <b>PHP</b> \n"; echo "<br> \n"; echo "<i>Saludos</i> de \"PHP\" <br> \n"; echo "<br><br><br> \n"; ?>
Listado 6. Emmascaramiento mediante signos de escape.

Comentarios en el cdigo. Es recomendable comentar el cdigo que escribimos, esto nos ayudar:

A recordar qu hace cada fragmento de cdigo. A colocar observaciones o advertencias. A comentar, en el proceso de depuracin, una lnea para ver el funcionamiento y encontrar errores.

Sintaxis bsica de PHP

Pgina 4 de 4

<html> <?php /* Prctica 1 Mdulo 2 Curso de PHP (esto es un comentario de ms de una lnea) */ echo "PHP<br> \n"; echo "------------------<br> \n"; echo "Bienvenidos a <b>PHP</b> \n"; echo "<br> \n"; // Ahora explicaremos la inclusin de comillas dobles en una cadena // \n sirve para hacer saltos de lnea en el cdigo HTML generado echo "<i>Saludos</i> de \"PHP\" <br> \n"; echo "<br><br><br> \n"; ?> </html>
Listado 7. Cdigo comentado.

Como se puede ver podemos hacer comentarios de ms de una lnea colocandolos entre /* y */. Igualmente, podemos colocar un comentario de una sola lnea despus del signo //.

Variables. Tipos y declaracin

Pgina 1 de 4

Mdulo 2

Programacin en PHP y Bases de datos

Variables: tipos y declaracin. Inclusin de ficheros.

El objetivo de este punto es hacer una introduccin a las posibilidades de PHP para trabajar nuevas caractersticas de la sintaxis y realizar la insercin de ficheros de cdigo. Se ver:

Variables (tipos y declaracin). Constantes. Inclusin de ficheros externos y bibliotecas.

Variables.
En PHP podemos encontrar 5 tipos de variables: Integer, Double, String, Array y Object. PHP gestiona de manera automtica el tipo de variable y hace las conversiones convenientes. <?php /*----------------------------------------------------------------* Mdulo: 2 Prctica: 2 * Autor: Data: * Descripcin: Tipos de variables en PHP * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ // definicin de variables $nombre = "Andrea"; // variables de texto o cadena (String) $apell1 = "Len"; $apell2 = "Garcia"; $edad = 37; // variable numrica (Integer) $pobla = "Valencia"; //Insercin de variables dentro de la cadena echo "Tu nombre s: $nombre <br> \n"; echo "Tus apellidos sn: $apell1 y $apell2 <br> \n"; echo "Tienes $edad aos <br> \n"; echo "Vives en $pobla <br> \n"; ?>
Listado 1. Definicin y presentacin de variables

Aclararemos algunos aspectos bsicos:

Los nombres de las variables deben de comenzar con el signo dlar ($) seguido de una cadena de caracteres que comienza por un letra o un subrayado y que sigue con cualquier nmero de letras, nmeros o subrayados. El uso de maysculas y minsculas esta permitido, pero hay que tener en cuenta que el interprete las diferencia. El mismo nombre con al menos una letra en mayscula o minscula diferente identifica a variables distintas. No es necesario declarar el tipo de variable. PHP reconoce automticamente el tipo de variable cuando se le hace una asignacin. Podemos elegir el nombre que queramos para las variables, pero es recomendable que tengan un significado descriptivo de para qu va a servir. No podemos utilizar como nombre de variable ninguna palabra reservada del lenguaje PHP.

Variables. Tipos y declaracin

Pgina 2 de 4

No es recomendable poner acentos o caracteres especiales en los nombres de variable (,...), aunque podra funcionar correctamente.

Si vemos el listado 1 de este punto, veremos que se definen cuatro variables de tipo cadena ($nombre, $apell1 $apell2 y $pobla, los valores asignados estn entre comillas y una variable numrica ($edad), con el valor sin comillas. Despus de la definicin, se muestran los valores utilizando la sentencia echo. Hay que fijarse en que utilizamos dobles comillas (") para el contenido de echo, y podemos insertar directamente las variables dentro de la cadena, da igual el tipo de variable de que se trate: echo "Tienes $edad aos <br> \n"; echo "Vives en $pobla <br> \n"; A veces, este sistema de insercin puede ocasionar algn problema de interpretacin, por lo que en el siguiente mdulo, donde se ver la concatenacin de cadenas y variables, veremos un sistema ms seguro. La insercin directa de variables en la cadena no funciona si esta esta entre comillas simples ('): echo 'Vives en $pobla <br> \n'; no funcionar. PHP aporta algunas funciones muy interesantes para trabajar con variables, entre las cuales podemos destacar: funcin gettype(variable) resultado Devuelve el tipo de la variable pasada como argumento: integer, float, string, array, class, object o unknown type. Recibiendo como parmetros una referencia a una variable y una cadena de caracteres, cambia el tipo de la variable referenciada al indicado por dicha cadena. Devuelve TRUE si la variable pasada est ya definida. False en otro caso.

settype(variable, tipo)

isset(variable)

Constantes.
PHP permite la definicin de constantes, el valor asignado permanecer invariante a lo largo de la ejecucin del programa, para hacerlo se utiliza la siguiente funcin: define("constante",valor); Al hacer referencia a una constante no es necesario poner el signo dlar delante del nombre de la constante, puesto que en tal caso hara referencia a una variable.

Inclusin de cdigo desde un fichero.


Veremos ahora como incluir un fichero que nos servir como encabezado de la pgina:

Copiar el siguiente cdigo en vuestro editor y guardarlo como practica22.php

<?php /*----------------------------------------------------------------* Mdulo: 2 Prctica: 2 * Autor: * Descripcin:

Variables. Tipos y declaracin

Pgina 3 de 4

* Pre condi.: * Post cond.: -----------------------------------------------------------------*/ // Definicin de constantes, normalmente en maysculas // definimos la constante del ttulo del curso define("TITCUR","Programacin en PHP y Bases de datos"); // definimos la constante para el salto de lnea HTML define("B","<br>"); // inclusin de un fichero externo include( "cabecera.php" ); echo B; echo B; echo B; echo "PHP<br> \n"; echo "------------------<br> \n"; echo "Bienvenidos a <b>PHP</b> \n"; echo "<br> \n"; echo "<i>Saludos</i> de \"PHP\" <br> \n"; echo "<br><br><br> \n"; ?>
Listado 2. Cdigo del fichero principal

Copiar tambin el cdigo que ha continuacin aparece y guardarlo como cabecera.php

<table style="text-align: left; width: 633px;" border="1" cellpadding="2" cellspacing="2"> <tbody onload="loadPage()"> <tr> <td> <?php echo "Programacin en PHP y Bases de datos" ?><br> <?php echo "Fecha: ".date("d/m/Y"); ?> </tr> </td> </tbody onload="loadPage()"> </table>
Listado 3. Cdigo del fichero incluido: 'cabecera.php'

En el cdigo de practica22.php se hacen 2 cosas distintas: Por una parte, se han definido unas constantes utilizando la funcin define(). define("TITCUR","Programacin en PHP y Bases de datos"); Cada vez que utilicemos TITCUR en cualquier sitio del cdigo, ser sustituido por el valor que le hemos asignado. define("B","<br>"); Tambin se ha definido la constante B, que contendr la etiqueta predefinida <br> del cdigo HTML. Por otro lado, se ha incluido la sentencia include() para incluir fichero externo. include( "cabecera.php" ); El cdigo del fichero cabecera.php ser incluido en el lugar en que se coloc la sentecia include

Variables. Tipos y declaracin

Pgina 4 de 4

y funcionar como si fuera un solo fichero. La funcin include_once()no permite la inclusin del fichero ms que una vez como mximo en un script. Igualmente, tambin existe require() y require_once(). La diferencia de include y require es que este ltimo no permite la inclusin condicional, es decir, que aunque la sentencia este situada dentro de una sentencia alternativa siempre se incluir el codigo, pase o no la ejecucin del programa por ese punto. En el fichero cabecera.php, tambin se utiliza otra funcin de PHP: date(). Dependiendo de los parametros que se le pasen, nos devolver la fecha del sistema en el momento de ejecucin del cdigo en formatos diferentes. Hay que tener en cuenta la ubicacin del fichero cabecera.php. En el ejemplo que hemos visto suponemos que se encuantra en el mismo directorio que el fichero principal. En caso contrario, se debera indicar el camino donde se encuentra el fichero. Si se incluye un fichero en el que se encuentra cdigo php, se debe indicar la apertura y el cierre de este cdigo con <?php y ?>.

Expresiones y operadores

Pgina 1 de 4

Mdulo 2

Programacin en PHP y Bases de datos

Expresiones y Operadores
El objetivo de este mdulo es familiarizarse con los diferentes tipos de operadores que nos ofrece PHP y como construir expresiones validas que nos permitirn:

hacer clculos. realizar asignaciones. establecer comparaciones lgicas.

Operadores
Los operadores que veremos sern los siguientes:

aritmticos. de asignacin. comparacin. ejecucin. incremento y decremento. lgicos.

Operadores aritmticos Permiten hacer clculos bsicos y son los siguientes:

ejemplo
$a + $b $a - $b $a * $b $a / $b $a % $b Por ejemplo:

nombre
Suma Resta Multiplicacin Divisin Mdulo

resultado
Suma de $a y $b Resta entre $a y $b Producto de $a y $b Cociente de $a entre $b Resto de $a dividido entre $b

<?php $a = 4; $b = 7; $c = $a + $b; //la variable $c ser igual a 11 echo "\$a=".$a."<br> \n"; echo "\$b=".$b."<br> \n"; echo "\$c=\$a+\$b <br><br> \n"; echo "Resultado: ". $c; ?> Observad que, para poder ver en pantalla el nombre de la variable y no su contenido, debemos recurrir a signo de escape (\) delante del signo de inici de variable ($).

Operadores de asignacin

Expresiones y operadores

Pgina 2 de 4

En el ejemplo anterior hemos visto que con PHP las asignaciones bsicas se hacen mediante el operador '='. Este operador hace que el operando de la izquierda coja el valor de la derecha. Por ejemplo: $total = 2500; la variable $total tendr el valor 2500 Pero tambin hay operadores combinados, que permiten asignar y operar en un slo paso: $a = 4; $a += 6;

// esto es equivalente a $a = $a + 6

y tambin con cadenas $cadena = "Hola "; $cadena .= "Jos"; // $cadena tendr el siquiente valor "Hola Jos"

Operadores de comparacin Como en la mayoria de lenguajes, PHP tiene sus comparadores que nos permitirn tomar decisiones. La siguiente tabla muestra una relacin de operadores:

exemple
$a == $b $a === $b $a != $b $a < $b $a > $b $a <= $b $a >= $b

nom
Igual Identidad Distinto Menor que Mayor que Menor o igual que Mayor o igual que

resultat
TRUE si $a es igual a $b TRUE si $a es igual a $b i si son del mismo tipo TRUE si $a no es igual a $b TRUE si $a es estrictamente menor que $b TRUE si $a es estrictamente mayor que $b TRUE si $a es menor o igual que $b TRUE si $a es mayor o igual que $b

Atencin, el operador que valora la igualdad es un doble igual (==).

Operadores de incremento/decremento Permiten incrementar/decrementar el valor de una variable en una unidad. El incremento/decremento puede hacerse antes o despus de tomar el valor de la variable ejemplo ++$a $a++ --$a $a-nombre Preincremento Postincremento Predecremento Postdecremento efecto Incrementa $a en uno y despus devuelve $a Devuelve $a y despus incrementa $a en uno Decrementa $a en uno y despus devuelve $a Devuelve $a y despus decrementa $a en uno

Expresiones y operadores

Pgina 3 de 4

Operadores lgicos

ejemplo
$a and $b $a or $b $a xor $b !$a $a && $b $a || $b

nombre
Y O O exclusiva Negacin Y O

efecto
TRUE si tanto $a como $b son ciertos TRUE si $a o $b son ciertos TRUE si $a o $b son ciertos, pero no los dos a vez TRUE si $a no es cierto TRUE si tanto $a como $b son ciertos TRUE si $a o $b son ciertos

Atencin, en realidad slo disponemos de cuatro operadores lgicos. And y && son equivalentes, como or y || . Vamos a ver un ejemplo Aunque en el siguiente mdulo veremos las estructuras de control, para poder comprobar el funcionamiento de estos operadores, avanzaremos el uso de la condicin (if y else). Copia el cdigo a tu editor y gurdalo con el nombre operador.php. <?php /*----------------------------------------------------------------* Mdulo: 2 Prctica: 3 * Autor: Fecha: * Descripcin: ejemplo de operadores * Pre condi.: * Post condi.: -----------------------------------------------------------------*/ // Comprobacin de una nota $nota = 5; // asignaciones $mensaje = ""; /* Lo primero es comprobar que la nota este comprendida entre 1 y 10 */ if( $nota >= 1 && $nota <= 10 ) { if($nota < 5 ) { //Si la nota es inferior a 5 $color="#AA0000"; // color del mensaje $mensaje = "No has superado la prueba."; } else{ // en caso contrario $color="#0000AA"; // color del mensaje $mensaje = "Prueba superada"; } } else{ $color="#000000"; // color del mensaje $mensaje = "Error! la nota debe estar entre 1 y 10"; } echo "<font color=$color> $mensaje Calificacin: $nota </font> <br>"; ?>

Expresiones y operadores

Pgina 4 de 4

Listado 2.3.1. Ejemplo con operadores.

Realizar clculos en PHP Para comprobar en la prctica la capacidad de PHP, veremos un sencillo ejemplo de clculo del IVA. Copiar este cdigo y guardalo con el nombre m2p32.php. <?php /*----------------------------------------------------------------* Mdulo: 2 Prctica: 3 * Autor: Data: * Descripci: Calculo del IVA * Pre condi.: * Post condi.: -----------------------------------------------------------------*/ $neto = 200; //neto $iva = 0.16; $total_iva = $neto*$iva; // total iva a pagar $total = $neto+$total_iva; echo "<TABLE BGCOLOR=\"#AABBCC\"> \n"; echo "<TR><TD width=\"100\">Neto: </TD> <TD>".$neto." </TD></TR><br> \n"; echo "<TR><TD width=\"100\">IVA: (".$iva."): </TD> <TD> ".$total_iva." </TD></TR><br> \n"; echo "<TR><TD width=\"100\">Total: </TD> <TD>".$total." </TD></TR> \n"; echo "</TABLE> \n"; ?>
Listado 2.3.2. Clculo de IVA

En el ejemplo podemos ver los diferentes operadores de clculo. Tenemos dos variables ($neto y $iva) a partir de las ellas hacemos los clculos pertinentes. En la presentacin de los resultados se genera una tabla en html.

Sentencias de control de programa

Pgina 1 de 8

Mdulo 2

Programacin en PHP y Bases de datos

Sentencias de control de programa


En este tema veremos:

Sentencias de seleccin. Sentencias de iteracin.

Las principales sentencias de control en PHP son:

sentencias

sintaxis
if (expr) sentencia o bien if (expr){ sentencias }

if, else, elseif

if (expr){ sentencias; } elseif { sentencias; elseif { sentencias; else { sentencias; }

codicional compacta

$variable = (exp1) ? exp2 : exp3; 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 "Otro valor"; } for (expr1; expr2; expr3){ sentencia } foreach(expresion_array as $value) { sentencia}

switch

for

Sentencias de control de programa

Pgina 2 de 8

o bien foreach foreach(expresion_array as $key => $value) { sentencia} while while (expr) { sentencia }

Sentencias de seleccin.
Estructura if, else, elseif La estructura if, else, elseif es, la estructura condicional clsica, implementada en todos los lenguajes. <?php /*----------------------------------------------------------------* Mdulo: 2 Prctica: 4 * Autor: * Descripcin: Estructuras if, else, elseif * Pre condi.: * Post condi.: -----------------------------------------------------------------*/ $grupo = "B"; if ($grupo == "A"){ echo "El grupo es A"; } elseif ($grupo == "B") { echo "El grupo es B"; } elseif ($grupo == "C") { echo "El grupo es C"; } else { echo "El grupo no es ni A ni B ni C"; } ?>
Listado 2.4.1. Ejemplo estructura condicional

Condicional compacta La sintaxis $variable = (exp1) ? exp2 : exp3; primero se evalua la expresin (exp1), si es cierta se asigna el resultado de evaluar la expresin (exp2) a la variable, en caso contrario se asigna a la variable el resultado de evaluar la expresin 3. Por ejemplo: <?php

Sentencias de control de programa

Pgina 3 de 8

/*----------------------------------------------------------------* Mdulo: 2 Prctica: 4 * Autor: * Descripcin: Condicional compacta. Mximo de tres valores. * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ $a = 5; $b = 8; $c = 3; // Si $a < $b $maximo = $b sino igual a $a $maximo = ($a<$b)? $b : $a; // ya tenemos el mayor de $a y $b $maximo = ($maximo<$c)? $c : $maximo; // ya tenemos el mayor del anterior y el ltimo nmero // Escribimos el resultado echo "El mximo de los tres valores es: $maximo"; ?>
Listado 2.4.2. Ejemplo de condicional campacta.

Estructura switch La estructura switch es equivalente a una serie de if. Cuando se cumple el caso se sale del proceso utilizando la sentecia break colocada destrs de cada evaluacin. <?php /*----------------------------------------------------------------* Mdulo: 2 Prctica: 4 * Autor: * Descripcin: Ejemplo de uso de 'switch' * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ $pla = 'ESO'; switch ($pla) { case 'ESO': echo 'Educacin Secundaria Obligatoria'; break; case 'BACH': echo 'Bachillerato'; break; case 'CFGM': echo 'Ciclo Formativo de Grado Medio'; break; case 'CFGS': echo 'Ciclo Formativo de Grado Superior'; break; // si no ha coincidido con ninguna de las anteriores default: echo 'Codificacin incorrecta'; }

Sentencias de control de programa

Pgina 4 de 8

?>
Listado 2.4.3. Ejemplo de uso de switch.

Otro ejemplo de switch sera la eleccin individual de un color: <html> <head> <title>Modificar el color de fondo</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <link rel="stylesheet" type="text/css" href="../css/nuevo.css"> </head> <body bgcolor="<?php if(isset($_POST["color"])) { switch(($_POST["color"])) { case 1: echo "#ffcc33"; break; case 2: echo "ffff99"; break; default: echo "silver"; } } else { echo "white"; } ?>"> <h1>Seleccione un color de fondo</h1> <form action="color.php" method="post"> <input type="radio" name="color" value="1"> naranja<br> <input type="radio" name="color" value="2"> amarillo<br> <input type="radio" name="color" value="x"> sorpresa<br><br> <input type="submit" value="Seleccionar un color"> </form> </body> </html>
Listado 2.4.4. Ejemplo de uso de switch.

Sentecias de iteracin (bucles)


Podemos decir, que un bucle es una repeticin de una accin o conjunto de acciones hasta que se cumpla una condicin o situacin final que se ha definido en la cabecera del bucle. Hay que tener en cuenta que con la utilizacin de los bucles, tenemos que tener mucho cuidado en su definicin, puesto que como hemos dicho en el tema anterior PHP es un lenguaje interpretado que se ejecuta en la parte del servidor, un bucle infinito podra llegar a colgar el servidor web. For La estructura for es una de las complejas y al vez flexibles de PHP. Sintaxis: for (expr1; expr2; expr3){ sentencia }

Sentencias de control de programa

Pgina 5 de 8

Donde: expr1: inicializa la variable que usaremos en el bucle for. expr2: define la condicin que debe cumplirse para poder entrar en el proceso for; en el momento en que no se cumpla se acaba el proceso. expr3: modifica el valor de la variable usada como contador del bucle, puede incrementar, decrementar, etc.

<?php /*----------------------------------------------------------------* Mdulo: 2 Prctica: 4 * Autor: * Descripcin: Ejemplo de 'for' * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ $num = 10; //definimos una variable // expr1: $i valdr 0 // expr2: la condicin ($i ha de ser diferente a $num) // expr3: en cada pasada se incrementa $i en 1 ($i++) for($i=0; $i != $num ; $i++) { echo "\$num es diferente de ".$i."<br>"; } echo "<br><br>"; echo "Estamos fuera del bucle for <br>"; echo "\$num ($num) es igual a \$i ($i)"; ?>
Listado 2.4.5. Ejemplo de uso de for.

Otro ejemplo de bucle for, se pregunta cuantas veces quiere que repita una frase y las escribe: <html> <head> <title>El bucle for</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <link rel="stylesheet" type="text/css" href="../css/nuevo.css"> </head> <body> <h1>El bucle for</h1> <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post"> Cuntas veces debe aparecer la frase? <input type="text" name="cantidad"> <input type="submit" value="enviar"> </form> <p> <?php if (isset($_post["cantidad"])) { for ($contador=1;$contador<=$_POST["cantidad"];$contador++) { echo "<b>$contador</b>: Loops are easy!<br>\n"; } echo "Se acab.\n"; } ?> </p> </body> </html>
Listado 2.4.6. Ejemplo de uso de for.

Sentencias de control de programa

Pgina 6 de 8

Foreach La construccin foreach es la ms sencilla cuando el bucle est relacionado con un array, aunque los arrays los veremos en temas posteriores, no resultar complicado entender la estructura foreach. Una de sus dos sintaxis es:: foreach(expresion_array as $value) { sentencia} Le pasamos un array como primer parametro y una variable como segundo, a cada iteraccin del bucle la variable ir cogiendo un valor del array, avanzando al siguiente elemento en cada pasada, hasta llegar al final del array. Veamos un ejemplo que visualiza los das de la semana. <?php /*----------------------------------------------------------------* Mdulo: 2 Prctica: 4 * Autor: * Descripcin: Ejemplo de uso de 'foreach' * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ // Definimos un array con los dias de la semana $dia[0] = "Lunes"; $dia[1] = "Martes"; $dia[2] = "Mircoles"; $dia[3] = "Jueves"; $dia[4] = "Viernes"; $dia[5] = "Sabado"; $dia[6] = "Domingo"; // Y ahora se muestran por pantalla echo "Los das de la semana son:<br><br>\n";

foreach ($dia as $valor) { //en cada pasada se lee un nuevo valor del array echo "$valor<br>\n"; } ?>
Listado 2.4.7.Ejemplo de utilizacin de foreach.

Algunos ejemplos ms para demostrar su uso: <?php /* foreach ejemplo 1: slo valor*/ $a = array(1, 2, 3, 17); foreach($a as $v) { print "Valor actual de \$a: $v.\n"; } /* foreach ejemplo 2: valor (con clave impresa para ilustrar) */ $a = array(1, 2, 3, 17); $i = 0; /* slo para propsitos demostrativos */ foreach($a as $v) { print "\$a[$i] => $v.\n"; $i++; }

Sentencias de control de programa

Pgina 7 de 8

/* foreach ejemplo 3: clave y valor */ $a = array( "uno" => 1, "dos" => 2, "tres" => 3, "diecisiete" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; } /* foreach ejemplo 4: matriz multi-dimensional */ $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach($a as $v1) { foreach ($v1 as $v2) { print "$v2\n"; } } /* foreach ejemplo 5: matriz dinmica */ foreach(array(1, 2, 3, 4, 5) as $v) { print "$v\n"; } ?>
Listado 2.4.8.Ejemplo de uso de foreach.

While Un alternativa al for es utilizar while. Se trata de una estructura parecida a for pero que no incluye en su declaracin ni la inicializacin de una variable de control (la inicializacin se debe hacer antes de entrar en el bucle), ni su incremento o decremento, esta modificacin de la variable de control se debe realizar en el cuerpo de la estructura. Veamos un ejemplo:

<?php /*----------------------------------------------------------------* Mdulo: 2 Prctica: 4 * Autor: fecha: * Descripcin: Ejemplo de uso de 'while' * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ // Nmeros divisibles por $div hasta $total $i = 0; //variable de control del while $div = 5; //nmero a dividir (divisor) $total = 100; //total echo "<h2>Nmeros divisibles por $div hasta $total.</h2>"; while ($i < $total){ // Si es divisible entre $div, lo mostramos if ($i%$div == 0 ){ echo $i." - ";

Sentencias de control de programa

Pgina 8 de 8

} // Incremento de $i $i++; } // fin del while ?>


Listado 2.4.9.Ejemplo de uso de while.

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 do..while: <?php $i = 0; do { print $i; } while ($i>0); ?>
Listado 2.4.10.Ejemplo de uso de do .. while.

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. <?php do { if ($i < 5) { print "i no es lo suficientemente grande"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } print "i es correcto"; /* procesa i */ } while(0); ?>
Listado 2.4.11.Ejemplo de uso de do .. while.

Ejercicios mdulo 2

Pgina 1 de 1

Mdulo 2

Programacin en PHP y Bases de datos

Ejercicio 1. Nmeros primos.


El ejercicio consiste en dado un nmero positivo (se almacenar en una variable) mostrar en una tabla todos los nmeros primos menores que l. Almacenar el fichero con el nombre mod2ejer1.php.

Ejercicio 2. Nmeros divisibles.


El ejercicio consiste en generar una tabla que contenga verticalmente los nmeros del 1 al 10, que sern los divisores. Horizontalmente, tendremos 10 nmeros ms (por ejemplo del 50 al 60) que sern, los dividendos. Los valores de los dividendos se deben almacenar en dos variables. Se trata de rellenar la tabla con un asterisco (*), en la interseccin de los nmeros en el caso de ser divisible, en caso contrario se rellenar con un guin (-). El color de fondo de cada casilla variar dependiendo del valor que contengan. Almacenar el fichero con el nombre mod2ejer2.php. Comprimir estos ficheros con el nombre inicial-nombre_primer-apellido_mod3ej1.zip y envalo.

Mdulo 3

Programacin en PHP y Bases de datos

Lenguaje PHP. Matrices, cadenas y fechas


Objectivos
En este mdulo se profundizar en el manejo de las matrices. La necesidad de su aprendizaje se basa en que gran parte de las funciones de PHP manejan vaiables de este tipo. La manipulacin de las cadenas de caracteres es necesaria cuando se debe mostrar informacin al usuario, por lo que se vern gran variedad de funciones que manejan este tipo de datos. Y por ltimo se estudiarn las funciones existentes en PHP para el manejo de fechas.

Contenidos
Arrays o Matrices. Cadenas de caracteres. Manipulacin de fechas.

Mdulo 3

Programacin en PHP y Bases de datos

Arrays o matrices
En muchas ocasiones, aparecen un conjunto de variables que contienen informacin semejante que ha de procesarse de forma similar. En estos casos existe una solucin mejor que definir tantas variables como datos distintos tengamos, esta solucin es utilizar arrays o matrices. Este tipo de variable funciona de manera parecida en otros lenguajes, pero con alguna particularidad. Definicin de arrays

<?php /*----------------------------------------------------------------* Mdulo: 3 Prctica: 1 * Autor: Fecha: * Descripcin: Definicin de arrays * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ $nota[0]="Insuficiente"; $nota[1]="Suficiente"; $nota[2]="Bien"; $nota[]="Notable"; $nota[]="Sobresaliente"; /* Si no indicamos subndice, automaticamente se asignar la siguiente posicin libre */ echo "Calificacin: ". $nota[3]; echo "<br><br>"; /* Definicin de un array utilizando la funcin array $nota=array("Insuficiente","Suficiente","Bien","Notable", "Sobresaliente"); echo "Calificacin: ". $nota[4]; ?>
Listado 3.1.1. Definicin de los elementos de un array

Observar que el primer nmero de ndice de los arrays es siempre 0 y no 1.

Arrays asociativos Una de las particularidades de PHP es la posibilidad de poder substituir los nmeros de ndice por alguna palabra que se asocie a cada elemento. Ver el siguiente ejemplo:

<?php /*-----------------------------------------------------------------

* Mdulo: Prctica: 2 * Autor: Fecha: * Descripcin: Arrays asociativos * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ $nota["I"]="Insuficiente"; $nota["S"]="Suficiente"; $nota["B"]="Bien"; $nota["N"]="Notable"; $nota["E"]="Sobresaliente"; echo "Valores asignados directamente <br>"; echo "Calificacin: ". $nota["B"]; echo "<br><br>"; // Definicin utilizando la funcin array $nota=array("I"=>"Insuficiente","S"=>"Suficiente","B"=>"Bien", "N"=>"Notable","E"=>"Sobresaliente"); echo "Definicin con funcin array <br>"; echo "Calificacin: ". $nota["E"]; ?>
Listado 3.1.2. Definicin de los elementos de un array asociativo

En lugar de asignar a cada elemento un nmero de ndice, le asignamos una etiqueta o clave con la cual se relacionan. Al utilizar la funcin array debemos realizar la asignacin del valor con el operador => .

Matrices o arrays de dos dimensiones Con el fin de ver las funciones que tiene PHP para la manipulacin de matrices, utilizaremos como ejemplo un listado de alumnos, de los cuales almacenaremos una serie de datos personales. Utilizaremos un array asociativo con claves: nombre telfono, correo, nota. Y una matriz indexada, de forma que cada alumno ocupe una posicin de la matriz, para almacenar los 35 alumnos del curso. /* Declaracin implcita de una matriz bidimensional */ $M1[0][0] = 'Jos'; $M1[1][0] = 'Mara'; $M1[2][0] = 'Juan'; $M1[0][1] = '123456789'; /* Declaracin implcita de una matriz bidimensional asociativa */ $M1[0]['Nombre'] = 'Jos'; $M1[1]['Nombre'] = 'Mara'; $M1[2]['Nombre'] = 'Juan'; $M1[0]['Telefono'] = '123456789'; /* Declaracin de una matriz bidimensional asociativa utilizando la funcin array */ $curso=array(array('Nombre' =>'Jos', 'Telefono' =>'123456789', 'Correo' =>'a@a.es', 'Nota' =>'0'), array('Nombre' =>'Mara',

'Telefono' =>'876543219', 'Correo' =>'b@b.es', 'Nota' =>'0'), array('Nombre' =>'Juan', 'Telefono' =>'432187659', 'Correo' =>'c@c.es', 'Nota' =>'0'));
Listado 3.1.3. Declaracin de la matriz ejemplo

Para acceder a los elementos de una matriz multidimensional el mecanismo es el mismo que para acceder a matrices unidimensionales, basta con aadir tantos corchetes al final del nombre de la variable como dimensiones tenga sta. En nuestro ejemplo: para acceder a nombre del alumno que ocupa la 4 posicin del listado, deberamos escribir: $alu4 = $curso[3]["Nombre"]; Si quisieramos recuperar todos los datos de un alumno, por ejemplo el tercero, obtendramos una array. Deberamos escribir: $alu3 = $curso[2]; Las matrices como variables que son, pueden ser expandidas dentro de una cadena de caracteres delimitada con comillas dobles ("). Sin embargo debe ser diferente cuando se trabaje con matrices multidimensionales. hay que encerrar dicha referencia entre llaves ({}). Con matrices unidimensionales no hay que hacer nada especial siendo correctos los siguientes ejemplos: /* mostrara el nombre del alumno, siendo $alumno un array unidimensional asociativo */ echo "Alumno nmero 1 $alumno['nombre'] <br>\n"; /* en nuestro ejemplo de matriz bidimensional */ echo "Alumno nmero 1 {$curso[0]['Nombre']} <br>\n";

Recorrido de una matriz Para recorrer una matriz indexada necesitamos saber de antemano el nmero de elementos que la componen. Esta informacin nos la proporciana la funcin count(). Con la siguiente sintaxis: int count(cualquier_tipo mi_variable) Donde mi_variable representa la variable de la que se quiere obtener el nmero de elementos. Si se trata de una matriz, tanto indexada como asociativa, la funcin devolver el nmero de elementos. Si se trata de una variable que contiene un elemento, sea o no matriz, devolver 1. Si la variable no tiene asignado ningn valor o tiene asignado el valor null, devolver un 0. Existe otra funcin de PHP que devuelve el numero de elementos, esta funcin es sizeof() y su sintaxis es la siguiente: int sizeof(array matriz) Para recorrer una matriz indexada tan solo debemos construir un bucle, que empieza en la posicin 0 y que terminar cuando ya no queden ms elementos que tratar. En cada interaccin del bucle se accede a una posicin distinta. Para recorrer una matriz asociativa PHP dispone de varias funciones: Funcin resultado Recupera el par formado por la clave y el valor del elemento actual y adems avanza una posicin el puntero de la matriz. Sintaxis: array each(array matriz);

each()

Devuelve false cuando no quedan elementos por tratar Asigna los valores del elemento actual de una matriz a las variables que se hayan pasado com parametro. sintaxis: void list($var1, $var2, ...); reset() end() next() prev() current() Hace que el puntero interno apunte a la primera posicin de la matriz. Hace que el puntero interno apunte a la ltima posicin de la matriz. Permite ir al siguiente / anterior elemento. En caso de estar al principio o al final devuelve el valor falso. Devuelve el contenido del elemento actual. Esta funcin no desplaza el puntero interno de posicin y devuelve el valor false cuando se encuentre despus del ltimo elemento o si la matriz no tiene elementos.

List()

Cuando se trata de matrices indexadas la navegacin es sencilla, basta con acceder directamente a la posicin que contiene el elemento buscado. Por lo contrario, cuando se trata de una matriz asociativa no puede aplicarse el mismo tratamiento. Hemos visto 4 funciones para poder desplazarnos en una matriz asociativa. En PHP existen una gran cantidad de funciones que permiten manipular matrices que permiten, por ejemplo, ordenarlas, realizar una busqueda, insertar elementos, tando detrs como delante de la matriz, etc. pero no es el objetivo de este curso entrar en profundidad todas y cada una de ellas. Todas estas funciones pueden ser consultadas en la siguiente direcccin Funciones con arrays.

Un ejemplo En nuestro ejemplo construiremos una tabla, en la que cada fila ser un alumno con todos sus datos, y las cabeceras sern las claves de la matriz asociativa. <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> <title>Title here!</title> </head> <body> <?php /* Declaracin de una matriz bidimensional asociativa utilizando la funcin array */ $curso=array(array('Nombre' =>'Jos', 'Telefono' =>'123456789', 'Correo' =>'a@a.es', 'Nota' =>'0'), array('Nombre' =>'Mara', 'Telefono' =>'876543219', 'Correo' =>'b@b.es', 'Nota' =>'1'), array('Nombre' =>'Juan', 'Telefono' =>'432187659', 'Correo' =>'c@c.es', 'Nota' =>'2')); // escribe cabeceras echo "<TABLE BORDER=3 ALIGN=CENTER>\n"; echo "<TR>\n"; while ($elemento = each($curso[0])) echo "<TH>$elemento[0]</TH>\n";

echo "</TR>\n"; reset($curso[0]); //recorrer la matriz for ($i = 0; $i < count($curso); $i++) { echo "<TR>\n"; // recorrer cada elemeto de la matriz asociativa // utilizamos el contructor list while (list($clave,$valor) = each($curso[$i])) echo "<TD>$valor</TD>\n"; echo "</TR>\n"; } echo "</TABLE>\n"; ?> </body> </html> Comprobar que si no escribimos la sentencia reset($curso[0]), el primer elemento de la matriz no ser visualizado. Cuando recorramos una matriz asociativa debemos posicionar el puntero interno en el primer elemento. En el tema anterior vimos una sentencia que nos facilita el recorrido de las matrices, esta sentencia es foreach(), que en cada iteraccin del bucle la variable ir cogiendo un valor del array y avanzando al siguiente elemento en cada pasada, hasta llegar al final del array de forma automtica. Veamos el mismo ejemplo, pero utilizando la sentencia foreach. <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> <title>Title here!</title> </head> <body> <?php /* Declaracin de una matriz bidimensional asociativa utilizando la funcin array */ $curso=array(array('Nombre' =>'Jos', 'Telefono' =>'123456789', 'Correo' =>'a@a.es', 'Nota' =>'0'), array('Nombre' =>'Mara', 'Telefono' =>'876543219', 'Correo' =>'b@b.es', 'Nota' =>'1'), array('Nombre' =>'Juan', 'Telefono' =>'432187659', 'Correo' =>'c@c.es', 'Nota' =>'2')); // escribe cabeceras echo "<TABLE BORDER=3 ALIGN=CENTER>\n"; echo "<TR>\n"; foreach ($curso[0] as $k=>$v) echo "<TH>$k</TH>\n"; echo "</TR>\n"; //recorrer la matriz foreach ($curso as $e) { echo "<TR>\n"; foreach ($e as $v) echo "<TD>$v</TD>\n";

echo "</TR>\n"; } echo "</TABLE>\n"; ?> </body> </html>

Mdulo 3

Programacin en PHP y Bases de datos

Cadenas de caracteres
En este captulo se vern una serie de funciones de PHP, que se agruparn de forma temtica abordando los siguientes aspectos: formas de mostrar en salida estndard el contenido de las cadenas de caracteres y funciones para manipular su contenido. En PHP las cadenas se pueden especificar mediante tres tipos de delimitadores:

Comillas simples: ' Comillas dobles: " Documento incrustado: <<<

La primera de ellas es la ms bsica, y permite asignar a una variable de tipo cadena de caracteres todo el texto que vaya encerrado entre las dos comillas simples. Si el texto contiene comillas simples ('), sta deber ir precedida por el carcter barra invertida (\). Esto se denomina escapar un carcter.

Si dentro de de una cadena delimitada entre comillas simples se hace referencia al contenido de una variable, sta no ser tenida en cuenta. Por ejemplo:

<? // Ejemplo de comillas simples en el contenido de un cadena $cadena1 = 'Este es un ejemplo de \'comillas simples \' en texto'; $cafes = 2; // Ejemplo de utilizacin de variables en cadenas $cadena2 =' El contenido de la variable $cadena1, no es tenida en cuenta \n, este salto tampoco ser interpretado'; $cadena3 ='El contenido de la variable $cafe, no es tenida en cuenta \n, este salto tampoco ser interpretado'; echo $cadena1; echo $cadena2; echo $cadena3; ?>

La delimitacin mediante comillas dobles realiza la misma funcin que las simples , pero es ms avanzada, en este tipo de cadenas los caracteres especiales definidos por el lenguaje son interpretados. Deberemos recurrir a la tcnica de escapar los caracteres especiales que pudiendo ser interpretados no nos interesa, por ejemplo dobles comillas y barra invertida.

En este tipo de cadenas, si podemos hacer referencia al contenido de las variables, siendo estas sustituidas por su contenido, en la cadena.

<? // Ejemplo de comillas dobles en el contenido de un cadena $cadena1 = "Este es un ejemplo de \"comillas dobles \" en texto";

// Ejemplo de utilizacin de variables en cadenas $cadena2 ="El contenido de la variable $cadena1, SI es tenida en cuenta \n, y este salto tambin ser interpretado"; echo $cadena1; echo $cadena2; ?> Escribe el cdigo de los dos listados anteriores y comprueba la diferencia de resultados. Cuando se delimita una cadena utilizando la tcnica del documento incrustado , es vlido todo lo explicado para los delimitadores de comillas dobles. La diferencia radica en que con este tipo de delimitadores la cadena de caracteres puede ocupar tantas lnas como sea necesario, adems la cadena guardar la apariencia con la que fue escrita. Estas cadenas deben ir delimitadas por un identificador que el programador define. Por ejemplo: <? // ejemplo de delimitadores <<< $cadena1= <<< DELI1 Me llamo Jose. Soy profesor de informtica. \n Esto es un salto interpretado. DELI1; $cadena2=<<< DELI2 Este es el contenido de la variabe $cadena1 DELI2; echo $cadena1, "\n"; echo $cadena2; ?> Escribe el cdigo del ejemplo anterior y comprueba el resultado.

Visualizacin de cadenas PHP dispone de funciones que muestran el contenido de variablas con y sin formato especfico. estas funciones son: Funcin resultado Es la ms utilizada, muestra cadenas de caracteres en la salida estndar. No acepta formato de salida. echo() Sintaxis: echo string arg1 [, string arg2]; Sintaxis: echo (string arg1 [, string arg2]); Es la ms sencilla, y muestra el contenido de una cadena de caracteres en la salida estndar. No acepta formato de salida. Sintaxis: printf(string cadena); Realiza la misma accin que la funcin anterior, con la diferencia que sta si acepta argumentos de formato de salida. Sintaxis: printf(string formato [, cualquier valor , ...]);

print()

printf()

Aunque lo ms lgico sera recurrir a etiquetas HTML para dar formato a la salida de la funcin echo(), veremos un ejemplo donde se puede apreciar como utilizar cada una de las funciones anteriores. <? // Escribir un literal con echo() echo "Esto es la cabecera del listado"; echo ("Esta sentencia es equivalente a la anterior"); // Escribe el contenido de cualquier variable $var1 = 18; $var2 = 35.20; $var3 = "Jos"; echo $var1; echo $var2; echo $var3; // combinacin de cadenas y variables echo "La suma de ", $var1, " y ", $var2, " es ", $var1 + $var2; // combinacin de cadenas y variables utilizando concatenacin echo "La suma de " . $var1 . " y " . $var2 . " es " . ($var1 + $var2); // con print y printf print("Esta es otra forma de visualizar cadenas \n"); print("Mi nombre es $var3 \n"); // con formato printf("La suma: %d + %.5f = %.5f \n", $var1, $var2, $var1 + $var2); ?> Escribe el cdigo del ejemplo anterior y comprueba el resultado.

Funciones de alteracin del contenido En este apartado veremos algnunas de las funciones ms utilizadas para manipular el contenido de las variables string. Funcin resultado Devuelve una cadena de caracteres a la que se han eliminado los caracteres en blanco y el de nueva lnea que aparece al final de la cadena. Sintaxis: string chop(string cadena); ltrim() rtrim() trim() Eliminan los caracteres en blanco que aparecen a la izquierda, a la derecha y a la izquierda y la derecha, respectivamente. Sintaxis: string ltrim(string cadena); Ajusta el tamao de una cadena de caracteres a una longitud determinada, permitiendo especificar el carcter de relleno.Realiza la misma accin que la funcin anterior, con la diferencia que sta si acepta argumentos de formato de salida. Sintaxis: string str_pad(string cadena, int longitud [, string relleno [, int lugar]]); 1. Convierte todos los caracteres alfabticos a minsculas. 2. Convierte todos los caracteres alfabticos a maysculas. 3. Convierte todos los caracteres alfabticos a minsculas,

chop()

str_pad()

strtolower

() strtoupper () ucfirst() ucwords()

excepto el primero de la cadena. 4. Convierte todos los caracteres alfabticos a minsculas, excepto el primer carcter de cada palabra.

Sintaxis: string strtoupper(string cadena); Recibe una cadena de caracteres y devuelve otra en la que se han sustituido todas las apariciones de una subcadena2 por otra str_replace subcadena1. () Sintaxis: string str_replace(string subcadena1, string subcadena2, string cadena); Permite establecer una correspondencia entre los diferentes caracteres a traducir y sus sustitutos. strstr() Sintaxis: string strstr(string cadena, string originales, string traducidos); ejemplo: $nom = strstr($nom, "", "aeiouAEIOU");

Funciones de acceso al contenido Funcin resultado Devuelve un nmero entero que indica cuntos caracteres tiene la cadena que recibe como parmetro. Sintaxis: int strlen(string cadena); strchr() Devuelve la subcadena que comienza en la primera aparicin del carcter indicado. Sintaxis: string strchr(string cadena, char caracter); Permite localizar una subcadena dentro de una cadena original. Es sensible a las maysculas y minsculas. Existe stristr() que tiene la misma funcionalidad pero no es sensible. Sintaxis: string strstr(string cadena, string subcadena); strpos() strrpos() Indica la posicin de la primera (ltima) ocurrencia de una cadena en otra. Sintaxis: int strpos(string cadena, string subcadena [, int pos_inicial]); Devuelve la porcin de cadena original que empieza en una determinada posicin y que tiene una determinada longitud. Sintaxis: string substr(string subcadena1, int comienzo, int longitud); 1. Permite comparar dos cadenas, siendo sensible a maysculas y minsculas. 2. Permite comparar dos cadenas, NO siendo sensible a maysculas y minsculas. 3. Permite comparar los n primeros caracteres de dos cadenas.

strlen()

strstr()

substr()

strcmp() strcasecmp () strncmp()

Sintaxis: int strcmp(string cadena1, string cadena2);

Mdulo 3

Programacin en PHP y Bases de datos

Manipulacin de fechas
En este captulo se vern algunas de las funciones ms utilizadas para el empleo de fechas. El da 1 de enero de 1970 a la 00:00:00 GMT comenzo la "era UNIX". Cuando se solicita la hora a un ordenador, realmente no se obtienen la hora, los minutos y los segundos de un da de un mes y de un ao determinado, se obtienen los segundos transcurridos desde el inicio de la era de UNIX, a este valor se le denomina "timestamp". La funcin time() devuelve un nmero entero que representa la marca de tiempo (timestamp) correspondiente al instante en que se ejecuta dicha funcin.

<?php /*----------------------------------------------------------------* Mdulo: 3 Prctica: 1 * Autor: Fecha: * Descripcin: * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ ?> <html> <?php // definimos la constante para el salto de lnea HTML define("B","<br>"); echo B; echo B; echo B; echo "PHP<br> \n"; echo "------------------<br> \n"; echo "Hola <b>Mundo</b> \n"; echo "Ahora son las: ",time()," \n"; ?> </html>

Figura 3.3.1. Ejemplo de la funcin time().

Este nmero entero es poco til, a la hora de mostrar el tiempo, la forma normal de trabajar sigue siendo con das, meses, aos, horas, minutos y segundos. Y para ello PHP dispone de una funcin que se encarga de obtener la fecha del sistema presentada de una forma determinada. Esta funcin es getdate() que devuelve una matriz asociativa con la informacin de la fecha y hora del sistema. Los elementos de la matriz son: Clave Descripcin Ejemplo de valores devueltos 0 a 59 0 a 59 0 a 23 1 a 31 0 (para el Domingo) a 6 (para el Sbado) 1 a 12 Ejemplos: 1999 o 2003 0 a 365 Sunday a Saturday

"seconds" Representacin numrica de segundos "minutes" Representacin numrica de minutos "hours" "mday" "wday" "mon" "year" "yday" "weekday" "month" 0 Representacin numrica de horas Representacin numrica del da del mes Representacin numrica del da de la semana Representacin numrica de un mes Una representacin numrica completa de un ao, 4 dgitos Representacin numrica del da del ao Una representacin textual completa del da de la semana

Una representacin textual completa de un mes, January a December como January o March Segundos desde el Epoch Unix, similar a los Depende del sistema, tpicamente valores devueltos por time() y usados por date(). -2147483648 a 2147483647.

<?php /*----------------------------------------------------------------* Mdulo: 3 Prctica: 2 * Autor: Fecha: * Descripcin: * Pre condi.:

* Post cond.: -----------------------------------------------------------------*/ ?> <html> <?php // definimos la constante para el salto de lnea HTML define("B","<br>"); echo B; echo B; echo B; echo "PHP<br> \n"; echo "------------------<br> \n\n"; $hora=getdate(); echo "Ahora son las: ",$hora[hours]," horas \n"; ?> </html> En el ejemplo anterior se muestra la hora actual del servidor.

Formato de fechas PHP dispone de la funcin date() que devuelve una cadena de caracteres que se corresonden con la fecha a la que se ha aplicado un determinado formato. Sintaxis: string date(strinf formto [,int hora]); Para la definicin del formato disponemos de las siguientes opciones, no se han mostrado todas las opciones de que dispone, solo las ms utilizadas: Opcin d D F h H i l m M s Y y Descripcin Da del mes con dos dgitos. Da de la semana con tres letras (ejemplo Mon). Nombre del mes completo. Hora con dos dgitos, con fromato 01 a 12. Hora con dos dgitos, con fromato 00 a 23. Minutos con dos dgitos. Ele minscula, aparece el nombre completo del da de la semana (ingles). Mes con dos dgitos. Mes con tres letras (ejemplo Mar). Segundos con dos dgitos Ao con cuatro dgitos Ao con dos dgitos

Veamos un ejemplo donde se muestra la utilizacin de estas opciones: <?php /*----------------------------------------------------------------* Mdulo: 3 Prctica: 3 * Autor: Fecha: * Descripcin: * Pre condi.: * Post cond.:

-----------------------------------------------------------------*/ ?> <html> <?php // definimos la constante para el salto de lnea HTML define("B","<br>"); echo B; echo B; echo B; echo "PHP<br> \n"; echo "------------------<br> \n\n"; echo "Hoy es ", date("D"), ", ", date("d"), " de ", date("F"), " de ", date("Y"),"\n"; echo B; echo B; // directamente desde date() echo date("\ho\y e\s D, d \de F \de Y"); ?> </html> Escribe el cdigo del ejemplo anterior y comprueba el resultado.

Figura 3.3.2. Ejemplo de la funcin date().

Manipulacin de fechas La funcin strftime() representa otra posibilidad de aplicar formato a una fecha. A diferencia de la anterior esta funcin utiliza las conversiones locales de la mquina desde la que se ejecuta el script para devolver una cadena con el formato definido. Los nombre del mes y del da de la semana, siguen los valores establecidos por la funcin setlocate(). El formato quedar definido por los siguientes valores: Opcin %a %A Descripcin Nombre del da de la semana abreviado (segn idioma). Nombre del da de la semana completo (segn idioma).

%b %B %c %d %H %I %m %M %S %x %X %y %Y

Nombre del mes abreviado. Nombre del mes completo. Representacin de fecha y hora (segn idioma). Da del mes en formato 01 a 31. Hora como un nnero de 00 a 23. Hora como un nnero de 01 a 12. Mes como un nmero de 01 a 12. Minuto en nmero. Segundos en nmero. Representacin por defecto de la fecha sin la hora. Representacin por defecto de la hora sin la fecha. Ao en nmero de 00 a 99. Ao con cuatro dgitos.

Ahora veremos el ejemplo anterior, para que aparezca en castellano. <?php /*----------------------------------------------------------------* Mdulo: 3 Prctica: 4 * Autor: Fecha: * Descripcin: * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ ?> <html> <?php // definimos la constante para el salto de lnea HTML define("B","<br>"); // definicin de idioma setlocale(LC_TIME,"es_ES"); echo B; echo B; echo B; echo "PHP<br> \n"; echo "------------------<br> \n\n"; echo "Hoy es ", strftime("%A"), ", ", strftime("%d"), " de ", strftime("%B"), " de ", strftime("%Y"),"\n"; echo B; echo B; // directamente desde date() echo strftime("hoy es %A %d %B %Y "); ?> </html> Por ltimo veremos la funcin checkdate(), que permite comprobar si una determinada combinacin de da, mes y ao representa una fecha vlida. La funcin debe recibir tres parmetros numricos correspondientes al mes, al da y al ao y devuelve true si los parmetros resultan una fecha vlida y false en cualquier otro caso. La sintaxis es la siguiente: int checkdate(int mes, int dia, int anio);

Mdulo 4

Programacin en PHP y Bases de datos

Mdulo 4: Entrada/Salida. Formularios. Ficheros


Objetivos

Conocer el mecanismo de paso de informacin entre pginas a travs de formularios y sus particularidades. Gestionar el almacenamiento y recuperacin de informacin de manera externa a la pgina mediante el uso de ficheros.

Contenidos
En este mdulo se expondrn, en suma, algunos de los mtodos que permiten a una pgina web transferir informacin a otro, y guardarla para una posterior obtencin. ndice de apartados

Operatividad con formularios Envo y validacin de formularios. Gestin de ficheros

Mdulo 4

Programacin en PHP y Bases de datos

Mdulo 4: Operatividad con formularios


En este apartado, vamos a ver como operar con formularios y, en particular, nos detendremos a examinar el tratamiento que stos hacen de la informacin que se quiere transmitir. Como prerequisito, resultara conveniente recordar todo lo concerniente a HTML relacionado con su diseo, esto es, aquellas etiquetas implicadas en la creacin de un formulario. Aconsejamos a tal efecto la siguiente pgina:
z

http://www.desarrolloweb.com/articulos/647.php?manual=21

Un ejemplo para empezar ...


El siguiente ejemplo podra ser el formulario ms sencillo que puede darse. Como se puede observar, contiene un campo de texto (en el que se nos sugiere introducir nuestro nombre) y un botn de envo. Cpialo, gurdalo en tu carpeta de prcticas con el nombre practica41.htm y prubalo en el navegador. NOTA: para el correcto funcionamiento del paso de informacin a travs de los formularios es conveniente que la directiva REGISTER_GLOBALS del fichero de configuaracin "php.ini" est a "On". <html> <body> <form method="post" action="practica41_resp.php"> <p> Introduce tu nombre: <input name="nombre" type="text"> <br> <input type="submit" name="enviar" value="enviar" > </p> </form> </body> </html>

>> Observaciones:

un formulario (como el anterior) hace de cada objeto "input" una variable, que tendr aparejada un dato. En nuestro caso, se generarn dos variables: { nombre (perteneciente al botn tipo "text") { enviar (perteneciente al botn tipo "submit") la etiqueta "form" contiene dos parmetros importantes: { method: define la modalidad de envo de la informacin. Los valores posibles son POST o GET; en el primer caso, los valores se transmiten de manera oculta (no aparecen en la barra de direcciones del navegador); en el segundo caso, aparecera, por ejemplo: http://localhost/processa.php? nom=jaume&curs=1&grup=A

La clausula action: indica el nombre fichero receptor de los datos del formulario.

Como hemos sugerido, la accin de pulsar el botn de envi del formulario desencadena la transmisin de ciertos a datos a una pgina receptora, que deber ser cdigo PHP. Este podra ser un ejemplo ( cpialo, gurdalo en tu carpeta de prcticas con el nombre practica41_resp.php y prubalo en el navegador). <?php /*----------------------------------------------------------------* Mdulo: 4 Prctica: 1 Fichero: practica41_resp.php * Descripcin: Ejemplo formulario (1) * Pre condi.: * Post cond.: -----------------------------------------------------------------*/

// Exponemos 2 posibilidades: la primera usa el array $_POST $op1 = $_POST['nombre']; echo "Hola, ".$op1."!<br><br>"; echo "Te gusta el PHP?"; // Esta segunda no lo utiliza (si tienes activado el uso de variables globales $op2 = $nombre; echo "Hola, ".$op2."! (este nombre no aparecer)<br><br>"; echo "Te gusta el PHP?"; ?> Este script muestra el contenido de la variable "nombre" originada en el formulario de dos formas. En primer lugar, recurre al array $_POST -que abordaremos a continuacin-; en segundo lugar, vuelca su contenido en la variable "op", para mostrar finalmente su contenido por pantalla.

Arrays $_POST i $_GET En versiones de PHP posteriores a la 4.2.0, existen dos formas de acceso a las variables transmitidas a travs de un formulario:

A travs de variables globales: cada nombre de variable del formulario (name="...") est disponible como variable global ($codi). Este es el sistema tradicional y el ms simple de implementar, pero tambin ms inseguro, por lo cual lo desaconsejamos (adems, solo funcionar si en el " php.ini" la directiva register_globals est activada). A travs de tres arrays asociativos que PHP genera en este proceso:

Arrays _POST o HTTP_POST_VARS _GET o HTTP_GET_VARS

Explicacin Array asociativo que contiene las variables pasadas por el mtodo POST Array asociativo que contiene las variables

pasadas por el mtodo GET

La manera de acceder a estos arrays sera, por ejemplo: $_POST['nombre'] donde "nombre" sera el nombre de la variable y, por tanto, equivalente a $nombre, teniendo en ambos casos el valor introducido en el formulario. Sugerimos la ejecucin de ambas pginas con el parmetro action ajustado a "GET", a fin de apreciar la diferencia.

Una variante ...


Veamos ahora una variante al ejemplo anterior. Cpialo, gurdalo en tu carpeta de prcticas con el nombre practica41_b.php y prubalo en el navegador. <? /*----------------------------------------------------------------* Mdulo: 4 Prctica: 1b Fichero: practica41_b.php * Descripcin: Ejemplo formulario (2) * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ ?> <html> <body> <form method="post" action="<? echo $_SERVER["PHP_SELF"]; ?>" > <p> Introduce tu nombre: <input name="nombre" type="text"> <br> <input type="submit" name="enviar" value="enviar" > </p> </form> </body> </html> <? if(isset($_POST["enviar"])){ echo "Hola, ".$_POST["nombre"]."!<br><br>"; echo "Te gusta el PHP?"; } ?>

>> Observaciones:

en este caso, lo que antes eran dos pginas (una, la "emisora" de informacin, html, y la otra , la receptora de la informacin, php) han quedado fundidas en una nica, almacenada como .php . Por tanto, todo la funcionalidad queda resuelta en una nica pgina. Para ello, en el parmetro action insertamos un trozo de cdigo PHP en el que mostramos el valor de la variable interna $PHP_SELF que contiene el nombre del fichero actual interpretado (cabe observar como cdigo HTML y PHP se combinan para este cometido).

la funcin isset() determina si una variable dada est definida. Con ello, nos aseguramos que "venimos del formulario", ya que lo que estamos comprobando es que el botn "enviar" haya sido pulsado y, por tanto, que la variable haya sido generada.

Variables Predefinidas. A partir de PHP 4.1.0, el mtodo preferido para recuperar variables externas es mediante las superglobales. Antes de este punto, la gente recaa en register_globals o las matrices largas predefinidas en PHP ($HTTP_*_VARS). A partir de PHP 5.0.0, las matrices de tipo "long" de variables predefinidas, se pueden desactivar con la directiva register_long_arrays. Para ms informacin visitad esta pgina: http://es2.php.net/manual/es/reserved.variables.php

Un ejemplo ms completo
Veamos ahora un ejemplo con un formulario ms completo. Copia el cdigo y gurdalo en tu carpeta de prcticas con el nombre practica42.htm .

<html> <head> <title>Practica42.htm</title> </head> <body> <h2>Formulario de ejemplo (3): </h2> <form name="form1" method="post" action="practica42_resp.php"> <p>Nombre: <input name="nombre" type="text" id="nombre" maxlength="20"> </p> <p>Apellido: <input name="apellido" type="text" id="apellido" maxlength="20"> </p> <p>Selecciona un deporte: <select name="deporte" id="deporte"> <option>futbol</option> <option>basket</option> <option>tenis</option> <option>rugby</option> </select> </p> <p>Sexo:</p> <p> <input name="sexo" type="radio" value="m"> Masculino</p> <p> <input name="sexo" type="radio" value="f"> Femenino</p> <p> <input name="conducir" type="checkbox" id="conducir" value="checkbox"> Te gusta conducir? </p> <p>Aficiones:</p> <p> <textarea name="aficiones" cols="50" rows="5" id="aficiones"></textarea> </p>

<input type="submit" name="enviar" value="enviar" > <p>&nbsp;</p> </form> <p>&nbsp;</p> <p>&nbsp;</p> </body> </html>

A continuacin, se muestra un posible cdigo de tratamiento de los datos enviados por el formulario anterior. Cpialo, gurdalo en tu carpeta de prcticas con el nombre practica42_resp.php y prubalo en el navegador junto con su formulario. <? /*----------------------------------------------------------------* Mdulo: 4 Prctica: 2 Fichero: practica42_resp.php * Descripcin: Ejemplo formulario (3) * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ // Comprobamos si venimos del formulario if(!isset($_POST["enviar"])) echo "No hay datos"; else { // Dependiendo del tipo de objeto, utilizamos una // estructura de control diferente echo "Tu nombre es ".$_POST["nombre"]." ".$_POST["apellido"]."<br>"; if($_POST["conducir"]) echo "Has visto el anuncio de BMW <br>"; else echo "No tienes un BMW <br>"; if($_POST["sexo"]=="m") echo "Eres un hombre de pelo en pecho<br>"; else echo "Eres toda una mujer <br>"; switch($_POST["deporte"]){ case "futbol": echo "Eres futbolero<br>"; break; case "tenis": echo "Eres tenista<br>"; break; case "basket": echo "Eres del Pamesa<br>"; break; case "rugby": echo "Eres un bruto<br>"; break; } if($_POST["aficiones"]){ echo "Tus aficiones son:<br>";

echo nl2br($_POST["aficiones"]); } else echo "No tienes aficiones"; } echo "<p><a href=\"practica42.htm\">Volver al formulario</a></p>" ?>

>> Observaciones:

el script anterior no representa demasiadas dificultades; cada zona de cdigo se ocupa de cada una de las variables recibidas del formulario, atendiendo al tipo de objeto de formulario que las genera. la funcin nl2br(), inserta saltos de lnea HTML antes de cada salto de lnea, buscando respetar la disposicin de cada lnea del "textarea" original. por ltimo, tenemos un enlace de vuelta a la pgina del formulario.

Envo de ficheros desde un formulario


En este ltima seccin, vamos a ver cmo podramos hacer que una pgina web pudiera dar la posibilidad de "subir" un fichero seleccionado por el usuario al servidor.

Para ello, partiremos del siguiente cdigo, que debes copiar, guardar como practica43.htm.

<HTML> <HEAD> <TITLE>Carga de ficheros</TITLE> </HEAD> <BODY> <FORM ENCTYPE="multipart/form-data" ACTION="practica43_resp.php" METHOD="POST"> <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="1024000"> <INPUT TYPE="file" NAME="mifichero"> <INPUT TYPE="submit" VALUE="Enviar"> </FORM> </BODY> </HTML>

>> Observaciones:

El formulario anterior incluye algunas etiquetas novedosas:

En la etiqueta FORM: < FORM enctype=multipart/form-data..> que indica que el formulario est integrado por contenidos de diferente tipo, no solo texto plano. Un campo oculto que indica el tamao mximo del archivo a enviar: < input type=hidden name=MAX_FILE_SIZE value=1024000 > NOTA: a MAX_FILE_SIZE no se le puede dar un valor mayor que el valor que se haya especificado en la directiva upload_max_filesize en el "php.ini" . Por defecto se tiene un lmite de 2 MB.

Un campo con el nombre y ubicacin para el archivo: < input type=file name=mifichero >

Para el uso de este tipo de formularios se aaden una serie de variables que operan sobre ciertas caractersticas del archivo a transferir:

Variable
$nombre_archivo o $nombre_archivo_tmp $nombre_archivo_name $nombre_archivo_size $nombre_archivo_type

Descripcin
Nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo recibido. Nombre original del fichero en la mquina cliente. Tamao del archivo en bytes. Tipo MIME del archivo (un ejemplo podra ser "image/gif).

Es decir, para nuestro caso, tendremos una variable $mifichero desmembrada en 4 variables ms, cada una con su "extensin" ( _tmp,_name, _size y _type) . Pero como no podemos utilizar estas variables directamente por no tener a on la directiva de variables globales, utilizaremos la matriz $_FILES que contendr estos valores:

Variable
$_FILES['mifichero']['name'] $_FILES['mifichero']['type'] $_FILES['mifichero']['size'] $_FILES['mifichero']['tmp_name'] $_FILES['mifichero']['error']

Descripcin
Nombre original del fichero en la mquina cliente. Tipo MIME del archivo (un ejemplo podra ser "image/gif). Tamao del archivo en bytes. Nombre del fichero temporal que se utiliza para almacenar en el servidor el archivo recibido.

Es el cdigo de error generado en la carga del fichero. 0 significa todo OK.

Veamos en el siguiente ejemplo cmo podramos operar con ellas (cpialo, gurdalo como practica43_resp.php y ejectalo junto al formulario anterior).

<?php /*----------------------------------------------------------------* Mdulo: 4 Prctica: 3 Fichero: practica43_resp.php * Descripcin: Ejemplo formulario (2) * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ // visualizamos el contenido de las variantes de "mifichero" echo "Nombre: <B>".$_FILES['mifichero']['tmp_name']."</B>"; echo "<BR>"; echo "Tipo: <B>".$_FILES['mifichero']['type']."</B>"; echo "<BR>"; echo "Nombre original: <B>".$_FILES['mifichero']['name']."</B>"; echo "<BR>"; echo "Tamao: <B>".$_FILES['mifichero']['size']."</B>"; echo "<BR>";

// En la siguiente lnea indicamos la ruta donde guardaremos // el fichero "temporal" (adptala a tu caso) $ruta = "./carpeta/".$_FILES['mifichero']['name']; echo "<BR>"; echo "Ruta y nombre : <B>".$ruta; echo "<BR>"; echo "<BR>"; // Comprobamos si podemos subir el fichero // si es as, lo copiamos a su destino // sino, damos el pertienente aviso por pantalla if(move_uploaded_file($_FILES['mifichero']['tmp_name'],$ruta)) echo "El archivo se ha subido con xito"; else { echo "No pudo transferir el fichero: " . $_FILES['mifichero']['name']."<BR>"; echo "Error: " . $_FILES['mifichero']['error']; } // Si el archivo es demasiado grande, no se habr subido if($_FILES['mifichero']['error']==2) echo "Archivo demasiado grande"; ?>

>> Observaciones:

en las primera lneas, mostramos el contenido de las diferentes "extensiones" del la matriz $_FILES['mifichero'], recibida del formulario. Hay que diferenciar entre el nombre del fichero original y el nombre del fichero temporal . El primero hace referencia al nombre sin ms; el segundo es un nombre para el fichero temporal transferido, el cual hay que renombrar y guardar en el lugar que decidamos de nuestro disco duro. Esto es as porque, el fichero transferido es temporal y se perder si no es guardado. definimos una variable $mifichero_def en el cual definimos la ruta del directorio donde alojaremos nuestro fichero transferido. "subimos" el fichero al servidor mediante la funcin move_uploaded_file() , comprobando si se da algn error en el proceso. por ltimo, comprobamos si el valor de la variable $_FILES['mifichero']['error'] es 2, ya que en ese caso habremos excedido el tamao permitido y no se habr efectuado la transferencia.

Un lbun de fotos: carga de archivos a una pgina web. La idea es ofrecer a los usuarios un formulario HTML con un campo tipo file que nos permitir cargar archivos. Una vez cargado el archivo, PHP se vuelve a activar y comprobar que el archivo sea correcto. z Solo se podrn utilizar archivos grficos en formato GIF o JPEG. z El tamao mximo permitido ser de 200 KBytes (200.000 bytes). z Todas las imagenes se almacenarn en una carpeta llamada imagenes. z Una vez cargado se recorrer la carpeta de imagenes mostrando cada una de ellas. Veamos el siguiente ejemplo cpialo, gurdalo como practica44.php y ejectalo.
z

<? /*-----------------------------------------------------------------

* Mdulo: 4 Prctica: 4 Fichero: practica44.php * Descripcin: Carga de formularios * Pre condi.: * Post cond.: -----------------------------------------------------------------*/ ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Cargar un archivo</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> </head> <body> <h1>Mi lbum de fotos en lnea</h1> <h3>Cargar archivo</h3> <form action='<?php echo $_SERVER['PHP_SELF'] ?>' method="post" enctype="multipart/form-data"> <input type="file" name="archivo"> <input type="submit" name='submit' value="Cargar archivo"> </form> <?php $ruta = "imagenes/"; // Indicar ruta if (isset($_FILES['archivo']) && $_FILES['archivo']['size'] > 0) { $tamanyomax = 200000; // Indicar tamao en bytes $nombretemp = $_FILES['archivo']['tmp_name']; $nombrearchivo = $_FILES['archivo']['name']; $tamanyoarchivo = $_FILES['archivo']['size']; $tipoarchivo = GetImageSize($nombretemp); if ($tipoarchivo[2] == 1 || $tipoarchivo[2] == 2) { // GIF o JPG? if ($tamanyoarchivo <= $tamanyomax) { // Archivo demasiado grande? if (move_uploaded_file($nombretemp, $ruta . $nombrearchivo)) { echo "<p>El archivo se ha cargado <b>con xito</b>. Tamao de archivo: <b>$tamanyoarchivo</b> bytes, Nombre de imagen: <b>$nombrearchivo</b><br></p>"; } else { echo "<p>No se ha podido cargar el archivo.</p>"; } } else { echo "<p>El archivo tiene ms de <b>$tamanyomax bytes</b> y es demasiado grande.</p>"; } } else { echo "<p>No es un archivo GIF o JPG vlido.</p>"; } echo "<form action='{$_SERVER['PHP_SELF']}' method='post'> <input type='submit' value='OK'></form>"; } $filehandle = opendir($ruta); // Abrir archivos while ($file = readdir($filehandle)) { if ($file != "." && $file != "..") { $tamanyo = GetImageSize($ruta. $file); echo "<p><img src='$ruta$file' $tamanyo[3]><br></p>\n"; } } closedir($filehandle); // Fin lectura archivos ?> </body> </html>

Si lo que queremos es mostrar la anchura mxima de la imagen (por ejemplo 600 pxeles) modificarems ligeramente la pgina y utilizaremos la funcin getImageSize() y su valor ndice 0. <?php $ruta = "imagenes/"; // Indicar ruta if (isset($_FILES['archivo']) && $_FILES['archivo']['size'] > 0) { $anchomax = 600; $nombretemp = $_FILES['archivo']['tmp_name']; $nombrearchivo = $_FILES['archivo']['name']; $tamanyoarchivo = $_FILES['archivo']['size']; $tipoarchivo = GetImageSize($nombretemp); if ($tipoarchivo[2] == 1 || $tipoarchivo[2] == 2) { // GIF o JPG? if ($tipoarchivo[0] <= $anchomax) { // Archivo demasiado ancho? if (move_uploaded_file($nombretemp, $ruta . $nombrearchivo)) { echo "<p>El archivo se ha cargado <b>con xito</b>. Tamao de archivo: <b>$tamanyoarchivo</b> bytes, Anchura: <b>$tipoarchivo[0]</b> Nombre de imagen: <b>$nombrearchivo</b><br></p>"; } else { echo "<p>No se ha podido cargar el archivo.</p>"; } } else { echo "<p>El archivo tiene una anchura superior a <b>$anchomax pxeles</b> y es demasiado ancho.</p>"; } } else { echo "<p>No es un archivo GIF o JPG vlido.</p>"; } echo "<form action='{$_SERVER['PHP_SELF']}' method='post'> <input type='submit' value='OK'></form>"; Por ltimo ser recomendable que no pueda cualquiera subir un archivo al albn, para ello anadiremos un campo en el formulario que solicite el password, este password lo guardaremos en un archivo llamado password.inc.php que lo ubicaremos en una carpeta no accesible desde la web, casi siempre existe por defecto en servidores externos y se llama ../cgi-bin. Una vez comprobado el password pasaremos a cargar el archivo: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Cargar un archivo</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <body> <h2>Cargar archivo</h2> <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post"> Contrasea: <input type="password" name="pass"> <input type="submit" value="Enviar"> </form> <?php $login = false; //include("../cgi-bin/password.inc.php"); include("./password.inc.php"); if (isset($_POST['pass']) && $_POST['pass'] == $pw) { $login = true; } else if (isset($_GET['formavis']) && $_GET['formavis'] == "zuxrkk") { $login = true; } if ($login) { echo <<<FORMULARIO <h1>Mi lbum de fotos en lnea</h1> <h3>Cargar archivo</h3>

<form action='{$_SERVER['PHP_SELF']}?formavis=zuxrkk' method="post" enctype="multipart/form-data"> <input type="file" name="archivo"> <input type="submit" name='submit' value="Cargar archivo"> </form> FORMULARIO; $ruta = "./imagenes/"; // Indicar ruta if (isset($_FILES['archivo']) && $_FILES['archivo']['size'] > 0) { $anchomax = 600; $nombretemp = $_FILES['archivo']['tmp_name']; $nombrearchivo = $_FILES['archivo']['name']; $tamanyoarchivo = $_FILES['archivo']['size']; $tipoarchivo = GetImageSize($nombretemp); if ($tipoarchivo[2] == 1 || $tipoarchivo[2] == 2) { // GIF o JPG? if ($tipoarchivo[0] <= $anchomax) { if (move_uploaded_file($nombretemp, $ruta . $nombrearchivo)) { echo "<p>El archivo se ha cargado <b>con xito</b>. Tamao de archivo: <b>$tamanyoarchivo</b> bytes, Ancho: <b>$tipoarchivo[0]</b> Nombre de imagen: <b>" . "$nombrearchivo</b><br></p>"; } else { echo "<p>No se ha podido cargar el archivo</p>"; } } else { echo "<p>El archivo tiene una anchura superior a <b>$anchomax pxeles</b> y es demasiado ancho.</p>"; } } else { echo "<p>No es un archivo GIF o JPG vlido.</p>"; } echo "<form action='{$_SERVER['PHP_SELF']}?formavis=zuxrkk' method='POST'> <input type='submit' value='OK'></form>"; } $filehandle = opendir($ruta); // Abrir archivos while ($file = readdir($filehandle)) { if ($file != "." && $file != "..") { $tamanyo = GetImageSize($ruta . $file); echo "<p><img src='$ruta$file' $tamanyo[3]><br></p>\n"; } } closedir($filehandle); // Fin lectura archivos } ?> </body> </html>

Mdulo 4

Programacin en PHP y Bases de datos

Envo y validacin de formularios.


En este apartado veremos como enviar el contenido de los formularios por correo electrnico. En conjuncin con el servicio SMTP instalado en el servidor (en el caso de linux suele ser Sendmail) se enviar la informacin. En primer lugar crearemos un mini servicio de envo, despus el servicio de envo universal y finalmente lo ampliaremos.

La funcin mail(). Su sintaxis es la siguiente: mail("e-mail del distanatario", "asunto", "mensaje", "De: e-mail del remitente") Es posible utilizar variables en lugar de las cadenas indicadas en la sintaxis. En caso de que el envo sea satisfactorio, la funcin devuelve el valor TRUE, en caso contrario el valor devuelto ser FALSE. El mini sistema de envo: Mostraremos un formulario que solicita el correo electrnico del destinatario y un campo textarea con el contenido del mensaje, as como un botn para realizar el envo. Si este se realiza correctamete se indicar con un mensaje, en caso contrario dara un mensaje de error, ( cpialo, gurdalo en tu carpeta de prcticas con el nombre minimail.php y prubalo en el navegador).

<html> <head> <title>Mini-Correo</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="../css/nuevo.css"> </head> <body> <h1>Mini-Correo</h1> <p>Enveme un mensaje de e-mail</p> <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post"> Su direccin de correo electrnico: <input type="text" name="mail"> <br> Qu quiere decirme:<br> <textarea name="mensaje" cols="50" rows="5" wrap="soft"> </textarea> <br> <input type="submit" value="Enviar mensaje"> </form> <?php if (isset($_POST["mail"]) && $_POST["mail"] != "") { if(mail("tu@correo.com", "Tiene correo nuevo", "$mensaje", "De:".$_POST["mail"])) { echo "<p>Gracias! Su mensaje ha sido enviado.</p>\n"; }

else { echo "<p>Por desgracia, se ha producido un error al enviar.</p>\n"; } } ?> </body> </html>

Si lo que queremos es un sistema de envo de formularios que enve todos sus formularios, independientemente de cmo estn construidos y de cuntos campos tenga, necesitaremos utilizar los vectores asociativos para recorrer la totalidad de campos del formulario (para ello ser necesario dar un nombre a todos los campos del formulario), ( cpialo, gurdalo en tu carpeta de prcticas con el nombre minimail2.php y prubalo en el navegador). <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Valoracin de formularios</title> </head> <body> <?php /* LAS SIGUIENTES LNEAS SE PUEDEN EDITAR */ $destinatario="tu@correo.com"; $asunto="Escriba aqu el texto del mensaje"; $mensaje="Se han insertado los siguientes datos:\n\n"; /* FINAL DE EDICIN */ /* El bucle lee los pares atributo-valor: */ foreach($_POST as $name=> $value) { /* Todos los datos se almacenan en $mensaje: */ $mensaje.="$name=$value\n"; // Versin abreviada para la concatenacin } /* Enviar! Preparar el campo de mail en el formulario */ if (isset($_POST["mail"]) && $_POST["mail"]!="") { // Campo mail establecido y no vaco? /* Se activa la funcin de envo mail() */ if(mail($destinatario, $asunto, $mensaje, "De: ".$_POST["mail"])) { /* Ha tenido xito la funcin mail()? El usuario ver las siguientes lneas */ echo "<h1>Gracias por sus comentarios!</h1>\n"; echo "<p>Su mensaje ha sido enviado.</p>\n"; } /* En caso contrario, se muestra un mensaje de error: */ else { echo "<h1>Desgraciadamente, no se ha podido enviar su mensaje.</h1>\n"; } } // cerrar la funcin externa if /* else si no se ha establecido la variable $mail: */ else { echo "<h1>Por favor, escriba su direccin de correo electrnico.</h1>\n"; } ?> </body> </html> Esta pgina php recibir en el vector $_POST con todos los campos del formulario que llamo a esta pgina, se van concatenando en la variable $mensaje con el objetivo de envialos por correo electrnico.

Pero ser necesario que la pgina que llame a esta tenga un formulario con un campo llamado mail (este campo ser utilizado para saber de donde venimos), y por lo tanto daremos un mensaje de error en los casos de que el correo electrrnico del destinatario no existe o no se realice correctamente el envio y un mensaje de confirmacin si el correo se envia correctamente, Veremos una ltima versin del programa de envio de formulario por correo electrnico, en esta versin solicitaremos el nombre, los apellidos, el correo del destinatario y el cuerpo del mensaje. Mostraremos el correo antes de confirmar el envio y en caso de no estar conforme podremos volver atrs, modificar y volver a confirmar el envio, ( cpialo, gurdalo en tu carpeta de prcticas con el nombre minimail3.php y prubalo en el navegador).

<html> <head> <title>El formulario para enviar su opinin</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="../css/nuevo.css"> </head> <body> <h1>El formulario para enviar su opinin</h1> <?php // Botn submit vaco, 0 o no definido? if (empty($_POST["submit"])) { ?> <h3>1. Escriba sus datos</h3> <form action="<?PHP echo $_SERVER["PHP_SELF"]; ?>" method="post"> Nombre: <input type="text" name="nombre"><br> Apellido: <input type="text" name="apellido"><br> E-mail: <input type="text" name="mail"><br><br> Su opinin:<br> <textarea name="feedback" cols="50" rows="5" wrap="soft"> </textarea><br><br> <input type="reset" name="reset" value="xXx Borrar datos"> <!-- importante: asignar el nombre submit al botn de envo! --> <input type="submit" name="submit" value="Enviar ahora --&gt;"> </form> <?php } // En caso contrario, es decir si el botn de submit existe else { ?> <h3>2. Vuelva a comprobar sus datos</h3> <?php foreach($_POST as $key => $value) { // repasa todos los campos del formulario if (empty($value)) { // valor vaco, 0 o no definido? ?> <p>Por favor, rellene <b>todos los campos</b>.</p> <form> <input type="button" value="&lt;-- Volver al formulario" onclick="javascript:history.back()"> </form> <!-- Consejo de seguridad, visible slo para usuarios sin JavaScript: --> <noscript>Utilice el botn ATRS del navegador para volver</noscript> <?php exit; // termina el bucle y el programa.

} } echo "<p>Hola <b>".$_POST['nombre'].$_POST['apellido']."</b><br>\n"; echo "Su direccin de correo electrnico es <b>".$_POST["mail"]."</b>!<br>\n"; echo "Ha introducido la siguiente informacin:<br>\n"; // Eliminar las barras invertidas y mantener los saltos de lnea para mostrar el contenido: echo "<i>" . stripslashes(nl2br($_POST["feedback"])) . "</i><br><br>\n"; echo "Son correctos estos datos?</p>\n"; // Los datos introducidos por el usuario se escriben en un campo: $mensaje=$_POST["nombre"].$_POST["apellido"].", ".$_POST["mail"]." ha escrito\n".$_POST ["feedback"]; $mensaje=htmlspecialchars($mensaje); // Enmascarar los caracteres especiales de HTML $mensaje=stripslashes($mensaje); // Eliminar las barras invertidas // Crear un nuevo formulario para reenviarlo al script de envo echo "<form action=\"mail.php\" method=\"post\">\n"; // Truco: mostrar los datos de los campos ocultos del formulario: echo "<input type=\"hidden\" name=\"mail\" value=\"".$_POST["mail"]."\">\n"; echo "<input type=\"hidden\" name=\"mensaje\" value=\"$mensaje\">\n"; echo "<input type=\"button\" value=\"&lt;-- No, por favor corrjalo\" "; echo "onclick=\"javascript:history.back()\">\n"; // Concesin para los que desactiven JavaScript: echo "<noscript>Vuelva atrs utilizando el botn ATRS.</noscript>\n"; echo "<input type=\"submit\" name=\"mailsender\" "; echo "value=\"Perfecto --&gt;\"></form>\n"; } ?> </body> </html> El fichero mail.php ser el encargado de realizar el envo final:

<html> <head> <title>Mini-Correo</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="../css/nuevo.css"> </head> <body> <h1>Se envan los datos</h1> <?php if (isset($_POST["mail"]) && $_POST["mail"] != "") { if(mail("clea@iescamp.com", "Tiene correo nuevo",$_POST["mensaje"], "De:".$_POST["mail"])) { echo "<p>Gracias! Su mensaje ha sido enviado.</p>\n"; } else { echo "<p>Por desgracia, se ha producido un error al enviar.</p>\n"; } } ?> </body> </html>

Mdulo 4

Programacin en PHP y Bases de datos

Gestin de Ficheros
En este apartado vamos a trabajar con ficheros. Anteriormente, fuimos capaces de comprobar la afinidad existente entre PHP y C en tanto que, por ejemplo, su sintaxis general o sus estructuras de control presentaban un alto grado de similitud. En el caso de la gestin de ficheros, PHP cuenta con un cuerpo de funciones base similar al existente en C, respetando incluso la sintaxis de stas. Por lo tanto, comenzaremos haciendo un repaso de las ms importantes, al que sumaremos algunas especficas de PHP, al tiempo que lo ilustraremos con ejemplos concretos.

Funciones ms importantes

fopen(archivo,modo): funcin de apertura de fichero que devuelve una valor numrico de tipo integer con la referencia al archivo abierto. Esta funcin dispone de diversos modos de apertura del fichero para lectura/escritura. r Slo lectura. El puntero al comienzo del archivo. r+ Lectura y escritura; apuntador al inicio del archivo. w Slo escritura, si no existe el archivo lo crea, si existe lo convierte en fichero de longitud cero y el apuntador se coloca en el inicio. w+ Lectura y escritura, si no existe el archivo lo crea, si existe lo convierte en fichero de longitud cero y el apuntador se coloca en el inicio. a Modo append, slo escritura, si no existe lo crea. Si existe, el apuntador se coloca al final del fichero. a+ Modo append, lectuta y escritura, si no existe lo crea. Si existe, el apuntador se coloca al final del fichero. fclose(indicador_archivo): funcin que cierra un archivo valindose de su referencia en la apertura. Devuelve TRUE si el fichero se cerr correctamente, FALSE en caso contrario.

file_exists(fichero): funcin que devuelve TRUE si el archivo especificado existe o FALSE en caso contrario. fgets(indicador_archivo,longitud): funcin que devuelve una cadena de como mucho longitud - 1 bytes ledos del fichero apuntado por el indicador_archivo. La lectura acaba cuando son ledos (longitud - 1) bytes, cuando se llega a una nueva lnea (el caracter de nueva lnea se incluye en el valor devuelto), o cuando se llega a un EOF (lo que ocurra primero). fputs(indicador_archivo,cadena): funcin que escribe una cadena en el fichero indicado. El fichero debe estar previamente abierto la funcin devuelve TRUE si se ha escrito con xito y FALSE en caso contrario. feof(indicador_archivo): funcin que comprueba si hemos alcanzado el final de fichero, devolviendo TRUE en tal caso. flock(indicador_archivo, modo): bloquea o desbloquea el fichero para que no pueda ser abierto en modo escritura.

El siguiente ejemplo combina algunas de las funciones anteriores. Cpialo, gurdalo en tu carpeta de prcticas con el nombre practica43_2.php y prubalo en el navegador.:

<? /*----------------------------------------------------------------* Mdulo: 4 Prctica: 3 Fichero: practica43_2.php * Descripcin: Ejemplo funciones de ficheros (I) * Pre condi.: * Post cond.: -----------------------------------------------------------------*/

$nombre="prueba.txt" if(file_exists($nombre)){ if($ref=fopen($nombre,"r")) while(!feof($ref)){ $linea=fgets($ref,11); echo $linea;} } else echo "El archivo no existe"; fclose($ref); ?>

>> Observaciones: en la primera instruccin "if", comprobamos que el fichero $nombre existe con la ayuda de la funcin file_exists. de ser as, abrimos el fichero en modo lectura con la funcin fopen, para ... ... acto seguido, extraer once caracteres de cada una de las lneas del fichero de que conste el fichero mediante la funcin fgets hasta que alcancemos su final, detectado por la funcin feof . por ltimo, cerramos el fichero abierto mediante la funcin fclose

Otras funciones que cabra tener presente seran:

readfile(fichero): funcin que visualiza el contenido de un fichero por la salida estndar (consola), preservando su disposicin. file(): Si queremos acceder a todo el contenido de un fichero y operar con l, podemos usar la funcin file(). Esta funcin lee el fichero lnea por lnea y devuelve un array (un elemento por lnea).

El siguiente ejemplo combina utiliza la funcin file. Cpialo, gurdalo en tu carpeta de prcticas con el nombre practica44.php y prubalo en el navegador:

<? /*----------------------------------------------------------------* Mdulo: 4 Prctica: 4 Fichero: practica44.php * Descripcin: Ejemplo formulario (1)

* Pre condi.: * Post cond.: -----------------------------------------------------------------*/ $nombre="prueba.txt"; if(file_exists($nombre)){ // Con "file" generamos el array "texto" // Cada lnea dl fichero ser un elemento del array $texto=file($nombre); // Mostramos cada una de las lneas del array // apoyndonos en las funciones 'list' y 'each' while(list($linea,$contenido)=each($texto)) echo ($linea+1)." --> ".$contenido."<br>"; } else echo "El archivo no existe"; ?>

>> Observaciones:

La funcin file nos permite volcar el contenido del fichero a un array de tantos elementos como lneas tenga el fichero. En el bucle "while" extraemos uno a uno, en cada iteracin, los elementos del array $texto mediante la funcin each. Acto seguido, la funcin list se encarga de separar, por una lado, el ndice del elemento, el cual es guardado en la variable $linea, y, por otro, el contenido del elemento, que es guardado en la variable $contenido . El contenido de ambas variables, $linea y $contenido , son mostrados en el navegador. Como se puede observar, en ningn momento hemos necesitado abrir y cerrar el fichero para poder acceder a su contenido, lo cual supone una ventaja.

Mdulo 5

Programacin en PHP y Bases de datos

Servidores de bases de datos


Objectivos
Los objetivos son:

Analizar diferentes motores de base de datos. Instalar el driver ODBC para acceder a la BD. Conocer herramientas para administrar las bases de datos. Conocer las operaciones bsicas que se pueden hacer con SQL.

Contenidos
Anlisis de bases de datos. Drivers ODBC. Instalacin y configuracin de PhpMyadmin. Herramientas para administrar una BD. Lenguaje SQL. Conexin de PHP con MySQL.

Mdulo 5

Programacin en PHP y Bases de datos

Anlisis de bases de datos


El objetivo de este mdulo es conocer diferentes motores de bases de datos.

Bases de datos Open Source


Debido a las constantes actualizaciones y mejoras que van apareciendo en los distintos productos deberiamos tomar este anlisis como una introduccin a las bases de datos. Analizaremos tres ejemplos de bases de datos:

MySQL PostgreSQL Interbase Conclusiones

MySQL
Los origenes de Mysql datan de 1979, como una herramienta de BD llamada UNIREG, creada por Michael Widenius para la empresa sueca TcX. El 1994, TcX necesitaba un servidor SQL para el desarrollo de aplicaciones web. Probaron varios servidores comerciales para las inmensas tablas de TcX, pero todo lo que encontraron fue demasiado lento. Incluso analizaron mSQL, pero no implementaba alguna de las caracteristicas que TcX necesitaba. Se encargo a Widenius el desarrollo de un servidor de bases de datos, con una interface parecido a mSQL, ya que en aquel momento estaban disponibles algunas herramientas gratuitas para mSQL que se podan adaptar con poco esfuerzo al nuevo servidor. En1995,David Axmark de Detron HB anim a TcX para que publicase MySQL en Intenet. MySQL no es un proyecto Open Source realmente, ya que bajo ciertas condiciones es necesaria una licencia. Pese a todo, MySQL es uno de los preferidos de la comunidad Open Source. MySQL no se limita a la comunidad Open Source, tambin es portable a otros sistemas operativos comerciales, como Windows (NT/2000/95/98/ME/XP), Solaris y otros. Uno de los xitos de su expansin ha sido la inclusin de esta base de datos en casi todas las distribuciones de Linux, adems de estar disponible en casi todas las plataformas hardware y sistemas operativos. El gran propulsor de esta BD ha sido el lenguaje interpretado para web PHP, que ha hecho que Mysql creciera al mismo tiempo que lo ha hecho la comunidad PHP.

Caractersticas de MySQL Es posiblemente un de los motores de BD ms rpidos que se pueden encontrar, adems de consumir pocos recursos de la mqina en la que esta instalada.

Es fcil de instalar y administrar frente a otros productos del mercado. Dispone de infinidad de

utilidades, manuales y documentacin que la comunidad de usuarios se ha encargado de realizar desinteresadamente. La gestin de la base de datos utiliza SQL (Structured Query Language), adems de utilizar protocolos de comunicacin de bases de datos desarrollados por Microsoft, mediante ODBC o ADO. Ofrece una gran capacidad de connectividad, ya que muchos clientes pueden conectar simultaneamente al servidor, y pueden utilizar deferentes bases de datos a la vez. Se puede acceder de forma interactiva utilizando diferentes interfaces que permiten introducir y visualizar las consultas. Adems dispone de gran variedad de interfaces de programacin para su acceso (C, Perl, Java, PHP,Python...). Se trata de una BD preparada para el trabajo en red y se puede acceder desde cualquier sitio de internet como resultado de su gran fabilidad en materia de control de permisos y seguridad de acceso. La versin 3.23 no cumplia la integridad referencial, con posibles problemas de inconsistencia de datos, y tampoco tena transacciones. En versiones actuales la mayoria de las deficiencias que tena han sido subsanadas. Aunque todava no cumple el 100 % de los requisitos de una verdadera RDBMS, ofrece otras caractersticas que hace que sea considerada como idnea para su uso.

PostgreSQL
Se puede afirmar PostgreSQL es la segunda BD ms popular implementada en el mercado Linux. PostgreSQL se diseo como una base de datos orientada a objetos, es decir, una ORDBMS, con la cual el concepto de tabla es sustituido por objeto, y se permite crear nuevos tipos de datos, hacer herencias de objetos, etc. PostgreSQL es, sin lugar a dudas, la base de datos ms implementada por los expertos, dispone de lo que MySQL le falta o faltaba, pero tambin carece de algunas de las caractersticas que posee MySQL. PostgreSQL tiene transacciones, integridad referencial, vistas y multitud de funcionalidades, por contra es un motor ms lento y ms pesado. La versin 7 incorpora MVCC (Multiversion Concurrency Control), gracias a la cual los bloqueos actuan solo en la sesin del cliente, y no en la de otros clientes.

PostgreSQL es una RDBMS poco viable para un servidor de internet, pero si para un servidor con pocas conexiones que requieren mucha funcionalidad, como un comercio on-line. Para operaciones sencillas y muchas conexiones, el sistema resulta poco recomendable, al tener en cuenta la velocidad y recursos utilizados.

InterBase
Borland, siguiendo la poltica de liberar las herramientas de desarrollo, liber InterBase. Se

trata de una buena BD, con 17 aos de antiguedad dentro del sector de las bases de datos comerciales. InterBase ofrece herramientas de pago para el mundo comercial. Es una de las primeras BD Open Source que es compatible con SQL92 en el nivel de entrada (MySQL, PostgreSQL y mSQL no lo son). Esto significa que podemos adaptarla a cualquier aplicacin que funcione sobre una BD compatible con SQL92, como Oracle, DB2, o Informix. InterBase es un producto muy profesional, preparado para cualquier proyecto que necesite una BD fiable. Tiene la mayoria de la funcionalidades de una base de datos comercial, no consume demasiados recursos, y tiene una velocidad prxima a MySQL, con algunas funcionalidades de PostgreSQL. Pero, Borland no ha liberado las herramientas ms avanzadas, y la comunidad de usuarios es muy pequea, comparando con los otros motores de BD.

Conclusiones
Hemos visto una introduccin de las posibles alternativas que tenemos, y segn el proyecto que tengamos que realizar, la posible solucin variar, ya que necesitaremos priorizar unas caractersticas sobre otras que deberemos sacrificar. Dependiendo de las fuentes que busquemos obtendremos una respuesta u otra, hay verdaderas batallas por establecer cul de ellas es mejor, pero la realidad es que no hay nada perfecto, y dependiendo de nuestras habilidades y necesidades deberemos elegir uno u otro. Se trata de buscar un motor de base de datos que pueda integrar un servidor web Apache, y accesible desde PHP, para la creacin de entornos web dinmicos. Ante esto, la respuesta es mayoritaria (MySQL, APACHE, PHP) es la combinacin ms acertada, fiable, estable, y documentada que tenemos en la actualidad.

Mdulo 5

Programacin en PHP y Bases de datos

Instalacin y conexin a una BD.


Veremos la forma de obtener e instalar el driver ODBC, para acceder a la base de datos utilizando este tipo de conexin. Una vez que el servidor web a solicitado al intrprete de php la ejecucin de un determinado script, ste se puede encontrar con sentencias que pretenden manipular los datos de una base de datos. La forma en que el intrprete de PHP y el gestor de bases de datos pueden conectar es doble: ODBC (Open DataBase Connectivity) y funciones nativas. La primera consiste en una API estndar que oculta detalles de la conexin. Para poder utilizarla se hace necesario instalar o activar el mdulo encargado de su gestin y realizar las llamadas correspondientes desde nuestro programa.

Obtencin e instalacin de MyODBC (Windows)


En la siguiente pgina de MySQL podemos encontrar el ltimo enlace al driver ODBC estable para acceder a MySQL. http://www.mysql.com/products/ Una vez tenemos el fichero de instalacin *.exe, hacer doble clic para ejecutar el programa y se mostrar la siguiente pantalla:

Figura 5.2.1. Instalacin de ODBC Windows.

A partir de aqu, tan solo debemos pulsar el botn Siguiente, si todo funciona correctamente, aparecer la siguiente pantalla:

Figura 5.2.2. Instalacin de ODBC Windows.

La connexin ODBC est lista para ser utilizada. Para comprobarlo se puede acceder al panel de control de los controladores ODBC instalados. En la siguiente tabla se muestra donde realizar estas comprobaciones dependiendo del sistema operativo utilizado.

Sistema Windows 95/98 Windows 2000 Prof/Serv y XP

Ubicacin de los controladores ODBC Inicio / Configuracin / panel de control / Controladores ODBC. Inicio / Configuracin / panel de control / Herramientas administrativas / Orgenes de datos (ODBC).

Figura 5.2.3. Administrador de controladores ODBC.

Debemos seleccionar la pestaa de DSN de usuario, y crear uno nuevo. Lo primero que se solicita es el controlador para establacer un origen de los datos.

Figura 5.2.4.Nuevo DSN de usuario.

Data Source Name especifica el nombre que queremos dar al ODBC, en Server se indica el nombre del servidor de bases de datos (generalmente localhost). En el campo Database podemos selecionar la base de datos a la que queremos establacer la conexin. Los

campos User y Password en principio no se deben modificar, a no ser que en la instalacin se hayan modificado.

Figura 5.2.5. Parmetros del nuevo DSN.

Pulsar el botn Test y si la conexin es correcta, se abrir una ventana como la siguiente:

Figura 5.2.6. Conexin correcta.

Una vez terminada la creacin del nuevo DSN de usuario, utilizando el controlador ODBC para MySQL, aparecer la siguiente pantalla:

Figura 5.2.7. Administrador de orgenes de datos ODBC.

Hay que tener especial cuidado con la seguridad de las bases de datos, si tenemos un servidor en el que se puede ejecutar un administrador de bases de datos, o un usuario puede subir uno de ellos, probablemente conozca los usuarios por defecto que se instalan. Con el usuario por defecto 'root' podr: ver, modificar o borrar todas nuestras bases de datos. Por lo que cada base de datos debera tener un usuario y contrasea diferente, estos datos se deberan cambiar en la definicin del DSN.

Obtencin e instalacin de MyODBC (Linux)


En la siguiente pgina de MySQL podemos encontrar el ltimo enlace al driver ODBC estable para acceder a MySQL. Acceder al apartado Linux, seleccionar la plataforma que nos interesa (debian) y bajar el fichero MYODBC-n.nn.n_pc_linux_i386.tar.gz http://www.mysql.com/products/ Si descomprimimos el paquete que hemos bajado, deberamos encontrar un fichero llamado README, en el que se detallan los pasos que debemos seguir para la instalacin del driver ODBC bajo linux. Pero en realidad nos recomienda que realicemos otro tipo de instalacin o que busquemos ms informacin en la pgina oficial. De la misma forma que hicimos para la instalacin de Apache, Mysql y Php, para el driver ODBC y unixODBC utilizaremos el gestor de paquetes synaptic. Seleccionaremos los siguientes paquetes:

libmyodbc. php4-odbc. unixodbc. unixodbc-bin. unixodbc-dev.

Figura 5.2.8 Instalacin de UNIXODBC.

Con la herramienta grfica de administracin unixODBC, podemos acceder a las bases de datos utilizando una interface estndar de acceso. Muchas distribuciones Linux (RedHat, Suse, United Linux y plataformas como Solaris, AIX, HP/UX ), incorporan esta herramienta.

Con este paquete viene una utilidad llamada ODBCConfig, muy parecida a la de Windows con la que podremos crear el DSN. Se encuentra en el directorio /usr/bin y se debe ejecutar como root, el comando es "ODBCConfig".

Figura 5.2.9. Administrador de controladors UnixODBC

Al igual que en Windows tan solo tenemos que aadir un DSN de usuario y rellenar los datos que se solicitan.

Figura 5.2.10 Nuevo DSN de usuario con UnixODBC.

Mdulo 5

Programacin en PHP y Bases de datos

Instalacin y actualizacin de PhpMyAdmin


Si se quiere actualizar la versin de PhpMyAdmin, recordad realizar una copia del fichero 'config.inc.php o config.inc.php3 ' que se encuentra en el directorio donde esta instalado phpMyAdmin. Podemos buscar la ltima actualizacin en: http://www.phpmyadmin.net/ En funcin del sistema operativo con el que trabajemos, deberemos descargar un fichero ZIP o TGZ. Una vez descargado, debemos descomprimir el fichero en la carpeta 'phpMyAdmin' (aunque despus podremos renombrarla).

Si no lo tenemos ya instalado, debemos descomprimir el fichero creando la carpeta 'phpmyadmin', en el directorio del servidor web que tengamos. En el caso de Internet Information Server (Microsoft) el directorio por defecto es: 'C:\Inetpub\wwwroot', y en el caso de 'Apache', generalmente '...\Apache\http\' o '/var/www/html'.

Recordad que debemos dar permisos de ejecucin al directorio donde hemos descomprimido phpMyAdmin, puesto que el motor de esta herramienta esta compuesto por ficheros del tipo *.php.

Fichero de configuracin. ( config.inc.php )


Este fichero contiene la configuracin de phpMyAdmin, variables que son utilizadas en las diferentes funciones de la herramienta (colores, usuarios, contraseas, nombres de los servidores...). A continuacin detallaremos la funcin de algunas de estas definiciones de variables, y en concreto las relacionadas con la configuracin del servidor.

$cfg['PmaAbsoluteUri'] = 'http://localhost/pma/';
Este parmetro determina, la localizacin de la aplicacin PhpMyAdmin, en principio el sistema lo autodetecta, pero si fallara podriamos colocar la localizacin. Adems, cabe recordar que 'pma' es el nombre de la carpeta relativa al PhpMyAdmin (se renombr la carpeta).

$cfg['Servers'][$i]['host'] = 'localhost';
En este parametro se define quien ser el [identificativo de host], por defecto ser 'localhost' ya que PhpMyAdmin actua siempre desde el propio servidor de bases de datos.

$cfg['Servers'][$i]['port'] = ' ';


Indica el puerto de acceso a MySQL, si no ponemos nada el puerto por defecto es el 3306, definido por defecto por MySQL.

$cfg['Servers'][$i]['connect_type'] = 'tcp';
Definine el tipo de protocolo utilizado en la conexin, por defecto se utiliza 'TCP'.

$cfg['Servers'][$i]['auth_type'] = 'config';
Con este parametro definimos el mtodo de autenticacin que utilizarn los usuarios para acceder a phpMyAdmin. Si utilizamos el mtodo 'config', tendremos que establecer los parmetros de usuario en este fichero, en los apartados 'user' y 'password' . Este es el mtodo ms utilizado, pero no el ms recomendable por razones de seguridad. Si utilizamos el mtodo ' http', se solicitar para la autenticacin del usuario, el usuario y la contrasea desde una pantalla del propio sistema, se consultarn los permisos que tiene el usuario a partir de los previlegios definidos en el propio servidor de MySQL. En la siguiente figura se puede observar la interface de identificacin de usuario. Si se entra como 'root' en phpMyAdmin, hay un apartado de 'Privilegios', donde se definen los usuarios y los previlegios que tienen sobre las bases de datos.

Figura 5.3.1. Autenticacin PhpMyAdmin.

El sistema de seguridad y privilegios son implementados por el servidor MySQL, no por phpMyAdmin.

$cfg['Servers'][$i]['user'] = 'root';
Indica el nombre del usuario con el que se acceder desde phpMyAdmin sobre el servidor MySQL. Es muy importante recordar que hay un usuario por defecto llamado 'root' y sin contrasea. Este parmetro, por lo tanto solo tiene sentido si el mtodo de autenticacin es 'config'. Nunca se debe permitir que se acceda a una base de datos con el usuario 'root', debemos crear otros usuarios con sus permisos correspondientes. ( Opcin 'Privilegios' de PHPMyAdmin ).

$cfg['Servers'][$i]['password'] = '';
Esta claro que este parmetro establace la contrasea, por defecto, la contrasea de 'root', esta vacia. Al igual que el parmetro anterior, slo tiene sentido si el mtodo de autenticacin es 'config'.

$cfg['Servers'][$i]['only_db'] = '';
En esta variable se establace la base de datos a la que se accede, o puede tratarse de un array de bases de datos que se podrn visualizar desde PhpMyAdmin. Si se deja vacia esta variable se vern todas las bases de datos. Existen muchas ms variables, que establecen filtros, caminos,etc. En caso de querer profundizar en la configuracin de PhpMyAdmin, sera recomendable consultar la informacin asociada a la herramienta.

Mdulo 5

Programacin en PHP y Bases de datos

Herramientas para administrar una BD.


En este mdulo se pretende conocer herramientas para la administracin de bases de datos, como ejemplo se crear una base de datos sobre la que trabajaremos en mdulos posteriores, veremos tres:

PhpMyadmin MySQL Control Center MySQL Administrator

PhpMyAdmin
Se trata de una herramienta de gestin exclusiva de MySQL creada inicialmente por Tobias Ratschiller con PHP y continuada por muchos colaboradores. Consiste en un conjunto de scripts PHP para administrar las bases de datos de MySQL bajo un entorno web. Esta particularidad de funcionar bajo entorno web permite administrar bases de datos en remoto, simplemente necesitamos una conexin a Internet y un navegador. En muchsimas empresas en las que se da servicio web, se ofrece PhpMyadmin como herramienta de administracin de nuestras bases de datos. Con cualquier navegador podemos acceder directamente a http://localhost/pma/ (donde pma es el directorio virtual donde hemos instalado PhpMyadmin) para ver la pantalla principal de administracin. En el caso de querer actualizar la herramienta a una versin ms moderna o que se quiera instalar de nuevo, en el punto anterior se explican los pasos a seguir. En la pantalla inicial de PhpMyAdmin, se puede observar que aparece en la parte inferior ( texto en rojo) informacin de que en el fichero de configuracin, existen parmetros por defecto (usuario: root y sin contrasea). Esta informacin intenta avisarnos de que podemos tener en peligro la seguridad del sistema, ya que cualquiera podra entrar. Es muy recomendable que los usuarios se identifiquen con su usuario y contrasea, para ello debemos modificar el paramentro correspondiente (ver en el punto anterior). Deberemos modificar la contrasea del usuario 'root' y resulta muy recomendable crear otro usuario con los mismos previlegios que root.

Pantalla principal de PhpMyAdmin

Figura 5.4.1. Pantalla principal de phpMyAdmin.

En la parte central y a la derecha, vemos que podemos seleccionar el idioma, ver documentacin y llamar a la funcin phpinfo( ) para obtener informacin del sistema y su configuracin. En el centro aparecen las operaciones relacionadas con las bases de datos MySQL. Estadsticas de acceso, entorno de variables, informacin de procesos, privilegios y detalles de las bases de datos. En la parte superior izquerda aparece un desplegable donde podemos seleccionar la base de datos que queremos utilizar. En la parte inferior izquierda podemos abrir una nueva ventana de consulta, donde utilizando instrucciones SQL podemos atacar la base de datos. Existen problemas a la hora de exportar una base de datos de una plataforma a otra (linux windows), aunque hemos detectado que alguna versin, o alguna otra herramienta, mejor dicho, ya resuelve el problema, es preferible escribir siempre los nombres en minsculas, de esta manera, no tendremos problemas para que nuestra base de datos sea portable entre plataformas.

Crear una base de datos (academia). Hacer clic sobre el campo crear base de datos y teclear el nombre que tendr la base de datos (en nuestro caso academia). Hay que tener en cuenta que es sensible a la letras maysculas y minsculas, por lo que a la hora de utilizar la base de datos desde PHP tendremos que escribir su nombre como se cre.

Figura 5.4.2. Crear una nueva base de datos.

Despus de pulsar el botn Crear, se pide el nombre de la primera tabla y el numero de campos que tendr.

Figura 5.4.3. Crear una tabla de datos.

Podemos ver los tipos de variables que soporta Mysql desde el siguiente enlace tipos de variable. Modificar los tipos de campos, como se muestra en la siguiente tabla. Tabla: alumnos

Campo dni nombre apellidos telefono poblacion

Tipo varchar(8) varchar(30) varchar(30) varchar(30) tinyint(1)

Null No No No S No 0

Defecto

Otros clave primaria

null null null null

La tabla de la base de datos quedara:

Figura 5.4.4. Tabla de alumnos.

Crear las otras dos tablas siguiendo las siguientes instrucciones. Tabla: cursos

Campo codigo titulo n_plazas precio

Tipo int(11) varchar(30) tinyint(4) int(11)

Null No No No No No

Defecto autoincrement null 0 0 null

Otros clave primaria

lugar_realizacion varchar(30)

Tabla: matriculas

Campo dni codigo

Tipo varchar(8) int(11)

Null No No

Defecto

Otros clave primaria clave primaria

Otras operaciones con PhpMyAdmin.


Una vez seleccionada la base de datos ejemplo (academia) podemos ver las operaciones que podemos ejecutar sobre ella. A la izquierda se muestra la base de datos en uso y las tablas que la componen. A la derecha se muestran cada una de las tablas con sus caractersticas (nmero de registros, tipo de tabla, tamao) y operaciones asociadas a cada una de ellas. Las operaciones que podemos realizar:

Examinar: permite ver y actualizar los registros de la tabla. Seleccionar: permite hacer una seleccin de registros a visualizar. Insertar: permite insertar datos en la tabla seleccionada. Propiedades: muestra informacin de llos campos de la tabla. Eliminar: permite eliminar la tabla, la estructura y los datos. Vaciar: borra los datos y deja la estructura.

Exportar tablas de una BD. Una de las pestaas superiores 'Exportar' permite hacer copias de seguridad de la BD o intercambiar datos con otros sistemas, el resultado se almacena en un fichero que se puede enviar a otra maquina. Existen varios formatos para realizar la exportacin (SQL, Latex, CSV, XML) pero el ms comn es SQL que crea un fichero con extensin SQL que incorpora junto a las sentencias SQL necesarias, el contenido y la extructura de las tablas seleccionadas. Lo primero que debemos seleccionar son las tablas a exportar y el formato deseado. Si hemos seleccionado el formato SQL, a la derecha dispondremos de dos recuadros: 'Estructura' y 'Datos'. Desde el recuadro de estructura podemos modificar las caractersticas de los campos de las tablas y en el recuadro de datos decidimos si se crean las sentencias necesarias para exportar los datos. En el apartado estructura existe la opcin 'aadir drop table', que aade al fichero .sql las instrucciones necesarias para borrar las tablas que se exportan antes de ejecutar las sentncias de insercin. Para poder guardar el fichero generado debemos seleccionar la opcin 'enviar', donde podremos escribir el nombre del fichero resultante o permitir que la herramienta asigne el nombre de la base de datos. Cuando pulsemos el botn continuar, aparecer un cuadro de dilogo que nos permitir selecionar la ubicacin de dicho fichero.

Importar tablas de una BD. Seleccionar la pestaa SQL, y pulsar el botn Browse, buscar y seleccionar el fichero creado con la opcin exportar.

Figura 5.4.7. Exportar tablas.

Despus de pulsar el botn continuar se ejecutar el fichero de ordenes SQL e informar que la consulta se ejecut con xito. Este sistema es ideal para hacer copias de seguridad de las bases de datos, es aconsejable hacer las exportaciones con ficheros '*.sql'. Para practicar estos conceptos podemos exportar la base de datos academia, crear una nueva base de datos con un nombre nuevo, y recuperar la estructura y los datos de la anterior.

MySQL Control Center


La misma empresa de MySQL lanz una aplicacin cliente de administracin para el servidor de bases de datos MySQL, que podemos descargar de la web de MySQL. Incorpora opciones adicionales a PhpMyAdmin. Hay versiones para Windows y Linux. La filosofa de la herramienta en totalmente diferente: mientras que MySQLCC es una aplicacin que se ejecuta en la maquina cliente, PhpMyAdmin reside en el servidor, por lo que solo tiene sentido para los administradores de los servidores. No son excluyentes y muy recomendable tener ambos accesibles. El problema es que MySQL Control Center en estos momentos ha quedado obsoleto y no sigue desarrollndose. Se ha sustituido por el conjunto de programas MySQL Administrator y MySQL Query Browser.

MySQL Administrator
MySQL Administrador es el nuevo software de administracin de servidores de Bases de Datos de MySQL que ha creado MySQL AB. Se trata de un software multiplataforma, que por el momento se encuentra disponible para Linux y Microsoft Windows y que cuenta con un entorno grfico de usuario muy intuitivo. Este nuevo producto suple las carencias que tiene MySQL Control Center en el rea de

Administracin de servidores. La descarga del programa se hace desde la pgina web de MySQL, en "http://dev.mysql.com/downloads/administrator". Tan solo tenemos que descomprimir el fichero en un directorio y ejecutar el comando "mysql-administrator".

Figura 5.4.8. Mysql Administrator

MySQL Administrador es una herramienta que permite realizar tareas administrativas sobre servidores de MySQL incluyendo:

la configuracin de las opciones de inicio de los servidores. inicio y detencin de servidores. monitorizacin de conexiones al servidor. administracin de usuarios. monitorizacin del estado del servidor, incluyendo estadsticas de uso. visualizacin de los logs de servidor. gestin de copias de seguridad y recuperaciones. visualizacin de catlogos de datos.

Figura 5.4.9. Mysql Administrator

Tambin en la pgina de MySQL existen una serie de FAQ's que ayudan en la instalacin, en caso de dudas, aunque la misma es bastante simple. Recordad que esta aplicacin no es necesaria para el seguimiento de curso

Mdulo 5

Programacin en PHP y Bases de datos

Lenguaje SQL.
En este mdulo se pretende dar a conocer las operaciones bsicas que se pueden hacer con SQL y que tienen una aplicacin directa con la creacin de aplicaciones web.

SQL: lenguaje estructurado de consulta


A finales de los aos setenta, IBM cre para su producto DB2 un lenguaje llamado SQL (Structured Query Language). Empresas de la competencia crearon paralelamente otros SQL a medida de sus necesidades. Pero fue cerca de los aos ochenta cuando el comit ANSI defini un estndard para SQL. SQL es un lenguaje estndard de comunicacin con bases de datos. Un lenguaje normalizado que nos permite trabajar con cualquier tipo de lenguaje en combinacin de cualquier tipo de bases de datos. Que sea estndard no significa que las instrucciones de manipulacin de distintas bases de datos sean idnticas, es ms, existen determinadas operaciones que solo funcionan con determinadas bases de datos.

Componentes de SQL
El lenguaje SQL est distribuido en cuatro grandes bloques, que se combinan para crear, actualizar y manipular las bases de datos, estos bloques son:

Comandos. Clusulas. Operadores. Funciones.

Comandos Hay dos tipos de comandos en SQL:


Las DDL, que permiten crear y definir nuevas bases de datos, campos e ndices. Las DML, que permiten generar consultas para ordenar, filtrar y extraer informacin de la base de datos. Comandos DDL Descripcin Crear nuevas tablas, campos e ndices. Modificacin de tablas aadiendo campos o modificando la definicin de los campos. Instruccin para eliminar tablas, campos e ndices.
Figura 5.5.1. SQL. Comandos DDL

CREATE ALTER DROP

Comandos DML SELECT INSERT

Descripcin Consulta de registros de la base de datos que cumplen un criterio determinado. Insertar registros a la base de datos.

UPDATE DELETE

Instruccin que modifica los valores de los campos y registros especificados en los criterios. Eliminar registros de una tabla de la base de datos.
Figura 5.5.2. SQL. Comandos DML

Clusulas Las clusulas son condiciones de modificacin, utilizadas para definir los datos que se desean seleccionar o manipular.

Clusula FROM WHERE GROUP BY HAVING ORDER BY

Descripcin Utilizada para especificar la tabla de la que se seleccionarn los registros. Clusula para detallar las condiciones que deben reunir los registros resultantes. Utilizado para separar registros seleccionados en grupos especficos. Utilizada para expresar la condicin que ha de cumplir cada grupo. Utilizada para ordenar los registros selecionados de acuerdo a una ordenacin especfica.
Figura 5.5.3. SQL. Clusulas

Operadores

Operador lgico AND OR NOT

Descripcin Evala dos condiciones y devuelve el valor cierto, si ambas condiciones son ciertas. Evala dos condiciones y devuelve el valor cierto, si alguna de las dos condiciones es cierta. Negacin lgico. Devuelve el valor contrario a la expresin.
Figura 5.5.4. SQL . Operadores lgicos

Operadores de comparacin < > <> <= >= = [...] menor que [...] [...] mayor que [...] [...] diferente a [...]

Descripcin

[...] menor o igual que [...] [...] mayor o igual que [...] [...] igual que [...]

BETWEEN LIKE IN

Especifica un intrvalo de valores Compara un modelo Operadores para especificar registros de una tabla
Figura 5.5.5. SQL. Operadores de comparacin

Consultas Antes de comenzar a realizar algunas prcticas como ejemplo de las operaciones que hemos visto, debemos insertar algunos datos en nuestras tablas de la base de datos academia. Podemos hacerlo de varias formas:

Directamente desde el servidor de bases de datos: abrimos una consola de 'root' y ejecutamos mysql, se abrir una nueva lnea de comandos donde podremos escribir sentencias (use database nombre,...). Con PhpMyadmin: lo hemos visto en el punto anterior, seleccionamos la base de datos, la tabla y pulsamos en la opcin de insertar. Importando los datos: tambin lo hemos visto en el punto anterior, como podemos descargar el fichero academia.sql.

Selecionar la tabla alumnos y ver que resultado muetra la siguiente instruccin SQL: SELECT * FROM alumnos
Sentencia SQL 1

El signo '*' quiere decir que seleccionaremos todos los campos que tenga la tabla, en este caso, alumnos. El comando SELECT puede llevar adjunto un parmetro [ ALL | DISTINCT | DISTINCT ROW ]. El valor por defecto es 'ALL', que permite el retorno de registros duplicados, mientras que con las otras dos opciones los registros duplicados se omiten.

Figura 5.5.6. SQL. Creacin de consulta1.

Si pulsamos el botn 'Contine', se visualizarn todos los registros de la tabla alumnos. Si pulsamos el botn Browse podremos guardar las instrucciones SQL de la ventana de texto en un fichero con estensin 'sql'.

Ahora para limitar la seleccin, filtrarems solo los alumnos que residen en la poblacin de Sagunto: SELECT * FROM alumnos WHERE poblacion="Sagunto"
Sentencia SQL 2

Si solo queremos extraer el nombre y el primer apellido de los alumnos que residen en Sagunto ordenados por apellidos, el cdigo sera: SELECT nombre, apellidos FROM alumnos WHERE poblacion="Sagunto" ORDER BY apellidos
Sentencia SQL 3

Figura 5.5.7. Resultado sentencia SQL 3

Pero por regla general necesitamos datos que residen en varias tablas. Queremos obtener el nombre, los apellidos, el curso en que estan matriculados y su lugar de realizacin. Las tablas 'alumnos' y 'cursos' estan relacionadas mediante la tabla 'matrcula'. SELECT alumnos.nombre, alumnos.apellidos, cursos.ttulo, cursos.lugar_realizacin FROM alumnos, cursos, matrculas WHERE alumnos.dni = matrculas.dni and cursos.codigo=matrculas.codigo ORDER BY cursos.lugar_realizacin
Sentencia SQL 4

Se podra establacer los vinculos entre tablas utilizando la palabra reservada 'JOIN', pero deberemos asegurarnos que la versin de PHP de que disponemos las interpreta correctamente, algunas versiones dan problemas y si no somos nuestros propios administradores es muy posible que no tengamos la posibilidad de actualizar la versin correspondiente. SELECT alumnos.nombre, alumnos.apellidos, cursos.ttulo, cursos.lugar_realizacin FROM alumnos, cursos JOIN matrculas WHERE alumnos.dni=matrculas.dni and cursos.codigo=matrculas.codigo ORDER BY cursos.lugar_realizacin
Sentencia SQL 5

El resultado de esta consulta es:

Figura 5.5.8. Resultado sentencia SQL 5

Crear una tabla Crearemos una nueva tabla para almacenar datos del seguimiento del alumno en cada curso (horas de asitencia, realizado los ejercicios y aptitud). Para ello utilizaremos la sentencia CREATE TABLE seguida del nombre de la tabla. Entre parntesis encontraremos las caractersticas de los campos (dni, cdigo, horas_asist, ejercicios, apto ); seguidamente se define el ndice principal (dni+cdigo). CREATE TABLE `notas` ( `dni` VARCHAR(8) NOT NULL, `codigo` INT(11) NOT NULL, `horas_asis` SMALLINT(3) NOT NULL, `ejercicios` VARCHAR(2) NOT NULL, `optitud` VARCHAR(7) NOT NULL, INDEX (`dni`, `codigo`) )
Sentencia SQL 6

El parmetro 'NOT NULL', hace que este campo no pueda ser nulo cuando se realiza una insercin en la tabla.

Insercin de datos en una tabla La sentencia para insertar registros en una tabla es la siguiente: INSERT [INTO] nombre_tabla [(campo1,campo2...)] VALUES (valor1,valor2...), .....

Insertar un nuevo registro a la tabla 'alumnos', con los datos siguientes.

INSERT INTO `alumnos` (`dni`, `nombre`, `apellidos`, `telfono`, `poblacin`) VALUES ('66666666', 'Juan', 'Prez Garca', '674832939', 'Castelln')
Sentencia SQL 7

Figura 5.5.9. Resultado sentencia SQL 7

Modificacin de estructura de la tabla Para modificar la estructura de una tabla se utiliza la sentencia ALTER TABLE. La sintaxis es pareceda a la de CREATE TABLE, pero con ms opciones. La sintaxis es: opciones:

ALTER TABLE nombre_tabla seguida de alguna de las siguientes

Opciones disponibles ADD [COLUM] campo tipo_datos [NOT NULL |NULL] [DEFAULT valor_defecto] [AUTO_INCREMENT] ADD PRIMARY KEY (nom_index_primario) ADD INDEX [ nom_index, .......]

Descripcin Aade nueva columna a la tabla. Aade nueva clave primaria a la tabla. Aade nueva clave a la tabla

ALTER [COLUM] campo {SET DEFAULT | DROP Introduce nuevo valor estndard. DEFAULT } CHANGE [COLUM] campo_viejo definicin_campo MODIFY [COLUM] definicin_camp DROP [COLUM] DROP [PRIMARY KEY] DROP INDEX [ nom_index,....] RENAME AS nom_nova taula Cambia un elemento del campo y modifica el nombre de la columna. Cambia la definicin del campo, sin modificar el nombre del campo. Elimina una columna. Elimina una clave primaria. Elimina una clave. Renombra una tabla.

Figura 5.5.10. Opciones de sentencia ALTER TABLE

Aadir las columnas 'nivel_educativo' y 'direccin' a la tabla alumnos:

ALTER TABLE alumnos ADD COLUMN `direccin` varchar(40) NULL , ADD COLUMN `nivel_educativo` varchar(10) NULL
Sentencia SQL 8

Modificar datos de una tabla La sintaxis es: UPDATE tabla SET campo1=valor1 , [campo2=valor2] ... [WHERE condicin] UPDATE alumnos SET telfono= '666123456' WHERE nombre='Andrea' and apellidos='DiazAlejo Leon'
Sentencia SQL 9

Figurar 4.4.13. Resultado de la sentencia SQL 9

Borrar datos de la tabla La sintaxis es: DELETE FROM nombre_tabla [WHERE condicin] Tener en cuanta que si borramos datos de una tabla no se podrn recuperar. Si no utilizamos la clusula WHERE, se borrarn todos los registros de la tabla.

Borrar tablas La sintaxis es: DROP TABLE [IF EXISTS] nombre_de_la_tabla Si utilizamos esta sentencia en un programa, debemos usar la clusula IF EXIST, ya que si la tabla no existe obtendriamos un error de ejecucin. Hay que tener en cuenta que el poder ejecutar estas sentencias en un servidor depender de los permisos que tenga el usuario con el que nos conectamos al servidor de bases de datos. Es muy posible que no dispongamos de todos los permisos.

Mdulo 5

Programacin en PHP y Bases de datos

Conexin de PHP y MySQL.


En este ltimo punto conseguiremos realizar una conexin sencilla con la base de datos academia desde el cdigo PHP. Se introducirn las funciones PHP nativas para acceder a las bases de datos a un nivel elemental. El protocolo para acceder a una base de datos no cambia de como lo hacemos en otros lenguajes de programacin:

Abrir la base de datos. Lanzar la sentencia SQL al servidor de base de datos. Recoger el resultado de la consulta. Cerrar la conexin de la base de datos.

Sentencias MySQL.
En la siguiente tabla se pueden ver algunas de las sentencias ms utilizadas para acceder a una base de datos MySQL. Hay dos columnas, una para sentencias nativas de MySQL y otra equivalente para el acceso a bases de datos utilizando ODBC. PHP / MySQL PHP / ODBC

mysql_affect_rows ($conex) Devuelve la cantidad de registros afectados en la ltima sentencia de actualizacin o eliminacin. mysql_close ($conex) Cierra la conexin con el servidor MySQL. mysql_connect ( $host, $usuario, $contrasea) Abre una conexin con el servidor MySQL. odbc_close(...)

odbc_connect(...)

odbc_do($conex, $sql) odbc_exec($conex, $sql) Envia una sentencia SQL ($sql) al servidor de base de datos ($db) con la conexin ($conex). mysql_query ($db, $sql, $conex) mysql_error ($conex) Devuelve un mensaje de texto con el error producido. mysql_fetch_array ($resul, $tipo) Devuelve el resultado de la consulta realizada dentro de un array. En $tipo se pueden definir tres constantes: MYSQL_ASSOC, MYSQL_NUM, MYSQL_BOTH. mysql_fecth_row ( $resul, $num_fila) odb_fecth_row (...) Avanza a la siguiente fila activa del resultado de la sentencia SQL generada. El parmetro $num_fila es opcional, y si se pasa, se acceder a la fila especificada en este parmetro. mysql_field_name ($resul, $index) odbc_fiel_name(...) Devuelve el nombre del campo al que apunta la variable index.

mysql_num_fields ($resul) odbc_num_fields(...) Informa de la cantidad de campos que se han devuelto en el resultado. mysql_num_rows ($resul) odbc_num_rows(...) Devuelve el nmero de filas que ha devuelto la sentencia SQL. mysql_pconnect ($host, $usuario, odbc_pconnect($dsn,$usu,$con) $contrasea) Abre una conexin persistente contra el servidor MySQL. mysql_query ($sql, $conex) Envia una instruccin SQL contra la conexin. mysql_select_db ($base_de_datos, $connex) Selecciona una de les bases de datos para establecer una conexin. mysql_result ($resul,$fila,$columna) odbc_result_all (&resul,$fila,$columna) Devuelve el contenido parcial de una sentencia SQL correspondiente al objeto de la fila y columna seleccionadas por el usuario. A diferencia de mysql_fetch_array, slo devuelve un valor. mysql_free_result ($resul) odbc_free_result($resul) Libera el espacio donde se ha almacenado el resultado de la sentencia SQL.

Otras funciones PHP sobre MySQL. mysql_change_user ($usuario, $contrasea) Modifica el usuario actual por otro nuevo usuario. mysql_create_db ($base_de_datos) Crea una nueva base de datos sobre el sistema. mysql_drop_db ($base_de_datos) Elimina una base de datos y las tablas que la componen. mysql_inser_id ($resultado) Devuelve el valor generado al insertar un registro que contiene un valor del tipo 'Auto increment' en alguno de sus campos. mysql_get_host_info( ) Devuelve informacin del estado de la conexin y del servidor. mysql_get_proto_info( ) Devuelve informacin relacionada con el protocolo utlizado en la conexin.

Visualizaremos los nombres de todos los alumnos de la academia. Primero estableceremos la

conexin con el servidor de BD, seleccionaremos la BD de trabajo y ejecutaremos la SQL. El resultado se almacenar en una variable de memoria de tipo array.

Se puede copiar el cdigo siguiente o descargar el siguiente fichero practica51.php.

<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> <?php /*-------------------------------------------------* Mdulo: 5 Prctica: 5.1. Fichero: practica51.php * Autor: Fecha: * Descripcin: Conexin MySQL con funciones nativas * Pre condi.: Servidor MySQL, BD academia * Post cond.: --------------------------------------------------*/ ?> <title>Prctica 5.1</title> </head> <body> <?php /* Abrir la conexin con el servidor(servidor, usuario, contrasea */ $conn=mysql_connect("localhost","root",""); /* Identificamos la base de datos a utilizar */ $err_db=mysql_select_db("academia"); /* Escribimos la sentencia SQL */ $sql="select nombre from alumnos" ; /* Se ejecuta y si se obtienen resultados se almacenan en $resul */ if ( ! $resul=mysql_query($sql)) { echo "No se ha podido realizar la consulta"; echo mysql_error(); exit; } echo "Conexin al Servidor MySQL. BD:academia tabla: alumnos <br>" ; echo "La consulta ejecutada es: <b> $sql <b> <br>"; echo "El resultado es: <br> "; /* Recorremos el array */ while ($arr_resul= mysql_fetch_array($resul)){ print ($arr_resul[0]."<br>"); } /* Liberamos espacio ocupado con el resultado de la consulta */ mysql_free_result($resul); // Cerramos la conexin con el servidor de BD mysql_close(); ?> </body> </html>
Listado 5.5.1. Cdigo del fichero practica51.php

En la figura siguiente podemos ver el resultado de la ejecucin del cdigoPHP:

Figura 5.5.1. Resultado de la'ejecucin del fichero practica51.php

Como se puede ver, acceder a la informacin de una base de datos y mostrarla en pantalla es muy sencillo. En el siguiente tema se profundizar ms sobre este tema. Las sentencias nativas de PHP para acceder a MySQL las podemos encontar ampliadas en el apartado dedicado de la pgina oficial de PHP. Si hacemos la misma operacin que el ejemplo anterior pero utilizando el driver ODBC a una base de datos access. Debemos tener instalado MS-Access y creado un DSN a la base de datos, por ejemplo con el nombre dsn_academia.

<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> <?php /*-------------------------------------------------* Mdulo: 4 Prctica: 5.2. Fichero: practica52.php * Autor: Fecha: * Descripcin: Conexin a una base de datos Access por ODBC * Pre condi.: ODBC DSN dsn_academia * Post cond.: --------------------------------------------------*/ ?> <title>Prctica 5.2</title> </head> <body> <?php /* Abrir la conexin con el servidor(servidor, usuario, contrasea */$conn=odbc_connect ("dsn_academia","root",""); /* Identificamos la base de datos a utilizar */ $sql="select nombre from alumnos" ; /* Si se obtienen resultados se almacenan en $resul */ if ( ! $resul=odbc_exec($conn,$sql)) { echo "No se ha podido realizar la consulta";

echo odbc_error($conn); exit; } echo "Conexin al Servidor MySQL. BD:academia tabla: alumnos <br>" ; echo "La consulta ejecutada es: <b> $sql <b> <br>"; echo "El resultado es: <br> "; /* Recorremos el array */ while ($rc = odbc_fetch_into($resul,$arr_resul)){ print($arr_resul[0]."<br>"); } /* Liberamos espacio ocupado con el resultado de la consulta */ odbc_free_result($resul); // Cerramos la conexin con el servidor de BD odbc_close($conn); ?> </body> </html>
Listado 5.5.2. Cdigo del fichero practica52.php

Observar que los cambios entre practica51.php y practica52.php son mnimos, slo afectan a las sentencias que acceden a los orgenes de la base de datos. En el caso de querer trabajar con el ODBC de Oracle, mSQL u otros motores de bases de datos, se puede consultar el apartado correspondiente del manual de PHP para obtener informacin de las sentencias concretas que se deben utilizar en cada caso.

Tipos de variables en MySQL

Tipo tinyint smallint mediumint int bigint float double decimal

Descripcin entero muy pequeo entero pequeo entero mediano entero entero largo coma flotante simple precisin coma flotante doble precisin coma flotante, representado como cadena cadena caracteres longitud fija

Rango -128 ... 127 -32768 ... 32767 sin signo 0 ... 65535 -8388608 a 8388607 sin signo 0 ... 16777215 -2147683648 a 2147683648 sin signo 0 ... 4294967295 -2 E63 a 2 E63 sin signo 0 ... 2 E64 1.175494351 E-38 (mnim) 3.402823466 E+38 (mxim) 2.2250738585072014 E-308 1.7976931348623157 E+308

char(M)

Acepta entre 1 y 255 caracteres, la longitud mxima la determina M, que es obligatorio. Acepta entre 1 y 255 caracteres, la longitud mxima la determina M, que es obligatorio. 255 bytes 65 quilobytes 16 megabytes 4 gigabytes 255 bytes 65 quilobytes 16 megabytes 4 gigabytes 64 K elementos 64 elementos 1000-01-01 a 9999-12-31 -838:59:59 a 838:59:59

varchar(M)

cadena caracteres longitud variable blob (objecto binario grande) muy pequeo blob estndard blob mediano blob grande cadena texto muy pequea cadena texto pequea cadena texto mediana cadena texto grande enumeracin de elementos conjunto de elementos fecha con formato: AAAA-MM-DD hora con formato: hh:mm:ss

tinyblob blob mediumblob longblob tinytext text mediutext longtext enum set date time

datetime timestamp year

fecha y hora intrvalo de tiempos de... ao con formato AAAA 19700101000000 hasta cualquier fecha del ao 2037 de 1091 a 2155

Tal y como se indica en la descripcin de esta funcin, hay que tener presente que las cookies deben enviarse antes de mandar cualquier otra cabecera (esta es una restriccin de las cookies, no de PHP). Esto requiere que site las llamadas a esta funcin antes de cualquier etiqueta <html> o <head>. El siguiente ejemplo pretende ilustrar su definicin. Cpialo, gurdalo como practica61.php y ejcutalo en el navegador. <?php /*--------------------------------------------------------------* Mdulo: 6 Prctica: 1 Fichero: practica61.php * Descripcin: Creacin de cookies * Pre condi.: Cookies activadas en el navegador * Post cond.: ----------------------------------------------------------------*/ // Momento de expiracin de la cookie // que ser dentro de un ao a partir de la hora // actual que devuelve la funcin 'time()' $expira = 365*24*3600; // Creamos la cookie setcookie("prueba","este es el contenido",time()+$expira); echo "<h2>\"Cookie\" creada </h2><br<"; echo "Comprueba que la cookie ha sido creada"; ?>

Como complemento al script propuesto, implementamos ahora otro que acceda a la cookie. Cpialo, gurdalo como practica61_b.php y ejcutalo en el navegador.

<?php /*--------------------------------------------------------------* Mdulo: 6 Prctica: 1 Fichero: practica61_b.php * Descripcin: Acceso a cookies * Pre condi.: Cookie "prueba" creada * Post cond.: ----------------------------------------------------------------*/ // Recuperamos el nombre de usuario de 2 formas // 1) mediante el array '_COOKIE' echo "Hola ".$_COOKIE["prueba"]." <br><br>"; // 2) utilizando la variable del mismo nombre directamente. // NO FUNCIONAR POR EL PROBLEMA DE USO DE VARIBLES GLOBALES. echo "Hola $prueba <br><br>"; ?>

Mdulo 6

Programacin en PHP y Bases de datos

Cookies y Sesiones
La sesin en PHP aparece como tal, a partir de la versin 4. En este apartado, vamos a estudiarla, y veremos su utilidad y aplicacin en el contexto de una web. En primer lugar, veremos todos los aspectos tericos que se deben conocer, para pasar finalmente a elaborar un ejemplo que exponga el funcionamiento de las sesiones.

Qu es una sesin?
Existen casos de aplicaciones web en las que, dadas sus caractersticas, se hace necesario disponer de la posibilidad de mantener cierta informacin a lo largo del proceso de navegacin entre las pginas que la integran. Ejemplos de esto podran ser tanto la banca on-line, en la que cada usuario dispone de un rea de navegacin personalizada, como el tpico "carrito de la compra", en el que el usuario selecciona y acumula una serie de artculos en el proceso de navegacin entre una serie de pginas-catlogo. En estos casos es necesario relacionar las pginas que forman parte de esa rea de navegacin dependiente de una informacin comn. Visto que las comunicaciones que se establecen a travs del protocolo HTTP son independientes las unas de las otras, lo cual cierra la posibilidad de establecer cualquier tipo de comunicacin entre una serie de pginas, las sesiones vienen a cubrir este tipo de requerimiento, ofreciendo un mecanismo para el mantenimiento ubcuo de esa informacin compartida, al margen del funcionamiento de este tipo de protocolo.

Cmo implementa PHP las sesiones?

Una sesin, a groso modo, no es ms que un conjunto de variables (que pueden ser concebidas como variables "globales") que PHP gestiona de manera transparante al usuario. Una sesin comienza cuando un usuario entra en la aplicacin web y termina cuando la abandona. Durante ese espacio de tiempo se pueden definir y manipular una serie de variables pertenecientes a la sesin que permite mantener cualquier tipo de informacin comn para todas la pginas. Para conseguir mantener una serie de informacin comn entre la ejecucin de los distintos scripts PHP que generan las pginas de la aplicacin web, ser necesario que el gestor de sesiones guarde dicha informacin en un fichero. Como trabajamos en un entorno clienteservidor es posible que dicho fichero se encuentre en cualquiera de las dos partes. Cada sesin que se inicia debe diferenciarse y ser independente del resto (ya que una pgina puede ser accedida al mismo tiempo por diversos usuarios), por lo que PHP asigna un identificador por cada sesin que se inicie, siendo este identificador una secuencia alfanumrica generada automticamente lo suficientemente grande para garantizar la seguridad de la aplicacin. El identificador de sesin es necesario que sea reenviado al servidor cada vez que se realice una peticin de una pgina, ya que de esta manera el gestor de sesiones podr localizar la informacin correspondiente con la sesin. Esto se puede hacer implcitamente o explcitamente, dependiendo del mecanismo empleado.

Si el identificador de sesin se almacena mediante "cookies" en el cliente, cuando se realice una peticin al servidor el propio navegador ser el encargado de introducir automticamente el identificador de sesin como informacin dentro de la peticin al servidor. Problema: el usuario podra tenerlas desactivadas,

En el caso de no emplear cookies, nos obligara a tener que pasar la informacin "manualmente", o mediante el query_string (en etiquetas <A>) o mediante un campo de tipo "hidden" (si venimos de un formulario).

PHP, por defecto, utiliza un sistema mixto de almacenaje de la informacin relacionada con una sesin. El identificador se almacena en el cliente utilizando cookies. El resto de informacin se guarda en un fichero dentro del servidor cuyo nombre es el identificador de sesin precedido del prefijo sess_.

Cmo se gestionan las sesiones desde cdigo? La gestin de sesiones se realiza de manera sencilla a travs de un juego de funciones.

bool session_start(): crea una nueva sesin diferenciando 2 casos:

si es la 1 solicitud de sesin:

se genera un identificador aleatorio. se crea un fichero en el servidor cuyo nombre es el identificador precedido del prefijo sess_. se enva una cookie al cliente con el identificador.

. en sucesivas solicitudes, se utiliza la informacin ya dispuesta.

bool session_destroy(): elimina los datos de sesion.


se destruye el fichero en el servidor. se conserva la cookie para futuras sesiones.

bool session_register(string nombre [, string nombre]): crea una serie de variables globales registradas como variables de sesin.

se guardan en el fichero de sesin correspondiente. comunes y operativas en todos los scripts implicados en la sesin.

bool session_unregister(string nombre [, string nombre]): las variables de sesin pasan a ser variables normales y se limpia el contenido del fichero.

bool session_is_registered(string nombre): se comprueba la existencia de una variable de sesin asociada a nombre.

session_unset(): se vaca el contenido de las variables de sesin.

string session_name([string nombre]): tiene 2 comportamientos:

si se invoca sin parmetro devuelve el nombre de la variable interna que contiene el identificador de sesin (por defecto se asigna el valor de la directiva session.name de "php.ini"). si existe parmetro, se cambia el contenido de dicha variable, pero ser necesario hacerlo antes del comienzo de la sesin en cada script para prolongar su efecto.

string session_save_path([string path]): devuelve el camino al directorio donde se ubican los ficheros asociados a la sesin.

es modificable, introduciendo una nueva ruta. para prolongar su efecto, es necesario incluir esta funcin en cada script que haga uso de las sesiones.

Cmo iniciar y prolongar una sesin?

En todas las pginas que se desee que formen parte de la aplicacin web, se debe ejecutar la accin de comenzar (o continuar) una sesin. Para ello, debern utilizarse algunas de las funciones vistas. Pero cmo consigue continuar una sesin? Para cada una de las pginas, el intrprete de PHP comprueba si existe la sesin. En caso afirmativo, se retoma, sino, se crea una nueva (generando un nuevo identificador). Existen 3 maneras de iniciar/prolongar una sesin:

invocando a la funcin session_start()

<?php session_start(); echo "He inicializado la sesin"; ?>

a travs de de la funcin session_register() (creacin de variables).

<?php // Creamos la variable de sesin 'contador' session_register('contador'); // La pgina enlaza consigo misma y muestra el identificador de sesin (variable interna $SID) // y el valor del contador actualizado

echo '<a href="'.$PHP_SELF.'?'.$SID.'">Contador vale: '.++$contador.'</a>'; ?>

activando la directiva session.auto_start en el "php.ini".

Observacin: Si no existiera, recordemos nuevamente que hay que crear una carpeta tmp e indicar en php.ini el path hasta ella en session.save_path. Para poder continuar una sesin iniciada, cada vez que comienza una sesin se consulta si el script ha recibido un identificador de sesin o no. En caso afirmativo, se continua con la sesin que coincide con dicho identificador. En el otro caso , se crea una nueva sesin. Por lo tanto, es necesario comunicar el identificador de sesin a las distintas pginas que forman la aplicacin web. Para ello, tenemos dos alternativas:
z

Si usamos cookies (activando la directiva session.use_cookies del fichero php.ini) y adems el navegador del cliente las acepta, no tenemos que realizar ninguna accin adicional. Si no usamos cookies o no las acepta el cliente, deberemos enlazar todas la pginas pasando el identificador en todos los enlaces a otras pginas y en todos los formularios que sean procesados en la aplicacin.

En los enlaces a otras pginas dentro del query_string, deberemos incluir la variable que contiene el identificador, tenemos dos posibilidades: 1. <A href="pagina.php?<? echo SID ?>">enlace </A> 2. <A href="pagina.php?<? echo sesion_name(), '=', sesion_id() ?>">enlace </A> En los formularios ser necesario incluir un campo oculto cuyo nombre ser sesion_name() y su valor sesion_id(). <input type="hidden" name="<? echo sesion_name() ?>" value ="<? echo sesion_id() ?>">

Ejemplo de funcionamiento
En el siguiente ejemplo vamos a exponer la dinmica de trabajo con sesiones a partir de un esquema de navegacin de pginas determinado. El ejemplo consta de 3 pginas: la primera de ellas, cuyo cdigo mostramos a continuacin, es un formulario cuya recepcin de datos se tramita en la misma pgina, generando las pertinentes variables de sesin.

Copia el siguiente cdigo y gurdalo como practica62.php.

<?php // Con la funcin session_start(), iniciamos la sesin session_start(); ?> <!-------------------------------------------------------* Mdulo: 6 Prctica: 2 Fichero: practica62.php

* Descripcin: Formulario entrada de datos + creacin variables sesin. * Pre condi.: * Post cond.: -----------------------------------------------------------> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Ejemplo Sesiones</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <h2><u>Ejemplo Sesiones - M&oacute;dulo 6</u> </h2> <br> <form name="form1" method="post" action="<? echo $PHP_SELF; ?>"> <table width="200" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="110">DNI: </td> <td><input name="dni" type="text" id="codi5" size="8" maxlength="8"></td> </tr> <tr> <td>Nombre</td> <td><input name="nombre" type="text" id="any4" size="15" maxlength="15"></td> </tr> <tr> <td>Apellidos:</td> <td><input name="apellidos" type="text" id="etapa4" size="20" maxlength="20"></td> </tr> </table> <br> <input type="submit" name="enviar" value="Enviar"> </form> </body> </html> <?php echo "<script language='javascript'> document.body.style.backgroundColor='green'; </script>"; // Recogemos los valores enviados por el // formulario con la ayuda del array _POST $dni = $_POST['dni']; $nombre = $_POST['nombre']; $apellidos = $_POST['apellidos']; // Mostramos los datos recibidos echo "<h2>Pasando valores de variables de sesin<br>\n"; echo "Fichero actual: ".$_SERVER['PHP_SELF']."</h2><br>\n"; echo "<table>"; echo "<tr><td> <b>Var. sesin 'dni':</b> </td><td>".$dni."</td></tr>\n"; echo "<tr><td> <b>Var. sesin 'nombre':</b> </td><td>".$nombre."</td></tr>\n"; echo "<tr><td> <b>Var. sesin 'apellidos':</b> </td><td>".$apellidos."</td></tr>\n"; echo "</table>";

// Generamos la variables de sesin session_register("dni"); session_register("nombre"); session_register("apellidos"); // Preparamos el enlace a la pgina siguiente pasndole // mediante el 'query_string' el nombre de la // variable de sesin ms el identificador de sesin echo "<br><br><a href=\"practica62_b.php?".session_name()."=".session_id(); echo "\">>> Continuar <<</a>"; echo "<br><br><a href=\"practica62_b.php?".SID; echo "\">>> Continuar <<</a>"; ?>

A continuacin, pasamos a ver la pgina que utilizar las variables de sesin creadas anteriormente. Esta pgina se encarga de visualizar los datos de sesin.

Observa que en las pginas siguientes utilizamos el array _SESSION para mostrar el valor de las variables de sesin (es tan solo una opcin alternativa a haber utilizado el nombre de cada variable directamente).

Copia el siguiente cdigo y gurdalo como practica62_b.php

<? session_start(); // continuamos con la sesin

?> <html> <head> <title>Ejemplo Sesiones</title> </head> <body> <?php /*--------------------------------------------------------------* Mdulo: 6 Prctica: 2 Fichero: practica62_b.php * Descripcin: Paso de variables de sesin (2) * Pre condi.: Datos de entrada generados en 'practica62.php' * Post cond.: ----------------------------------------------------------------*/ // Cdigo Javascript para cambio de color de fondo echo "<script language='javascript'> document.body.style.backgroundColor='red'; </script>"; echo "<h2>Pasando valores de variables de sesi&oacute;n<br>\n"; echo "Fichero actual: ".$_SERVER['PHP_SELF']."</h2><br>\n"; // Si la primera variable de sesin est definida... if (session_is_registered("dni")){ // Mostramos los valores de sesin que han llegado echo "<table>"; echo "<tr><td> <b>Var. sesin 'dni':</b> </td><td>".$_SESSION['dni']."</td></tr>\n"; echo "<tr><td> <b>Var. sesin 'nombre':</b> </td><td>".$_SESSION['nombre']."</td></tr>\n"; echo "<tr><td> <b>Var. sesin 'apellidos':</b> </td><td>".$_SESSION ['apellidos']."</td></tr>\n"; echo "</table>"; }else{ // Si la primera variable de sesin no est definida... echo "Variables de sesin inexistentes \n"; } echo "<br><br><a href=\"practica62_c.php?".session_name()."=".session_id(); echo "\">>> Continuar <<</a>"; ?> </body> </html>

Por ltimo , tenemos una pgina implicada en el esquema de navegacin actual y que utilizar de nuevo las variables de sesin creadas anteriormente (fjate que el cdigo de esta pgina es prcticamente igual el de la anterior, por lo que puede ser til recurrir al clsico "Copiar+Pegar") Cpialo y gurdalo como practica62_c.php

<?// continuamos con la sesin session_start(); ?> <html> <head> <title>Ejemplo Sesiones</title> </head> <body> <?php /*----------------------------------------------------------------* Mdulo: 6 Prctica: 2 Fichero: practica62_c.php * Descripcin: Paso de variables de sesin (3) * Pre condi.: Datos de sesin sumistrados por 'practica62_b.php' * Post cond.: ------------------------------------------------------------------*/ // continuamos con la sesin session_start(); // Cdigo Javascript para cambio de color de fondo echo "<script language='javascript'> document.body.style.backgroundColor='purple'; </script>"; echo "<h2>Pasando valores de variables de sesin<br>\n"; echo "Fichero actual: ".$_SERVER['PHP_SELF']."</h2><br>\n"; // Si la primera variable de sesin est definida... if (session_is_registered("dni")){ // Mostramos los valores de sesin que han llegado

echo "<table>"; echo "<tr><td> <b>Var. sesin 'dni':</b> </td><td>".$_SESSION['dni']."</td></tr>\n"; echo "<tr><td> <b>Var. sesin 'nombre':</b> </td><td>".$_SESSION['nombre']."</td></tr>\n"; echo "<tr><td> <b>Var. sesin 'apellidos':</b> </td><td>".$_SESSION ['apellidos']."</td></tr>\n"; echo "</table>"; }else{ // Si la primera variable de sesin no est definida... echo "Variables de sesin inexistentes \n"; } ?> </body> </html>

Ejemplo de funcionamiento II
En este segundo ejemplo vamos a ver las directrices para crear un sistema de autenticacin de usuario para un sitio web y restringir el acceso a las zonas que se consideren privadas. El sistema consta de tres pginas, una para realizar la entrada introduciendo usuario y contrasea, una segunda para realizar la comprobacin de los datos y una tercera que controlar durante la navegacin. Adems de las pginas privadas y una ltima para cerrar la sesin de una forma segura. La primera pgina a la que llamaremos login.html es un formulario que solicita el usuario y la contrasea, una vez se pulse el botn de envio, se enviarn los datos por mtodo POST a otra pgina llamada comprobacion.php. En la pgina comprobacion.php se realizar una conexin con la base de datos y se comprobarn en la tabla usuarios que existe un usuario con ese nombre y clave. Una vez realizada la comprobacin de que hay resultados se inicia una nueva sesin con session_start (); y a continuacin con sessin_register() se le pasa el valor autentificado que ser el nombre de dicha sesin, y que es una variable global. Copia el siguiente cdigo y gurdalo como comprobacion.php.

<?php // Conexin con la base de datos $conec= mysql_connect("servidor","usuario","password"); mysql_select_db("base_datos",$conec); $sql = "SELECT * FROM usuarios WHERE nom='; $sql .=$_POST['usuario']; $sql .="and clave ='"; $sql .=$_POST['clave']; $sql .= "'" // echo $sql // (para comprobar la sql). $resultado = mysql_query($sql,$conec); if (mysql_num_rows($resultado)!=0) { session_start(); session_register("autentificado"); $_SESSION['autentificado'] = "OK"; header ("Location: zona.php"); } else { header ("Location: login.html"); } mysql_free_result($resultado); mysql_close($conec); ?>

Si el usuario y contrasea existen se redirigir con header a la pgina privada donde se quiere enviar al usuario. Por lo contrario, si ese usuario no existiera en el sistema, simplemente se le enviar a la pgina de entrada. En todas la pginas privadas de la web, deberan contener un fichero que compruebe si hay una sesin activa para que pueda ser visializada. Para ello crearemos una pgina .php que se llamar seguridad.php. Se recoge el valor y si es diferente a OK, entonces se considerar que esa entrada no es

vlida pues no se ha iniciado la sesin y se le enva a la pgina de entrada.

<? session_start(); // continuamos con la sesin if ($_SESSION["autentificado"] != "OK") { //no existe header("Location: login.html"); exit(); } ?>

Por ltimo, la pgina de salida, a la que llamaremos salir.php en la que se destruye la sesin.

<?// continuamos con la sesin session_start(); session_destroy(); ?> <html> <head><title>SALIR</title></head> <body> Gracias por su visita <br><br> < a href="login.html">Entrar de nuevo en la zona privada</a> </body> </html>

Todas las pginas que componen la zona privada deben incluir el archivo seguridad.php. include (seguridad.php) y deben terminar con una opcin salir que enlace con la pgina salir.php para finalizar de forma segura la sesin iniciada. En el caso de que el usuario no exista, se debera dar un mensaje de error, pero esto se pedir en el ejercicio de este mdulo.

Mdulo 6

Programacin en PHP y Bases de datos

Directivas de sesin en el fichero "php.ini"


En php.ini existe una seccin para con una serie de directivas relativas a la gestin de las sesiones que nos permiten hacer ciertos ajustes sobre su comportamiento. Las siguientes seran las ms relevantes:

session.save_handler: define el gestor de sesiones: activado por defecto a files. posibilidad de definir otro gestin --> user session.save_path: especifica el parmetro que recibe el gestor para almacenamiento y recuperacin de los datos de sesin . session.use_cookies: fijada a 1 significa que el uso de cookies estar disponible. el

session.use_cookies_ lifetime: tiempo de validez de la cookie que contiene el identificador de sesin. Si est fijada a 0, la cookie se mantiene hasta que se cierre el navegador. session.name:indica el nombre de la variable que contiene el identificador de sesin. Se utiliza como nombre o como parmetro enviado por la pgina que invoc a la actual. session.auto_start: fijada a uno inicializa la sesin automticamente en cualquier script PHP ejecutado en el servidor. ...

Mdulo 6

Programacin en PHP y Bases de datos

Funciones para la gestin de sesiones

bool session_start(): crea una nueva sesin diferenciando 2 casos:

si es la 1 solicitud de sesin:

se genera un identificador aleatorio. se crea un fichero en el servidor cuyo nombre es el identificador precedido del prefijo sess_. se enva una cookie al cliente con el identificador.

. en sucesivas solicitudes, se utiliza la informacin ya dispuesta.

bool session_destroy(): elimina los datos de sesion.


se destruye el fichero en el servidor. se conserva la cookie para futuras sesiones.

bool session_register(string nombre [, string nombre]): crea una serie de variables globales registradas como variables de sesin.

se guardan en el fichero de sesin correspondiente. comunes y operativas en todos los scripts implicados en la sesin.

bool session_unregister(string nombre [, string nombre]): las variables de sesin pasan a ser variables normales y se limpia el contenido del fichero.

bool session_is_registered(string nombre): se comprueba la existencia de una variable de sesin asociada a nombre.

session_unset(): se vaca el contenido de las variables de sesin.

string session_name([string nombre]): tiene 2 comportamientos:

si se invoca sin parmetro devuelve el nombre de la variable interna que contiene el identificador de sesin (por defecto se asigna el valor de la directiva session.name de "php.ini"). si existe parmetro, se cambia el contenido de dicha variable, pero ser necesario hacerlo antes del comienzo de la sesin en cada script para prolongar su efecto.

string session_save_path([string path]): devuelve el camino al directorio donde se ubican los ficheros asociados a la sesin.

es modificable, introduciendo una nueva ruta. para prolongar su efecto, es necesario incluir esta funcin en cada script que haga uso de las sesiones.

Você também pode gostar