Professional Documents
Culture Documents
III
IV
www.full-ebook.com
NGEL COBO
PATRICIA GMEZ
DANIEL PREZ
ROCO ROCHA
PHP y MySQL
Tecnologas para el desarrollo de
aplicaciones web
V
www.full-ebook.com
ngel Cobo, Patricia Gmez, Daniel Prez y Roco Rocha, 2005
No est permitida la reproduccin total o parcial de este libro, ni su
tratamiento informtico, ni la transmisin de ninguna forma o por
cualquier medio, ya sea electrnico, mecnico por fotocopia, por registro
u otros mtodos, sin el permiso previo y por escrito de los titulares del
Copyright.
ISBN: 84-7978-706-6
Depsito Legal: M. 27.919-2005
VI
www.full-ebook.com
A Valeria
VII
www.full-ebook.com
VIII
www.full-ebook.com
ndice
IX
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
X
www.full-ebook.com
NDICE
XI
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
XII
www.full-ebook.com
NDICE
XIII
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
XIV
www.full-ebook.com
NDICE
XV
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
XVI
www.full-ebook.com
Prefacio
XVII
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
XVIII
www.full-ebook.com
PREFACIO
ngel Cobo
Patricia Gmez
Daniel Prez
Roco Rocha
Santander, febrero de 2005
XIX
www.full-ebook.com
ALERTA!
XX
www.full-ebook.com
INTERNET Y LA
PROGRAMACIN DE
ORDENADORES
1.1. INTRODUCCIN
La aparicin a principios de los noventa del servicio web supuso una verdadera
revolucin en el campo de la informtica y las telecomunicaciones. Con la irrupcin de
este nuevo servicio, Internet inici una rpida transicin hacia el mbito empresarial y
supuso un enorme impulso al crecimiento de la red. Lo que haba surgido en plena
guerra fra como un proyecto militar y que posteriormente fue dirigindose hacia el
mbito cientfico y acadmico, se empez a convertir en un perfecto escaparate virtual
en el que las empresas pudieran ofrecer sus productos y servicios rompiendo barreras
geogrficas y de comunicaciones. En la actualidad las empresas no ven nicamente el
servicio web como un mero escaparate o medio publicitario de enorme difusin. Internet,
y en particular el servicio web, abre a las empresas enormes posibilidades. La utilizacin
de tecnologas web permite agilizar los procesos, mejorar la productividad y aumentar la
eficacia, adems de abrir las puertas a nuevas formas de negocio en el mercado global
que facilita Internet (e-business).
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Por supuesto, no han sido las empresas las nicas beneficiadas con el desarrollo de
Internet y del servicio web. Las instituciones pblicas tienen tambin nuevas
formas de ofrecer servicios a los ciudadanos (e-governement), los usuarios
individuales tienen nuevas formas de adquirir productos (e-commerce) o nuevas
formas de formarse e instruirse (e-learning),...
Para poder realmente obtener todos estos beneficios ha sido preciso desarrollar
nuevas tecnologas que consigan hacer del servicio web un servicio dinmico e
interactivo. En sus orgenes el servicio World Wide Web fue concebido como un
sistema flexible de compartir informacin multimedia entre equipos heterogneos a
travs de redes informticas. Para ello fue desarrollado un sistema de generacin de
documentos a travs de un lenguaje estndar: el lenguaje HTML. Los documentos
generados de esta forma podan incorporar texto y elementos grficos, pero eran
documentos totalmente estticos. Posteriormente fueron desarrollndose diferentes
tecnologas que, trabajando en conjuncin con el lenguaje HTML, pudieran paliar
estas carencias. As por ejemplo, Netscape incorpor en la versin 2.0 de su clebre
navegador un intrprete de un nuevo lenguaje que poda ser intercalado entre el
cdigo HTML y que permita realizar operaciones no disponibles en un lenguaje
puramente descriptivo como es HTML; dicho lenguaje, llamado en sus orgenes
LiveScript, adquiri posteriormente el nombre de JavaScript. Unos aos ms tarde
la empresa Sun Microsystems lanz un revolucionario lenguaje de programacin,
el lenguaje Java, que permita incrustar en las pginas web programas con las
prestaciones propias de cualquier lenguaje de programacin. Microsoft por su parte
tambin se uni a esta evolucin primero con sus lenguajes de script: VBScript
basado en Visual Basic y JScript, versin Microsoft de JavaScript, y, ms
recientemente, con las tecnologas .NET. Igualmente se han venido desarrollando
diferentes extensiones del propio lenguaje HTML con objeto de aumentar su
dinamismo; en este contexto se podra citar el HTML dinmico (DHTML) y el
lenguaje XML.
www.full-ebook.com
INTERNET Y LA PROGRAMACIN DE ORDENADORES
source y, sin lugar a dudas, el impacto de este tipo de soluciones parece destinado a
incrementarse en el futuro debido a sus altas prestaciones y calidad, su menor coste
y su alta difusin.
Las dos herramientas que se analizarn en este libro surgen de esta corriente. Por
un lado el lenguaje PHP, que naci como un lenguaje para realizar un seguimiento
de visitas de pginas personales, se ha convertido en uno de los referentes actuales
en los denominados lenguajes de script. Por otro lado, el sistema gestor de bases de
datos MySQL se presenta como una herramienta con altas prestaciones para el
desarrollo de bases de datos, especialmente apropiado para ser usada por pequeas
organizaciones o empresas. La utilizacin conjunta de ambos: PHP y MySQL
permite llegar a desarrollar interesantes aplicaciones web que puedan cubrir las
necesidades de pequeas empresas que quieran fortalecer su presencia en Internet o
usuarios individuales que quieran generar verdaderas pginas dinmicas. Como
complemento a ambas herramientas, en Internet se pueden encontrar igualmente
gestores de contenidos, aplicaciones basadas en PHP que permiten a los usuarios
finales aprovechar las ventajas de estas tecnologas sin necesidad de tener grandes
conocimientos sobre su funcionamiento y sintaxis de los lenguajes. En el presente
libro se darn referencias de algunas de estas herramientas de gestin de contenidos
y otras herramientas para la creacin de aplicaciones web que han sido
desarrolladas igualmente haciendo uso de las dos tecnologas que se analizarn en
este libro: el lenguaje PHP y el gestor de bases de datos MySQL. El Captulo 18
presentar algunas de estas herramientas.
1.2. INTERNET
3
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
www.full-ebook.com
INTERNET Y LA PROGRAMACIN DE ORDENADORES
5
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Clientes: equipos que los usuarios individuales utilizan para conectarse a la red y
solicitar servicios a los servidores. Durante el tiempo de conexin tienen presencia
fsica en la red. Normalmente los proveedores de acceso a Internet asignan a estos
equipos una direccin IP durante su conexin, pero esa direccin es variable, es
decir, cambia de unas conexiones a otras (IP dinmica).
Los conceptos de cliente y servidor se suelen utilizar con dos significados
diferentes, en referencia al hardware el sentido es el indicado anteriormente, el
servidor hace referencia al equipo remoto al que se realiza la conexin y el cliente
sera el equipo local utilizado para efectuar dicha conexin. Pero tambin se
utilizan esos conceptos en referencia al software:
www.full-ebook.com
INTERNET Y LA PROGRAMACIN DE ORDENADORES
Definicin de la pgina: toda pgina web tiene detrs un cdigo fuente que la
define. Cuando se accede a una pgina web, aunque en el monitor se puedan
visualizar documentos con imgenes y texto de diferentes tamaos, colores y
formatos, debe tenerse presente que detrs de eso hay un documento de texto
sin ningn tipo de formato y que incorpora una serie de instrucciones o
comandos que son los que realmente generan la pgina que se visualiza. Ese
documento fuente est definido en un lenguaje especial: el conocido HTML
(HyperText Markup Language). Se trata de un lenguaje puramente descriptivo
que incorpara una serie de comandos o etiquetas (tags) que permiten definir la
estructura lgica del documento, dar formato al texto, aadir elementos no
textuales,... Se asume que los lectores interesados en este libro tienen un cierto
conocimiento de este lenguaje de definicin de hipertextos, no obstante, se ha
considerado oportuno incluir un captulo introductorio en el que se presenten
los comandos bsicos de HTML (Captulo 3). Para aquellos lectores sin
conocimientos de HTML, una comprensin rpida de los comandos expuestos
en dicho captulo es ms que suficiente para poder entender el resto del libro.
Publicacin del documento: una vez creado el documento HTML que define la
pgina web, el siguiente paso es evidentemente publicarla para que est
disponible para el resto de usuarios de Internet. La publicacin implica la
transferencia del documento a un equipo servidor que disponga de un programa
de servidor web. Puede optarse por utilizar algn servidor de alojamiento
gratuito de pginas o utilizar los espacios que los proveedores de acceso a
Internet suelen ofrecer a sus clientes. Otra posibilidad sera configurar un
equipo propio para que acte de servidor, para ello sera preciso contratar con
algn proveedor una direccin IP fija y registrar el dominio que se quiera
utilizar.
7
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Pero, qu es una pgina dinmica? Pinsese, por ejemplo, en un multicine que quiere
publicar en Internet la informacin actualizada sobre horarios y pelculas que se proyectan
en cada una de sus salas. Evidentemente, sera muy sencillo generar una simple pgina en
HTML con una tabla en la que se muestre esa informacin; incluso sin necesidad de tener
ningn tipo de conocimiento sobre HTML, por ejemplo, se podra escribir en Word y usar
la opcin de Guardar como pgina web.... Hasta aqu sencillo, pero la informacin en s
es un elemento dinmico, las pelculas que se proyectan en cada sala cambian y por tanto la
pgina web debera ser actualizada. Tiene sentido tener que modificar el documento
HTML cada vez que se produzca un cambio en la cartelera?, no sera muchsimo ms
rentable disponer de un sistema que modifique de forma automtica la informacin que
muestra la pgina web? Esto es dinamismo, y esto no se puede conseguir solo con HTML.
A lo largo de los diferentes captulos de este libro el usuario aprender cmo resulta
muy sencillo generar una base de datos con MySQL con toda la informacin de las
pelculas a proyectar y una pgina web con un programa PHP que se encargue, cada
vez que un usuario solicita la pgina, de hacer una consulta a la base de datos para
obtener la cartelera actualizada y generar con ella de forma automtica el cdigo
HTML que se enva al usuario. Este mismo ejemplo se ir desarrollando paso a paso en
los prximos captulos y servir de hilo conductor del resto del libro.
www.full-ebook.com
INTERNET Y LA PROGRAMACIN DE ORDENADORES
9
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
10
www.full-ebook.com
INTERNET Y LA PROGRAMACIN DE ORDENADORES
Programacin guiada por eventos: los programas deben ser capaces de dar
respuesta a las diferentes acciones que el usuario efecta sobre la interfaze del
programa. Por ejemplo, cuando un usuario elige una opcin de men o pulsa
un botn se genera un evento que debe ser detectado, identificado y tratado por
el programa.
11
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
La mayor parte de los programadores optan por utilizar lenguajes cuyo cdigo
resulta ms fcil de entender, por cuanto sus reglas sintcticas se asemejan ms a la
forma de comunicarse las personas; son lenguajes que estn ms cerca del
programador pero ms lejos de la mquina a la que van dirigidos. Estos lenguajes
son los denominados "lenguajes de alto nivel" y a ellos pertenecen los lenguajes de
programacin ms conocidos.
12
www.full-ebook.com
INTERNET Y LA PROGRAMACIN DE ORDENADORES
Por poner un smil que sirva para clarificar la diferencia entre ambos tipos de
programas, supngase que una persona recibe una lista con una serie de tareas a
realizar. Podra optar por utilizar dos estrategias:
Traduccin
if(x<0) 01101101110
return 1; 10111101000
else ... 111....
Figura 1.2 Necesidad de un proceso de traduccin del cdigo fuente para que el
ordenador pueda entenderlo. Dicha traduccin puede realizarse mediante un
proceso de complicacin o mediante el uso de un intrprete
13
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Otra de las ventajas de los lenguajes interpretados puede ser la mayor facilidad
para su aprendizaje y la simplificacin en el proceso de desarrollo de las
aplicaciones. En el caso de los lenguajes interpretados para el desarrollo de
aplicaciones web, no se requiere adems ningn tipo de herramienta de desarrollo
como puedan ser compiladores; los intrpretes van integrados en los navegadores
web en un caso y en los servidores web en otro. El cdigo fuente adems se
14
www.full-ebook.com
INTERNET Y LA PROGRAMACIN DE ORDENADORES
incrusta dentro del cdigo HTML con lo que incluso no sera necesario ningn tipo
de editor especfico.
Cul ser el formato del conjunto de ordenes? Se puede optar por generar
programas de forma independiente que se integren en la pgina despus de un
proceso de compilacin, tal como ocurre en el caso de Java, o por el contrario
se puede desarrollar la aplicacin en base a scripts o guiones que, sin
necesidad de compilacin, sean incrustados directamente entre el cdigo
HTML, tal como se hace en PHP, JavaScript o VBScript.
15
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Programacin del lado del cliente: los programas residen junto a la pgina web
en el servidor pero son transferidos al cliente para que este los ejecute. Java,
JavaScript, VBScript son lenguajes de programacin del lado del cliente.
Programacin del lado del servidor: los programas son ejecutados por el
servidor y lo que se enva al cliente es la respuesta o resultado de dicha
ejecucin. Lenguajes como PHP o Perl pertenecen a esta categora.
Figura 1.3 Diferencia entre la programacin del lado del servidor y la del lado del cliente
16
www.full-ebook.com
INTERNET Y LA PROGRAMACIN DE ORDENADORES
Programacin del lado del cliente Programacin del lado del servidor
Los programas residen en el servidor Los programas residen y son ejecutados
pero se ejecutan en el cliente por el servidor
Las respuestas a las acciones de los Una vez enviada al usuario la respuesta
usuarios sobre el programa pueden ser del programa, cualquier peticin
invocadas sin necesidad de realizar adicional del cliente requiere una nueva
transmisiones por la red conexin con el servidor y la ejecucin
en l de un nuevo programa
Tabla 1.1 Diferencias entre la programacin del lado del cliente y del lado del servidor
17
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
JavaScript
JavaScript es un lenguaje interpretado basado en guiones que son integrados
directamente en el cdigo HTML. El cdigo es transferido al cliente para que este
lo interprete al cargar la pgina. Con JavaScript no pueden crearse programas
independientes.
Es un lenguaje interpretado.
No necesita compilacin.
Multiplataforma.
Lenguaje de alto nivel.
Admite programacin estructurada.
Basado en objetos.
Maneja la mayora de los eventos que se pueden producir sobre la pgina
web.
No se necesita ningn kit o entorno de desarrollo.
18
www.full-ebook.com
INTERNET Y LA PROGRAMACIN DE ORDENADORES
Java
Java es un lenguaje de programacin clsico en cuanto a que requieren un proceso
de compilacin. El cdigo compilado puede ser integrado en la pgina web para
que sea ejecutado por el cliente.
El nacimiento formal del lenguaje se sita en enero de 1996 con el lanzamiento por
parte de la empresa creadora, Sun Microsystems, del JDK 1.0 (Java Development
Kit). Este entorno de desarrollo Java puede obtenerse de forma totalmente gratuita
a travs de Internet (http://www.javasoft.com) e incorpora los elementos bsicos
necesarios para el desarrollo de aplicaciones Java.
19
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Por supuesto, Java es un lenguaje con unas altas prestaciones, mucho mayores que
las de lenguajes interpretados. Algunas de sus caractersticas son:
VBScript
VBScript es, al igual que JavaScript, un lenguaje basado en guiones que permite
integrar programas directamente en el cdigo HTML. Admite un doble uso, por un
lado como lenguaje del lado del cliente, pero tambin como lenguaje del lado del
servidor para la generacin de pginas ASP.
20
www.full-ebook.com
INTERNET Y LA PROGRAMACIN DE ORDENADORES
Programacin CGI
CGI son las siglas de Common Gateway Interface (Interfaz de Pasarela Comn) y
lo que define es un estndar para establecer la comunicacin entre un servidor web
y un programa. Esta interfaz define una forma cmoda y simple de ejecutar
programas que se encuentran en la mquina en la que se aloja el servidor, a travs
de la definicin de una serie de reglas que deben cumplir tanto las aplicaciones
como los servidores para hacer posible la ejecucin de los programas.
Al tratarse de una interfaz, no existe ningn tipo de dependencia con el lenguaje de
programacin empleado. Para desarrollar programas CGI se puede utilizar
cualquier lenguaje. Los ms habituales son: C, C++, Fortran, Perl, Tcl, Visual
Basic, AppleScript. Los lenguajes interpretados como Tcl y Perl, tienen mayor
facilidad de mantenimiento y depuracin, presentan ventajas de seguridad, pero
resultan ms lentos. Los lenguajes compilados (C, C++,...), por su parte, son
mucho ms rpidos. En el caso de CGI la velocidad de ejecucin es importante, ya
que habr que sumar el tiempo de ejecucin al tiempo de espera de red y a la
velocidad de transmisin.
Para utilizar la tecnologa ASP sobre otros servidores, por ejemplo servidores
Unix, se necesita un software intrprete (Chilisoft, Instant ASP).
21
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Las JSP se diferencian de otras tecnologas del lado del servidor como los CGI
o las ASP en dos aspectos principalmente: por un lado, los JSP y servlets se
ejecutan en una mquina virtual Java, lo cual permite que, en principio, se
puedan usar en cualquier tipo de ordenador, siempre que tenga instalado esa
mquina virtual. Por otro lado, un programa JSP se compila a un programa en
Java la primera vez que se invoca, y del programa en Java se crea una clase que
se empieza a ejecutar en el servidor como un servlet. De esta manera los
servlets no se ejecutan cada vez que se recibe una peticin, sino que persisten
de una peticin a la siguiente, lo que permite realizar operaciones como la
conexin a bases de datos o manejo de sesiones de una manera ms eficiente.
Un JSP es una pgina web con etiquetas especiales y cdigo Java incrustado,
mientras que un servlet es un programa que recibe peticiones y genera a partir de
ellas una pgina web. En ambos casos se necesita un programa servidor que se
encargue de recibir las peticiones, distribuirlas entre los servlets y realizar las
tareas de gestin propias de un servidor web. Estos programas suelen llamarse
contenedores de servlets o servlet engines, y, entre otros, podran citarse como
ejemplos Resin, BEA Weblogic, JRun de Macromedia, Lutris Hendir, o, quizs el
ms popular y conocido: Toncat.
ColdFusion
ColdFusion es una tecnologa desarrollada inicialmente por Allarie, que en la
actualidad pertenece a Macromedia. Es una herramienta sencilla de aprender y
bastante potente que funciona sobre la mayora de servidores web. Los scripts se
desarrollan por medio de etiquetas al estilo HTML (ColdFusion en realidad se
denomina Cold Fusion Markup Language -CFML-). Estas etiquetas se sitan
dentro del documento HTML y son ejecutadas por el servidor, de forma que el
cliente solo ve el resultado, no el cdigo.
Las etiquetas del lenguaje CFML tienen una sintaxis similar a las de HTML y se
distinguen del resto por tener nombres que siempre comienzan con cf. Adems de
las etiquetas predefinidas, el programador puede crear nuevas etiquetas e incluso
puede integrar cdigo en otros lenguajes como C, C++ o Java.
22
www.full-ebook.com
INTERNET Y LA PROGRAMACIN DE ORDENADORES
Las aplicaciones ColdFusion pueden interactuar con cualquier base de datos que
soporte ODBC o JDBC.
PHP
PHP es un lenguaje interpretado del lado del servidor que surge dentro de la
corriente denominada cdigo abierto (open source). Se caracteriza por su potencia,
versatilidad, robustez y modularidad. Al igual que ocurre con tecnologas similares,
los programas son integrados directamente dentro del cdigo HTML. En este libro
se explicar en detalle la sintaxis y el funcionamiento de este lenguaje, de momento
se realiza a continuacin una breve comparativa con las otras tecnologas del lado
del servidor descritas previamente.
23
www.full-ebook.com
www.full-ebook.com
OPEN SOURCE Y
SOFTWARE LIBRE
2.1. INTRODUCCIN
El actual entorno mundial est claramente caracterizado por el fenmeno de la
1
globalizacin , que puede entenderse como un efecto accin reaccin que ocurre a gran
velocidad, casi de forma simultnea, por el cual los acontecimientos significativos que
ocurren en una parte del planeta repercuten o hacen reaccionar casi inmediatamente al
resto. Como rasgos caractersticos de este entorno globalizante podemos destacar, por un
lado, la tendencia a la estandarizacin econmica, social, cultural y, como no, tecnolgica,
siguiendo como modelo los patrones del bloque econmico ms fuerte, Estados Unidos. Y,
por otro, el uso intensivo de las tecnologas de la informacin y las comunicaciones (TIC).
En este sentido, el constante crecimiento del numero de actividades sociales y
empresariales, que necesitan de las computadoras, y la incorporacin y presencia masiva de
dispositivos digitales en cualquier actividad humana han aumentado la cantidad y
1
Las definiciones de globalizacin son mltiples, aqu interesa ms comprender su
significado general que entrar en los matices de las distintas definiciones. No obstante, para
una mayor profundidad sobre el concepto se recomienda consultar las siguientes obras
Globalizacin: oportunidades y desafos. (Maesso Corral, 2003) y Los limites a la
globalizacin (Noam Chomsky, 2002).
25
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
complejidad de los sistemas software, haciendo crecer por tanto la inversin y dependencia
de dichos sistemas y en definitiva de sus creadores.
Tabla 2.1 Facturacin del mercado de las TIC (en millones de euros) en Europa por
segmentos. Elaboracin propia a partir de los datos de noviembre obtenidos en el Centro
de Prediccin Econmica de la Universidad Autnoma de Madrid (CEPREDE) y el
Observatorio de Tecnologas de la Informacin Europeo (EITO)
2
Las ltimas cifras registradas en agosto del 2004 por el Centro de Prediccin Econmica
de la Universidad Autnoma de Madrid (CEPERDE) revelan que en el mundo existen ms
de 797millones de internautas, lo que supone un incremento del 121% respecto al ao 2000,
de los que ms de 14 millones de usuarios estn en Espaa, aproximadamente el 36 % de la
poblacin del pas.
26
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
A modo de aproximacin inicial se puede decir que el trmino open source hace
referencia a la libre disponibilidad por parte del usuario de un software y de su cdigo
fuente. El cdigo fuente est formado por lneas de instrucciones escritas en un
determinado lenguaje de programacin que permiten desarrollar una aplicacin o
software y que este ejecute las tareas para las que ha sido creado. Para los que se acercan
al mundo de la informtica por primera vez o no dominan aspectos ms tcnicos
podemos utilizar como smil del cdigo fuente la formula de elaboracin de un
medicamento. La importancia de conocer el cdigo fuente no es trivial, pues quien
conozca el cdigo, o frmula siguiendo con el ejemplo, y disponga de los elementos
tcnicos y conocimientos necesarios podr generar por s mismo el producto final
software o modificarlo segn sus necesidades. Evidentemente, toda organizacin
empresarial con nimo de lucro dedicada al desarrollo de aplicaciones guarda y protege
el cdigo fuente de los programas que desarrollan como el mayor de sus tesoros.
Conceptos muy diferentes son los trminos free software y Shareware. El primero,
designa un software sin precio de adquisicin, gratuito, que el usuario en algunos
casos, y segn lo que exprese la licencia del producto, podr copiar y distribuir,
incluso acceder a su cdigo fuente o modificarlo. El segundo, Shareware, hace
referencia a software o versiones de software que es posible utilizar de forma
gratuita durante un periodo de tiempo, y una vez expirado este, para seguir
utilizando el programa con todas sus funcionalidades es necesario abonar un precio
y aceptar una licencia de uso. En realidad el software Shareware no constituye un
tipo de software, ms bien responde a una estrategia promocional del tipo periodo
de prueba gratuito y, en ningn caso permite acceso al cdigo fuente ni durante el
periodo promocional ni despus del pago.
27
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
un punto de partida para poder comprender los siguientes epgrafes en los que se
analizar la evolucin cronolgica de este movimiento, su filosofa y caractersticas
y la expansin espectacular que est teniendo en la actualidad.
En este periodo la mayora del software existente era compartido libremente entre
los usuarios, desarrolladores, con el fin de mejorarlo y avanzar en el desarrollo y
creacin de nuevos programas.
3
Yin R. (2000). Case study evaluations: a decade of progress? En: Evaluation models.
Viewpoints on educational and human services evaluation. Boston. Kluwer Academic
Publishers, 2000.
28
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
Ante esta situacin solo era cuestin de tiempo que el software libre desapareciera
y se implantara el software comercial o Closed Source (cdigo fuente cerrado), que
supone para el usuario adquirir nicamente el derecho a la utilizacin de las
aplicaciones.
Es este contexto el que en 1984 inspir a Richard Stallman, miembro del staff del
laboratorio de inteligencia artificial del Instituto de Tecnologa de Massachusetts (MIT), a
renunciar a su puesto y dar inicio al proyecto GNU, acrnimo del ingls GNU is not Unix,
con el propsito de crear una comunidad para compartir software de forma libre. Libre en
cuanto a la posibilidad de ver su cdigo fuente, modificarlo y poder distribuirlo con o sin
coste, pero siguiendo la distribucin esos mismos principios. Para conseguir ese objetivo, la
primera tarea que se propuso fue desarrollar un sistema operativo completo tipo Unix4 que
siguiera esos criterios de libertad.
En 1985 los componentes del proyecto GNU crearon la Fundacin para el Software
Libre, free software Fundation (FSF), organizacin sin nimo de lucro creada para
el fomento del software libre que pasa a ocuparse de tareas organizativas y de
distribucin de este tipo de software tanto procedente del proyecto GNU como
ajeno. Esta asociacin establece la definicin de free software, software libre,
indicando que un software para tener esta calificacin debe cumplir con cuatro
condiciones, denominadas las cuatro libertades:
4
La intencin de hacer el nuevo sistema compatible con Unix fue debida a que ...ese era
el sistema operativo ms utilizado y por tanto el ser compatible con dicho sistema
facilitara el trasvase de usuarios de uno a otro...... Stallman, 1999.
29
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Un hecho crucial para toda la corriente es la creacin por parte de esta asociacin
del denominado Contrato social de Debian con la comunidad de software libre.
El primer borrador de este documento fue elaborado por Bruce Parens en 1997 y en
l se recogen las llamadas directrices de software libre de Debian, formadas por
diez puntos en los que se recoge la filosofa a seguir por el proyecto Debian y que
servirn de base a la futura definicin de open source. Esta definicin se produce
en febrero de 1998 cuando dentro de la comunidad de software libre un grupo,
formado entre otros por Raymond, E; Parens, B; Peterson, C, crea la open source
Initiative (OSI) que elabora y promueve el uso de la nomenclatura open source. La
OSI, tomando como base las directrices del software libre de Debian y eliminando
las referencias especficas a dicha asociacin, establece la definicin de open
source que se rige por los siguientes puntos que a continuacin se muestran de
forma resumida:
1. Libre redistribucin.
2. Acceso al cdigo fuente.
3. Trabajos derivados.
4. Integridad del cdigo fuente del autor.
5. No discriminacin contra personas y grupos.
6. No discriminacin contra campos de trabajo.
7. Distribucin de licencia.
8. La licencia no debe ser especfica a un producto.
9. La licencia no debe restringir otro tipo de software.
10. La licencia debe ser tecnolgicamente neutral.
30
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
Los trminos free software, que en castellano puede traducirse por software libre,
donde libre no se refiere al precio sino a la libertad de uso y disponibilidad de una
aplicacin y de su cdigo fuente, y open source que tiene por expresin homnima
cdigo fuente abierto, son dos formas distintas utilizadas para designar no solo
un tipo particular de software y licencia sino un modo de pensar, una filosofa
distinta en lo referido a produccin, distribucin y venta de software.
31
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Si bien es cierto que estos trminos no son exactamente idnticos ya que cada uno
de ellos tiene su origen en una corriente distinta de un mismo movimiento
(Stallman, 19996), no es menos cierto que son ms las coincidencias que los unen
que las diferencias, siendo las propias tendencias las que intentan hacer prevalecer
los matices de su concepto sobre el otro.
Son numerosos los artculos que circulan por la Red hablando de enfrentamiento
entre las dos corrientes, pero en honor a la verdad y acudiendo a la informacin que
las propias organizaciones FSF y OSI ofrecen, dicho enfrentamiento no existe, ms
bien todo lo contrario, colaboran y participan en distintos proyectos y eventos,
aunque siempre dejando claro que no son organizaciones idnticas.
6
Stallman, R; Raymond, E. S; Bruce. P; O'Reilly.T et al.: open sources: Voices from the
open source Revolution. Edited by Chris DiBona, Sam Ockman, Mark Stone. (1999).
32
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
visto, engloba tanto al software open source como al software libre de la FSF y su
uso es ms extendido y reconocido en los foros internacionales. Como ejemplo de
la utilizacin y reconocimiento del termino open source se pueden citar los
siguientes acontecimientos recientes:
Open source no es solo una definicin de un tipo de software sino que representa
todo un movimiento, con una filosofa y formas de trabajar distintas que implican
unas repercusiones tecnolgicas, sociales y econmicas que requieren de un
anlisis detallado que se realizar a continuacin.
Open source busca dar la libertad total a los usuarios en la utilizacin del software,
lo que implica la necesidad de poner a total disposicin de estos el cdigo fuente
que en la mayora de las ocasiones adems de ser accesible puede ser copiado,
modificado y redistribuido sin restricciones. Esta filosofa cargada de libertad y
apertura no puede crecer en los tradicionales entornos cerrados y requiere la
bsqueda y definicin de nuevos espacios abiertos y colaborativos, que dan lugar a
las denominadas comunidades. Una comunidad es una agrupacin de personas que
con independencia de su perfil econmico, social, cultural y geogrfico presentan
un inters comn y de forma voluntaria se incorporan a un grupo, inicialmente
pequeo, que crece en torno a un mismo inters hasta crear una comunidad
organizada. Este fenmeno social de agrupacin voluntaria de personas,
generalmente de forma virtual, en torno al desarrollo de software open source
constituye el motor de todo el movimiento. Motor social que se ha visto favorecido
en su desarrollo por la aparicin y uso intensivo de Internet, que acta como
espacio fsico en el que estas comunidades se instalan y comunican y como
catalizador del movimiento open source. Es por ello que se reconoce la existencia
de una estrecha vinculacin entre Internet y el open source, pues sin una red libre
del tipo de Internet sera imposible el desarrollo de esta tendencia, y sin esta no se
habran desarrollado numerosos elementos que contribuyen al mantenimiento y
crecimiento de la Red.
7
Congreso que pese al ttulo open source cont con la presencia de prestigiosos
representantes de ambas corrientes, free software y open source.
33
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Por ltimo, open source ha supuesto una apertura del mercado, generando
competencia y reduciendo los efectos negativos de las situaciones prximas al
monopolio, obligando a las empresas a ser ms competitivas, lo que se traduce en
ofertar mejores productos a menores precios.
34
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
2.4. LICENCIAS
La comunidad open source y software libre se basan en la bsqueda de la libertad
duradera y permanente del software, pero en una libertad siempre conforme al
derecho y la jurisprudencia y nunca sustentada en la violacin de las normas
legales. Es precisamente la normativa jurdica la que permite y ampara que el
software se mantenga libre frente a intentos de apropiacin por terceros. Esta
libertad se consigue dotando al software de los correspondientes derechos de autor
y licencias. La licencia, en un lenguaje coloquial, puede definirse como la forma en
la que el autor de una obra, en este caso software, permite el uso y distribucin de
su creacin por terceras personas de la manera que l considera ms oportuna,
siendo por tanto responsabilidad del autor incluir la licencia que especifique de qu
forma puede ser utilizado un programa.
8
Esta recomendacin se debe a la mencionada complejidad que entraa el desarrollar una
licencia conforme al derecho.
35
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Artistic license
BSD license
MIT license
36
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
9
As queda regulado en el artculo 25.3 de la Ley de Propiedad Intelectual RDL 1/1996 de
12 de abril.
10
La figura legal ms prxima en Espaa sera la llamada obra colectiva. regulada en los
artculos 8 y 97 de la Ley de Propiedad Intelectual, Real Decreto Legislativo 1/1996 de 12
de abril.
11
Copyleft no es lo contrario de Copyright pues la clusula Copyleft la impone el autor del
programa original en uso de sus facultades de copyright.
37
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Las caractersticas genricas de este tipo de licencias con respecto a las licencias de
software propietario son:
No obstante, hay que destacar que es en el mbito de las licencias donde mejor
queda reflejada la distincin entre las dos corrientes, open source y software libre,
puesto que la OSI admite licencias, como la BSD (Berkeley Systmen Distribution),
que aaden determinadas restricciones a los trminos de distribucin de originales
y de redistribucin de programas derivados, al eliminar la obligatoriedad de
mantener el software como libre suprimiendo la clusula Copyleft. La licencia BSD
tiene como principal caracterstica permitir que un programa libre pueda ser
modificado obtenindose de l un programa derivado que se cierra, deja de ser libre
su cdigo fuente, cambiando la licencia.
12
Siguiendo los principios de libre mercado la oferta y la demanda mantendrn un coste
bajo o nulo, puesto que si los vendedores obtienen un margen de beneficios elevado
entrarn nuevos vendedores en el mercado y la competencia har que los precios
disminuyan
38
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
Para finalizar este apartado se identificarn las licencias a las que estn sujetas las
aplicaciones open source que se van a utilizar y desarrollar en los captulos
siguientes:
13
La publicacin se ha realizado el 12 de marzo del 2004 y puede ser consultada
ntegramente en la siguiente direccin www.mysql.com/products/foss-exception.html
39
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
14
El software de infraestructura, tambin llamado de base o de sistema, es aquel conjunto
de programas que tienen como misin facilitar el uso del ordenador por parte de los
usuarios. Entre sus funciones estn comunicar la computadora con sus perifricos,
asignndolos y administrndolos y actuar como intermediario entre el hardware y el
software de aplicacin. Este tipo de software suele dividirse en sistema operativo y
programas de utilidades.
40
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
Existen distintos sistemas operativos open source a parte de Linux como FreeBSD
(www.freebsd.org), caracterizado por proporcionar servicios de red robustos con
una excelente gestin de memoria y un alto rendimiento en los accesos a disco y
libreras compartidas que reducen el tamao de los programas, OpenBSD
(www.openbsd.org) sistema operativo que concentra sus esfuerzos en la seguridad
y la portabilidad, GNU/HURD (http://hurd.es.gnu.org), novedoso sistema basado
en un conjunto de servidores, que se ejecutan sobre un microkernel formando la
parte del sistema operativo que sustituye al ncleo tradicional. Pero como ya se ha
comentado en apartados anteriores el sistema operativo open source por excelencia
es el que generalmente se denomina como LINUX, basado en el ncleo o kernel
Linux ms las libreras y utilidades GNU. En la actualidad son numerosas las
variantes de distribuciones, comerciales y no comerciales, de sistemas
operativos basados en Linux (GNU/Linux) pero con distintas utilidades y
complementos alcanzando un elevado grado de especializacin. A continuacin
se recogen las distribuciones ms destacadas:
Comerciales
No comerciales
41
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
42
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
43
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Por ltimo, en lo que se refiere a las aplicaciones multimedia, verdadera revolucin del
software, que permiten entre otras cosas ver y escuchar audio y video, tratamiento de
imgenes, etc. tambin existen aplicaciones abiertas capaces de hacer sombra a los
productos de cdigo cerrado. Como principales ejemplos, en la Tabla 2.4 se recoge
para cada software de cdigo cerrado un posible homlogo open source.
Los ltimos proyectos open source que mayor inters han despertado entre la
comunidad son KDE y Gnome, orientados a dotar al usuario de un escritorio
intuitivo y amigable desarrollado con software totalmente libre:
44
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
De tal forma que cualquier desarrollo web puede llevarse a cabo por completo
mediante la utilizacin de herramientas open source.
Los servidores web son programas que instalados en equipos conectados a una red,
principalmente Internet, permiten que dichos equipos puedan recibir peticiones http
de otros ordenadores y satisfacerlas sirviendo pginas web.
Algunos de los servidores web open source ms conocidos son: Apache, AOL
Server, Roxen y Thttpd, de los cuales el servidor Apache es el que tiene mayor
presencia en Internet, tal como puede apreciarse en la Tabla 2.5.
45
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
En una encuesta sobre desarrollo de bases de datos realizada por Evans Data
Corporation en enero del 2004, se puso de manifiesto que SQL Server y Access
continan dominando el desarrollo de bases de datos, pero las bases de datos open
source estn ganando terreno. El uso de SQL Server y Access haba crecido casi un
6%, mientras que el uso de MySQL se haba incrementado ms del 30% en los seis
meses anteriores a la realizacin de la encuesta.
Los lenguajes de programacin son las herramientas bsicas utilizadas por los
desarrolladores para crear aplicaciones web. Dentro del desarrollo web la
comunidad open source parece mostrar sus predileccin por el lenguaje PHP.
Aunque no se va a profundizar en este apartado en este lenguaje, por ser objeto de
estudio de los prximos captulos, s se puede adelantar que se trata de un lenguaje
interpretado especialmente diseado para embeber su cdigo en el HTML de las
pginas web y especial facilidad para interactuar con bases de datos.
46
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
47
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Sourceforge (http://sourceforge.net/)
Savannah (http://savannah.gnu.org/)
Tabla 2.6 Proyectos activos y usuarios registrados de dos de las comunidades open
source ms importantes a fecha de noviembre de 2004. Fuente: Web de las propias
comunidades
Las iniciativas gubernamentales a favor del software open source se han producido
en todas las partes del mundo, desde Asia, donde el gobierno de una de las mayores
potencias tecnolgicas del mundo, la Repblica Popular China, ha establecido
disposiciones legales a favor del uso de software open source para los servidores
pblicos, o Taiwn dnde las previsiones son ahorrar 300 millones de dlares en
pago de licencias a Microsoft, gracias a un programa de desarrollo y adopcin de
software open source en toda la administracin estatal. Hasta el gobierno de
Estados Unidos, que si bien no ha legislado a favor del software open source s lo
48
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
utiliza, ejemplo claro es el sitio web de la Casa Blanca16 soportado con sistema
operativo Linux y servidor web Apache. Y latinoamrica, con pases como Per y
Chile en los que se han sucedido las propuestas de leyes que obliguen al uso
exclusivo de software open source en la administracin pblica.
En Europa las iniciativas no se han quedado atrs a la hora de apostar por el open
source, ejemplos claros son la administracin alemana que en junio del 2002
anunci la migracin de sus sistemas a Linux, o Noruega pas que decidi no
renovar las licencias de Microsoft e invertir en favor del software libre.
16
Informacin tomada de Netcraft, empresa britanica de servicios de Internet reconocida
internacionalmente por sus estudios sobre la Red.
17
La nica iniciativa con carcter estatal ha sido una Proposicin de Ley para promocionar
el uso del software libre en la Administracin del estado en general y en las
administraciones autonmicas en particular, presentada por el Grupo Mixto y debatida en el
Congreso de los Diputados el 24-09-2002, sesin plenaria nmero 181, donde fue
rechazada.
49
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Toyota Motor Sales Usa, eligi Linux como sistema operativo de su red de
1.200 servidores.
Amazon, basa sus sistemas en la utilizacin de servidores Apache sobre
Linux.
Media y comunicacin:
Financiero:
50
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
2.6.1. VENTAJAS
Se enumeran a continuacin algunas de las ventajas que proporciona el software
open source, destacando que, si bien las econmicas18 son las ms visibles, hay
otras ventajas importantes:
18
Beneficios que no solo se deben cuantificar como diferencia entre, el pago actual por las
licencias de software y el que se pagara, en caso de ser necesario, al utilizar software open
source, pues hay otras cuestiones como ahorro en costes de actualizaciones, estabilidad del
sistema que repercute en la productividad, etc.
19
Atendiendo al estudio de IBM que se puede obtener integro en:
http://www-1.ibm.com/linux/LinuxInSight.pdf, Linux es el sistema operativo que ms
rpido ha evolucionado en la historia de la ingeniera de software.
51
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
2.6.2. INCONVENIENTES
Por supuesto no todo son ventajas, la utilizacin de este tipo de software puede
tener sus inconvenientes:
52
www.full-ebook.com
OPEN SOURCE Y SOFTWARE LIBRE
53
www.full-ebook.com
www.full-ebook.com
CREACIN DE PGINAS
WEB MEDIANTE EL
LENGUAJE HTML
3.1. INTRODUCCIN
En el primer captulo, en el que se ha sido analizado el funcionamiento del servicio
web, se explic que Internet utiliza para la transferencia de informacin entre clientes y
servidores el protocolo HTTP (HiperText Transfer Protocol), protocolo de
transferencia de hipertexto. Este protocolo establece los requisitos que se deben
cumplir para la transferencia de la informacin, y exige que la informacin a transferir
sea definida mediante un sistema estndar, comprensible para cualquier equipo. Con la
intencin de satisfacer esta necesidad se desarroll un lenguaje de definicin de
hipertextos, el conocido actualmente como HTML. En este captulo se analizar dicho
lenguaje y su sintaxis desde un punto de vista prctico, mediante pequeos ejemplos.
55
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
56
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
Los comandos siempre van incluidos entre los signos < > e insertados en el propio
texto que compone el contenido de la pgina. Especifican su estructura (las
distintas partes de la pgina) y formato. Adems, permiten la insercin de
contenidos especiales como imgenes, videos, sonidos, etc.
Ejemplo 3.1:
Un primer ejemplo sencillo de creacin de una pgina web, puede ser realizado
utilizando un simple editor de texto, por ejemplo el bloc de notas de Windows.
Si se escribe el cdigo:
57
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
pgina. Por ejemplo, los comandos <H1> y </H1> sealan el inicio y el fin,
respectivamente, del texto que se mostrar con formato de ttulo: Primer ejemplo
de pgina web. De la misma manera, los comandos <B> y </B> encierran el
texto que se mostrar en negrita.
Toda pgina web desarrollada con HTML oculta un documento de texto sin
formato, texto ASCII, que incorpora todas las instrucciones o etiquetas del lenguaje
HTML necesarias para conseguir que la pgina tenga la apariencia que se visualiza
en el navegador. Este documento de texto que aparece oculto al usuario final, es lo
que se denomina cdigo fuente de la pgina. Las herramientas de navegacin web
permiten la consulta de ese cdigo fuente; por ejemplo, Internet Explorer dispone
de la opcin Cdigo fuente del men Ver.
58
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
59
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
3.3.1. NAVEGADORES
Son programas instalados en el equipo del usuario que se encargan de ejecutar las
rdenes contenidas en el cdigo HTML. Cuando un usuario desea visitar una
pgina web, su equipo debe conectarse con un servidor remoto y efectuar una
peticin al servidor web. Como respuesta a esta peticin se inicia, a travs de la red
y basndose en el protocolo HTTP, la transferencia del cdigo fuente que define la
pgina. Una vez que ese cdigo llega al equipo del usuario, el navegador que este
tenga instalado interpreta lnea a lnea el cdigo recibido y genera la pgina tal y
como se ver finalmente. Por tanto, los navegadores web o browsers son las
aplicaciones encargadas de realizar las peticiones de pginas web y otros recursos
al servidor y de presentar luego los resultados de la peticin al usuario. Si adems
la pgina HTML contiene imgenes, vdeos, documentos PDF u otro tipo de
ficheros diferentes, el navegador es el encargado de intentar presentar en pantalla
de forma correcta dichos contenidos y, si no puede hacerlo, de arrancar la
aplicacin necesaria para la visualizacin de los mismos.
3.3.2. EDITORES
La labor de creacin de una pgina web est a mitad de camino entre la
programacin y el diseo grfico o maquetacin. Aunque se utiliza un lenguaje
(HTML), este est lejos de ser un lenguaje de programacin como C, C++, Java,
etc. Por otro lado, crear la pgina no se reduce nicamente a buscar una
combinacin de colores y colocacin de diferentes elementos multimedia con una
apariencia visual atractiva.
60
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
Editores WYSIWYG (What You See Is What You Get): con este tipo de editores el
usuario no trabaja directamente sobre el cdigo, sino sobre un documento que
muestra la apariencia de la pgina tal como llegara al usuario final (lo que tu ves
es lo que tu obtienes). Se trata de editores ideales para personas que comienzan a
utilizar el lenguaje HTML y quieren llegar a crear una pgina sin necesidad de
dominar el lenguaje, ya que estos editores se encargan de generar
automticamente ese cdigo de forma oculta para el usuario. Por supuesto, el
usuario tiene la posibilidad de consultar el cdigo generado y, en algunos casos,
dependiendo del editor, tambin modificarlo.
Cualquier persona que quisiera crear su pgina web sin ningn tipo de
complicaciones, podra utilizar el procesador de texto Microsoft Word. Tras incluir
todo el contenido, con el formato deseado, se elegira la opcin de Guardar como
pgina web..., y el propio Word generara una pgina web con el cdigo fuente
correspondiente. Otro tipo de editores especficamente creados para generar pginas
web, como por ejemplo FrontPage, tambin permiten al usuario crear sus pginas de
esta forma tan simple. En ambos casos se estara trabajando con un entorno de
edicin perteneciente a la primera categora de editores (WYSIWYG). A pesar de su
simplicidad de uso, estos editores tambin tienen sus inconvenientes; el principal es
la falta de control por parte del usuario del cdigo generado, llegndose a generar en
ocasiones un cdigo excesivamente complejo y no optimizado.
HomeSite (www.allaire.com)
1stPage2000 (www.evrsoft.com)
61
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
arachnophilia (www.arachnoid.com/arachnophilia)
AceHTML (http://freeware.acehtml.com)
La mayora de los editores que se utilizan a un nivel profesional incorporan las dos
funcionalidades o modos de edicin. Normalmente, los desarrolladores prefieren
trabajar directamente sobre el cdigo y utilizar el otro modo para comprobar
nicamente la apariencia final de la pgina.
62
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
Etiquetas de compatibilidad
Dos son las principales etiquetas que contribuyen a dotar al sitio de un correcto
aspecto formal y que, an no siendo obligatorias, es al menos necesario conocer
para poder interpretar su significado.
Por ltimo, indicar que esta etiqueta debe situarse entre el <HEAD> y <TITLE>.
63
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Strict: el documento debe estar elaborado de una forma estricta conforme a las
reglas del estndar HTML aprobadas por la W3C para cada versin de HTML.
La etiqueta para establecer este tipo de documento es la siguiente:
<!DOCTYPE HTML
PUBLIC "-//W3C//DTD HTML 4.O1
Transitional//EN">
<!DOCTYPE HTML
PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
20
El consorcio W3C pone a disposicin de los desarrolladores un servicio gratuito que
permite verificar y confirmar que el documento est elaborado siguiendo las directrices
establecidas. El servicio est disponible en The W3C MarkUp Validation Service:
http://validator.w3.org/
64
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
Etiquetas de promocin
An a riesgo de simplificar en exceso, se puede decir que el objetivo ltimo de una
pgina web es ser visitada, y para lograrlo debe ser conocida, algo extremadamente
complicado de conseguir debido a la ingente cantidad21 de sitios web en la red. Los
usuarios de Internet en su bsqueda de informacin utilizan buscadores y
directorios, es habitual que consulten solo las pginas que ocupan las primeras
posiciones. Es por tanto un hecho que estos buscadores y directorios son la
principal fuente de visitas de una web, y que la posicin que una pgina ocupa
dentro de ellos es clave para conseguir visitas. A tenor de lo comentado, los
desarrolladores se han esforzado primero en conocer el funcionamiento de los
buscadores22 y robots y, posteriormente, desarrollar un medio de facilitar el
indexado de sus pginas en las bases de datos de dichos buscadores. Surgen as una
serie de metatags entre las que destacan las siguientes:
21
El buscador Google, considerado en la actualidad el ms completo de la red, tiene
indexadas un total de 3.300 millones de pginas web.
22
De forma resumida se puede considerar que, en funcin de la forma de operar, existen
tres tipos de buscadores o robots: los que venden el posicionamiento, los que utilizan robots
que leen las pginas webs, dando un peso fundamental a las metatags, e indexan las pginas
en funcin de las veces que aparece un trmino y Google, que utiliza el sistema
denominado pagerank en el que no importan tanto las metatags de una web y s el
nmero de pginas de contenido similar que se dirigen o enlazan con ella.
65
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Los navegadores ignoran los cambios de lnea dentro del cdigo HTML, as
como la existencia de ms de un espacio en blanco entre palabras.
Todo comando que carezca de sentido es ignorado por el navegador sin generar
ningn mensaje de error.
Hay distintos tipos de navegadores e incluso un mismo navegador tiene
distintas versiones, esto hace que no todos funcionen igual, por lo que la
visualizacin de una misma pgina puede variar de un navegador a otro si no
se respetan los estndares del lenguaje.
Los comandos o etiquetas van encerrados entre los signos < > y suelen tener
una orden de inicio y otra de fin con la misma forma que la de inicio pero
precedida de /. Ejemplo, para sealar que un texto se debe visualizar en
negrita se utiliza el comando <B> para sealar el inicio del texto y el comando
</B> para el final.
Para escribir los comandos en HTML es indiferente el uso de maysculas o
minsculas, pues producen el mismo efecto. Si bien, es bastante comn utilizar
maysculas para hacer ms identificables los comandos dentro del cdigo
fuente.
Los comandos o etiquetas pueden anidarse, combinarse, obteniendo como
resultado la suma de los efectos de cada uno de ellos. Por ejemplo, si se desea
que un texto aparezca en negrita y subrayado se podra realizar el siguiente
anidamiento de comandos:
66
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
67
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Los comandos o tags existentes en el lenguaje HTML son mltiples. Para facilitar
su compresin se van a presentar agrupados segn su finalidad (para qu sirven o
qu permiten hacer).
Para indicar atributos del texto (negrita, subrayado, etc...) se dispone de varias
directivas que a continuacin se muestran. Hay que puntualizar que algunas de ellas
no son reconocidas por determinados navegadores, por lo que el resultado final
depender del navegador con que se visualice la pgina. Un ejemplo de esto es el
comando <BLINK>, especfico del navegador Netscape y que no produce efecto en
68
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
otros navegadores. Los comandos ms habituales para cambiar el estilo del texto son
los que se muestran en la Tabla 3.3.
Para variar el tamao, color y tipo de letra de un texto tambin es muy til el
comando <FONT> </FONT>. Algunos de los parmetros de este comando son:
SIZE = +n/-n permite asignar al texto un tamao n veces superior (+)
o inferior (-) respecto al tamao normal de la fuente.
COLOR = "cdigo del color". Ms adelante se analizar la codificacin de
los colores en HTML.
FACE = "nombre del tipo de fuente". Si el tipo de letra indicado no existe
en el ordenador que visualiza el texto, aparecer escrito en la fuente
predeterminada del navegador.
Ejemplo 3.2:
Si se desea que el texto sea mostrado utilizando un tipo de letra de tamao 2 veces
superior al normal, en color rojo y con fuente arial, el comando sera:
69
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
El comando <P> admite el parmetro ALIGN, cuyo valor puede ser LEFT, RIGHT
o CENTER y especifica la forma de alineamiento del prrafo.
Existe un caso en el que los cambios de lnea y espacios en blanco extra dentro del
cdigo fuente s tienen efecto sobre la visualizacin de la pgina, este caso
corresponde a los denominados bloques de texto preformateado. La forma de
definir estos bloques de texto en HTML es:
<PRE>................</PRE>
Ejemplo 3.3:
Supngase que se desea incluir en la pgina una estadstica de las proyecciones y
espectadores de Cinem@s durante el ltimo ao. Se podra generar una sencilla
estructura tabular mediante un bloque de texto preformateado:
<PRE>
Trimestre Trimestre Trimestre Trimestre
1 2 3 4
----------------------------------------------------------
Proyecciones 456 502 399 487
Expectadores 3.446 6.782 2.947 5.821
----------------------------------------------------------
</PRE>
Cuando el navegador interprete este cdigo, se visualizar ese bloque de texto tal como
aparece en l, respetando el espaciado entre palabras y los cambios de lnea. Puede
comprobarse cmo, de no usar los comandos <PRE> y </PRE>, los datos se
mostraran separados entre s por un nico espacio en blanco y los cambios de lnea se
produciran en los lugares que determine la anchura de la ventana del navegador.
Otro de los tipos de bloques de texto disponibles est constituido por los bloques
con sangras (texto sangrado), la definicin de uno de estos bloques se realiza con
los comandos:
<BLOCKQUOTE>................</BLOCKQUOTE>
70
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
Ejemplo 3.4:
Supngase que se desea mostrar en una pgina las 10 pelculas ms taquilleras de
todos los tiempos en Espaa. El cdigo HTML que genera esta pgina podra ser el
siguiente:
<H2>
LAS PELCULAS MAS TAQUILLERAS DE TODOS LOS TIEMPOS EN
ESPAA
</H2>
<OL>
71
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
<LI>Titanic (1997)</LI>
<LI>El seor de los anillos, El retorno del
rey (2003)</LI>
<LI>El seor de los Anillos, La comunidad del
anillo (2001)</LI>
<LI>El seor de los anillos, Las dos Torres (2002)</LI>
<LI>Harry Potter y la piedra filosofal (2001)</LI>
<LI>Los otros (2001)</LI>
<LI>El sexto sentido (1999)</LI>
<LI>Shrek 2 (2004)</LI>
<LI>Harry Potter y la cmara secreta (2002)</LI>
<LI>La guerra de las galaxias, Episodio I,
La amenaza fantasma (1999)</LI>
</OL>
72
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
El comando <UL> puede llevar el parmetro opcional TYPE, que indica el tipo de
smbolo utilizado para marcar los elementos de la lista. Los valores posibles son:
Ejemplo 3.5:
La Figura 3.4 corresponde a una pgina web del sitio de Cinem@s en la que se
muestra informacin sobre las salas de proyeccin disponibles. Esta pgina
contiene en su parte inferior una lista sin numerar cuyo cdigo HTML es:
73
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Por ltimo, indicar que los diferentes tipos de listas se pueden anidar es decir,
incluir una lista dentro de otra, incluso siendo listas de diferentes tipos.
Ejemplo 3.6:
La pgina que se puede ver en la Figura 3.5 incorpora una serie de listas anidadas,
la lista de nivel superior es una lista numerada, mientras que las de los niveles
inferiores son listas sin numerar. El cdigo fuente de esa pgina es:
<H2>
Nuestros mens especiales
</H2>
Para disfrutar del mejor cine le ofrecemos nuestros packs
especiales:
74
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
<OL TYPE=A>
<LI> Men <I>Junior</I> </LI>
<UL TYPE=square>
<LI>Palomitas pequea</LI>
<LI>Bebida a elegir:</LI>
<UL TYPE="circle">
<LI>Agua mineral</LI>
<LI>Refresco pequeo</LI>
</UL>
</UL>
<UL TYPE=square>
<LI>Palomitas grande</LI>
<LI>Snack</LI>
<LI>Bebida a elegir:</LI>
<UL TYPE="circle">
<LI>Agua mineral</LI>
<LI>Refresco grande</LI>
</UL>
</UL>
</OL>
75
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Otra de las estructuras bsicas de HTML para mostrar y organizar datos son las
tablas. Estas estructuras van a resultar especialmente tiles cuando se desee
recuperar datos de una base de datos y visualizarlos en una pgina web; es por ello
que, en funcin de los objetivos de este libro, resulta importante conocer en detalle
los diferentes comandos HTML que permiten generar estas estructuras.
76
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
ALIGN: indica el tipo de alineacin del contenido de las celdas. Los valores
pueden ser LEFT, RIGHT y CENTER. Este parmetro tambin puede aplicarse
sobre el comando <TR> y tendr efecto sobre todas las celdas de esa fila.
VALIGN: indica el tipo de alineacin vertical del contenido de las celdas. Los
valores pueden ser TOP, BOTTOM, MIDDLE (valor por defecto).
BGCOLOR: indica un color de fondo para la celda. Tambin puede ser aplicado
sobre toda una fila o la tabla completa.
COLSPAN: indica el nmero de columnas que ocupa la celda. El valor por
defecto es 1.
ROWSPAN: indica el nmero de filas que ocupa la celda. Por defecto es 1.
NOWRAP: obliga al navegador a no partir las lneas de la celda. El ancho de la
celda estar fijado por la longitud del texto que contendr.
WIDTH: indica el ancho de la celda. Se puede indicar un ancho en pxeles o un
porcentaje respecto al ancho total de la tabla.
77
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 3.7:
Cinem@s tiene establecido un sistema por el cul todos sus clientes acumulan
puntos cada vez que adquieren una entrada. Los puntos acumulados pueden ser
canjeados por entradas gratis y otros regalos. Dentro del sitio web, Cinem@s
quiere incluir una tabla como la que se ve en la Figura 3.6 para indicar la
correspondencia entre puntos y premios.
<H1 ALIGN="center">
Nuestros premios
</H1>
<TABLE BORDER ALIGN=center>
<TR BGCOLOR=#99CCFF>
<TH> Puntos </TH> <TH> Premio </TD>
</TR>
<TR>
<TH> 20 </TH> <TD> Entrada gratis </TD>
</TR>
<TR>
<TH> 25 </TH> <TD> Gorra <I>Cinem@s</I> </TD>
</TR>
78
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
<TR>
<TH> 30 </TH> <TD> Camiseta <I>Cinem@s</I> </TD>
</TR>
<TR>
<TH> 35 </TH> <TD> Pelcula en DVD o VHS </TD>
</TR>
<TR>
<TH> 40 </TH> <TD> Reproductor de CDs porttil </TD>
</TR>
</TABLE>
Las imgenes son un elemento esencial para disear pginas elegantes. Sin
embargo, un excesivo nmero de imgenes en una pgina puede hacer que esta
pierda su esttica, a la vez que supone hacer ms lento el proceso de visualizacin
(las imgenes son las partes de las pginas que ms espacio en bytes ocupan, por lo
que su transferencia requiere ms tiempo que la del texto). Los visualizadores
pueden admitir distintos formatos de imgenes, los ms extendidos son GIF y JPG.
Cada uno de ellos tiene sus ventajas; por ejemplo, las imgenes JPG ocupan menos
espacio, con la consiguiente reduccin de tiempo en la transferencia, pero tambin
tienen peor calidad que el formato GIF.
79
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Una opcin interesante es insertar una imagen como fondo de la pgina. La forma
de hacerlo es utilizando el parmetro BACKGROUND al mismo tiempo que se
declara el inicio del cuerpo del documento:
<BODY BACKGROUND="Fondo.gif">
En este caso la imagen se repetir tantas veces como sea necesario para cubrir todo
el rea visible de la pgina.
Ejemplo 3.8:
La pgina de inicio de Cinem@s que se vio en la Figura 3.1 incorpora varias
imgenes. La pgina est dividida en dos reas diferentes, correspondientes a lo
que en HTML se denomina marcos o frames, en la de la parte superior se incluyen
tres imgenes que han sido insertadas dentro de una tabla para poder posicionarlas
en la pgina de una manera sencilla. El cdigo siguiente muestra la construccin de
esa tabla y la insercin de las tres imgenes:
80
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
Todo color en HTML viene definido por su formato RGB (Red-Green-Blue), identificado
mediante un cdigo numrico de seis dgitos hexadecimales precedidos del signo "#".
Segn este formato, todo color es una combinacin de los tres colores bsicos: rojo (R),
verde (G) y azul (B); cada uno de ellos puede expresarse desde la ausencia de color (valor
0) a saturacin de color (255). La expresin de los valores debe hacerse en forma
hexadecimal, el valor mnimo (0) se expresa como 00, y el mximo (255) como FF. De
esta forma el cdigo de un color estar formado por 6 dgitos hexadecimales:
Los dos primeros dgitos indican la componente del color primario rojo.
Los dos dgitos intermedios indican la componente del color primario verde.
Los dos ltimos dgitos indican la componente azul.
La Tabla 3.4 muestra los cdigos hexadecimales de algunos de los colores habituales.
Para alguno de esos colores HTML acepta la utilizacin de identificadores
alfanumricos, por ejemplo, el color azul puede ser identificado como blue o el color
rojo como red.
Los editores de HTML suelen disponer de una paleta de colores para facilitar la
utilizacin de los mismos sin tener que realizar conversiones a formato
hexadecimal.
81
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 3.9:
Si se desea que el fondo de la pgina sea de color azul oscuro, el texto amarillo
(combinacin de rojo y verde a partes iguales), el texto asociado a los enlaces no
visitados en color verde y el de los visitados en rojo, la definicin del cuerpo del
documento debera hacerse de la siguiente manera:
En cuanto al destino del enlace, este puede ser otro documento HTML, cualquier
punto intermedio dentro del documento HTML en curso o de otro documento
HTML, e incluso cualquier otro documento de otro tipo (binarios, imgenes,...). El
destino del enlace se define mediante el parmetro HREF del comando <A>.
Ejemplo 3.10:
La pgina de inicio de Cinem@s (Figura 3.1) tiene un conjunto de enlaces que dan
acceso a las restantes pginas del sitio. Estos enlaces se encuentran situados en una
tabla que consta de tres filas y tres columnas, estando la columna central reservada
82
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
para una imagen. El cdigo que define esa estructura tabular con los enlaces
correspondientes es el que se incluye a continuacin:
83
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
</A>
</TD>
</TR>
</TABLE>
Como puede apreciarse, los diferentes enlaces apuntan hacia nuevas pginas
HTML o documentos PHP.
Una vez marcado el destino, se debe crear el enlace, para ello la sintaxis es:
<A HREF="URLdestino#nombre_marcador">
Elemento de enlace
</A>
84
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
85
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Es conveniente sealar que los marcos se crean de izquierda a derecha para las
columnas y de arriba a bajo para las filas. Adems, los marcos se pueden anidar es
decir, introducir unos marcos dentro de otros o subdividir un marco en otros.
Hasta el momento se ha visto cmo dividir una pgina en varias reas con la
directiva <FRAMESET>. Una vez realizada esa divisin es necesario definir los
contenidos que se mostrarn en cada marco, para ello se utiliza la etiqueta
<FRAME>, etiqueta que no tiene comando de cierre y que ir situada en cada uno
de los marcos que se definan entre las etiquetas <FRAMESET>. Los parmetros
que pueden acompaar a esta etiqueta permiten indicar el contenido y modificar la
apariencia del marco:
86
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
Los marcos, si bien permiten enriquecer un sitio con mayor dinamismo y sensacin
de interactividad, tambin pueden generar problemas derivados principalmente del
navegador que utilice el usuario, puesto que determinados navegadores o versiones
de estos no estn preparados para permitir mostrar pginas construidas con marcos.
El diseador del sitio web debe tener en cuenta este posible problema y anticiparse
a l generando un contenido alternativo que pueda ser visualizado por los usuarios
con navegadores que no admitan marcos. Para la creacin de este contenido
alternativo se utilizan las etiquetas <NOFRAMES> y </NOFRAMES>. Estas
etiquetas permiten indicar a los navegadores que no soporten marcos que el
contenido que se debe mostrar es el contenido comprendido entre ellas.
87
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Hay que hacer notar al lector que la decisin de asignar el lugar en el que se deben
mostrar los contenidos no es trivial, imagnese que en un sitio web tiene una pgina
que consta de diferentes enlaces a otros sitios web distintos; si se decide que al
seleccionar un enlace este se abra en la misma ventana del navegador, implicara
que el usuario al seleccionarlo sale del sitio web.
Ejemplo 3.11:
A continuacin se muestra el cdigo fuente de la pgina principal de Cinem@s
(Figura 3.1), que como ya se ha comentado anteriormente est constituida por dos
marcos divididos horizontalmente.
<HTML>
<HEAD>
<TITLE>Cinem@s</TITLE>
</HEAD>
<FRAMESET ROWS="105,*">
<FRAME NAME="encabezado" SCROLLING="no" NORESIZE
SRC="encabezado.htm" FRAMEBORDER=0>
<FRAME NAME="principal" SRC="principal.htm"
FRAMEBORDER =0>
<NOFRAMES>
<BODY>
88
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
<FRAMESET ROWS="105,*">
indica que la pgina se va a dividir horizontalmente en dos filas, una superior con
una altura de 105 pxeles y la inferior, que ocupar el resto de espacio libre.
Posteriormente se definen los dos marcos con el comando <FRAME>:
89
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
3.8. FORMULARIOS
Los formularios son uno de los componentes esenciales en una pgina web, ya que
permiten la interaccin con el usuario, consiguiendo as recoger informacin
particular sobre sus gustos, opiniones, datos personales,... Los visitantes rellenan
los campos del formulario y haciendo clic en un botn del propio formulario, se
envan los datos al servidor en el que reside el sitio web, para que sean procesados,
en su caso, por este. Especialmente tiles sern los formularios para actuar de
interfaz de usuario en los programas PHP.
90
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
Una vez delimitado el formulario entre los comando <FORM> y </FORM>, deben
indicarse entre ellos los comandos necesarios para construir cada uno de sus
campos. Un formulario consta de campos de diferentes tipos y cada uno de esos
campos se define utilizando un comando <INPUT>, acompaado de un parmetro
TYPE que ser el que indique el tipo de campo. Los valores que puede tomar este
parmetro TYPE son los que muestra la Tabla 3.5.
Adems de los campos de texto definidos con el comando <INPUT>, se pueden crear
tambin otro tipo de campos: las reas de texto. Se trata de campos de texto que ocupan
ms de una lnea. La definicin de un rea de texto responde al siguiente esquema:
Otro recurso de los formularios son las listas desplegables, que definen campos con
valores predefinidos. Estas listas se crean igualmente con un comando especial: el
91
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
comando <SELECT>. Cada uno de los elementos de la lista se define con el comando
<OPTION>.
Ejemplo 3.12:
El siguiente cdigo crea un men desplegable con cuatro opciones, apareciendo la
primera seleccionada por defecto:
<SELECT NAME="nombre">
<OPTION SELECTED> Opcin por defecto
<OPTION> Opcin 2
<OPTION> Opcin 3
<OPTION> Opcin 4
</SELECT>
Ejemplo 3.13:
Cinem@s incluye en su sitio web una pgina en la que sus clientes pueden
registrarse y acceder a la consulta de sus datos. La pgina de este rea de
clientes es la que se muestra en la Figura 3.7. Dicha pgina incluye dos
formularios situados dentro de una tabla de dos columnas, el primero permite
introducir un nmero de usuario y contrasea, mientras que el segundo sirve para
enviar todos los datos necesarios para registrarse como cliente.
<HTML>
<HEAD><TITLE>rea de clientes</TITLE></HEAD>
<BODY TEXT=blue>
<!-- Barra de navegacin del sitio -->
<TABLE WIDTH="100%" BORDER BGCOLOR=#99CCFF>
<TR>
<TH WIDTH="16%">
<A HREF="principal.htm">Pgina principal</A></TH>
<TH WIDTH="17%">
<A HREF="proyecciones.php">Nuestra cartelera</A></TH>
92
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
<TH WIDTH="17%">
<A HREF="salas.htm">Nuestras salas</A></TH>
<TH WIDTH="17%">
<A HREF="entradas.htm">Compra de entradas</A></TH>
<TH WIDTH="17%">
<A HREF="estrenos.htm">Prximos estrenos</A></TH>
<TH WIDTH="16%">
<A HREF="foros/index.php">Foro Cinem@s</A></TH>
</TR>
</TABLE>
93
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
</TR>
<TR>
<TD>Fecha de Nacimiento:</TD>
<TD>da <INPUT TYPE=text SIZE="2" NAME="dianac">
mes <INPUT TYPE=text SIZE="2" NAME="mesnac">
ao <INPUT TYPE=text SIZE="4" NAME="annonac">
</TD>
</TR>
<TR>
<TD>Telfono:</TD>
<TD><INPUT TYPE=text SIZE="20" NAME="telefono"></TD>
</TR>
<TR>
<TD>Email:</TD>
<TD><INPUT TYPE=text SIZE="30" NAME="email"></TD>
</TR>
</TABLE>
Contrasea (*):
<INPUT TYPE=password SIZE="6" NAME="pass1">
Repita su contrasea:
<INPUT TYPE=password SIZE="6" NAME="pass2">
<BR>
<FONT SIZE=-1> (*) campos obligatorios</FONT>
<BR>
<INPUT TYPE=submit VALUE=Enviar>
<INPUT TYPE=reset VALUE=Borrar>
</FORM>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Ejemplo 3.14:
Para conocer la opinin de sus clientes y que estos compartan sus impresiones,
Cinem@s implementar un foro (vase Captulo 17). Los mensajes sern enviados
al foro a travs de una pgina con un formulario como el que puede verse en la
Figura 3.8, y cuyo cdigo completo se incluye a continuacin:
94
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
<TR>
<TD>Autor:</TD>
<TD><INPUT TYPE="text" NAME="autor" SIZE=40></TD>
</TR>
<TR>
<TD>Ttulo del mensaje:</TD>
<TD> <INPUT TYPE="text" NAME="titulo" SIZE=40 VALUE="">
</TD>
</TR>
<TD>Mensaje:</TD>
<TD><TEXTAREA NAME="mensaje" ROWS=6 COLS=30></TEXTAREA>
</TD>
</TR>
<TR><TD> <INPUT TYPE=submit VALUE="Enviar"> </TD></TR>
</TABLE>
</FORM>
Este ltimo formulario tiene dos campos ocultos cuya utilidad se podr ver cuando
se desarrolle completamente la pgina destino nuevomensaje.php en el Captulo 17.
95
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
96
www.full-ebook.com
CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML
97
www.full-ebook.com
www.full-ebook.com
INTRODUCCIN A PHP
http://www.php.net/
99
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
ser un lenguaje inicialmente concebido para entornos Unix, es sobre este sistema
operativo sobre el que se pueden aprovechar mejor sus prestaciones.
Todas estas caractersticas han hecho de este lenguaje uno de los que mayor
crecimiento ha experimentado en los ltimos aos, desde su aparicin en 1994. Es
de destacar especialmente la facilidad para la conectividad con sistemas gestores de
bases de datos a travs de un gran nmero de funciones especializadas. En este
libro en concreto se analizar la conectividad con el sistema gestor MySQL. Esa
facilidad de conexin ha hecho que PHP sea actualmente uno de los lenguajes ms
utilizados para la generacin de pginas dinmicas, no solo personales sino
tambin portales de empresas y organizaciones.
Funciones de correo electrnico que pueden ser utilizadas para programar completos
sistemas de correo electrnico va web.
Funciones de administracin y gestin de bases de datos especficas para la mayora de
gestores comerciales y funciones para conexiones ODBC con bases de datos en
sistemas Microsoft.
Funciones de gestin de directorios y ficheros, incluso para la transferencia mediante
FTP.
Funciones de tratamiento de imgenes y libreras de funciones grficas
Funciones de generacin y lectura de cookies.
Funciones para la generacin de documentos PDF.
100
www.full-ebook.com
INTRODUCCIN A PHP
En el ao 2000 surge la siguiente versin del lenguaje: el PHP 4, con una mayor
independencia del servidor web y con un mayor nmero de funciones disponibles.
Con esta versin se redefine el ncleo del programa, generando un nuevo motor que
mejora la ejecucin de aplicaciones complejas, este nuevo motor es bautizado como
motor Zend, en honor a sus autores: Zeev Zuraski y Andi Gutmans, quienes al
mismo tiempo fundan la empresa Zend (http://www.zend.com) con el objetivo de
ofrecer productos complementarios y herramientas para el desarrollo en PHP.
23
Estimacin de la TIOBE Programming Community en noviembre de 2004. Fuente:
http://www.tiobe.com/tpci.htm
101
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Como prueba del crecimiento experimentado en estos aos, la Figura 4.1 muestra
una grfica con la evolucin de dominios y direcciones IP que hacen uso de PHP.
Como puede apreciarse, a inicio de 2005 ms de 18 millones de dominios y 1,3
millones de direcciones IP en Internet hacan uso de esta tecnologa.
102
www.full-ebook.com
INTRODUCCIN A PHP
Una vez instalados sobre el equipo a utilizar todas las herramientas necesarias, es el
momento de crear el primer programa en PHP. Por supuesto, se tratar de un
programa muy simple y cuyo inters es meramente educativo.
Ejemplo 4.1:
En un nuevo documento escriba el siguiente cdigo y grbelo en un fichero con la
extensin .php, por ejemplo con el nombre primer.php.
<HTML>
<HEAD>
<TITLE> Primer ejemplo </TITLE>
</HEAD>
<BODY>
<U>
<?PHP
echo "Este es mi primer
programa en PHP";
?>
</U>
</BODY>
</HTML>
103
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Para hacer pblica esta primera pgina, el documento primer.php deber ser
guardado en el directorio que el servidor web tenga establecido para alojar las
pginas. Para probar que la pgina funciona correctamente, sin necesidad de tener
una salida real a Internet, se podra abrir el navegador web en el propio equipo que
tiene instalado el servidor web y en la barra de direcciones escribir:
http://localhost/primer.php
Por supuesto, es necesario que el servidor web se encuentre en marcha. En este caso
se est usando el mismo ordenador como servidor y como cliente. El nombre
localhost que aparece en la direccin podra ser tambin sustituido por el nombre
que identifique al equipo.
104
www.full-ebook.com
INTRODUCCIN A PHP
<HTML>
<HEAD>
<TITLE> Primer ejemplo </TITLE>
</HEAD>
<BODY>
<U>
Este es mi primer
programa en PHP</U>
</BODY>
</HTML>
En este cdigo recibido en el cliente no hay ningn elemento que no sea HTML
puro. Esto es debido a que el servidor web, antes de transferir la pgina al cliente,
se la envi al intrprete de PHP y este ejecut el programa que estaba integrado en
el documento. Al ejecutar la llamada a la funcin echo del programa, se escribi
el correspondiente mensaje directamente sobre el cdigo transferido al cliente. Con
este sencillo ejemplo puede verse claramente la forma de trabajo de una tecnologa
del lado del servidor como es PHP.
105
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
PHP existe otra funcin que se puede utilizar para ese mismo cometido: la funcin
print(). En cualquiera de los dos casos, al producirse la escritura sobre el
cdigo HTML que ser pasado al cliente, es posible utilizar esas funciones para
generar cdigo HTML dentro de un script PHP. Por ejemplo, el siguiente programa
genera una tabla HTML con el ttulo y director de una pelcula que se encuentran
almacenados en sendas variables ($t y $d).
Ejemplo 4.2:
<?PHP
$t = "Todo sobre mi madre";
$d = "Pedro Almodvar";
print("<TABLE BORDER>");
print("<TR> <TH>Ttulo</TH> <TH>Director</TH> </TR>");
print("<TR> <TD> ");
print($t);
print("</TD> <TD> ");
print($d);
print("</TD> </TR> </TABLE>");
?>
El programa anterior generara el cdigo HTML necesario para que el cliente que
accede a la pgina pueda ver una tabla como la siguiente:
Ttulo Director
Todo sobre mi madre Pedro Almodvar
106
www.full-ebook.com
INTRODUCCIN A PHP
Ejemplo 4.3:
A continuacin se muestra un documento HTML que incorpora un script que hace
una llamada a la funcin phpinfo():
<HTML>
<HEAD><TITLE> Informacin PHP</TITLE></HEAD>
<BODY>
Opciones de configuracin de PHP:
<?PHP
phpinfo();
?>
</BODY>
</HTML>
Ejemplo 4.4:
Finalmente, se incluye a continuacin un nuevo sencillo ejemplo de programa en
PHP que es capaz de detectar la hora actual del servidor y mostrar esa informacin
con un formato preestablecido por el programador. En este caso se utiliza un nueva
funcin predefinida del lenguaje: la funcin date(), que permite generar una
cadena de caracteres con una fecha u hora dada y de acuerdo a una cadena de
formato. En el captulo destinado a funciones predefinidas de PHP, se estudiarn
esta y otras funciones de tratamiento de fechas y horas.
<HTML>
<HEAD>
<TITLE> Cuarto ejemplo </TITLE>
</HEAD>
<BODY>
Bienvenido a esta pgina, la fecha y hora actual es:<BR>
<B>
<?PHP
print(date("d \de M \de Y, H:i:s"));
?>
</B>
</BODY>
</HTML>
107
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Existen cuatro formas diferentes de diferenciar el cdigo PHP, dos de ellas estn
siempre disponibles y las dos restantes dependen de la configuracin particular del
servidor.
<?PHP
.........................
.........................
.........................
?>
<SCRIPT LANGUAGE="php">
.........................
.........................
.........................
</SCRIPT>
De estas dos formas, la primera es la sintaxis especfica del lenguaje PHP, mientras
que la segunda es la sintaxis general que se utiliza para insertar scripts
programados en diferentes lenguajes.
<?
.........................
.........................
.........................
?>
o
108
www.full-ebook.com
INTRODUCCIN A PHP
<%
.........................
.........................
.........................
%>
Una de las caractersticas destacadas de PHP es que los scripts pueden ser
divididos en bloques, y aadir entre los bloques cdigo HTML puro. Esto resulta
especialmente til cuando dentro de un programa se necesita escribir un texto que
requerira en otro caso el uso de una serie de funciones echo.
Ejemplo 4.5:
Dado el script siguiente:
<?php
if ($x<0) {
echo "<B> Valor negativo </B>";
echo "<BR> Vuelva a intentarlo";
} else {
echo "<B> Valor positivo </B>";
echo "<BR> Correcto";
}
?>
<?php
if ($x<0) {
?>
<B> Valor negativo </B>
<BR> Vuelva a intentarlo
<?php
109
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
} else {
?>
<B> Valor positivo </B>
<BR> Correcto
<?php
}
?>
Ejemplo 4.6:
El ejemplo anterior no tiene mucho inters, pero siguiendo ese mismo esquema se
podra definir, por ejemplo, una pgina que mostrara diferentes contenidos
dependiendo del navegador que est usando el cliente.
<?php
if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) {
?>
................................
................................
cdigo HTML si el navegador del
cliente es Internet Explorer
................................
................................
<?php
} else {
?>
................................
................................
cdigo HTML para otros navegadores
................................
................................
<?php
}
?>
En este ejemplo se utiliza por un lado la variable global de PHP $_SERVER para
saber el navegador que ha utilizado el cliente para hacer la peticin, y la funcin
strstr() para tratar de localizar la cadena de caracteres "MSIE" en la
identificacin del navegador.
Como puede verse en estos ejemplos, la flexibilidad y fluidez lgica del script
permanece intacta a pesar de su ruptura en varios bloques.
110
www.full-ebook.com
INTRODUCCIN A PHP
Las diferentes instrucciones deben terminar con ";". Sin embargo PHP admite
cierta flexibilidad a este respecto, ya que el terminador punto y coma no sera
necesario en la ltima sentencia del script antes de terminador ?>, ni en los
casos en los que al final de la instruccin se cierre un bloque de cdigo con una
llave, por ejemplo en las estructuras condicionales o bucles.
111
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
/* Comentario estilo C.
Puede extenderse durante varias lneas.
*/
112
www.full-ebook.com
INTRODUCCIN A PHP
Nmeros enteros: los enteros pueden ser dados tanto en base decimal como en
base octal o hexadecimal (un 0 inicial indica que el valor est representado en
octal, un 0x indica que es hexadecimal).
o Ejemplos de nmeros en base 10: 45 -142 783
o Ejemplo de nmero en octal: 0123 (equivale a 83)
o Ejemplos de nmeros en hexadecimal: 0x12 (equivale a 18)
0x21B (equivale a 539)
Nmeros en coma flotante: los nmeros en coma flotante se pueden dar en dos
formatos: como parte entera y parte decimal, usando el punto como separador,
o en notacin cientfica:
o Ejemplos: 14.67 -76.0023 1.4e3 -78.5e-4
113
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
4.6.2. VARIABLES
Una vez analizados los tipos de datos bsicos soportados por PHP, lo siguiente que
se necesita es disponer de "contenedores" que permitan guardar los datos y realizar
operaciones con ellos. Estos contenedores son las variables. Algunas de la
peculiaridades de las variables en PHP son:
Ejemplo 4.7:
A continuacin se incluye un sencillo script que utiliza dos variables para generar
un mensaje:
<?php
$titulo = "Buscando a Nemo";
$sala = 2;
114
www.full-ebook.com
INTRODUCCIN A PHP
Adems de las variables propias que el programador pueda utilizar, en PHP existen
un gran nmero de variables predefinidas a las que se tendr acceso dentro de los
scripts.
Ejemplo 4.8:
Como se ha comentado, es posible reasignar valores a una misma variable an
cuando sean de distinto tipo:
<?php
$x = "Importe: ";
echo $x;
$x = 5;
echo $x . " (precio normal) ";
$x = $x * 0.85;
echo $x . " (precio reducido) ";
?>
115
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 4.9:
En la siguiente secuencia de instrucciones se producen tres conversiones de tipo
implcitas y una explcita.
$a = "10 euros";
$b = 2.25;
$c = $a - $b; // conversin implcita a tipo float
$d = (integer)$c; // conversin explcita a tipo integer
$e = $d / 2; // conversin implcita a tipo float
echo $e; // conversin implcita a tipo cadena
// finalmente, se escribe el valor 3.5
(tipo) expresin
116
www.full-ebook.com
INTRODUCCIN A PHP
Las variables por defecto tienen un mbito global que abarcara el documento
completo en el que son definidas, a no ser que sean definidas dentro de una
funcin, en cuyo caso solo pueden ser utilizadas dentro de la propia funcin
(mbito local).
Esto significa que una variable definida en un script del documento fuera de
cualquier funcin, puede ser utilizada en cualquier otro lugar de ese script o incluso
en otros posibles scripts que se encuentren en el mismo documento.
Ejemplo 4.10:
<?PHP
...........
$fila = 12;
$num = 6;
...........
?> En este caso el documento incluye dos
scripts, en el primero se definen dos
...........
variables que, al ser globales, pueden ser
<?PHP utilizadas posteriormente en un segundo
........... script.
$asiento =
"F$fila.$num";
...........
?>
Una variable global puede ser utilizada dentro de cualquier funcin, pero para
hacer referencia a ella debe declararse dentro de la funcin con la palabra global
delante de su nombre.
Ejemplo 4.11:
$precio = 4.5;
function calcular_importe($num_entradas) {
global $precio;
$i = $precio * $num_entradas;
return $i;
}
117
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 4.12:
$nombrevariable = 'x';
......................
......................
$$nombrevariable = 150; // asignacin equivalente a
$x=150
Dado que en PHP las variables no tienen un tipo declarado explcitamente y que
este puede cambiar a lo largo de la ejecucin de los programas, se necesita
disponer de alguna forma de saber el tipo de dato que guarda la variable en cada
instante. Para ello PHP incorpora una serie de funciones:
Por otro lado, la funcin unset() permite eliminar una variable, no solo borra el
contenido de la variable sino que tambin libera el espacio de memoria reservado
para ella. Cualquier intento posterior de acceso a esa variable generara un error.
118
www.full-ebook.com
INTRODUCCIN A PHP
En ocasiones puede interesar tambin saber si una variable existe pero tiene un
valor nulo o vaco, la funcin que permite efectuar esta comprobacin es
empty().
4.6.3. CONSTANTES
Una constante es un valor que permanece inalterable a lo largo de la ejecucin del
script y a la que se le asigna un identificador. Solo pueden definirse constantes con
valores escalares (nmeros o cadenas de caracteres). Por ejemplo, no podra
definirse una constante cuyo valor fuese un array.
Ejemplo 4.13:
A continuacin se muestra un sencillo ejemplo de definicin y uso de constantes:
define("NOMBRE_EMPRESA", "Cinem@s");
define("EDAD_JUBILACION", 65);
define("TIPO_IVA", 0.16);
echo NOMBRE_EMPRESA;
119
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
la primera de ellas, por no haber sido cerrada, la segunda, por utilizar diferentes
delimitadores a cada lado, y la tercera, por el hecho de aparecer como un carcter
de la propia cadena las comillas.
En relacin a este ltimo error, debe sealarse que, al igual que ocurre en el
lenguaje C, la inclusin de determinados caracteres en las cadenas exige la
utilizacin de las denominadas secuencias de escape. Entre estos caracteres
especiales estn las comillas, el signo dlar, la barra invertida y los caracteres de
tabulacin y retorno de carro. La Tabla 4.1 muestra algunas de estas secuencias de
escape.
120
www.full-ebook.com
INTRODUCCIN A PHP
Ejemplo 4.14:
La instruccin PHP:
Las otras secuencias de escape que han sido utilizadas en el ejemplo son las que
permiten incluir comillas en la propia cadena y que generan el signo copyright
(correspondiente al carcter de cdigo ASCII 169 o A9 en hexadecimal).
La diferencia entre el uso de comillas dobles o simples como delimitadores de las
cadenas de caracteres est en la forma en la que se tratan los posibles
identificadores de variables que aparezcan dentro de la cadena:
Ejemplo 4.15:
Si se tienen definidas las siguientes variables:
la sentencia:
121
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Obsrvese cmo al utilizar las comillas dobles, los nombres de variables que
aparecen dentro de la cadena son sustituidos por sus valores. Esta caracterstica de
PHP es especialmente til y evita tener que recurrir a engorrosas operaciones de
concatenacin de cadenas con variables, tal como ocurre en otros lenguajes.
En cambio, la sentencia:
Existe otra forma de expandir variables dentro de cadenas que PHP hereda del
lenguaje Perl y que fue incorporada en la versin PHP 4. Se trata de la sintaxis de
documento incrustado: se basa en sealar el inicio de la cadena con la secuencia
<<< seguida de un identificador y cerrar la cadena con el identificador elegido.
Entre el inicio y el fin, la cadena puede ocupar incluso varias lneas y en ella todas
las variables que aparezcan se expandirn.
Ejemplo 4.16:
El siguiente cdigo
122
www.full-ebook.com
INTRODUCCIN A PHP
FICHA;
echo $c;
Las cadenas de caracteres son un caso especial de un tipo de datos que se ver ms
adelante: los arrays. Por tanto, como en todo array, se puede acceder a cualquiera
de los caracteres que componen la cadena sin ms que utilizar un ndice numrico.
Los ndices deben ser siempre dados entre corchetes y adems debe tenerse en
cuenta que el primer carcter de la cadena es el correspondiente al ndice 0.
123
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
4.6.5. OPERADORES
Una vez analizados los tipos de datos bsicos del lenguaje y la definicin de las
variables y constantes, el siguiente aspecto a revisar lo constituyen el conjunto de
operadores que se pueden utilizar para generar expresiones complejas.
Operadores aritmticos.
Operadores de asignacin.
Operadores de bit.
Operadores de comparacin.
Operadores lgicos.
Otros operadores (concatenacin, supresin de error, ejecucin,...).
Operadores aritmticos
Los operadores aritmticos bsicos son los habituales de cualquier lenguaje de
programacin:
$x + $y Suma de dos nmeros
$x - $y Diferencia de dos nmeros
$x * $y Producto de dos nmeros
$x / $y Divisin de dos nmeros
$x % $y Resto de la divisin entera
Tabla 4.2 Operadores aritmticos
124
www.full-ebook.com
INTRODUCCIN A PHP
$x++; ++$x; $x = $x + 1;
Ejemplo 4.17:
Para entender la diferencia entre la utilizacin de los operadores de incremento o
decremento antes o despus de la variable, conviene analizar algunos sencillos
ejemplos:
Operadores de asignacin
En diversos ejemplos previos ya se ha utilizado el operador de asignacin para dar
valores a variables, este operador se representa mediante el signo "=". Su sentido es
el evidente: la variable de la izquierda del operador tomar el valor resultado de la
expresin que se encuentre a la derecha.
125
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Esta misma particularidad del lenguaje PHP hace que sea posible encadenar varias
asignaciones en una misma sentencia, por ejemplo, las tres asignaciones siguientes:
$a = 1;
$b = 1;
$c = 1;
$a = $b = $c = 1;
126
www.full-ebook.com
INTRODUCCIN A PHP
Operadores de bit
Los operadores de bit trabajan directamente sobre la representacin binaria de los
nmeros enteros, realizando operaciones sobre los diferentes bits de los operandos.
La Tabla 4.5 detalla cules son estos operadores y su funcionamiento.
Ejemplo 4.18:
Supngase que se tienen dos variables $x e $y con valores de 214 y 178
respectivamente. Asumiendo una representacin binaria con 8 bits, estos dos
valores estaran codificados con las siguientes cadenas de dgitos binarios:
$x = 214 1 1 0 1 0 1 1 0
$y = 178 1 0 1 1 0 0 1 0
Con estos datos, los resultados de algunas de las operaciones de bit anteriores
seran:
127
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Operadores de comparacin
En cualquier lenguaje de programacin una de las estructuras ms comunes son las
condicionales. En ellas se ejecutan una serie de sentencias en funcin del valor de
una expresin de tipo lgico (verdadero/falso) que con frecuencia proviene de la
realizacin de una comparacin de valores. Los operadores de comparacin son los
que realizan estas comparaciones, devolviendo un valor verdadero si la
comparacin es positiva o falso en otro caso.
Ejemplo 4.19:
$x = 10;
$y = 35;
if ($x = $y)
echo "Los dos valores son iguales";
else
echo "Los dos valores son diferentes";
128
www.full-ebook.com
INTRODUCCIN A PHP
Pero, qu es lo que ha pasado para que el programa indique que las dos variables
tienen el mismo valor cuando claramente eso no es cierto? El problema se ha
debido a que se ha utilizado el operador de asignacin en lugar del operador de
igualdad. La asignacin $x = $y asigna a la variable $x el valor de la variable
$y y devuelve como valor el valor asignado, en este caso 35. En PHP cualquier
expresin que de como resultado un valor numrico diferente de cero o una cadena
de caracteres no vaca es considerada, a efectos de su participacin en expresiones
lgicas, como valor "verdadero". Esta es la razn por la que el programa anterior
escribe el mensaje "Los dos valores son iguales". Para que el programa realmente
escriba ese mensaje cuando los dos valores de las variables sean iguales, se debera
haber utilizado el operador de comparacin en lugar del de asignacin:
if ($x == $y)
echo "Los dos valores son iguales";
else
echo "Los dos valores son diferentes";
$a = 120;
$b = "120";
tienen tipos diferentes, una corresponde a una variable numrica y la otra a una
cadena de caracteres. Sin embargo, tras la correspondiente conversin, se puede
entender que las dos variables tienen el valor numrico 120. Teniendo en cuenta
esto, la comparacin $a == $b producira un valor "verdadero", mientras que la
comparacin $a === $b producira un valor "falso".
129
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Operadores lgicos
Los operadores lgicos de PHP son los clsicos de cualquier lenguaje de
programacin, permiten generar expresiones lgicas complejas conjugando
diferentes subexpresiones.
Como puede observarse, para los operadores Y y O existen dos sintaxis vlidas, el
funcionamiento de las dos es el mismo, la nica diferencia estriba en tener
diferentes prioridades a la hora de ser evaluados en expresiones. Tras finalizar este
repaso a los operadores de PHP, la Tabla 4.8 mostrar las diferentes prioridades de
estos.
Otros operadores
Operador condicional:
130
www.full-ebook.com
INTRODUCCIN A PHP
Ejemplo 4.20:
Con la siguiente sentencia se asignara un valor 1 a una variable $par si el valor
de otra variable $n es un nmero par, y se asignara el valor 0 en otro caso. Para
determinar si un nmero es par se utiliza el operador mdulo, que calcula el resto
de la divisin entera (un nmero es par si el resto de la divisin entera entre 2 es 0):
$par = ($n % 2 == 0) ? 1 : 0;
$par = !($n % 2) ? 1 : 0;
Operador de concatenacin:
cadena1 . cadena2
Ejemplo 4.21:
Ejemplo de uso de este operador sera:
En este caso la variable $anuncio tendra finalmente como valor la cadena "El
ltimo Samurai, con Tom Cruise".
131
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 4.22:
La sentencia
$x = 12/0;
produce un error de tipo aritmtico (divisin por cero) que generara en la pgina
un mensaje como
Estos mensajes en las pginas pueden ser eliminados bien mediante determinados
parmetros de configuracin del servidor web o mediante el uso del operador de
supresin de error en la sentencia causante del mismo.
$x = @(12/0);
no genera ningn tipo de mensaje de error. Por supuesto, en este caso la variable
$x no tendra ningn valor (variable vaca).
Operador de ejecucin
Ejemplo 4.23:
Si se quisiera generar una pgina web que muestre un listado con el contenido del
directorio del servidor en el que est alojada la propia pgina web, se podra
insertar en la pgina el script siguiente:
132
www.full-ebook.com
INTRODUCCIN A PHP
<?php
$x=`dir`;
echo "<pre> $x </pre>";
?>
Directorio de C:\home
11/03/2004 18:23 .
11/03/2004 18:23 ..
21/11/2003 19:53 64 Comentarios.txt
21/11/2003 18:07 361 cookie.php
14/11/2003 10:23 315 index.php
21/02/2004 23:24 478 ordenar.php
21/11/2003 19:53 267 prueba.htm
11/03/2004 18:23 205 prueba.php
11/03/2004 18:23 0 ~out.htm
11/03/2004 18:23 205 ~scp.php
8 archivos 1.895 bytes
2 dirs 33.409.753.088 bytes libres
La conversin explcita del tipo de dato se realiza a travs del operador cast:
(tipo) expresin
$x = (int)12.67;
$p = (string)4.5;
133
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 4.24:
En la expresin:
$x = 5/2+3*4;
intervienen cuatro operadores diferentes: uno de asignacin y tres aritmticos
(divisin, suma y producto). En qu orden se aplican esos operadores? La
respuesta viene dada por la prioridad que tenga cada uno en una tabla de
prioridades que todo lenguaje de programacin maneja. En concreto, los
operadores de asignacin son los que menor prioridad tienen, y por tanto este sera
el ltimo en ser aplicado; en cuanto a los operadores aritmticos, los productos y
divisiones tienen mayor prioridad que las sumas y las restas. En definitiva, la
expresin anterior sera evaluada de la manera siguiente:
134
www.full-ebook.com
INTRODUCCIN A PHP
El operador lgico Y con la sintaxis and es el que menos prioridad tiene, menos
incluso que el operador de asignacin, por eso en la primera sentencia la secuencia
de operaciones sera:
135
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Si se deseaba que las dos sentencias tuvieran el mismo efecto, se tendran que
haber utilizado los parntesis en la primera para alterar el orden de evaluacin.
136
www.full-ebook.com
PHP Y LOS FORMULARIOS
DE HTML
137
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Cada uno de los datos que el usuario introduzca en el formulario estar asociado al
correspondiente campo del mismo, es por ello necesario disponer de un sistema de
identificacin de cada uno de esos campos. La identificacin se logra asignando a
cada campo un nombre mediante el parmetro NAME de la etiqueta de definicin de
campo.
Ejemplo 5.1:
Supngase que Cinem@s tiene establecidas diferentes tarifas para las localidades
en funcin de la edad del cliente y de su condicin o no de estudiante, y que desea
que los propios clientes puedan calcular exactamente el importe de sus entradas a
travs de una sencilla pgina web. El primer paso resulta evidente: disear un
formulario que permita "interrogar" al usuario. El aspecto de ese formulario podra
ser el mostrado en la Figura 5.1.
<FORM NAME="miformulario">
Edad: <INPUT TYPE="text" NAME="edad" SIZE="3">
Estudiante:
<INPUT TYPE="radio" NAME="estudiante" VALUE=1> Si
<INPUT TYPE="radio" NAME="estudiante" VALUE=0 CHECKED> No
<BR>
<INPUT TYPE="submit" VALUE="Calcular">
<INPUT TYPE="reset" VALUE="Borrar">
</FORM>
138
www.full-ebook.com
PHP Y LOS FORMULARIOS DE HTML
Los dos ltimos controles del formulario son el botn para enviar los datos
(submit) y el de reiniciar todos los valores de los campos (reset). A estos dos
controles no es necesario asignarles un nombre ya que no tienen como funcin
almacenar datos que luego se deban recuperar.
Ejemplo 5.2:
Si se desea que los datos del formulario anterior sean enviados a un programa que
se encuentra en el archivo procesar.php, el formulario debera ser definido de la
siguiente manera:
139
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
$edad
$estudiante Procesar.php
<html>
<head>
<title>Importe de la entrada</title>
</head>
<body>
<?php
if (($edad<12) or ($estudiante))
echo "El precio de la entrada es 3.5 euros";
else
echo "El precio de la entrada es 5 euros";
?>
</body>
</html>
Como puede observarse, el script PHP hace uso de las dos variables que provienen
del formulario para determinar el precio de la entrada. Si la edad del usuario es
menor que 12 o es un estudiante, la pgina mostrar un mensaje diciendo que el
importe es 3,5 , en otro caso el importe ser 5 .
140
www.full-ebook.com
PHP Y LOS FORMULARIOS DE HTML
register_globals = On
register_globals = Off
Por tanto, si el programador quiere hacer uso del estilo corto para hacer referencia
a las variables de formulario debe cambiar ese parmetro.
141
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
$_REQUEST[]
$_POST[] $_GET[]
dependiendo del mtodo utilizado para el envo de los datos del formulario.
Precisamente en la prxima seccin se analizarn las diferencias entre ambos
mtodos de envo (get y post).
Ejemplo 5.3:
En el caso del formulario de la Figura 5.1, desde el programa PHP se podra
acceder a los datos introducidos por el usuario en los campos edad y estudiante de
la manera siguiente:
$_REQUEST['edad'] $_GET['edad']
$_REQUEST['estudiante'] $_GET['estudiante']
<?php
if (($_GET['edad']<12) or ($_GET['estudiante']))
echo "El precio de la entrada es 3.5 euros";
else
echo "El precio de la entrada es 5 euros";
?>
Finalmente, en PHP existe otra posibilidad para acceder a las variables del
formulario; se trata de una notacin que garantiza el funcionamiento en todos los
142
www.full-ebook.com
PHP Y LOS FORMULARIOS DE HTML
Ejemplo 5.4:
A las variables del formulario del Ejemplo 5.1 se puede acceder tambin de la
siguiente manera:
$HTTP_POST_VARS['edad']
$HTTP_POST_VARS['estudiante']
En el caso de que los datos deban ser transferidos por correo electrnico, es
obligatorio el uso del mtodo POST.
143
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
...URL...?variable=valor&variable=valor&variable=valor...
En concreto, con los datos anteriores, el URL que se formara tendra el siguiente
aspecto:
http://miservidor/procesar.php?edad=35&estudiante=0
144
www.full-ebook.com
PHP Y LOS FORMULARIOS DE HTML
http://miservidor/procesar.php?edad=23&estudiante=1
Figura 5.3 Pgina generada a partir del envo con el mtodo get
Ejemplo 5.6:
Si el formulario se define de la siguiente manera:
145
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Figura 5.4 Pgina generada a partir del envo con el mtodo post
146
www.full-ebook.com
PHP Y LOS FORMULARIOS DE HTML
Utilizando la misma idea en la que se basa el mtodo GET, es posible transferir valores
para las variables del script directamente desde la barra de direcciones del navegador o
desde un enlace. Se trata, en definitiva, de incluir asignaciones de variables y valores al
final del URL con la misma sintaxis que utiliza el mtodo GET:
http://servidor/script.php?variable1=valor1&variable2=valor2.
..
Ejemplo 5.7:
Si el usuario en la barra de direccin de su navegador escribe el URL:
http://miservidor/favorita.php?titulo=Piratas+del+Caribe
147
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
<?php
echo "Su pelcula favorita es \"$titulo\". ";
echo "Muchas gracias por su opinin";
?>
Ejemplo 5.8:
El siguiente script hace uso de la funcin isset() para comprobar si la variable
$titulo se encuentra definida, y en funcin de esa comprobacin genera un
mensaje diferente en la pgina:
<?php
if (isset($titulo)) {
echo "Su pelcula favorita es \"$titulo\".";
echo "Muchas gracias por su opinin";
} else {
echo "No nos ha indicado su pelcula favorita";
}
?>
Otra de las utilidades de esta forma de transferir datos a los scripts es la generacin
dinmica de enlaces; en este caso, los URL con las variables son incluidos en
etiquetas HTML de definicin de enlaces.
Ejemplo 5.9:
Supngase que se desea disear un formulario para introducir datos de pelculas y una
serie de enlaces que permitan verificar y confirmar los datos antes de ser enviados al
servidor.
148
www.full-ebook.com
PHP Y LOS FORMULARIOS DE HTML
<html>
<head><title>Datos de pelculas</title></head>
<body>
<form action="procesarpelicula.php">
Titulo: <input type="text" name="titulo" size="90">
<br>
Actores: <input type="text" name="actores" size="85">
<br>
Director: <input type="text" name="direccion" size="40">
<br>
Guin: <input type="text" name="guion" size="30">
Produccin: <input type="text" name="produccion"
size="30">
<hr>
Ao: <input type="text" name="anno" size="4">
Nacionalidad:
<input type="text" name="nacionalidad" size="15">
Gnero:
<select name="genero">
<option selected> Comedia
<option> Drama
<option> Accin
<option> Terror
<option> Suspense
<option> Otras
</select>
Duracin: <input type="text" name="duracion" size="3">
(minutos)
<br>
Restricciones de edad:
<input type="radio" name="edad" value="Apta">
149
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Cuando el usuario pulse el botn "Enviar", los datos sern transferidos al script que
se encuentra en el archivo procesarpelicula.php y cuyo contenido se incluye a
continuacin:
<html>
<head><title>Confirmacin de datos</title></head>
<body>
Datos recibidos correctamente,
si quiere confirmar los valores active el enlace
correspondiente
<br>
<?php
150
www.full-ebook.com
PHP Y LOS FORMULARIOS DE HTML
$url1="confirmar.php?datos=a&titulo=$titulo&" .
"actores=$actores&genero=$genero";
echo "<A HREF=\"$url1\"> Ficha artstica </A> <BR>";
$url2="confirmar.php?datos=t&direccion=$direccion&" .
"produccion=$produccion&guion=$guion";
echo "<A HREF=\"$url2\"> Ficha tcnica </A> <BR>";
$url3="confirmar.php?datos=o&nacionalidad=$nacionalidad&"
.
"anno=$anno&duracion=$duracion&edad=$edad";
echo "<A HREF=\"$url3\"> Otros datos </A> <BR>";
?>
</body>
</html>
Como puede apreciarse, este script recibe las variables con los datos introducidos
por el usuario y genera de manera dinmica tres simples enlaces, obtenindose la
pgina que muestra la Figura 5.7.
Todos los enlaces tienen como destino un tercer archivo (confirmar.php), pero en
cada uno de ellos se aaden al URL diferentes variables que sern transferidas al
script. Adems se utiliza una nueva variable (datos) para que el script destino
sepa cules son las variables que vienen dentro del URL que reciba.
151
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
<html>
<body>
<?php
if($datos=="a") {
print "<h1> $titulo </h1>";
print "Gnero: $genero <br>";
print "Protagonizada por $actores <br>";
}
elseif ($datos=="t") {
print "Dirigida por $direccion <br>";
print "Producida por $produccion <br>";
print "Guin de $guion <br>";
}
elseif ($datos=="o") {
print "Nacionalidad: $nacionalidad <br>";
print "Ao: $anno <br>";
print "Duracin: $duracion minutos <br>";
print "Autorizada para: $edad <br>";
}
?>
</body>
</html>
De esta manera, dependiendo de cul sea el enlace que active el usuario, la pgina mostrar
una informacin u otra. En concreto, las pginas que se generarn por cada uno de los
enlaces anteriores son las que muestran la Figura 5.8, la Figura 5.9 y la Figura 5.10.
152
www.full-ebook.com
PHP Y LOS FORMULARIOS DE HTML
153
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 5.10:
Si se desea disear un formulario en el que el usuario seleccione uno o varios
temas de inters dentro de una lista, se podra optar por incluir en la definicin del
formulario el siguiente cdigo HTML:
En este caso, la lista viene identificada por el nombre tema. Si el usuario opta por
seleccionar varias opciones de la lista (por ejemplo, tal como muestra la Figura
5.11), cuando los datos se transfieran al script de destino, la variable $tema tendr
el valor "Informtica"; es decir, la variable guardar el valor de la ltima
opcin seleccionada por el usuario.
154
www.full-ebook.com
PHP Y LOS FORMULARIOS DE HTML
seleccionada sino todas ellas, a la hora de dar un nombre al campo del formulario
se deberan utilizar un par de corchetes vacos para sealar que realmente se
guardar todo un vector o array de valores.
El script recibir en este caso un array $tema[] que podr ser procesado para
obtener todas sus componentes individuales. Como se ver en el prximo captulo
existen incluso estructuras iterativas que permiten recorrer todos los elementos de
un array de una manera simple.
155
www.full-ebook.com
www.full-ebook.com
SENTENCIAS DE
CONTROL
6.1. INTRODUCCIN
Todo lenguaje de programacin requiere de estructuras que permitan variar el flujo
normal de ejecucin de los programas en funcin del valor de una expresin o de la
satisfaccin de determinadas condiciones. Las denominadas sentencias de control son
las que permiten alterar el orden secuencial habitual en la ejecucin de las sentencias.
Bsicamente las sentencias de control se clasifican en dos grandes bloques:
Estructuras condicionales.
Estructuras iterativas.
Las primeras son las que permiten seleccionar porciones de cdigo a ejecutar si se
cumplen determinadas condiciones; las segundas permiten establecer un bloque de
instrucciones que se ejecutarn un nmero determinado de veces o mientras se
satisfaga una condicin.
157
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
6.2.1. SENTENCIA IF
La primera de las estructuras condicionales con las que cuenta PHP es la sentencia
if. Esta estructura permite ejecutar una sentencia o bloque de sentencias siempre
que se cumpla determinada condicin.
Esta sentencia condicional, con su sintaxis propia, est presente en todos los
lenguajes de programacin. En el caso del lenguaje PHP la sintaxis es totalmente
similar a la del lenguaje C:
if (expresin)
sentencia
o bien
if (expresin) {
bloque de sentencias
}
Recordar igualmente que en PHP toda expresin que produzca como resultado un
valor numrico distinto de cero, una cadena diferente de la cadena vaca o un array
no vaco, si aparece dentro de un contexto lgico es tratada como el valor booleano
verdadero (true).
158
www.full-ebook.com
SENTENCIAS DE CONTROL
Ejemplo 6.1:
Considrese el siguiente fragmento de programa en el que se genera un mensaje en
la pgina solo cuando el valor de la variable $descuento es mayor que 0:
if ($descuento > 0)
print "Artculo con precio rebajado";
Ejemplo 6.2:
Por ejemplo, dada la estructura siguiente:
if ($x > 0)
$y = 2 * $x;
$z = 1 / $x;
if ($x > 0) {
$y = 2 * $x;
$z = 1 / $x;
}
Por supuesto, la forma de colocar las llaves para delimitar el bloque se presta a que
cada programador opte por un estilo propio; por ejemplo, se conseguira el mismo
efecto escribiendo el cdigo de cualquiera de las siguientes maneras:
if ($x > 0)
{
$y = 2 * $x;
$z = 1 / $x;
}
159
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
if ($x > 0)
{$y = 2 * $x;
$z = 1 / $x;}
e incluso
Ejemplo 6.3:
La sentencia:
if $fila <= 5
$ocupada = true;
if ($ocupada)
print "Lo siento, asiento no disponible";
Ejemplo 6.4:
La siguiente estructura condicional escribira el mensaje "Lo siento, asiento no
disponible" cuando la variable $fila tome un valor entre 10 y 12 o la variable
$vendida tenga el valor true. Obsrvese de nuevo la necesidad de introducir
toda la condicin entre parntesis y usar igualmente parntesis para establecer el
orden de evaluacin de la expresin.
160
www.full-ebook.com
SENTENCIAS DE CONTROL
Ejemplo 6.5:
La sentencia
if ($fila = 15)
print "ltima fila de la sala";
if ($fila == 15)
print "ltima fila de la sala";
Por supuesto, las estructuras condicionales pueden anidarse unas dentro de otras.
Ejemplo 6.6:
if ($fila <= 5) {
print "Fila prxima a la pantalla";
if (($asiento == 1) or ($asiento == 20)) {
print "Mala visibilidad de la pantalla";
}
}
En este caso cuando la variable $fila toma un valor menor o igual que 5 se
advierte al usuario de la proximidad a la pantalla; si adems de eso el asiento
corresponde a los nmeros 1 20, se advierte de una mala visibilidad.
161
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 6.7:
La sentencia
if($precio)
print "El precio es $precio euros";
Ejemplo 6.8:
La sentencia
if(!$nombre)
print "Por favor, dganos su nombre";
if (condicin)
{
sentencias a ejecutar si la condicin es cierta
}
else
{
sentencias a ejecutar si la condicin es falsa
}
162
www.full-ebook.com
SENTENCIAS DE CONTROL
De nuevo, en caso de que alguno de los bloques est constituido por una nica
sentencia, las llaves podran suprimirse.
Ejemplo 6.9:
Supuesto que la variable $edad guarda la edad de una persona, y se desea asignar
valores diferentes a la variable $precio para los nios menores de 12 aos o
jubilados y para el resto de personas, se podra escribir una sentencia condicional
con una clusula else:
Ejemplo 6.10:
La sentencia
if($precio)
print "El precio es $precio euros";
else
print "Entrada gratuita";
Obsrvese cmo en ambos casos las llaves han podido suprimirse por estar
constituidos los bloques por una sola sentencia. De todas formas debe tenerse un
especial cuidado con la supresin de esas llaves porque pueden provocar errores
que en ocasiones resultan difciles de detectar.
Ejemplo 6.11:
Considrese la estructura condicional siguiente:
if ($num == 126)
$fila = 12;
$asiento = 8;
else
$fila = 10;
$asiento = 6;
163
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
En cambio, la sentencia
if ($num == 126) {
$fila = 12;
$asiento = 8;
}
else
$fila = 10;
$asiento = 6;
if ($num == 126) {
$fila = 12;
$asiento = 8;
}
else {
$fila = 10;
$asiento = 6;
}
164
www.full-ebook.com
SENTENCIAS DE CONTROL
if (condicin1)
{
sentencias a ejecutar si la condicin1 es cierta
}
elseif (condicin2)
{
sentencias a ejecutar si la condicin2 es cierta
}
elseif (condicin3)
{
sentencias a ejecutar si la condicin3 es cierta
}
...
else
{
sentencias a ejecutar si ninguna de las
condiciones anteriores es cierta
}
165
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 6.12:
La siguiente estructura condicional asigna diferente valor a la variable $precio
en funcin del valor de la variable $edad:
if ($edad < 3) {
$precio = 0;
}
elseif ($edad <= 16) {
$precio = 8;
}
elseif ($edad > 16 and $edad < 65) {
$precio = 12;
}
else {
$precio = 10;
}
if ($edad < 3) {
$precio = 0;
}
else
if ($edad <= 16) {
$precio = 8;
}
else
166
www.full-ebook.com
SENTENCIAS DE CONTROL
Ejemplo 6.13:
Supngase que se desea que una pgina web muestre un mensaje de bienvenida
diferente dependiendo de la hora del da; por ejemplo, considrese el siguiente
script:
$hora=date("H");
if ($hora<5)
print("Buenas noches, ");
elseif ($hora<12)
print("Buenos das, ");
elseif ($hora<20)
print("Buenas tardes, ");
else
print("Buenas noches, ");
print("bienvenido a nuestra pgina web");
167
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
if (condicin) :
sentencias a ejecutar si la condicin es cierta
endif;
Ejemplo 6.14:
Un sencillo ejemplo de construccin de una estructura condicional con esta sintaxis
sera:
if ($x != 0) :
$y = 1 / $x;
endif;
en este caso se asigna a la variable $y el inverso del valor de $x siempre que este
ltimo sea diferente de 0.
Ejemplo 6.15:
if ($y == 1):
$z = 3;
elseif ($y == 2):
$z = 5;
else:
$z = 7;
endif;
168
www.full-ebook.com
SENTENCIAS DE CONTROL
Ejemplo 6.16:
El siguiente fragmento de cdigo incluye dos scripts entre los que se est
colocando cdigo HTML puro. En este caso, el primer script comienza una
estructura condicional en la que se pregunta si la variable $edad se encuentra
definida y si su valor es menor que 7; en caso de que esto ocurra la pgina
mostrar una lista HTML con un conjunto de pelculas autorizadas para todos los
pblicos.
switch (expresion) {
case valor1:
sentencias
case valor2:
169
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
sentencias
...
case valorN:
sentencias
default:
sentencias
}
Ejemplo 6.17:
A continuacin se presenta un sencillo ejemplo de estructura condicional switch
con su estructura equivalente if...elseif...else, en este caso la estructura
se encarga de asignar diferentes valores a la variable $precio en funcin del
valor que tome otra variable $dia:
switch ($dia) {
case 'L':
$precio = 4;
break;
case 'M':
$precio = 3;
break;
case 'X':
$precio = 4.5;
break;
case 'J':
$precio = 4.5;
break;
case 'V':
$precio = 5;
170
www.full-ebook.com
SENTENCIAS DE CONTROL
break;
case 'S':
$precio = 5;
break;
case 'D':
$precio = 4.5;
break;
}
if ($dia == 'L')
$precio = 4;
elseif ($dia == 'M')
$precio = 3;
elseif ($dia == 'X')
$precio = 4.5;
elseif ($dia == 'J')
$precio = 4.5;
elseif ($dia == 'V')
$precio = 5;
elseif ($dia == 'S')
$precio = 5;
elseif ($dia == 'D')
$precio = 4.5;
171
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 6.18:
Si la sentencia switch anterior se hubiese escrito de la forma siguiente:
switch ($dia) {
case 'L':
$precio = 4;
case 'M':
$precio = 3;
case 'X':
$precio = 4.5;
case 'J':
$precio = 4.5;
case 'V':
$precio = 5;
case 'S':
$precio = 5;
case 'D':
$precio = 4.5;
}
switch ($dia) {
case 'L':
$precio = 4; break;
case 'M':
$precio = 3; break;
case 'X':
$precio = 4.5; break;
case 'J':
$precio = 4.5; break;
172
www.full-ebook.com
SENTENCIAS DE CONTROL
case 'V':
$precio = 5; break;
case 'S':
$precio = 5; break;
case 'D':
$precio = 4.5; break;
default:
$precio = 0;
}
switch ($dia) {
case 'L':
$precio = 4;
break;
case 'M':
$precio = 3;
break;
case 'X':
case 'J':
case 'D':
$precio = 4.5;
break;
case 'V':
case 'S':
$precio = 5;
break;
default:
$precio = 0;
}
Al igual que ocurra con la sentencia if, la sentencia switch dispone de una
sintaxis alternativa en la que el inicio del bloque de casos se seala con un signo ':'
y el final de la estructura con la palabra endswitch. A continuacin se puede ver
un sencillo ejemplo con esta nueva sintaxis.
173
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 6.19:
switch ($nombre) :
case 'Juan':
case 'Pedro':
case 'Daniel':
print("Soltero");
break;
case 'Ana':
case 'Luis':
print("Casado");
break;
default:
print("Desconocido");
endswitch;
Ejemplo 6.20:
Como ejemplo final, supngase que se desea calcular el nmero de das que tiene
un mes concreto, considerando adems si el ao es bisiesto o no (un ao es bisiesto
cuando es mltiplo de 4 pero no de 100, o bien cuando es mltiplo de 400).
Supngase que las variables $mes y $anno identifican el mes concreto del que se
desea conocer el nmero de das, el siguiente programa asigna ese nmero a la
variable $nd:
switch($mes) {
case 2:
if((($anno%4==0) and ($anno%100!=0)) or
($anno%400==0))
$nd=29;
else
$nd=28;
break;
case 4: case 6: case 9: case 11:
$nd=30;
break;
default:
$nd=31;
}
174
www.full-ebook.com
SENTENCIAS DE CONTROL
while (expresin)
sentencia
En el caso de que el cuerpo del bucle est formado por ms de una sentencia, estas
deben ser dadas entre llaves:
while (expresin) {
sentencias
}
La expresin es evaluada cada vez que se inicie una iteracin del bucle, pudindose
dar el caso incluso de que las sentencias del bucle no se ejecuten ni una sola vez si
la expresin es inicialmente falsa. Por supuesto, dentro del bloque de sentencias a
ejecutar en cada iteracin debe haber alguna que modifique el valor de la
expresin, ya que en caso contrario se entrara en un bucle infinito.
Al igual que ocurre con las restantes sentencias de control, existe una sintaxis
alternativa de la sentencia while:
while (expresin) :
sentencias
endwhile;
175
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 6.21:
Mediante el siguiente programa se genera una lista HTML con los mltiplos de 5
menores o iguales que 100:
print "<OL>";
$n = 5;
while ($n <= 100) {
print "<LI> $n";
$n += 5;
}
print "</OL>";
do
{
sentencias
}
while (condicin);
Ejemplo 6.22:
El bucle para generar una lista con los mltiplos de 5 menores o iguales que 100
tambin podra construirse utilizando esta sentencia:
print "<OL>";
$n = 5;
do {
print "<LI> $n";
$n += 5;
176
www.full-ebook.com
SENTENCIAS DE CONTROL
}
while ($n <= 100)
print "</OL>";
Ejemplo 6.23:
Considrese el siguiente bucle:
$n = 0;
while ($n > 0) {
print $n;
$n--;
}
$n = 0;
do {
print $n;
$n--;
}
while ($n > 0);
Ejemplo 6.24:
A continuacin se muestra el uso de la sentencia do...while para comprobar la
conjetura de Collatz, que establece que cualquiera que sea el nmero entero
positivo n de partida, la sucesin de nmeros enteros f(n), f(f(n)), f(f(f(n))),...
siempre llega a alcanzar el valor 1, siendo f(n) la siguiente funcin:
177
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
n / 2 si n es par
f ( n) =
(3n + 1) / 2 si n es impar
print "<SELECT>";
print "<OPTION> Valor inicial: $n";
$niter = 0;
do {
if($n%2==0) {
$n = $n/2;
}
else {
$n = (3*$n+1)/2;
}
$niter++;
print "<OPTION> Iteracin $niter: $n";
} while ($n!=1);
print "</SELECT>";
Por ejemplo, asumiendo que el valor inicial es 23, se generara una lista como la
que se muestra en la Figura 6.1.
.
178
www.full-ebook.com
SENTENCIAS DE CONTROL
179
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 6.25:
A continuacin se muestra la construccin de un sencillo bucle que calcula la suma
de los 100 primeros nmeros naturales: 1+2+3+4+...+99+100:
$suma = 0;
for ($n=1; $n<=100 ; $n++){
$suma = $suma + $n;
}
En este caso se utiliza una variable $suma en la que se irn acumulando las sumas
parciales y una variable $n que actuar de contador en el bucle. La variable
contador se inicializa con el valor 1, y mientras su valor sea menor o igual que
100 se seguir ejecutando el bucle. Al finalizar cada iteracin, la variable contador
se incrementa en una unidad. El cuerpo del bucle lo nico que hace es sumar el
valor de la variable contador a la suma parcial acumulada hasta el momento.
A la hora de utilizar la sentencia for PHP admite bastante flexibilidad; como
prueba de ello se muestra a continuacin la manera de escribir la estructura
iterativa anterior de una forma mucho ms compacta:
En este caso, tanto la variable contador como la que acumula las sumas parciales,
toman sus valores iniciales en la parte de inicializacin del bucle; obsrvese cmo
ambas inicializaciones se separan con una coma. De la misma manera, la variable
$suma actualiza su valor en cada una de las iteraciones en la parte de modificacin
de variables del bucle junto con el incremento a la variable contador. Finalmente,
obsrvese que en este caso el cuerpo del bucle no tiene ninguna sentencia, por lo
que se finaliza con un punto y coma.
En la sentencia for es opcional no solo la presencia del cuerpo del bucle sino
tambin cualquiera de las otras tres partes que la forman. En el caso de que no se
indique ninguna condicin, PHP asume que esta es siempre cierta, con lo que se
estara definiendo un bucle infinito. Evidentemente, un bucle infinito no tiene
ninguna utilidad prctica a no ser que dentro del cuerpo del bucle se utilice la
sentencia break para forzar la salida del mismo.
for( ; ; );
180
www.full-ebook.com
SENTENCIAS DE CONTROL
Ejemplo 6.26:
Otro ejemplo de bucle infinito sera:
for($n=1; ;$n++)
print $n;
PHP dispone de un mecanismo de seguridad para evitar situaciones como las que
se producen en los bucles anteriores; se trata de limitar el tiempo mximo de
ejecucin de un script, de manera que cuando se entra en un bucle infinito y se
supera ese lmite, automticamente se aborta la ejecucin y se genera el mensaje de
error:
Ejemplo 6.27:
Uno de los ejemplos "clsicos" de estructuras iterativas es el clculo del factorial
de un nmero (n!=1*2*3*...*(n-1)*n). La implementacin de este bucle
sera:
$fact = 1;
for ($i = 2; $i <= $n; $i++ ) {
$fact *= $i;
}
181
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Al igual que en el caso del bucle que efectuaba la suma de los nmeros menores o
iguales que 100, el bucle anterior puede escribirse de una forma ms compacta:
Ejemplo 6.28:
Supngase que se desea construir, de forma aleatoria, una contrasea formada por
8 letras. Se puede utilizar la funcin rand() para generar un nmero aleatorio
entre 97 y 122 (cdigos ASCII correspondientes a las letras minsculas) y la
funcin chr() para obtener el carcter asociado a un cdigo ASCII dado.
$codigo="";
for($i=1;$i<=8;$i++) {
$letra = chr(rand(97,122));
$codigo = $codigo.$letra;
}
print("Contrasea asignada es:<B>$codigo</B>");
Ejemplo 6.29:
En los bucles es posible utilizar ms de una variable que acte como contador, por
ejemplo:
2--8--18--32--50--72--98--128--162--200--
Ejemplo 6.30:
Supngase que se desea generar en la pgina web la tabla de multiplicar del 1 al
10; esto puede hacerse de una manera muy sencilla con dos bucles for anidados:
182
www.full-ebook.com
SENTENCIAS DE CONTROL
El bucle anterior podra ser modificado para que la salida generada correspondiera
realmente a un formato de tabla en HTML. En este caso, el propio bucle debera
encargarse de ir generando las diferentes etiquetas de construccin de tablas
HTML en los lugares adecuados:
print("<TABLE BORDER>\n");
// Generacin de la fila de cabecera
print("<TR ALIGN=CENTER>\n <TH> * </TH>");
for ($i = 1; $i <= 10; $i++)
print("<TH> $i </TH>");
print("\n</TR>\n");
// Generacin de las restantes filas
for ($i = 1; $i <= 10; $i++) {
print("<TR ALIGN=CENTER> <TH>$i</TH> ");
for ($j = 1; $j <= 10; $j++) {
print("<TD>" . $i*$j . "</TD>");
}
print("\n</TR>\n");
}
print('</TABLE>');
183
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
* 1 2 3 4 5 6 7 8 9 10
1 1 2 3 4 5 6 7 8 9 10
2 2 4 6 8 10 12 14 16 18 20
3 3 6 9 12 15 18 21 24 27 30
4 4 8 12 16 20 24 28 32 36 40
5 5 10 15 20 25 30 35 40 45 50
6 6 12 18 24 30 36 42 48 54 60
7 7 14 21 28 35 42 49 56 63 70
8 8 16 24 32 40 48 56 64 72 80
9 9 18 27 36 45 54 63 72 81 90
10 10 20 30 40 50 60 70 80 90 100
En ocasiones los bucles for pueden ser utilizados para generar dinmicamente
campos de formularios.
Ejemplo 6.31:
A continuacin puede verse la definicin de un formulario HTML dentro del cul
se incluye un script PHP con sendos bucles que generan las opciones de dos
controles de tipo lista:
<FORM NAME=FORMHORA>
<?php
print("HORAS: <SELECT HORA>");
for($i=0; $i<=23; $i++)
print("<OPTION VALUE=$i> $i");
print("</SELECT>");
print("<BR>MINUTOS: <SELECT MINUTOS>");
for($i=0; $i<=55; $i+=5)
print("<OPTION VALUE=$i> $i");
print("</SELECT>");
?>
</FORM>
184
www.full-ebook.com
SENTENCIAS DE CONTROL
Ejemplo 6.32:
Como ltimo ejemplo de construccin de bucles con la sentencia for se presenta a
continuacin un programa ms complejo que es capaz de generar el calendario de
un mes concreto. Se asume que las variables $mes y $anno contienen los valores
del mes y ao cuyo calendario se quiere generar. El cdigo del programa sera:
$diasemana=date("w",mktime(0,0,0,$mes,1,$anno));
if($diasemana==0) $diasemana=7;
switch($mes) {
case 1:
$nd=31; $nombremes="Enero";
break;
case 2:
if((($anno%4==0) and ($anno%100!=0)) or
($anno%400==0))
$nd=29;
else
$nd=28;
$nombremes="Febrero";
break;
case 3:
$nd=31; $nombremes="Marzo";
break;
case 4:
$nd=30; $nombremes="Abril";
break;
case 5:
$nd=31; $nombremes="Mayo";
break;
case 6:
$nd=30; $nombremes="Junio";
break;
case 7:
$nd=31; $nombremes="Julio";
break;
case 8:
$nd=31; $nombremes="Agosto";
break;
case 9:
$nd=30; $nombremes="Septiembre";
break;
case 10:
$nd=31; $nombremes="Octubre";
break;
case 11:
$nd=30; $nombremes="Noviembre";
185
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
break;
case 12:
$nd=31; $nombremes="Diciembre";
break;
}
// generacin del calendario en una tabla HTML
print("<B>$nombremes $anno </B>");
print("<TABLE BORDER ALING=CENTER>");
print("<TR>
<TH>Lu</TH><TH>Ma</TH><TH>Mi</TH><TH>Ju</TH>");
print("<TH>Vi</TH><TH>Sa</TH><TH>Do</TH> </TR>");
print("<TR>");
$aux=1;
// genera celdas en blanco hasta llegar el da
// de comienzo del mes
while($aux<$diasemana) {
print("<TD> </TD>");
$aux++;
}
for($i=1;$i<=$nd;$i++) {
if(($diasemana==6) or ($diasemana==7))
print("<TD BGCOLOR=#00FFFF>$i</TD>");
else
print("<TD>$i</TD>");
$diasemana++;
if($diasemana==8) {
// comienza nueva semana
print("</TR>");
print("<TR>");
$diasemana=1;
}
}
print("</TR></TABLE>");
Julio 2004
Lu Ma Mi Ju Vi Sa Do
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
186
www.full-ebook.com
SENTENCIAS DE CONTROL
Como puede apreciarse, debe indicarse el nombre del array en el que estn
almacenados todos los datos y el nombre de una variable. En la iteracin inicial
esta variable contendr el valor del primer elemento del array y en las sucesivas
iteraciones del bucle esta variable har referencia a los siguientes elementos.
187
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 6.33:
Las siguientes sentencias
Ejemplo 6.34:
Si se desea construir un bucle que escriba todos los nmeros pares menores o
iguales que 100, se podra utilizar una sentencia for como la siguiente:
188
www.full-ebook.com
SENTENCIAS DE CONTROL
break;
print $i;
}
Ejemplo 6.35:
Considrense los siguientes bucles anidados:
for($i=1;$i<=10;$i++) {
$j=10;
print "<BR> <B>$i</B>: ";
while ($j>0) {
if ($i>$j) {
break;
}
else {
print "$j ";
}
$j--;
}
}
1: 10 9 8 7 6 5 4 3 2 1
2: 10 9 8 7 6 5 4 3 2
3: 10 9 8 7 6 5 4 3
4: 10 9 8 7 6 5 4
5: 10 9 8 7 6 5
6: 10 9 8 7 6
7: 10 9 8 7
8: 10 9 8
9: 10 9
10: 10
189
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
for($i=1;$i<=10;$i++) {
$j=10;
print "<BR> <B>$i</B>: ";
while ($j>0) {
if ($i>$j) {
break 2;
}
else {
print "$j ";
}
$j--;
}
}
sera:
1: 10 9 8 7 6 5 4 3 2 1
2: 10 9 8 7 6 5 4 3 2
Ejemplo 6.36:
En el siguiente programa puede verse otro ejemplo de salida de dos estructuras de
control anidadas, en este caso un bucle y una estructura condicional:
$n = 10;
while (--$n) {
switch ($n) {
case 1:case 3:case 5:case 7:case 9:
print "$n (impar) ";
break;
case 2:case 4:case 6:case 8:
print "$n (par) ";
break;
case 0:
break 2;
}
}
En este caso las sentencias break dentro de los primeros casos de la estructura
condicional tienen por objeto nicamente salir de esa estructura; mientras que el
190
www.full-ebook.com
SENTENCIAS DE CONTROL
break situado dentro del ltimo caso fuerza la salida de las dos estructuras
anidadas (la estructura condicional y el bucle). La salida producida por las
sentencias anteriores sera:
La sentencia continue, por su parte, permite abandonar una iteracin del bucle
pero sin omitir el resto de iteraciones. Cuando el intrprete de PHP se encuentra
una sentencia continue, ignora las posibles sentencias que queden por ejecutar
en la iteracin actual del bucle y pasa directamente a las sentencias de la siguiente
iteracin.
Ejemplo 6.37:
Una forma de calcular la suma de los nmeros pares menores o iguales que 100
sera:
$suma = 0;
for($n=1;$n<=100;$n++) {
if($n%2 != 0) // el nmero es impar
continue;
$suma = $suma + $n;
}
En este caso, se construye un bucle que recorre todos los nmeros menores o
iguales que 100, tanto los pares como los impares; en cada iteracin se comprueba
si el nmero es impar, y de ser as se abandona esa iteracin y se pasa a la
siguiente.
Por supuesto, este ejemplo tiene por nico objeto mostrar el funcionamiento de la
sentencia continue, ya que el clculo de la suma se podra realizar de una forma
ms optimizada con un bucle que recorra solamente los nmeros pares. De hecho,
la siguiente sentencia sera suficiente para conseguir el mismo efecto:
for($suma=0,$n=2;$n<=100;$n+=2);
191
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 6.38:
Los siguientes bucles anidados generan todos los pares de nmeros formados por
combinaciones de los dgitos del 1 al 9, siendo adems los dos componentes del par
diferentes. Obsrvese cmo cuando en la iteracin interna se comprueba que las
dos componentes son iguales, se abandona dicha iteracin
for($i=1;$i<10;$i++)
for($j=1;$j<10;$j++)
if($i == $j)
continue;
else
print "($i,$j) ";
(1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9) (2,1) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8)
(2,9) (3,1) (3,2) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9) (4,1) (4,2) (4,3) (4,5) (4,6) (4,7)
(4,8) (4,9) (5,1) (5,2) (5,3) (5,4) (5,6) (5,7) (5,8) (5,9) (6,1) (6,2) (6,3) (6,4) (6,5)
(6,7) (6,8) (6,9) (7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,8) (7,9) (8,1) (8,2) (8,3) (8,4)
(8,5) (8,6) (8,7) (8,9) (9,1) (9,2) (9,3) (9,4) (9,5) (9,6) (9,7) (9,8)
for($i=1;$i<10;$i++)
for($j=1;$j<10;$j++)
if($i == $j)
continue 2;
else
print "($i,$j) ";
El resultado sera:
(2,1) (3,1) (3,2) (4,1) (4,2) (4,3) (5,1) (5,2) (5,3) (5,4) (6,1) (6,2) (6,3) (6,4) (6,5)
(7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (8,1) (8,2) (8,3) (8,4) (8,5) (8,6) (8,7) (9,1) (9,2)
(9,3) (9,4) (9,5) (9,6) (9,7) (9,8)
192
www.full-ebook.com
DEFINICIN DE
FUNCIONES
La sintaxis que debe adoptarse a la hora de definir una funcin en PHP sigue el
siguiente esquema general:
193
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
function NombreFuncion()
La sentencia return permite que la funcin devuelva un valor de retorno. Una vez
ejecutada esa sentencia se abandona la funcin, sin ejecutar cualquier sentencia
posterior que se encuentre en el cuerpo de la misma. El valor devuelto puede ser una
cadena de caracteres, un valor numrico, un valor booleano, un array,... Este valor ser
recogido en una variable a la hora de efectuar la llamada a la funcin o utilizado
directamente en alguna otra sentencia. Debe destacarse que a la hora de definir una
funcin, no es indispensable que esta devuelva valores; en este sentido en PHP no hay
distincin sintctica entre lo que en otros lenguajes son funciones y procedimientos.
Ejemplo 7.1:
En este primer caso, se define una funcin que calcula la suma de sus dos
argumentos numricos. La sentencia return devuelve el resultado:
function Suma($x,$y) {
return ($x+$y);
}
Ejemplo 7.2:
La siguiente funcin no devuelve ningn valor, simplemente imprime en pantalla
una serie de cadenas de caracteres a modo de saludo:
function Saluda() {
print("Bienvenido ");
print("Cmo ests?");
}
194
www.full-ebook.com
DEFINICIN DE FUNCIONES
Ejemplo 7.3:
Avanzando un paso ms se muestra cmo definir una funcin que calcula el
factorial de un nmero dado:
Ejemplo 7.4:
En este ejemplo se programa una funcin que genera un array a partir de dos
valores numricos dados. El primer elemento es el menor valor de ambos. A partir
de l se generan los siguientes elementos sumando una unidad al anterior hasta
llegar al segundo de los valores dados. Los arrays sern estudiados en profundidad
en el captulo siguiente.
function GeneraArray($min,$max) {
$x = array();
$d = $min;
while ($d<=$max){
$x[]=$d;
$d++;
}
return $x;
}
195
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
n! = n* (n-1)!
196
www.full-ebook.com
DEFINICIN DE FUNCIONES
Ejemplo 7.5:
Dada la funcin:
function Suma($x,$y) {
return ($x+$y);
}
$x=2;
$y=3;
$z=Suma($x,$y);
$z=Suma(2,3);
$x=2;
echo SUMA($x,3);
$z=Suma("2","3");
$z=suma((2+3)*5,4);
echo suma(suma(2,3)*5,4);
Ejemplo 7.6:
La siguiente pgina muestra la generacin de un array con ayuda de la funcin
GeneraArray() definida en el Ejemplo 7.4. Como puede observarse, el cdigo
de la pgina incorpora dos scripts PHP diferentes, el primero, situado antes del
cdigo HTML, define la funcin; mientras que en el segundo es donde se realiza la
llamada a la misma.
<?PHP
function GeneraArray($min,$max) {
197
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
$x = array();
$d = $min;
while ($d<=$max){
$x[]=$d;
$d++;
}
return $x;
}
?>
<HTML>
<HEAD>
<TITLE>Generacin de un array</TITLE>
</HEAD>
<BODY>
<?PHP
print "<PRE>";
print_r(GeneraArray(3,10));
print "</PRE>";?>
</BODY>
</HTML>
Array
(
[0] => 3
[1] => 4
[2] => 5
[3] => 6
[4] => 7
[5] => 8
[6] => 9
[7] => 10
)
198
www.full-ebook.com
DEFINICIN DE FUNCIONES
Ejemplo 7.7:
Considrese una funcin que reciba tres argumentos correspondientes a una
cantidad de horas, minutos y segundos, y devuelva el nmero total de segundos
equivalentes a dicho periodo. A continuacin puede verse la definicin de esa
funcin y tres llamadas a la misma con diferente nmero de argumentos.
<?PHP
function Cuenta_segundos($horas,$minutos,$segundos) {
return (3600*$horas + 60*$minutos + $segundos);
}
?>
<HTML>
<HEAD>
<TITLE>Generacin de un array</TITLE>
</HEAD>
<BODY>
<?PHP
$h=2; $m=15; $s=30;
$ss = Cuenta_segundos($h,$m,$s);
print "$h horas, $m minutos y $s segundos
son $ss segundos <BR>";
$h=3; $m=20;
$ss = Cuenta_segundos($h,$m);
print "$h horas y $m minutos son $ss segundos <BR>";
$h=5;
$ss = Cuenta_segundos($h);
print "$h horas son $ss segundos <BR>";
?>
</BODY>
</HTML>
199
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
200
www.full-ebook.com
DEFINICIN DE FUNCIONES
Ejemplo 7.8:
A continuacin se define una funcin que crea enlaces en una pgina web, a partir
de dos argumentos: el texto del enlace y la direccin URL de destino. A este
segundo argumento se le asignar un valor por defecto:
function CrearEnlace($texto,$url="http://www.cinemas.es")
{
echo "<a href=$url>$texto</a>";
}
Por supuesto, todos los argumentos de la funcin pueden tomar valores por
defecto:
CrearEnlace();
En este caso, los dos argumentos tomaran sus respectivos valores por defecto.
201
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
func_num_args()
Una vez que se sabe cuntos argumentos han sido pasados, es necesario tambin
disponer de algn mecanismo para recuperar los valores de los mismos. La
siguiente funcin permite recuperar el valor del argumento nmero n:
func_get_arg(n)
func_get_args()
Ejemplo 7.9:
A continuacin se define una funcin que calcula la suma de los valores de todos
sus argumentos. Como puede observarse, en la cabecera de la definicin no se
declara ningn argumento y estos son recuperados en el cuerpo de la propia
funcin.
function suma() {
$n = func_num_args();
$aux = 0;
for ($i=0;$i<$n;$i++)
$aux += func_get_arg($i);
return $aux;
}
202
www.full-ebook.com
DEFINICIN DE FUNCIONES
13
15
0
Antes de analizar las diferencias entre el paso de argumentos por valor y por
referencia, conviene entender ambos conceptos pero aplicados al caso de la
asignacin de variables.
Asignar a una variable dada un valor por referencia no supone almacenar un valor
concreto, sino una direccin de memoria que remite a otra variable. Cualquier
modificacin sobre esta segunda variable se ver reflejada en la variables asignada
por referencia.
$b = &$a;
El siguiente ejemplo muestra las diferencias en el resultado final entre las dos
formas de inicializacin de variables, la directa, o por valor, y la asignacin por
referencia.
203
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 7.10:
Dadas las sentencias de asignacin siguientes:
$a = "Hola!";
$b = $a;
$a = "Adis!";
echo "$b"; //Se imprime "Hola!", el valor inicial de $a
$a = "Hola!";
$b = &$a;
$a = "Adis!";
echo "$b"; //Se imprime "Adis!", el nuevo valor de $a
$a = "Hola!";
$b = &$a;
unset($a);
$a = "Adis!";
echo "$b"; //Se imprime "Hola!", el valor inicial de $a
En este caso, tras realizar la asignacin por referencia a la variable $b, la variable
$a es destruida con la funcin unset(), quedando $b con el valor que hasta ese
momento tena la variable destruida. Posteriormente, al hacer la ltima asignacin,
la variable $a vuelve a ser creada pero ocupando una posicin de memoria
diferente a la que tena en principio, por lo que la referencia de $b no es
recuperada.
De forma similar al caso de las variables, pasar un argumento de una funcin por
referencia significa que lo que realmente se pasa es la direccin de memoria de una
variable y no su valor. Para indicar que un argumento es pasado por referencia, se
antepone, de nuevo, el signo "&" al nombre de la variable en la lista de argumentos
204
www.full-ebook.com
DEFINICIN DE FUNCIONES
Ejemplo 7.11:
En la siguiente funcin se pasan dos argumentos por valor ($x y $y) y otros dos
por referencia ($suma y $prod) para que la funcin guarde en estos dos ltimos
el valor de la suma y del producto, respectivamente, de los dos primeros:
$a=3; $b=2;
Opera($a,$b,$s,$p);
Ejemplo 7.12:
Para apreciar la diferencia entre ambas maneras de pasar los argumentos de una
funcin, se define a continuacin una funcin que toma como argumento una
variable numrica y multiplica su valor por 20, pero implementando las dos
versiones: pasando el argumento por valor (funcin Fvalor()) y pasndolo por
referencia (funcin Frefer()).
function Fvalor($x){
$x *= 20;
}
function Frefer(&$x){
$x *= 20;
}
205
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
$z = 3;
Fvalor($z);
echo "$z";
$z = 3;
Frefer($z);
echo "$z";
Toda variable definida dentro de una funcin tiene un mbito local a la misma; es
decir, nicamente podr ser utilizada dentro de la propia funcin.
Ejemplo 7.13:
Dada la funcin f(), en la que se define una variable local $titulo, cualquier
referencia a esa variable fuera de la funcin devolvera un valor nulo (variable no
definida). As, con las siguientes sentencias no se imprimira ningn mensaje:
function f() {
$titulo = "Mar adentro";
print $titulo;
}
print $titulo;
206
www.full-ebook.com
DEFINICIN DE FUNCIONES
Ejemplo 7.14:
El siguiente programa tampoco escribira ningn mensaje, ya que al hacer la
referencia a la variable $director dentro de la funcin, PHP buscar esa variable
localmente.
function g()
{
print $director; // referencia a una variable local
}
En PHP las variables globales deben ser declaradas como tal dentro de la funcin que
quiera utilizarlas, esta declaracin se hace utilizando la palabra reservada global.
No existe ningn lmite al nmero de variables globales que pueden aceptar las
funciones.
Ejemplo 7.15:
Si se desea utilizar la variable $director dentro de la funcin g(), la
declaracin debera hacerse de la siguiente manera:
function g()
{
global $director; // declaracin de variable global
print $director; // referencia a la variable global
}
207
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Una segunda forma de acceder a las variables globales dentro de una funcin es
utilizar el array $GLOBALS, que siempre almacena todas las variables globales
definidas. As, en la funcin anterior, tambin se podra acceder a la variable
$director utilizando la siguiente sintaxis:
function g()
{
print $GLOBALS["director"];
}
Ejemplo 7.16:
La siguiente funcin declara una variable esttica, con valor inicial 0, y en cada
iteracin la incrementa en una unidad y escribe su nuevo valor.
function h()
{
static $n = 0;
$n++;
print "$n ";
}
for($i=1;$i<=10;$i++)
h();
208
www.full-ebook.com
DEFINICIN DE FUNCIONES
1 2 3 4 5 6 7 8 9 10
include("fichero.php");
require("fichero.php");
El nombre del fichero a incluir puede estar incluso almacenado en una variable y
cambiar de valor durante la ejecucin del programa. Adems, en el caso de que el
fichero a incluir se encuentre en un directorio diferente del que incluye al fichero
que hace la llamada, el nombre del mismo debera ir acompaado de la ruta relativa
para localizarlo.
209
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 7.17:
A continuacin se muestra el uso de la clusula require para incluir en un
programa las asignaciones realizadas en el fichero de nombre definiciones.php. El
contenido de este podra ser:
<?php
$titulo = "Los increibles";
$director = "Brad Bird";
$genero = "aventuras";
?>
<HTML>
<BODY>
<?php
require("definiciones.php");
echo "Nuestro prximo estreno: $titulo, ";
echo "pelcula del genero $genero, ";
echo "dirigida por $director";
?>
</BODY>
</HTML>
Por supuesto, la inclusin puede tener lugar en cualquier punto, incluso dentro de
una funcin, tal como ocurre en el cdigo siguiente:
function estreno(){
include("definiciones.php");
echo "Nuestro prximo estreno: $titulo, ";
echo "pelcula del genero $genero, ";
echo "dirigida por $director";
}
En este ltimo caso, al incluirse las definiciones dentro del cuerpo de la funcin,
las variables definidas pasarn a tener un mbito local, y por tanto solo podrn ser
210
www.full-ebook.com
DEFINICIN DE FUNCIONES
function estreno(){
global $titulo;
global $director;
global $genero;
include("definiciones.php");
echo "Nuestro prximo estreno: $titulo, ";
echo "pelcula del genero $genero, ";
echo "dirigida por $director";
}
Ejemplo 7.18:
Supngase que se dispone de dos funciones diferentes que pueden realizar el
clculo del precio total a pagar por un nmero $n de entradas a adquirir:
function precio_normal($n) {
return ($n * 4.5);
}
function precio_reducido($n) {
return ($n * 3);
}
Como puede apreciarse, las dos funciones tienen nombres diferentes, una aplica un
precio de 4.5 por entrada, mientras que para la otra el precio unitario es de 3.
211
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
$num_entradas = 5;
$tarifa = "precio_normal";
$importe = $tarifa($num_entradas);
print "El importe total de las $num_entradas entradas
es $importe euros.";
Por supuesto, el valor de la variable que hace referencia a la funcin podra ser
asignado a partir de determinadas condiciones en el programa, por ejemplo, si el da
actual es un mircoles se podra aplicar la tarifa reducida y en cualquier otro da la
tarifa normal:
if(date("w") == 3)
$tarifa = "precio_reducido";
else
$tarifa = "precio_normal";
$importe = $tarifa($num_entradas);
get_defined_functions()
212
www.full-ebook.com
DEFINICIN DE FUNCIONES
$f = get_defined_functions();
print_r($f);
mostrara en la pgina una lista con las ms de 700 funciones predefinidas en PHP.
213
www.full-ebook.com
www.full-ebook.com
ARRAYS
215
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 8.1:
Una primera forma de definir un array consiste en asignar directamente sus valores,
por ejemplo, a continuacin se define un array de nombre $x, con cuatro elementos
indexados numricamente comenzando en la posicin 0:
$x[0] = 1;
$x[1] = "hola!!";
$x[2] = 3;
$x[] = "ltimo";
Como alternativa se podra haber creado e inicializado el anterior array con ayuda
de la funcin array(), de la siguiente forma:
En este caso no se han especificado ndices y se consideran por defecto los valores
0, 1, 2
Para acceder a cada uno de los elementos del array, de nuevo se utiliza el ndice,
pudindose utilizar esos valores en una expresin como cualquier otra variable. Por
ejemplo:
$z = $x[0] + 5*$x[2];
216
www.full-ebook.com
ARRAYS
Ejemplo 8.2:
Supngase que se desea almacenar los aos de un conjunto de pelculas. Se puede
construir un array de elementos numricos (los aos) indexados mediante una
cadena de caracteres (el ttulo de la pelcula correspondiente).
En este caso, al construir el array debe indicarse tanto la palabra clave que acta de
ndice como el valor asociado a ese elemento del array. Aunque el array se haya
construido con la funcin array(), en cualquier momento se podra aadir un
nuevo elemento:
Para acceder a los elementos del array se utiliza de nuevo la palabra clave:
217
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 8.3:
A continuacin se crea un array de nombre $M y de dos dimensiones:
$M[0][0] = 5;
$M[0][1] = 3;
$M[1][0] = -2;
$M[1][1] = 7;
$M=array(array(5,3),array(-2,7));
Para acceder a los elementos individuales del array se deberan utilizar los dos
ndices:
$d = $M[0][0]*$M[1][1] - $M[0][1]*$M[1][0];
Ejemplo 8.4:
$pelicula["George Cukor"][1949] = "La costilla de Adn";
$pelicula["Jean Renoir"][1937] = "La gran ilusin";
$pelicula["Roberto Rossellini"][1944] = "Roma, ciudad
abierta";
$pelicula["Billy Wilder"][1954] = "Sabrina";
$pelicula["Frank Capra"][1938] = "Vive como quieras";
218
www.full-ebook.com
ARRAYS
Ejemplo 8.5:
Tambin es posible indexar los elementos de un array multidimensional:
$peliculas = array(
"La costilla de Adn" =>
array("Director"=>"G. Cukor","Ao"=>1949),
"La gran ilusin" =>
array("Director"=>"J. Renoir","Ao"=>1937),
"Roma, ciudad abierta" =>
array("Director"=>"R. Rossellini","Ao"=>1944),
"Sabrina" =>
array("Director"=>"B. Wilder, "Ao"=>1954),
"Vive como quieras" =>
array("Director"=>"F. Capra","Ao"=>1938)
);
([indice1]=>elemento1
[indice2]=>elemento2
....................
[indiceN]=>elementoN)
219
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
foreach(array as valor)
Ejemplo 8.6:
La siguiente sentencia recorre todos los elementos de un array y los muestra en la
pgina:
Cada elemento del array se asigna en cada iteracin a una misma variable, (en el
ejemplo, la variable $nombre), que es la que se manipula. El ejemplo se limita a
imprimir uno a uno todos los nombres que componen el array. Se ha aadido un
comando <HTML> de cambio de lnea de forma que cada nueva iteracin comience
a escribir en un nuevo rengln. El resultado sera:
Marlon Brando
Gary Cooper
Cary Grant
James Stewart
Si adems de recuperar los elementos del array, se desea tambin conocer el ndice,
tanto en el caso de ndices numricos como en arrays asociativos, se puede utilizar
una sintaxis alternativa del bucle foreach:
Ejemplo 8.7:
Dado el array y el bucle siguientes:
220
www.full-ebook.com
ARRAYS
Tambin es posible construir bucles que recorran todos los elementos del array
usando las restantes estructuras iterativas. El problema que surge habitualmente es
que puede no saberse cuntos elementos existen en el array y cules son los ndices
asociados a esos elementos, ya que una particularidad de los arrays de PHP es que
no es necesario que sus elementos tengan asociados ndices numricos
consecutivos. Estos problemas pueden salvarse mediante la funcin
each(array)
Ejemplo 8.8:
La siguiente estructura iterativa recorre e imprime todos los elementos del array
$actores:
while(list($ind,$nombre) = each($actores))
echo "$nombre <br>";
Mientras no se alcance el final del array, en cada iteracin del ciclo, el ndice del
elemento del array se almacena en la variable $ind y el elemento correspondiente
en la variable $nombre. Tras alcanzar el ltimo elemento, la funcin
each()toma el valor falso y el ciclo while finaliza.
221
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Por supuesto, tambin es posible utilizar estas estructuras iterativas anidadas para
recorrer arrays multidimensionales.
Ejemplo 8.9:
$peliculas=array(
"La costilla de Adn" =>
array("Director"=>"G. Cukor","Ao"=>1949),
"La gran ilusin" =>
array("Director"=>"J. Renoir","Ao"=>1937),
"Roma, ciudad abierta" =>
array("Director"=>"R. Rossellini","Ao"=>1944),
"Sabrina" =>
array("Director"=>"B. Wilder","Ao"=>1954),
"Vive como quieras" =>
array("Director"=>"F. Capra","Ao"=>1938)
);
foreach($peliculas as $indice => $titulo){
echo "Datos de $indice:<BR>\n";
foreach($titulo as $indice => $valor){
echo "   $indice: $valor <BR>\n";
}
}
222
www.full-ebook.com
ARRAYS
Ejemplo 8.10:
A continuacin se define una funcin de creacin de tablas. Toma como argumento
un array bidimensional, que se asume indexado numricamente con valores
0,1,2,..., y muestra todos sus elementos en una tabla HTML. La funcin tambin
recibe como argumentos un array con los rtulos de las columnas y otro con los
encabezamientos de las filas.
function crearTabla($a,$col,$f) {
echo "<TABLE BORDER CELLPADDING=5>";
//Cabecera
echo "<TR>";
echo "<TD> </TD>";
for($i=0;$i<count($col);$i++){
echo "<TH>$col[$i]</TH>";
}
echo "</TR>";
// Cuerpo de la tabla
for($i=0;$i<count($a);$i++){
echo "<TR>";
// encabezado de la fila i-sima
echo "<TH>$f[$i]</TH>";
// resto de la fila
for($j=0;$j<count($a[$i]);$j++){
echo "<TD>{$a[$i][$j]}</TD>";
}
echo "</TR>";
}
echo "</TABLE>";
}
223
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
<?php
include("funciones.php");
echo "<H2>Clculo de distancias de rutas</H2><BR>";
$datos = array(array(0,100,124,198,235),
array(100,0,224,98,34),
array(124,224,0,115,56),
array(198,98,115,0,122),
array(235,34,56,122,0));
// Generacin de los arrays de cabeceras
$cabecera = array();
for($i=0;$i<count($datos[0]);$i++){
$aux = $i+1;
$cabecera[$i] = "Ciudad $aux";
}
// Construccin de la tabla
crearTabla($datos,$cabecera,$cabecera);
// Determinacin de la ruta
$ruta = array(1,3,5,1);
$suma = 0;
// Generacin de una lista con los datos de cada etapa
echo "<UL>";
for($i=0;$i<count($ruta)-1;$i++){
$aux1 = $ruta[$i];
$aux2 = $ruta[$i+1];
$distancia = $datos[$aux1-1][$aux2-1];
224
www.full-ebook.com
ARRAYS
$suma += $distancia;
echo "<LI>De la ciudad $aux1 a la
ciudad $aux2: $distancia kilmetros";
}
echo "<B>Distancia total: $suma kilmetros</B>";
echo "</UL>";
?>
Ejemplo 8.11:
El siguiente fragmento de cdigo:
225
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
8.3.2. SUBDIVISIN
Ejemplo 8.12:
El siguiente cdigo:
$oeste = array(
"Solo ante el peligro","Fred Zinnemann","Gary Cooper",
"Races profundas","George Stevens","Alan Ladd",
"Horizontes de grandeza","William Wyler");
$oesteOrdenado = array_chunk($oeste,3);
foreach($oesteOrdenado as $indice => $valor){
echo "$indice-> <BR>";
foreach($valor as $indice => $valor){
echo "    $indice-> $valor <BR>";
}
}
da lugar a la salida:
0->
0-> Solo ante el peligro
1-> Fred Zinnemann
2-> Gary Cooper
1->
0-> Races profundas
1-> George Stevens
2-> Alan Ladd
2->
226
www.full-ebook.com
ARRAYS
Se ha considerado el valor por defecto del ltimo argumento, lo que provoca que
cada nuevo subarray se numere desde 0. Si se quieren conservar los ndices del
array original, se debe dar como tercer argumento el valor TRUE:
$oesteOrdenado = array_chunk($oeste,3,TRUE);
0->
0-> Solo ante el peligro
1-> Fred Zinnemann
2-> Gary Cooper
1->
3-> Races profundas
4-> George Stevens
5-> Alan Ladd
2->
6-> Horizontes de grandeza
7-> William Wyler
Ejemplo 8.13:
227
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
$c = array_count_values($a1);
foreach($c as $indice=>$valor)
echo "$indice: $valor <BR>\n";
Ejemplo 8.14:
A continuacin se muestra un ejemplo de seleccin de determinadas pelculas de
una lista en funcin de su ao de produccin. En concreto, se trata de conseguir de
las pelculas almacenadas, las realizadas desde el ao 1960 en adelante:
function ao($a){
return($a >= 1960);
}
$seleccin = array_filter($peliculas,"ao");
228
www.full-ebook.com
ARRAYS
foreach($seleccion as $indice=>$valor)
echo "$indice: $valor <BR>\n";
Como puede apreciarse, lo primero que se necesita es una funcin booleana que,
dado un elemento del array, indique si debe ser seleccionado o no. El nombre de
esa funcin es pasado a array_filter() como segundo argumento. El
resultado final del programa anterior sera:
El apartamento: 1960
Charada: 1963
Doctor Zhivago: 1965
Lawrence de Arabia: 1962
West Side Story: 1961
Ejemplo 8.15:
El siguiente programa lista los nombres de los actores que aparecen como claves en
un array asociativo:
$actores=array(
"Gary Cooper" => array("Solo ante el peligro",
"La gran prueba", "El secreto de vivir"),
"Cary Grant" => array("La fiera de mi nia",
"Arsnico por compasin","Historias de
Filadelfia"),
"Marlon Brando" => array("La ley del silencio",
"Sayonara","Viva Zapata!")
);
$busqueda=array_keys($actores);
foreach($busqueda as $indice=>$valor)
echo "$valor <br>\n";
Gary Cooper
Cary Grant
Marlon Brando
229
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 8.16:
En este segundo caso, se localizan los ndices asociados a un determinado valor. En
concreto, se listan las pelculas almacenadas correspondientes al ao 1940:
$peliculas=array(
"El apartamento"=>1960,"Charada"=>1963,
"Doctor Zhivago"=>1965,"Gig"=>1958,
"El gran dictador"=>1940,"Historias de
Filadelfia"=>1940,
"El hombre tranquilo"=>1952,"Lawrence de Arabia"=>1962,
"Rebeca"=>1940
);
$busqueda=array_keys($peliculas,1940);
foreach($busqueda as $indice=>$valor)
echo "$valor <br>\n";
El gran dictador
Historias de Filadelfia
Rebeca
Ejemplo 8.17:
Dado el array $actores definido en el Ejemplo 8.15, se comprueba si el nombre
de un actor est entre las palabras claves del array, y en caso afirmativo se muestra
el listado de todas sus pelculas:
$actor="Gary Cooper";
if(array_key_exists($actor,$actores)) {
echo "<B>Pelculas de $actor:</B><BR>";
foreach($actores[$actor] as $indice=>$valor)
echo "$valor <BR>\n";
}
230
www.full-ebook.com
ARRAYS
Ejemplo 8.18:
En el siguiente ejemplo, se disea una pgina de manera que cada vez que un
usuario accede a ella obtiene entradas gratis para dos pelculas de un ciclo de cine:
array_search(elemento_buscado,array,valor_logico):
devuelve el ndice de elemento_buscado si este pertenece al array dado.
En caso contrario, devuelve FALSE. Si dicho elemento aparece ms de una vez
dentro del array, solo se obtiene el ndice correspondiente a la primera
aparicin. El tercer argumento es opcional y corresponde a un valor lgico que
231
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
indica si el elemento a buscar debe coincidir con el del array tanto en el valor
como en el tipo.
Ejemplo 8.19:
A partir de tres variables que almacenan los datos de una determinada pelcula,
(ttulo, director y ao),
se desea generar un array formado por esos tres elementos e indexados con el
nombre de sus respectivas variables. Esto se podra hacer de dos maneras:
232
www.full-ebook.com
ARRAYS
$listaAux=array("pelicula","director","ao");
$lista=compact($listaAux);
o bien:
$lista=compact("pelicula","director","ao");
Ejemplo 8.20:
A continuacin se crean tres variables a partir de los ndices de un array dado y se
inicializan automticamente con los valores correspondientes. Obsrvese que
previamente a la construccin del array y a la llamada a la funcin extract(),
ya se ha inicializado una variable de nombre idntico a uno de los ndices del array.
233
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
extract($pelicula,EXTR_SKIP);
el resultado sera:
234
www.full-ebook.com
ARRAYS
La Tabla 8.2 muestra algunos sencillos ejemplos del uso de esta funcin.
Ejemplo 8.21:
Las siguientes sentencias permiten apreciar el funcionamiento de esta funcin:
$a = array(1,2,3,4,5,6);
print_r($a);
print "<br>";
/* insercin de tres nuevos elementos, en sustitucin del
cuarto y el quinto: a1=(1,2,3,0,1,2,6) */
array_splice($a,3,2,array(0,1,2));
print_r($a);
print "<br>";
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 0 [4] => 1 [5] => 2 [6] => 6 )
Ejemplo 8.22:
El siguiente ejemplo muestra una pgina de actualizacin del listado de directores
de los que se tienen pelculas disponibles.
235
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
236
www.full-ebook.com
ARRAYS
array_pad(array,tamao_final,elemento_nuevo): prolonga el
array dado con un nuevo elemento, hasta completar el tamao especificado. La
prolongacin se realiza por la derecha o por la izquierda, dependiendo de si el
valor del argumento tamao_final es positivo o negativo,
respectivamente. El correcto funcionamiento de la operacin exige que el
tamao especificado en el argumento sea mayor que la dimensin del array.
Ejemplo 8.23:
La funcin array_unique() considera elementos iguales aquellos cuya
representacin en forma de cadena es idntica. Este ejemplo ilustra su
funcionamiento:
$a = array(1,2,"1",3,4,5,"4",6,7,"6",8,6);
$b = array_unique($a);
foreach($b as $indice=>$valor)
echo "$indice: $valor <BR>\n";
237
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
0: 1
1: 2
3: 3
4: 4
5: 5
7: 6
8: 7
10: 8
Ejemplo 8.24:
A continuacin se muestra la unin de dos arrays asociativos en los que una de las
claves se repite en ambos.
$peliculas1 = array(
"B. Wilder"=>"Primera plana",
"J. Ford"=>"Ro Grande",
"G. Cukor"=>"Cena a las ocho");
$peliculas2 = array(
"F. Capra"=>"Sucedi una noche",
"B. Wilder"=>"Sabrina",
"W. Wyler"=>"Horizontes de grandeza");
$p = array_merge($peliculas1,$peliculas2);
238
www.full-ebook.com
ARRAYS
array_intersect_assoc(array1,array2,array3,...): devuelve un
array con los elementos comunes a todos los argumentos de la funcin. En la
comparacin se tienen en cuenta los ndices.
array_intersect(array1,array2,array3,...): a diferencia de la
funcin anterior, en este caso, se realiza la interseccin pero los ndices de los
elementos no se tienen en cuenta en la comparacin.
Ejemplo 8.25:
Dados los siguientes arrays:
Si se realiza la operacin:
$c = array_diff_assoc($oeste,$comedia,$drama);
pues, si bien los tres primeros elementos del array $oeste se repiten en posteriores
arrays, nicamente el primero de ellos aparece repetido con el mismo ndice.
Si en lugar de utilizar la funcin array_dic_assoc() se ejecuta la siguiente
sentencia:
$c = array_diff ($oeste,$comedia,$drama);
239
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
el array $c sera:
("d"=>"G. Stevens")
ya que ahora los tres primeros elementos del array $oeste deberan ser
eliminados al estar repetidos en los otros, aunque los ndices o palabras clave
puedan ser iguales.
Ejemplo 8.26:
El siguiente programa toma una lista con los nombres y apellidos de una serie de
directores de cine. El objetivo es crear una lista nueva donde el nombre de cada
director aparece solo con su inicial. En el programa se utilizan algunas funciones
de manipulacin de cadenas de caracteres que sern estudiadas con ms detalle en
el prximo captulo.
240
www.full-ebook.com
ARRAYS
$directoresAbrev = array_map("abreviar",$directores);
// Impresin del resultado
foreach($directoresAbrev as $indice=>$valor){
echo "$indice -> $valor<BR>";
}
D1 -> C. Chaplin
D2 -> S. Donen
D3 -> J. Ford
D4 -> D. Lean
D5 -> V. Minnelli
Ejemplo 8.27:
En el caso de considerar ms de un array, la funcin a aplicar debe tener ms de un
argumento. El siguiente programa muestra un ejemplo de esta situacin:
function union($a1,$a2){
return("El scar del ao $a1 es $a2.");
}
$aos = array(1940,1945,1951,1955,1960);
$peliculas = array("Rebeca","Das sin huella",
"Un americano en Pars","Marty",
"El apartamento");
$oscar = array_map("union",$aos,$peliculas);
Ejemplo 8.28:
Con la ayuda de la funcin array_map() es posible construir un array
multidimensional a partir de una serie de arrays unidimensionales. En el siguiente
ejemplo se muestra el proceso:
241
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 8.29:
Dado un array de aos, correspondientes a pelculas dadas como ndices, a continuacin
se utiliza la funcin array_walk() para escribir en la pgina un listado con el ttulo
de cada pelcula junto con su ao entre parntesis. Para ello se define previamente una
funcin que realiza genera el mensaje correspondiente a cada pelcula, y se pasa como
segundo argumento a array_walk() el nombre de esa funcin:
function unir($a,$b){
echo "$b, ($a).<BR>";
}
$peliculas = array(
"El apartamento"=>1960,
"Charada"=>1963,
"Doctor Zhivago"=>1965,
"Gig"=>1958,
"El gran dictador"=>1940,
"Historias de Filadelfia"=>1940,
"El hombre tranquilo"=>1952,
"Lawrence de Arabia"=>1962,
"Rebeca"=>1940
);
242
www.full-ebook.com
ARRAYS
array_walk($peliculas,'unir');
El apartamento, (1960).
Charada, (1963).
Doctor Zhivago, (1965).
Gig, (1958).
El gran dictador, (1940).
Historias de Filadelfia, (1940).
El hombre tranquilo, (1952).
Lawrence de Arabia, (1962).
Rebeca, (1940).
function unir2($a,$b,$cadena){
echo "$b, $cadena $a.<BR>";
}
la sentencia
243
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 8.30:
Dado el array del Ejemplo 8.29, si se desea que la lista mostrada incluya las
pelculas en orden cronolgico, desde la ms actual a la ms antigua, podra
realizarse una simple llamada a la funcin arsort() antes de la llamada a
array_walk(). La ordenacin se produce sobre el valor de los elementos del
array, permaneciendo la clave de cada uno inalterada.
arsort($peliculas);
array_walk($peliculas,'unir',"pelcula realizada en ");
Ejemplo 8.31:
Si en el ejemplo anterior se opta por el orden inverso de los ndices:
244
www.full-ebook.com
ARRAYS
krsort($peliculas);
el resultado sera:
$pelculas = array(
"Ariane"=>
array("Director"=>"B. Wilder","Ao"=>1957),
"La costilla de Adn"=>
array("Director"=>"G. Cukor","Ao"=>1949),
"La gran ilusin"=>
array("Director"=>"J. Renoir","Ao"=>1937),
245
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
246
www.full-ebook.com
ARRAYS
echo "<TR>";
echo "<TD> </TD>";
for($i=0;$i<count($columnasOrdenado);$i++){
echo "<TH>$columnasOrdenado[$i]</TH>";
}
echo "</TR>";
// lista con los ttulos que hay que colocar en la tabla
$datos = array_keys($peliculas);
array("Director"=>$columnasOrdenado[$j],
"Ao"=>$filas[$i]));
// si hay alguna pelcula se crea la celda con
// los ttulos obtenidos
if(count($ps)!=0){
echo "<TD ALIGN=CENTER>";
for($k=0;$k<count($ps);$k++){
echo $ps[$k]."<br>";
}
echo "</TD>";
}
// en caso contrario la celda es vaca
else
echo "<TD ALIGN=CENTER>"."----------"."</TD>";
}
echo "</TR>";
}
echo "</TABLE>";
247
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
248
www.full-ebook.com
FUNCIONES
PREDEFINIDAS
9.1. INTRODUCCIN
PHP cuenta con un gran nmero de funciones predefinidas, ms de 700, que
pueden ser usadas en cualquier programa sin necesidad de invocar a ninguna
librera. En el captulo previo ya han sido presentadas muchas de ellas, en
concreto, las relacionadas con el tratamiento y manipulacin de arrays. En este
captulo se presentarn algunas funciones predefinidas adicionales,
clasificndolas en diversos grupos atendiendo al cometido al que estn
destinadas. Se empezar por presentar funciones de manipulacin de cadenas de
caracteres, para finalizar con el repaso a las funciones de fechas y horas, y una
lista de funciones matemticas. En captulos posteriores del libro se presentarn
nuevas funciones, como son las relacionadas con ficheros y directorios,
funciones de conectividad a base de datos,...
249
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
250
www.full-ebook.com
FUNCIONES PREDEFINIDAS
implode(separador,array) y join(separador,array):
funciones que disponen los elementos de un array dado en una cadena
de caracteres, pero separados por la cadena dada como primer
argumento. Ambas funciones actan de igual forma.
Ejemplo 9.1:
La sentencia
Ejemplo 9.2:
En el siguiente programa, dado un array de arrays, se aplica la funcin implode() a
cada uno de sus elementos para obtener una serie de cadenas de caracteres.
$peliculasMusicales=array(
array("Un americano en Pars","V. Minnelli",1951),
array("Hello,Dolly!","G. Kelly",1968),
array("Qu noche la de aquel da!","R. Lester",1964));
foreach($peliculasMusicales as $pelicula){
$p = implode("--->",$pelicula);
print "$p<BR>";
}
251
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 9.3:
Dada la siguiente cadena:
la sentencia
str_word_count($cadena);
str_word_count($cadena,1);
([0] => Bienvenido, [1] => a, [2] => nuestro, [3] => cine)
str_word_count($cadena,2);
([0] => Bienvenido, [11] => a, [13] => nuestro, [21] => cine)
252
www.full-ebook.com
FUNCIONES PREDEFINIDAS
Ejemplo 9.4:
Considrese una cadena de 27 caracteres de longitud, si se quiere prolongarla a
ambos lados con 16 caracteres, repartidos a partes iguales a ambos lados, el cdigo
necesario sera el siguiente:
Si como longitud se indica 30, 3 ms que la inicial, aunque la nueva cadena aporte
8 caracteres, se truncar en 3, repartidos a izquierda y derecha. As, el cdigo:
genera la cadena:
253
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 9.5:
La sentencia:
echo str_repeat("oOoxXx",5);
oOoxXxoOoxXxoOoxXxoOoxXxoOoxXx
Ejemplo 9.6:
Dadas las variables
la sentencia
substr_replace(cadena,reemplazar,posicin,longitud): dada
una cadena inicial se obtiene una nueva cadena como resultado de reemplazar
la porcin delimitada por los argumentos posicin y longitud, por el
254
www.full-ebook.com
FUNCIONES PREDEFINIDAS
Ejemplo 9.7:
Dadas las cadenas
substr_replace($cadena,$nombreCliente,25,1);
substr_replace($cadena,$nombreCliente,25,-41);
substr_replace($cadena,$nombreCliente,-42,1);
substr_replace($cadena,$nombreCliente,-42,-41);
255
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
strnatcasecmp(cad1,cad2) y strnatcmp(cad1,cad2):
comparan cadenas alfanumricas teniendo en cuenta el orden alfabtico
natural. Se obtiene un valor menor que 0 si la primera cadena es menor
que la segunda; un valor mayor que 0 si es mayor y 0 si ambas son
iguales. La nica diferencia entre ambas funciones es que la primera no
distingue entre maysculas y minsculas.
Ejemplo 9.8:
La comparacin de cadenas alfabticas como las siguientes da el mismo resultado
independientemente de la funcin de comparacin empleada:
256
www.full-ebook.com
FUNCIONES PREDEFINIDAS
stristr(cadena,fragmento) y strstr(cadena,fragmento):
devuelven la cadena dada desde la primera aparicin de un carcter o
fragmento determinado. Si el fragmento no se encuentra, se obtiene el valor
booleano FALSE. La diferencia entre ambos mtodos es que el primero no
distingue entre maysculas y minsculas.
strpos(cadena,fragmento,inicio_bsqueda): se obtiene la
posicin correspondiente a la primera aparicin de un fragmento determinado
dentro de una cadena dada. Como tercer argumento opcionalmente se puede
indicar la posicin a partir de la cual iniciar la bsqueda.
Ejemplo 9.9:
Dada la cadena:
257
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 9.10:
El siguiente cdigo fragmenta una cadena dada considerando como delimitador la coma:
258
www.full-ebook.com
FUNCIONES PREDEFINIDAS
echo strtok($p,',');
echo "<BR>";
// $i cuenta el nmero de comas ledas
$i = 1;
// nmero total de comas dentro de la cadena inicial
$frecuencia=substr_count($p,',');
// bucle que fragmenta el resto de la cadena
while($i<=$frecuencia){
echo strtok(',');
echo "<BR>";
$i++;
}
En PHP cualquier instante de tiempo viene determinado por un nmero entero que
representa el nmero de segundos transcurridos desde las 00:00 del da 1 de enero
de 1970; as por ejemplo, la funcin que calcula el instante de tiempo actual,
funcin time(), devuelve en realidad un nmero entero. Por supuesto, es posible
trabajar con fechas y horas en formatos ms sencillos para el usuario, para ello
PHP dispone de la funcin mktime() que permite generar instantes de tiempo y
la funcin date() para convertir el instante de tiempo en una cadena de
caracteres siguiendo un formato preestablecido.
259
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
260
www.full-ebook.com
FUNCIONES PREDEFINIDAS
Ejemplo 9.11:
El siguiente programa genera una pgina de bienvenida en la que se muestra la
fecha local del servidor con el formato escogido en el correspondiente argumento
de la funcin date():
Ejemplo 9.12:
Si se quiere mostrar el mes en curso, basta la siguiente lnea de cdigo:
print(date("M"));
261
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Sin embargo, si se quiere mostrar un mes del ao, distinto al actual, se debe aadir
como segundo argumento de la funcin date() una llamada a la funcin
mktime() con los argumentos adecuados: en este caso, basta indicar el nmero
de mes y un da del mes, (el 1, por ejemplo):
print(date("M",mktime(0,0,0,1,1,0)));
Ejemplo 9.13:
Si se desea averiguar el da de la semana correspondiente al 2 de marzo de 1972 se
podra escribir la siguiente lnea de cdigo:
print(date("w",mktime(0,0,0,3,2,1972)));
Ejemplo 9.14:
Mediante el siguiente programa se generar el calendario del mes en curso en el
momento de acceder a una pgina dada, incluyendo adems dos enlaces: uno al
calendario del mes anterior y otro al del mes siguiente. El aspecto de este
calendario puede verse en la Figura 9.1.
262
www.full-ebook.com
FUNCIONES PREDEFINIDAS
Datos.php: fichero de datos generales, que almacena dos arrays con los
nombres de los meses y de los das y variables relacionadas con la fecha en
curso. Tambin implementa la funcin crearCalendario(), que permite
construir el calendario de un mes y ao dados. Toda esta informacin ser
aadida en los restantes ficheros con la sentencia include.
Calendario.php: construye el calendario del mes en curso en el momento de
acceder a la pgina y se crean dos enlaces que remiten al calendario del mes
anterior y del mes siguiente, respectivamente.
MesAnterior.php y MesSiguiente.php: generan el calendario correspondiente al
mes anterior y al mes siguiente al mes en curso.
Fichero Datos.php
<?php
$meses = array("Enero", "Febrero", "Marzo",
"Abril", "Mayo","Junio",
"Julio", "Agosto", "Septiembre",
"Octubre", "Noviembre", "Diciembre");
$semana = array("Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do");
$aoActual = date("Y");
$mesActual = date("n");
$mesActualTr = $meses[$mesActual-1];
$diaActual = date("j");
function crearCalendario($mes,$ao,$fechaActual){
$nummes = array_search($mes,$GLOBALS["meses"])+1
$diasemana=date("w",mktime(0,0,0,$nummes,1,$ao));
if($diasemana==0)
$diasemana=7;
$diasMes= date("t",mktime(0,0,0,$nummes,1,$ao));
// cabeceras de la tabla
for($i=0;$i<=6;$i++){
263
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
echo "<TH>".$GLOBALS["semana"][$i]."</TH>";
}
echo "</TR>";
Como puede apreciarse, este fichero comienza con las definicin de dos arrays,
que almacenan los nombres de los meses y de los das de la semana, y cuatro
264
www.full-ebook.com
FUNCIONES PREDEFINIDAS
Fichero Calendario.php
<?php
include("Datos.php");
crearCalendario($mesActualTr,$aoActual,true);
$mesAnt = "MesAnterior.php";
$mesSig = "MesSiguiente.php";
echo "<BR><A HREF=$mesAnt>Mes anterior</A> <BR>
<A HREF=$mesSig>Mes prximo</A>";
?>
265
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Fichero MesAnterior.php
<?php
include("Datos.php");
if($mesActual==1){
$aux = 11;
$ao = $aoActual-1;
}
else{
$aux = $mesActual-2;
$ao = $aoActual;
}
crearCalendario($meses[$aux], $ao, false);
?>
Fichero MesSiguiente.php
<?php
include("Datos.php");
if($mesActual==12){
$aux = 0;
$ao = $aoActual+1;
}
else{
$aux = $mesActual;
$ao = $aoActual;
}
crearCalendario($meses[$aux], $ao, false);
?>
Estos dos ltimos ficheros cargan de nuevo todos los datos y lo nico que realizan
es una modificacin de las variables que identifican al mes en curso. Una vez
modificadas esas variables se procede a efectuar la llamada a la funcin de
creacin del calendario.
266
www.full-ebook.com
FUNCIONES PREDEFINIDAS
Funcin Descripcin
abs(n) Obtiene el valor absoluto de un entero o en coma flotante.
round(n) Redondea a entero un nmero dado.
ceil(n) Obtiene el valor entero superior ms prximo a n.
floor(n) Obtiene el valor entero inferior ms prximo a n.
cos(n) Calcula el coseno de un ngulo.
sin(n) Calcula el seno de un ngulo
tan(n) Calcula la tangente de un ngulo.
exp(a) Calcula el valor ea.
log(n) Calcula el logaritmo neperiano de n.
min(n1,n2,...) Obtiene el menor valor de un nmero determinado de
min(array) argumentos numricos o de los elementos de un array.
Si alguno de estos nmeros es decimal, el resultado
tambin tendr este formato.
max(n1,n2,) Obtiene el mayor valor de un nmero determinado de
max(array) argumentos numricos o de los elementos de un array.
Si alguno de estos nmeros es decimal, el resultado
tambin tendr este formato.
pow(a,b) Se calcula el valor de la potencia ab.
rand(mn,mx) Si no toman argumentos, estas funciones devuelven
mt_rand(mn,mx) un valor aleatorio entre 0 y RAND_MAX. En caso
contrario, se obtiene un nmero aleatorio entre mn y
mx. El valor RAND_MAX es una cota superior entera
definida por el sistema, que se puede obtener con una
llamada a la funcin mt_getrandmax().
sqrt(a) Raz cuadrada de a.
267
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
268
www.full-ebook.com
PROGRAMACIN
ORIENTADA A
OBJETOS
10.1. INTRODUCCIN
Los dos elementos bsicos de todo lenguaje de programacin estructurada son las
variables y las funciones. Las primeras se utilizan para almacenar datos, y las
segundas realizan acciones sobre esos datos. En un esquema de programacin
estructurada tradicional ambos elementos bsicos se encuentran perfectamente
diferenciados, definiendo las variables por un lado y las funciones por otro.
269
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Los objetos definidos son elementos dinmicos, en todo momento tienen un estado
(determinado por los valores de sus variables) y un comportamiento (determinado
por sus mtodos).
Ejemplo 10.1:
Pinsese en la gestin de un cine; en un cine se maneja informacin sobre
pelculas, proyecciones, clientes,... En definitiva, se podra pensar en diferentes
objetos con diferentes caractersticas (variables) y diferentes acciones (mtodos)
que pueden realizar cada uno:
Cada objeto pelcula tendr asociadas cuatro variables que indicarn el ttulo,
el director, la lista de actores y el ao de produccin. Adems tendr un
mtodo que permitir generar la ficha artstica de la pelcula (vase Figura
10.1).
Cada objeto cliente tendr asociadas tres variables que indicarn el nombre y la
edad del cliente y la lista de proyecciones para las que ha adquirido una
entrada. Adems de sus variables, un cliente tambin dispondr de un mtodo
que le permitir adquirir una entrada para una proyeccin (vase Figura 10.3).
270
www.full-ebook.com
PROGRAMACIN ORIENTADA A OBJETOS
PELCULA
VARIABLES: MTODO:
Ttulo Generar ficha
Director
Actores
Ao
PROYECCIN
VARIABLES: MTODO:
Da Asignar pelcula
Hora
Pelcula
CLIENTE
VARIABLES: MTODO:
Nombre Adquirir entrada
Edad
Lista proyecciones
271
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
CINE
VARIABLES: MTODOS:
Da del espectador Buscar cliente
Tarifa normal Calcular importe
Tarifa reducida Crear proyeccin
Proyecciones Crear cliente
Clientes
Por ltimo, los objetos podran disponer de mtodos especficos para acceder a sus
variables, tanto para consultar como para cambiar sus valores. Adems, los objetos
suelen disponer de mtodos, denominados constructores, que son llamados cuando
se crea el objeto.
272
www.full-ebook.com
PROGRAMACIN ORIENTADA A OBJETOS
class NombreClase {
var
variables de la clase
mtodos
}
Ejemplo 10.2:
A continuacin se presenta el esquema de las clases de objetos que fueron
presentados en el Ejemplo 10.1. En esta primera aproximacin se incluye
nicamente la definicin de las variables de cada clase y la declaracin de los
mtodos; posteriormente se aadir la implementacin completa de estos ltimos.
class Pelicula {
var $titulo,
$director,
$actores,
$ao;
// implementacin de mtodos
function generar_ficha() {
}
}
class Proyeccion {
var $dia_hora;
var $pelicula;
// implementacin de mtodos
function asignar_pelicula($p) {
}
}
class Cliente {
var $nombre;
var $edad;
var $lista_proyecciones;
273
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
// implementacin de mtodos
function adquirir_entrada($proy) {
}
}
class Cine {
var $dia_espectador,
$tarifa_normal,
$tarifa_reducida,
$lista_proyecciones,
$lista_clientes;
// implementacin de mtodos
function calcular_importe($c,$proy) {
function crear_proyeccion($t,$p) {
function crear_cliente($n,$e) {
function buscar_cliente($c) {
}
}
274
www.full-ebook.com
PROGRAMACIN ORIENTADA A OBJETOS
10.2.1. CONSTRUCTORES
Las clases definen el prototipo de los objetos, definiendo sus mtodos y declarando
sus variables; pero, cmo se inicializan estas variables? Entran aqu en juego dos
nuevos elementos: la variable $this y el constructor de la clase.
Ejemplo 10.3:
La creacin de un objeto de la clase Pelicula exige el aportar la informacin
necesaria para ese objeto, en este caso concreto, esa informacin se traduce en los
valores para sus 4 variables. El constructor de la clase puede recibir como
argumentos esos cuatro valores y asignarlos a las respectivas variables del objeto.
function Pelicula($t,$d,$as,$a){
$this->titulo = $t;
$this->director = $d;
$this->actores = $as;
$this->ao = $a;
}
Obsrvese cmo la sintaxis, para acceder a las variables del objeto, exige indicar el
nombre de la variable a continuacin de -> pero sin el signo $.
Esta misma sintaxis puede ser utilizada dentro de cualquier otro mtodo para
acceder a las variables del objeto. Por ejemplo, a continuacin se incluye la
definicin completa de la clase Pelicula, incluyendo el mtodo que genera su
ficha artstica:
class Pelicula {
var $titulo,
$director,
$actores,
$ao;
275
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
// constructor
function Pelicula($t,$d,$as,$a){
$this->titulo = $t;
$this->director = $d;
$this->actores = $as;
$this->ao = $a;
}
// implementacin de mtodos
function generar_ficha() {
print "<H3> $this->titulo ($this->ao)</H3>";
print "Dirigida por $this->director y
protagonizada por:<BR>";
foreach($this->actores as $ac)
print "$ac <BR>";
}
}
class Cliente {
var $nombre;
var $edad;
var $lista_proyecciones;
// constructor
function Cliente($n,$e){
$this->nombre = $n;
$this->edad = $e;
$this->lista_proyecciones = array();
}
// implementacin de mtodos
function adquirir_entrada($proy) {
array_push($this->lista_proyecciones,$proy);
}
}
Es posible que el constructor no reciba todos los valores iniciales para las variables
del objeto y que se disponga de mtodos para realizar esa asignacin
posteriormente, tal como ocurre en la clase Proyeccion:
276
www.full-ebook.com
PROGRAMACIN ORIENTADA A OBJETOS
class Proyeccion {
var $dia_hora;
var $pelicula;
// constructor
function Proyeccion($t){
$this->dia_hora = $t;
}
// implementacin de mtodos
function asignar_pelicula($p) {
$this->pelicula = $p;
}
}
Se puede optar por inicializar algunas variables con valores fijos desde el propio
constructor, por ejemplo, asignando valores por defecto para dichas variables. El
constructor de la clase Cine podra ser:
function Cine($d,$t=5,$tr=3.5){
$this->dia_espectador = $d;
$this->tarifa_normal = $t;
$this->tarifa_reducida = $tr;
$this->lista_proyecciones = array();
$this->lista_clientes = array();
}
277
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
El valor devuelto por el operador new debe ser asignado a una variable para poder
hacer referencia posteriormente a dicho objeto.
Ejemplo 10.4:
Se podra crear un nuevo objeto de la clase Pelicula con la sentencia:
Como puede observarse el constructor recibe los cuatro argumentos necesarios para
inicializar las cuatro variables del objeto. La tercera de las variables recibir como
valor un array con los nombres de los protagonistas de la pelcula.
Ejemplo 10.5:
Dado el objeto $p creado en el Ejemplo 10.4, se podra efectuar una llamada
$p->generar_ficha();
278
www.full-ebook.com
PROGRAMACIN ORIENTADA A OBJETOS
Ejemplo 10.6:
Para completar la definicin de las clases del Ejemplo 10.1, se incluye a
continuacin la definicin de la clase Cine, con la implementacin de todos sus
mtodos.
class Cine {
var $dia_espectador,
$tarifa_normal,
$tarifa_reducida,
$lista_proyecciones,
$lista_clientes;
// constructor
function Cine($d,$t=5,$tr=3.5){
$this->dia_espectador = $d;
$this->tarifa_normal = $t;
$this->tarifa_reducida = $tr;
$this->lista_proyecciones = array();
$this->lista_clientes = array();
}
// implementacin de mtodos
function calcular_importe($c,$proy) {
// obtencin del dia de la semana de la proyeccin
$dia_proy = date("w",$proy->dia_hora);
if(($dia_proy == $this->dia_espectador)||
($c->edad)<=15 || ($c->edad>=65))
$t=$this->tarifa_reducida;
else
$t=$this->tarifa_normal;
return $t;
}
function crear_proyeccion($t,$p) {
$proy = new Proyeccion($t);
$proy->asignar_pelicula($p);
array_push($this->lista_proyecciones,$proy);
}
function crear_cliente($n,$e) {
$cl = new Cliente($n,$e);
array_push($this->lista_clientes,$cl);
}
function buscar_cliente($n) {
// bsqueda del nombre en el array de clientes
279
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
foreach($this->lista_clientes as $cliente) {
if($cliente->nombre == $n)
return $cliente;
}
return FALSE;
}
Ejemplo 10.7:
Una vez definidas todas las clases del Ejemplo 10.1 en un fichero de nombre
clases.php, se encuentran listas para ser utilizadas en cualquier otro programa. A
continuacin se incluye un sencillo programa que crea diferentes objetos de las
clases anteriores y realiza con ellos las acciones que permiten sus mtodos.
include "clases.php";
280
www.full-ebook.com
PROGRAMACIN ORIENTADA A OBJETOS
10.4. HERENCIA
La programacin orientada a objetos tiene por objetivo la estructuracin de los
programas en clases; cada clase describe las caractersticas generales que un objeto
debe poseer. A partir de las clases definidas es posible tambin disear objetos
similares con nuevas particularidades; de esta forma surgen los conceptos de
subclases y herencia.
Al igual que ocurre con los objetos del mundo real, una clase de objetos puede ser
vista como una subclase de otra; de manera que hereda todas las propiedades
(variables y mtodos) de la superclase. Sin embargo, la verdadera utilidad de las
subclases es el permitir a estas la definicin de nuevas variables, la modificacin de
los mtodos heredados o la implementacin de nuevos mtodos.
Ejemplo 10.8:
Sobre el esquema de clases presentado en el Ejemplo 10.1 se podran realizar
algunas modificaciones. En primer lugar se podran definir varias subclases que
permitan clasificar las pelculas que el cine gestiona en funcin de su gnero
(Figura 10.5). As por ejemplo, las comedias constituyen una subclase de pelculas;
lo que significa que toda comedia tiene las caractersticas generales de una
pelcula, pero puede tener caractersticas propias de este gnero.
281
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
PELCULA
CLIENTE
VARIABLES: MTODO:
Nombre Adquirir entrada
Edad
Lista proyecciones
SOCIO
282
www.full-ebook.com
PROGRAMACIN ORIENTADA A OBJETOS
mtodos de la subclase
}
Ejemplo 10.9:
La definicin de las subclases plateadas en el Ejemplo 10.8 seran:
// constructor
function Socio($n,$e,$num){
$this->nombre = $n;
$this->edad = $e;
283
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
$this->lista_proyecciones = array();
$this->num_socio = $num;
$this->puntos = 0;
}
// implementacin de mtodos
function adquirir_entrada($proy) {
array_push($this->lista_proyecciones,$proy);
$this->puntos += 10;
}
function canjear_regalo(){
$p = $this->puntos;
if($p >= 100) {
print "Enhorabuena! Le obsequiamos con
nuestro regalo sorpresa!";
$this->puntos -= 100;
}
else{
$aux = 100-$p;
print "Le faltan $aux puntos para conseguir
un premio";
}
}
}
Como puede observarse, los objetos de esta subclase tienen todas las caractersticas
de la clase general Cliente (nombre, edad y lista_proyecciones), pero
adems poseen dos nuevos atributos: num_socio y puntos. Cuentan tambin
con el mismo mtodo adquirir_entrada(), pero definido de nuevo,
adaptndose as a las caractersticas de la subclase; en este caso, cada vez que se
adquiera una entrada se incrementar en 10 unidades el valor de la variable
puntos. La subclase incluye tambin un nuevo mtodo, canjear_regalo(),
que ser propio de los objetos de esta nueva clase.
284
www.full-ebook.com
COOKIES
Las cookies no fueron diseadas para espiar o invadir la privacidad de los usuarios
de Internet, su principal objetivo es identificar al usuario y poder de esta manera
preparar pginas personalizadas. Son muy prcticas tambin para almacenar
informacin como el nmero de visitas, preferencias, estado de conexin y, en
general, informacin que sirva para realzar la navegacin del cliente y permita
simular una conexin continua. Por ejemplo, gracias a las cookies el usuario podra
continuar la navegacin por un sitio web en el ltimo punto en el que lo dej en su
ltima conexin.
285
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
setcookie(nombre, valor)
y define una cookie con el nombre y valor indicados en los argumentos. En cierta
forma una cookie puede verse como una variable que tiene un identificador y un
valor asignado, de hecho, el nombre de la cookie se convertir en nombre de una
variable PHP cuando la cookie sea transferida desde el cliente al servidor.
Recordar de nuevo que el script que incorpore la llamada a la funcin anterior debe
ser colocado delante de cualquier comando HTML.
setcookie(nombre)
286
www.full-ebook.com
COOKIES
Ejemplo 11.1:
Supngase que se dispone de un formulario en el que se solicita al usuario que
escriba su nombre y que se desea que ese nombre pueda ser utilizado directamente
cuando el usuario visite otras pginas del servidor.
<HTML>
<HEAD><TITLE>Registro</TITLE></HEAD>
<BODY>
<H1>Registro como usuario</H1>
Introduzca su nombre:
<FORM ACTION="cookie.php" METHOD="GET">
<INPUT TYPE="text" NAME="nombre"><BR>
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
</BODY>
</HTML>
<?php
if (isset($nombre))
setcookie("nomusuario", $nombre);
?>
<HTML>
<HEAD><TITLE>Confirmacin</TITLE></HEAD>
<BODY> Muchas gracias por registrarte.
</BODY>
</HTML>
287
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Obsrvese que el script PHP que tiene la definicin de la cookie est colocado antes de
cualquier comando HTML, incluso antes del comando <HTML>. Adems se utiliza la
funcin isset() para asegurar que la variable $nombre tiene un valor asignado
correctamente desde el formulario. En el caso de que esta variable tenga un valor
asignado se est generando una cookie de nombre nomusuario y con el valor
introducido por el usuario en el formulario previo.
Tambin es posible definir varias cookies bajo un nombre comn, es decir, definir
arrays de cookies. Para ello se utiliza la notacin habitual de definicin de arrays
en PHP.
Ejemplo 11.2:
Imagnese que se desea guardar en un array de cookies las ltimas pelculas vistas
por cada cliente de Cinem@s, las cookies podran ser generadas de la siguiente
manera:
En este caso, cuando se recupere el valor de estas tres cookies, se obtendr una
variable de tipo array y de nombre $peliculas.
Ejemplo 11.3:
Supngase que el cliente que se registr en el formulario anterior, y para el que se
ha generado una cookie con su nombre, visita ahora una nueva pgina del servidor;
288
www.full-ebook.com
COOKIES
esta nueva pgina tendr acceso a una variable $nomusuario con la que podr
preparar un contenido personalizado:
<HTML>
<HEAD><TITLE>Cartelera</TITLE></HEAD>
<BODY>
<H1> Nuestra cartelera </H1>
<?php
if (isset($nomusuario))
echo "$nomusuario, nuestros estrenos para ti
son:";
else
echo "Por favor, regstrese";
?>
<TABLE>
.............
.............
.............
</TABLE>
</BODY>
</HTML>
Ejemplo 11.4:
En este nuevo ejemplo los procesos de generacin y de recuperacin de la cookie
tienen lugar en la misma pgina. Imagnese, que interesa en todo momento conocer
la fecha y hora del ltimo acceso de cada cliente a la pgina; esto podra realizarse
fcilmente con ayuda de una cookie que se almacene en cada cliente. El cdigo
completo de la pgina sera:
<?php
$v = date("d/m/Y \a \l\a\s H:i");
setcookie("visita", $v, time()+30*24*3600);
?>
<HTML>
<HEAD><TITLE>Pgina de inicio</TITLE></HEAD>
<BODY>
<H1>Bienvenido a nuestra pgina</H1>
<?php
if (isset($visita))
echo "La ltima vez que nos visitaste fue el $visita";
289
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
?>
....................................
....................................
</BODY>
</HTML>
Como puede verse, en primer lugar se genera una cookie con la fecha y hora de
acceso; este script est colocado antes de cualquier otro cdigo. En el segundo
script se utiliza esa cookie para escribir en la pgina el momento de ese ltimo
acceso.
Cuando un cliente accede a una pgina, el servidor solicita los valores de todas las
cookies antes de realizar cualquier otra operacin, una vez recibidos esos valores
comienza a procesar la pgina. Este hecho hace que la cookie generada en el
primer script no ser visible hasta la siguiente carga de la pgina, ya que en primer
lugar el servidor recibe las cookies generadas y posteriormente actualiza su valor
para la siguiente carga.
PHP dispone de una variable global de tipo array en la que siempre se encuentran
almacenadas todas las cookies que el servidor ha recibido del cliente, dicho array
es $HTTP_COOKIE_VARS y se trata de un array asociativo en el que el ndice de
cada elemento es el nombre de una cookie y el valor almacenado en el array el
valor de dicha cookie.
Ejemplo 11.5:
Si se ha definido una cookie de la siguiente manera:
$micookie
$HTTP_COOKIE_VARS["micookie"]
290
www.full-ebook.com
COOKIES
foreach($HTTP_COOKIE_VARS as $c) {
echo "$c <BR>";
}
while (list($n,$v)=each($HTTP_COOKIE_VARS)) {
echo "$n = $v <BR>";
}
A partir de la versin PHP 4.1.0 tambin se dispone del array de cookies definidas
en otra variable global de nombre $_COOKIE.
Si se desea que la cookie permanezca en el equipo del usuario cuando este cierre la
sesin, deber indicarse en su construccin un parmetro adicional con un periodo
de expiracin. En este caso la cookie quedar almacenada en un fichero de texto en
el equipo cliente hasta que expire el periodo establecido, momento en el que
automticamente desaparecer.
setcookie(nombre,valor,expiracion)
291
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Para borrar una cookie que tiene establecido un valor con periodo de expiracin
antes de que dicho periodo finalice, debe utilizarse la sintxis:
Ejemplo 11.6:
En este ejemplo se utiliza una cookie para almacenar en el equipo cliente el
instante de tiempo correspondiente al ltimo acceso a la pgina. El programa
comprobar si han transcurrido ms de 7 das desde ese ltimo acceso y en caso
afirmativo mostrar un mensaje avisando de ese hecho.
<?php
$ahora = time();
setcookie("ultima", $ahora, $ahora + 30*24*3600);
if(isset($ultima) and ($ahora - $ultima > 7*24*3600))
echo "Hace ms de una semana que no nos
visitabas"
?>
<HTML>
<HEAD><TITLE>Pgina de inicio</TITLE></HEAD>
<BODY>
<H1>Bienvenido a nuestra pgina</H1>
....................................
....................................
....................................
</BODY>
</HTML>
292
www.full-ebook.com
COOKIES
Ejemplo 11.7:
En este nuevo programa se utilizar una cookie para generar un contador de
accesos individuales de cada usuario. El nmero de accesos acumulados por el
usuario ser almacenado en una cookie de nombre nvis.
<?php
if(isset($nvis)) {
$nvis++;
setcookie("nvis", $nvis, time() + 30*24*3600);
} else {
setcookie("nvis", 1, time() + 30*24*3600);
$nvis=1;
}
?>
<HTML>
<HEAD><TITLE>Pgina de inicio</TITLE></HEAD>
<BODY>
<H1>Bienvenido a nuestra pgina</H1>
<?php
echo "Esta es tu visita n $nvis";
?>
....................................
....................................
</BODY>
</HTML>
293
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
294
www.full-ebook.com
MANEJO DE
FICHEROS
295
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
fopen(Nombrefichero, ModoApertura)
El nombre del fichero se indicar con la ruta relativa de acceso desde la pgina que
incorpora el script.
296
www.full-ebook.com
MANEJO DE FICHEROS
Ejemplo 12.1:
Si el fichero es abierto con la siguiente sentencia:
$f = fopen("Datos.txt", "r");
$f = fopen("Pruebas/comentarios.txt", "a");
Una vez abierto un fichero se realizarn sobre l las operaciones de lectura y/o
escritura y cuando ya no se utilice se debe proceder a cerrarlo. Para el cierre del
fichero existe una nueva funcin que recibe como argumento el identificador de
fichero que se genera en la operacin de apertura. Esta funcin es:
fclose(idfichero)
De esta manera, la estructura bsica de todo programa que trabaje con ficheros
sera:
297
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
$f = fopen("mifichero.txt", "a");
..........................
..........................
fclose($f);
fgets(idfichero)
Para saber si el apuntador interno del fichero ha alcanzado el final se puede utilizar
la funcin booleana feof().
Ejemplo 12.2:
El siguiente programa realiza una lectura lnea a lnea del contenido de un fichero
de texto y lo escribe en la propia pgina web:
<?php
$f = fopen ("datos.txt","r");
while(!feof($f)){
$linea=fgets($f);
print $linea."<BR>";
}
fclose($f);
?>
298
www.full-ebook.com
MANEJO DE FICHEROS
fgets(idfichero, n+1)
Con esta sintaxis la funcin leera, a partir del apuntador interno del fichero, n
caracteres o hasta alcanzar un fin de lnea, lo que antes ocurra.
fread(idfichero, n)
Esta funcin lee n caracteres del fichero o hasta alcanzar el fin del fichero (lo que
antes ocurra).
filesize(nombrefichero)
Ejemplo 12.3:
Si se desea transferir el contenido completo del fichero a una variable en un
programa PHP se podran realizar las siguientes operaciones:
<?php
$fnom = "/ficheros/mifichero.txt";
$f = fopen($fnom, "r");
$contenido = fread($f, filesize($fnom));
fclose($fd);
?>
Para una lectura completa del contenido del fichero en una sola operacin PHP
dispone tambin de la funcin file(). Una ventaja de esta funcin es que no
necesita realizar la apertura previa del fichero con fopen() ni el cierre con
fclose(). La funcin devuelve directamente una array de cadenas de caracteres
con cada una de las lneas del fichero.
299
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 12.4:
El siguiente programa utiliza la funcin file() para hacer una lectura completa
de un fichero en una sola operacin, y posteriormente recorre el array resultante
para mostrar su contenido en la pgina:
<?php
$contenido = file('datos.txt');
foreach($contenido as $linea) {
print $linea;
print "<BR>";
}
?>
fgetc(idfichero)
Ejemplo 12.5:
El siguiente programa realiza una lectura completa del fichero y copia en la pgina
nicamente aquellos caracteres que ocupan posiciones pares dentro del fichero.
<?php
$f = fopen("mifichero.txt","r");
$nc = 0;
while(!feof($f)){
$c = fgetc($f);
$nc++;
if ($nc % 2 == 0)
print $c;
}
fclose($f);
?>
300
www.full-ebook.com
MANEJO DE FICHEROS
fscanf(idfichero,formato)
fscanf(idfichero,formato,variables)
Las cadenas de formato de lectura incluyen una serie de codificaciones que sealan
el tipo de dato a leer. En concreto, los cdigos de formato son los que se muestran
en la siguiente tabla:
Ejemplo 12.6:
Supngase que Cinem@s dispone de un fichero de texto en el que guarda
informacin sobre sus clientes registrados; en concreto, el fichero contendr el
nombre de cada cliente, su edad y el gasto total realizado en el ltimo mes. El
contenido de este fichero podra ser:
Como puede apreciarse este fichero est constituido por diferentes lneas en las que
se muestra para cada cliente su nombre, su edad y el gasto total separados por
301
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
tabulaciones. La lectura de los datos necesita conocer esta estructura para poder
leer en cada operacin de lectura los tres datos de un cliente.
El programa PHP que realiza la lectura del fichero anterior y genera una lista
HTML a partir del contenido del mismo es:
<?php
$f = fopen("clientes.txt","r");
print "<UL>";
while ($datos = fscanf($f, "%s\t%d\t%f")) {
list($nombre, $edad, $gasto) = $datos;
print "<LI> $nombre de $edad aos ha realizado " .
" un gasto total de $gasto euros. <BR>";
}
print "</UL>";
fclose($f);
?>
El programa anterior lo primero que realiza es la apertura del fichero con permiso de
lectura. A continuacin genera la etiqueta HTML de inicio de lista y comienza el
bucle de lectura. En cada una de las iteraciones del bucle se realiza la llamada a la
funcin fscanf() para que lea, en este orden, una cadena de caracteres, un
tabulador, un nmero entero, otro tabulador y un nmero en coma flotante (cadena de
formato "%s\t%d\t%f"). Los tres valores ledos sern almacenados en el array de
nombre $datos. Cuando se alcance el final del fichero, y por tanto no existan ms
datos a leer, la funcin fscanf() devolver un valor booleano falso y por tanto el
bucle de lectura finalizar.
Dentro del cuerpo del bucle se utiliza la funcin list() para asignar valores a
tres variables ($nombre, $edad y $gasto) a partir de los tres valores que han
sido almacenados en el array $datos. Con esos tres valores de las variables se
genera el correspondiente tem de la lista.
En concreto, el resultado del programa anterior sera una lista como la siguiente:
302
www.full-ebook.com
MANEJO DE FICHEROS
Ejemplo 12.7:
Utilizando esta sintaxis alternativa, el programa del Ejemplo 12.6 podra escribirse
de la siguiente manera:
<?php
$f = fopen ("datos.txt","r");
print "<UL>";
while(!feof($f)){
$linea=fscanf($f,"%s\t%d\t%f",&$nombre,&$edad,&$gasto);
print "<LI> $nombre de $edad aos ha realizado " .
" un gasto total de $gasto euros. <BR>";
}
print "</UL>";
fclose($f);
?>
fwrite(idfichero, cadena)
fwrite(idfichero, cadena, numCaracteres)
303
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 12.8:
Programa que genera un fichero de texto con los 100 primeros nmeros pares:
<?php
$f = fopen("NumerosPares.txt","a");
for($i=1;$i<100;$i++) {
fwrite($f,2*$i."\t");
}
fclose($f);
?>
Ejemplo 12.9:
Utilizando las funcionalidades de lectura y escritura de ficheros en PHP se podra
crear en una pgina un sencillo contador de accesos. Bastara con generar un
fichero de texto cuyo contenido inicial sea el valor 0 e incluir el siguiente programa
en la pgina correspondiente:
<?php
$f = fopen("contador.txt","r+");
$c = fgets($f);
$c++;
rewind($f);
fwrite($f,$c);
fclose($f);
print "Nmero de visitas de esta pgina: $c";
?>
Para comenzar se debera disear un formulario HTML a travs del cual el usuario
har sus comentarios. El formulario puede estar formado por una simple rea de
texto y un botn de envo.
304
www.full-ebook.com
MANEJO DE FICHEROS
El aspecto final del formulario podra ser el que se muestra en la Figura 12.1 y su
cdigo:
<html>
<head><title>Comentarios</title></head>
<body>
Por favor, aydenos a mejorar. <br>
Cualquier comentario que quiera realizar sobre nuestra
empresa nos ser de utilidad
<form action="observaciones.php">
<textarea name="ob" rows=4 cols=30 >
</textarea>
<input type="submit" value="Enviar comentario">
</form>
</body>
</html>
<?php
$f=fopen("Comentarios.txt","a");
fputs($f,"-------------------\n");
$fecha = date("d/m/Y");
fputs($f,"Fecha: $fecha \n");
305
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
-------------------
Fecha: 12/10/2004
Comentario:
Deberan hacer un esfuerzo por mejorar la limpieza de los
aseos
-------------------
Fecha: 14/10/2004
Comentario:
La verdad es que todo ha estado perfecto. Enhorabuena!!!
copy(nombreOrigen, nombreDestino)
Los argumentos que recibe esta funcin son los nombres del fichero de origen y el
de destino. En el caso que estos se encuentren en un directorio diferente al del
documento base (el que contiene el programa PHP) debern indicarse los nombres
de los ficheros con sus respectivas rutas relativas. Cuando el fichero destino ya
existe, la operacin de copiado borrar el fichero existente.
Ejemplo 12.10:
Para realizar una copia de seguridad de un fichero cuyo nombre se encuentre en la
variable $nfichero, se podra utilizar la sentencia:
if (copy($nfichero, $nfichero.'.bak')) {
print ("Copia de seguridad realizada correctamente");
} else {
306
www.full-ebook.com
MANEJO DE FICHEROS
rename(nombreAntiguo, nombreNuevo)
unlink(nombreFichero)
file_exists(nombreFichero)
Ejemplo 12.11:
El siguiente formulario incluye uno de estos campos al que se le ha dado el nombre
fichero:
<FORM ENCTYPE="multipart/form-data"
307
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
ACTION="RecibirFichero.php" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="10000">
Fichero: <INPUT NAME="fichero" TYPE="file">
<INPUT TYPE="submit" VALUE="Enviar">
</FORM>
Como puede apreciarse, adems del campo de tipo file, el formulario incluye un
campo oculto que permite indicar el tamao mximo de los ficheros que se
permitir al usuario enviar (MAX_FILE_SIZE).
<?php
print "Fichero recibido";
rename($fichero,$fichero_name);
?>
308
www.full-ebook.com
BASES DE DATOS
RELACIONALES Y EL
LENGUAJE SQL
13.1. INTRODUCCIN
Las bases de datos constituyen hoy en da los elementos clave sobre los que se
apoyan los sistemas de informacin de empresas e instituciones. Una base de datos
podra definirse como una coleccin de datos interrelacionados que son
almacenados en un soporte informtico. Algunas razones que justifican su uso son
su capacidad para almacenar grandes volmenes de informacin, la optimizacin
de su gestin, la facilidad para realizar consultas y la exactitud, rapidez y fiabilidad
en su administracin.
309
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 13.1:
Un banco podra almacenar la informacin sobre sus clientes y los saldos en sus
cuentas bancarias mediante dos simples tablas:
Cada una de las filas de las tablas se suele denominar tupla o registro, y a su vez
est formada por una serie de valores cuyo tipo coincide con el del correspondiente
atributo.
En este caso, el atributo comn entre las dos tablas (N cuenta) es el que permite
relacionar los clientes con sus cuentas. Adems, lo normal es que cada tabla tenga
un atributo o conjunto de atributos cuyo valor identifique de forma nica a los
registros, este atributo es el que se denomina clave. En el caso de la tabla de
310
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
clientes, el atributo DNI es una clave, ya que es imposible que dos clientes distintos
tengan el mismo DNI.
En la definicin de una base de datos relacional se debe indicar claramente la
estructura de cada tabla, con los nombres y tipos de cada uno de sus atributos, as
como las diferentes claves y otras restricciones sobre los mismos.
El ejemplo anterior ilustra una situacin bastante simplificada que, por supuesto,
tiene algunos inconvenientes que podran ser superados con una mejor eleccin de
tablas. Por ejemplo, con el diseo anterior, cuando un cliente tiene ms de una
cuenta, tal como ocurre en este caso, se duplican sus datos. La utilizacin de una
tabla intermedia que sirva de enlace entre los DNI y los nmeros de cuenta evitara
este problema. En definitiva, el correcto diseo de una base de datos no es algo
trivial y requiere una cuidadosa planificacin. A este respecto existe una teora
bastante desarrollada sobre el diseo de bases de datos para evitar las redundancias
e inconsistencias: la teora de la normalizacin. No es el objetivo de este libro
profundizar en aspectos de diseo de bases de datos, aquel lector que est
interesado en estos temas puede acudir a la amplia bibliografa especfica.
311
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
1. Las pelculas.
2. Las salas disponibles.
3. Las proyecciones.
4. Las entradas.
5. Los clientes.
Cada una de las entidades se caracterizar por unos atributos, as cada pelcula
tiene un ttulo, un director, una lista de actores, un gnero, un ao de realizacin,...
A cada atributo se le asignar un tipo de datos concreto, as por ejemplo, el ttulo
de una pelcula puede ser tratado como una cadena de un mximo de 50 caracteres,
o el ao como un nmero entero.
Una vez establecidos los atributos de cada entidad, el siguiente paso es definir las
relaciones entre las tablas o entidades. La existencia de una relacin se concretar
en la inclusin como atributo en una tabla de la clave de la tabla relacionada. La
Figura 13.1 ilustra el modelo concreto de la base de datos que desarrollar,
incluyendo las entidades con sus atributos y tipos respectivos, y sus relaciones.
312
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Los atributos que en cada tabla aparecen sealados con las siglas PK (Primary
Key) corresponden a las claves de cada una de ellas. En cambio, los sealados con
FK (Foreign Key) corresponden a atributos que son claves en otras tablas (claves
forneas) y sirven para relacionar los registros de una tabla con los de la
subordinada.
Los atributos que tendr cada una de las entidades consideradas son descritos en detalle
en la Tabla 13.1 (entidad Pelculas), Tabla 13.2 (entidad Proyecciones), Tabla 13.3
(entidad Salas), Tabla 13.4 (entidad Entradas) y Tabla 13.5 (entidad Clientes).
313
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
ENTIDAD PELCULAS
Nombre de atributo Tipo de datos Descripcin
IDPELICULA Valor numrico que actuar de
Nmero entero
identificador de cada pelcula
TITULO Cadena de caracteres Ttulo de la pelcula
ACTORES Listado de actores de la pelcula que se
Cadena de caracteres
presentarn separados por comas
PRODUCCION Productor, o productores, en su caso, de
Cadena de caracteres
la pelcula
DIRECCION Cadena de caracteres Director o directores de la pelcula
GUION Cadena de caracteres Guionista o guionistas de la pelcula
ANNO Nmero entero Ao de realizacin de la pelcula
DURACION Nmero entero Duracin de la pelcula en minutos
NACIONALIDAD Cadena de caracteres Nacionalidad de la pelcula
Gnero de la pelcula elegido entre una
GENERO Cadena de caracteres serie de opciones predeterminadas:
drama, comedia, accin....
Opcin que establece restricciones de
EDAD_RESTRICCION Cadena de caracteres edad para los espectadores: apta, mayores
de 7, mayores de 13, mayores de 18
SINOPSIS Cadena de caracteres Breve resumen de la pelcula
CARTELERA Imagen del cartel promocional de la
Imagen
pelcula
Tabla 13.1 Atributos de la entidad Pelculas
ENTIDAD PROYECCIONES
Nombre de atributo Tipo de datos Descripcin
IDPROY Valor numrico que actuar de
Nmero entero
identificador de cada proyeccin
IDPELICULA Valor numrico que identifica la
Nmero entero
pelcula que se proyectar
NUM_SALA Nmero de la sala en donde se
Nmero entero
proyectar la pelcula
HORA Hora Hora de inicio de la proyeccin
FECHA Fecha Fecha de la proyeccin
Indica si la proyeccin tiene o no una
TARIFA_REDUCIDA Lgico(verdadero/falso) tarifa reducida, por ejemplo, sesiones
matinales, proyecciones especiales,...
ESTRENO Indica si la proyeccin es emitida como
Lgico(verdadero/falso)
estreno o no
Tabla 13.2 Atributos de la entidad Proyecciones
314
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
ENTIDAD SALAS
Nombre de atributo Tipo de datos Descripcin
NUM_SALA Valor numrico identificativo de cada
Nmero entero
sala
AFORO Nmero entero Nmero total de asientos de la sala.
NUM_FILAS Nmero entero Nmero total de filas de la sala
Cadena de caracteres que permitir
OBSERVACIONES Cadena de caracteres almacenar cualquier tipo de observacin
sobre la sala
Tabla 13.3 Atributos de la entidad Salas
ENTIDAD ENTRADAS
Nombre de atributo Tipo de datos Descripcin
NUM_ENTRADA Valor numrico que actuar de
Nmero entero
identificador de cada entrada
IDPROY Valor numrico que identifica la
Nmero entero
proyeccin correspondiente
FILA Nmero entero Nmero de fila de la entrada
NUM_ASIENTO Nmero entero Nmero de asiento de la entrada
NUM_CLIENTE Valor numrico que identifica al cliente
Nmero entero
que compra la entrada
315
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
13.4.1. INTRODUCCIN
SQL es un lenguaje de definicin y manipulacin de datos para bases de datos
relacionales. Es un lenguaje de definicin porque permite definir la estructura de
las tablas que componen la base de datos, y de manipulacin porque permite
efectuar consultas y realizar operaciones como insercin, borrado y actualizacin
de los datos que contiene.
316
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
El primer objeto a crear es la propia base de datos, para ello se utilizar el siguiente
comando:
Ejemplo 13.2:
Para crear la base de datos de la empresa Cinem@s que se utilizar a lo largo de los
prximos captulos, la sentencia es la siguiente:
317
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Todo objeto creado con la sentencia CREATE puede ser modificado con la
sentencia ALTER o destruido con la sentencia DROP, de manera que, si se quisiera
destruir la bases de datos anterior, la sentencia a utilizar sera:
Creacin de tablas
Una vez creada la base de datos, el paso siguiente es la creacin de la estructura de
cada una de sus tablas.
donde:
318
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Ejemplo 13.3:
El cdigo SQL que crea la tabla de la base de datos Cinem@s correspondiente a la
entidad Clientes sera:
En el cdigo anterior puede observarse cmo cada atributo tiene asociado un tipo
de dato; por ejemplo, el atributo NOMBRE ser una cadena de un mximo de 40
caracteres (VARCHAR(40)), el atributo NUM_CLIENTE tendr un valor numrico
de tipo entero en un rango pequeo (SMALLINT), o la fecha de nacimiento tendr
un valor de tipo fecha (DATE). En el captulo destinado al estudio del sistema
gestor MySQL se presentarn con detalle todos los tipos de datos admitidos.
319
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
atributo este tomar el valor por defecto. Tal como se aprecia en la definicin de la
tabla CLIENTES, el nico atributo que tiene valor por defecto es PUNTOS_ACUM,
siendo este valor 0; esto provoca que cuando se produzca el alta de un nuevo
cliente, su saldo de puntos acumulados sea 0, a no ser que se d otro valor.
Ejemplo 13.4:
A continuacin se incluye el cdigo SQL completo de generacin de todas las
tablas de la base de datos CINEMAS:
320
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Modificacin de tablas
Una vez creada una tabla, es posible su modificacin utilizando la sentencia
ALTER.
Ejemplo 13.5:
A continuacin se incluyen algunos ejemplos de usos de la sentencia ALTER para
modificar la tabla CLIENTES:
321
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Creacin de ndices
Otro de los aspectos a considerar a la hora de construir las tablas de la base de
datos es la posibilidad de definir ndices. Un ndice es un archivo estructurado que
facilita el acceso a los datos en las operaciones de bsqueda. Los ndices se deben
crear sobre aquellos atributos que suelen ser utilizados con frecuencia en las
bsquedas. Normalmente los sistemas gestores crean automticamente un ndice
sobre los atributos declarados como claves, y el programador puede optar por
aadir nuevos ndices, pero siempre con precaucin de no abusar de su uso, ya que
si se tienen demasiados ndices la gestin de los datos se hace ms costosa.
Los ndices son creados, como cualquier elemento, con la sentencia CREATE,
aunque con una sintaxis diferente.
Ejemplo 13.6:
A continuacin se incluyen dos ejemplos de creacin de ndices, uno sobre el
atributo FECHA de la tabla PROYECCIONES y otro sobre el atributo TITULO de
la tabla PELICULAS:
322
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Tambin es posible utilizar la sentencia ALTER para aadir un ndice a una tabla
creada previamente; por ejemplo:
Ejemplo 13.7:
En la tabla de PROYECCIONES se incluy un atributo (IDPELICULA) que haca
referencia a otro atributo, en este caso del mismo nombre, de la tabla PELICULAS.
En principio, si no se definen claves ajenas podra darse la situacin de existir una
proyeccin con un cdigo de pelcula inexistente en la tabla de pelculas, con la
correspondiente inconsistencia. La forma de evitar este problema es definir
precisamente en la tabla de proyecciones el correspondiente atributo como una
clave ajena que referencia a la tabla de pelculas. Como la tabla ya ha sido creada,
esta modificacin se puede realizar mediante la sentencia ALTER:
Otra posibilidad es definir las claves ajenas de cada tabla de la misma manera en la
que se definen las claves primarias en la propia definicin de la tabla.
Ejemplo 13.8:
La tabla de ENTRADAS podra haber sido definida incluyendo dos claves ajenas,
una referenciando a las proyecciones y otra a los clientes:
323
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 13.9:
Si una pelcula es dada de baja en la tabla PELICULAS, entonces se deberan
eliminar de la tabla de PROYECCIONES todos aquellos registros que hacan
referencia a esa pelcula. La forma en la que se indica esta necesidad de borrado en
cascada es:
En otros casos puede ser interesante que no se borren los registros relacionados y
que simplemente a los campos que han quedado con un valor no existente les sean
asignados el valor NULL, o incluso, que se queden con el valor inicial a pesar de su
inconsistencia. Para hacer esto, en la sentencia anterior debera cambiarse la
palabra CASCADE por SET NULL, en el primer caso, o NO ACTION, en el
segundo.
324
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
La sentencia INSERT permite aadir una o varias filas (registros) a una tabla. En
la prctica, para insertar datos en una base de datos se utilizan programas de
entrada orientados a formularios o rutinas que importan los datos desde ficheros o
documentos, realizando procesos iterativos de lectura de datos. Uno de los
objetivos finales que persigue este libro es poder realizar esas operaciones de
insercin desde una pgina web, para ello ser preciso utilizar las sentencias SQL
en programas PHP que a su vez estarn integrados en documentos HTML.
Con esta sintaxis, deben ser introducidos tantos valores como atributos de la tabla;
adems, los valores deben darse en el mismo orden en el que se encuentren
definidos los respectivos atributos. Por supuesto, los valores introducidos deben
coincidir con el tipo del correspondiente atributo.
SQL admite un valor especial, el valor NULL, que indica que el correspondiente
atributo est vaco en el registro insertado. nicamente pueden utilizarse estos
valores nulos sobre atributos que no tengan en su declaracin la clusula NOT
NULL.
Debe aclararse tambin que las filas de una tabla no estn ordenadas, por lo que no
es posible insertar una fila "al comienzo" o "al final" o "entre dos filas" de la tabla.
Ejemplo 13.10:
A continuacin se muestran dos ejemplos de insercin de registros en la tabla
SALAS y en la tabla CLIENTES:
Esta sentencia insertara una nueva sala, cuyo nmero correspondera al 1, con
capacidad para 300 personas, distribuidas en 15 filas y se incluira en el campo de
observaciones el hecho de tener una zona reservada para minusvlidos.
325
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 13.11:
Se podra insertar un nuevo cliente en la tabla con la sentencia:
Como puede observarse, en este caso no se dan valores para todos los atributos de
la tabla. En concreto, el atributo NUM_CLIENTE al no tener valor y haber sido
declarado como autoincremental, tomar automticamente como valor el nmero
siguiente al valor ms alto que se encuentre almacenado en la columna
NUM_CLIENTE de la tabla hasta ese momento. El atributo PUNTOS_ACUM, al no
habrsele dado ningn valor y tener definido uno por defecto, tomar
automticamente este ltimo (0 en este caso). Al resto de atributos a los que no se
326
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Ejemplo 13.12:
Se incluye a continuacin una sentencia que permitira dar de alta una nueva sala:
Ejemplo 13.13:
Si se dispone de una tabla adicional PELICULAS_TERROR para guardar en ella
todas las pelculas del gnero de terror con una estructura totalmente similar a la de
la tabla PELICULAS, estas podran insertarse con una sentencia como la que
sigue:
En este caso, el uso del signo "*" es una forma de indicar todos los atributos de la
tabla.
327
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Esta sentencia elimina de la tabla indicada todas las filas que cumplan la condicin
sealada. Si se suprime la clusula WHERE, se borrarn todas las filas de la tabla,
pero no la tabla; recurdese que la instruccin que destruye completamente la tabla
(datos y estructura) es DROP TABLE.
Ejemplo 13.14:
Las sentencias de eliminacin de registros seran:
Eliminacin de las entradas de las primeras 5 filas para la proyeccin nmero 231:
Las sentencias DELETE con condiciones simples permiten seleccionar las filas a
suprimir basndose nicamente en los propios contenidos de las filas. Sin embargo,
tambin es posible efectuar la seleccin de las filas a suprimir en base a los datos
contenidos en otras tablas.
Ejemplo 13.15:
Si se desea eliminar todas las proyecciones de la pelcula Refugio en el paraso, se
podra utilizar la sentencia:
328
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
En una misma sentencia se pueden actualizar los valores de varios atributos, indicando las
asignaciones separadas por comas.
Ejemplo 13.16:
Sentencias de actualizacin de registros seran:
Otorgar 100 puntos extra a todos los clientes que tengan un saldo de puntos
acumulados menor que 500:
Ejemplo 13.17:
Se desea establecer tarifa reducida para todas las proyecciones de pelculas rodadas
antes de 1990, la sintaxis de la sentencia sera:
329
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Toda consulta en SQL se realiza con la sentencia SELECT. Esta es sin duda la
sentencia ms poderosa y completa con la que cuenta el lenguaje SQL. Su sintaxis
completa es:
Todos los fragmentos que en esta sintaxis aparecen encerrados entre corchetes son
opcionales.
330
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Clusula FROM: en ella se indican, separadas por comas, las tablas que
contienen los datos que se desean recuperar en la consulta.
Clusula GROUP BY: permite obtener consultas resumen en las que todas
las filas similares son agrupadas y se genera una fila resumen para cada
grupo.
Ejemplo 13.18:
Si se quisiera recuperar todos los registros de la tabla PELICULAS, se debera
utilizar la sentencia:
331
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Una consulta SQL puede incluir columnas calculadas cuyos valores se obtienen a
partir de los valores de los datos almacenados.
Ejemplo 13.19:
Se desea listar las salas disminuyendo el aforo en un 10%, la sentencia para ello sera:
Eliminacin de duplicados
Si una consulta incluye la clave primaria de una tabla en su lista de seleccin,
entonces cada fila de resultados ser nica; en cambio, si no se incluye la clave en
la lista de seleccin pueden aparecer filas duplicadas en el resultado. Se pueden
eliminar las filas duplicadas en la consulta insertando la palabra clave DISTINCT
en la sentencia SELECT justo antes de la lista de seleccin.
Ejemplo 13.20:
Al seleccionar todos los directores de las pelculas de la tabla PELICULAS pueden
aparecer algunos de ellos duplicados (los que han dirigido varias pelculas), por
tanto habra dos opciones para esta consulta:
332
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Ejemplo 13.21:
Algunas consultas con condiciones de seleccin seran:
Obtener los ttulos de todas las pelculas de una duracin inferior a 120
minutos:
Generar un listado con los ttulos y directores de todas las pelculas en las que
participe Antonio Banderas:
Como se puede apreciar en estos ejemplos, el lenguaje SQL tiene una sintaxis muy
similar al lenguaje natural, y ofrece una gran capacidad expresiva para generar
consultas.
333
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 13.22:
Se desea generar un listado de clientes en orden decreciente segn el atributo de
puntos acumulados y en orden creciente segn el nombre, la sentencia sera:
Consultas multitabla
SQL permite tambin recuperar datos procedentes de diferentes tablas mediante
una nica sentencia SELECT, esto es lo que se conoce como "composicin".
Ejemplo 13.23:
A continuacin se presentan algunos sencillos ejemplos de consultas multitabla:
Se desea saber todas las fechas en las que se proyecta la pelcula El Seor de
los Anillos:
Se desea un listado con los nombres de todos los clientes que hayan adquirido
alguna entrada para ver la pelcula El Seor de los Anillos:
334
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
Consultas resumen
SQL permite resumir los datos mediante un conjunto de funciones denominadas
funciones de columna. Algunas de ellas son:
Ejemplo 13.24:
A continuacin se muestran ejemplos de consultas resumen:
Clculo de la suma de los puntos acumulados por los clientes nmero 321, 543,
287 y 721:
335
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Consultas agrupadas
Las consultas agrupadas o resumen producen una nica fila de resultados a modo
de "totales"; sin embargo, en ocasiones es interesante obtener resmenes parciales
o agrupados por categoras. Esto se consigue con la clusula GROUP BY.
Ejemplo 13.25:
Dos ejemplos de consultas agrupadas seran las siguientes:
Ejemplo 13.26:
Se desea obtener el nombre de todos los clientes que hayan adquirido 20 o ms
entradas; la forma de conseguirlo sera utilizando la sentencia:
336
www.full-ebook.com
BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL
337
www.full-ebook.com
www.full-ebook.com
EL SISTEMA GESTOR
DE BASES DE DATOS
MYSQL
14.1. QU ES MySQL?
MySQL es un sistema de administracin de bases de datos relacionales rpido,
slido y flexible. Es ideal para crear bases de datos con acceso desde pginas web
dinmicas, para la creacin de sistemas de transacciones on-line o para cualquier
otra solucin profesional que implique almacenar datos, teniendo la posibilidad de
realizar mltiples y rpidas consultas.
MySQL ofrece varias ventajas respecto a otros sistemas gestores de bases de datos:
Tiene licencia pblica, permitiendo no solo la utilizacin del programa sino
tambin la consulta y modificacin de su cdigo fuente. Resulta por tanto fcil
de personalizar y adaptar a las necesidades concretas.
El programa est desarrollado en C y C++, lo que facilita su integracin en
otras aplicaciones desarrolladas igualmente en esos lenguajes.
Puede ser descargado gratuitamente de Internet (http://www.mysql.com)
haciendo uso de su licencia GPL.
339
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Para aquellos que deseen que sus desarrollos basados en MySQL no sean
"cdigo abierto" existe tambin una licencia comercial.
MySQL utiliza el lenguaje SQL (Structured Query Languaje Lenguaje de
Consulta Estructurado) que es el lenguaje de consulta ms usado y
estandarizado para acceder a bases de datos relacionales. Soporta la sintaxis
estndar del lenguaje SQL para la realizacin de consultas de manipulacin,
creacin y de seleccin de datos.
Es un sistema cliente/servidor, permitiendo trabajar como servidor
multiusuario y de subprocesamiento mltiple, es decir, cada vez que se
establece una conexin con el servidor, el programa servidor crea un
subproceso para manejar la solicitud del cliente, controlando el acceso
simultneo de un gran nmero de usuarios a los datos y asegurando el acceso
solo a usuarios autorizados.
MySQL dispone de un sistema sencillo de ayuda en lnea, y de un monitor que
permite realizar todas las operaciones desde la lnea de comandos del sistema,
sin necesitar ningn tipo de interfaze de usuario grfica. Esto facilita la
administracin remota del sistema utilizando telnet.
Es portable, es decir, puede ser llevado a cualquier plataforma informtica.
MySQL est disponible en ms de veinte plataformas diferentes incluyendo las
distribuciones ms usadas de Linux, sistema operativo Mac X, UNIX y
Microsoft Windows.
Es posible encontrar gran cantidad de software desarrollado sobre MySQL o
que soporte MySQL. En concreto, son de destacar diferentes aplicaciones open
source para la administracin de las bases de datos a travs de un servidor web.
Todas estas caractersticas han hecho de MySQL uno de los sistemas gestores de
bases de datos ms utilizado en la actualidad, no solo por pequeas empresas sino
tambin por algunas grandes corporaciones, como puedan ser: Yahoo! Finance,
Google, CISCO, MP3.com, Motorola, NASA, Silicon Graphics, Texas
Instruments,... A mediados de 2004 se estimaba que existan ms de 5 millones de
instalaciones activas del programa.
340
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
C:\mysql\bin> mysqld
C:\mysql\bin> mysqlshow
+-------------+
| Databases |
+-------------+
| mysql |
| test |
+-------------+
Por supuesto, una vez detenido el servidor no se podr realizar ninguna operacin
sobre las bases de datos.
341
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Por supuesto, para garantizar la seguridad y privacidad de las bases de datos una de
las primeras operaciones que debera hacerse es el establecimiento de contraseas
para los usuarios, sobre todo para el usuario root, ya que al tener contrasea vaca
cualquier persona podra acceder con todos los privilegios. Igualmente, en el caso
de trabajar sobre Windows, se recomienda eliminar la cuenta de usuario invitado
con privilegios de superusuario.
342
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
C:\mysql\bin> mysql p
si se desea acceder con la cuenta de usuario root. En cualquiera de los dos casos,
el sistema solicitara la introduccin del password, que cmo se ha comentado,
inicialmente es vaco.
Enter password:
Mysql>
343
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Figura 14.1 Arranque del servidor de MySQL desde la lnea de comandos del sistema
mysql>
Cuando se desee salir del monitor de MySQL y regresar a la lnea de comandos del
sistema, se tendra que ejecutar la sentencia:
mysql> EXIT
o
mysql> QUIT
Dentro del monitor todas las sentencias SQL que se ejecuten debern
finalizar con un signo de punto y coma, las sentencias pueden ocupar
varias lneas y el uso de letras maysculas o minsculas es indiferente.
NOTA
Una vez dentro del monitor de MySQL, se pueden ejecutar directamente sentencias
SQL de manera interactiva.
344
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.1:
Como primera orden se podra solicitar un listado de las bases de datos disponibles:
Ejemplo 14.2:
Tambin se podra ejecutar una sencilla consulta de seleccin para solicitar al
servidor que muestre la fecha actual y la versin de MySQL que se encuentra
instalada:
Ejemplo 14.3:
Es posible realizar sencillas operaciones matemticas:
Ejemplo 14.4:
Tambin se puede solicitar que se muestre el usuario y la base de datos actual:
345
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Como se aprecia en esta ltima consulta, los usuarios quedan identificados por un
nombre formado por el nombre de usuario y la identificacin del servidor desde el
que se conectan separados por el signo '@'. En el caso de que el servidor desde el
que se conecta sea el mismo que el servidor en el que se encuentra instalado
MySQL, esta identificacin se limita al nombre localhost.
Ejemplo 14.5:
Si se desea usar la base de datos mysql (una de las dos bases de datos creadas por
defecto), la sentencia sera:
Una vez seleccionada la base de datos con la que se desea trabajar, todas las
operaciones posteriores irn dirigidas a ella, a no ser que explcitamente se seleccione
una nueva base de datos. Si se realiza de nuevo la seleccin de la base de datos actual
se podra apreciar cmo ahora s que aparece el nombre de la correspondiente base de
datos
La base de datos mysql consta de 6 tablas. Entre ellas destaca la tabla user, en
la que se incluyen todos los usuarios registrados por el sistema. Esta tabla contiene
no solo la informacin sobre los nombres, contraseas y servidores de los usuarios,
346
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
sino tambin un gran nmero de campos para establecer los diferentes privilegios
de cada usuario; por ejemplo, si los usuarios pueden crear nuevas bases de datos,
realizar operaciones de actualizacin, insercin, borrado,...
Ejemplo 14.6:
Si se desea consultar las tablas de la base de datos mysql se podra utilizar la
siguiente instruccin:
Cuando se desea ver una descripcin completa de la estructura de una tabla puede
usarse la instruccin DESCRIBE o SHOW COLUMNS.
Ejemplo 14.7:
Para mostrar la estructura de la tabla user, se podra utilizar cualquiera de las dos
sentencias siguientes:
De todos los atributos de la tabla user, los tres primeros (host, user y
password) identifican a cada usuario y los restantes establecen sus privilegios.
Por ejemplo, el atributo Insert_priv puede tomar el valor 'N' (no) o el valor
'Y' (yes), siendo el primero el valor por defecto, y determina si el usuario tiene o
347
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
348
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.8:
Si se desea obtener un listado con los nombres de usuario, contraseas y servidores de
todos los usuarios registrados, se podra realizar una simple consulta de seleccin:
En este momento pueden observarse los cuatro usuarios definidos por defecto, los
dos superusuarios root y los dos usuarios invitados.
Ejemplo 14.9:
La eliminacin de los usuarios de nombre vaco se hara de la siguiente manera:
349
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Sin embargo, se puede comprobar que si se sale del monitor (sentencia EXIT) y se
vuelve a entrar con usuario invitado (mysql p), el sistema permitira an el
acceso. La razn es que para que los cambios de usuario tengan efecto, el servidor
MySQL debe reiniciarse. La forma de reiniciar el servidor es mediante la ejecucin
del programa mysqladmin con la opcin reload desde fuera del monitor
MySQL. A continuacin se observa esta secuencia de operaciones:
mysql> exit
Bye
C:\mysql\bin>mysqladmin reload
C:\mysql\bin>mysql -p
Enter password:
ERROR 1045: Access denied for user: 'ODBC@localhost'
(Using password: NO)
C:\mysql\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22 to server version: 4.0.18-
nt
Como puede observarse, una vez eliminados los usuarios invitados y reiniciado el
servidor, la nica posibilidad sera entrar con el usuario root.
Ejemplo 14.10:
Si se desea establecer como password la cadena 'miclave' para el usuario root
cuando se conecte desde el propio servidor local, la sentencia sera:
350
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
En este ultimo caso se est asignando la contrasea al mismo tiempo para los dos
usuarios root (el que se conecta desde el servidor local y el que lo hace desde
cualquier otro servidor).
Cuando se modifica directamente la tabla user, para que los cambios tengan
efecto inmediato, debe decirse al sistema que vuelva a leer todas las tablas de
privilegios, de otra manera, los cambios no tendran efecto hasta que se reinicie el
servidor MySQL. Esto se realiza con la sentencia:
351
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Para que cualquier cambio relativo a usuarios y sus privilegios tenga efecto, es
necesario ejecutar la sentencia FLUSH PRIVILEGES o reiniciar el servidor
MySQL desde fuera del monitor. Esto ltimo puede hacerse usando el programa
mysqladmin:
Una vez establecida la contrasea del usuario root, se debera entrar de nuevo en
el monitor con la sentencia:
352
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.11:
Con la sentencia:
se crea un nuevo usuario que se podr conectar desde el propio servidor local, con
nombre de usuario operador y contrasea snoopy. Este usuario tendr los
privilegios establecidos por defecto, estos privilegios solo le permiten el uso de la
tabla test.
C:\mysql\bin>mysql -u operador -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 48 to server version: 4.0.18-
nt
Ejemplo 14.12:
Si se desea crear un nuevo usuario que tenga permisos solo para seleccionar e
insertar nuevos registros y que pueda conectarse desde cualquier servidor, la
sentencia de insercin debera ser:
353
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Con estos privilegios el usuario mantenimiento podra ver los datos almacenados
en cualquier tabla de cualquier base de datos y podra insertar nuevos registros e
incluso crear nuevas tablas para insertar registros en ellos. Lo que no podra hacer
son operaciones de modificacin de datos, eliminacin de registros, creacin de
nuevas bases de datos,...
Ejemplo 14.13:
Para ilustrar el proceso completo de creacin de la base de datos se tomar como
referencia la base de datos de los multicines Cinem@s que ya fue diseada en el
captulo anterior. El primer paso, por supuesto, es arrancar el monitor MySQL con
un usuario que tenga los privilegios necesarios. En este caso se utilizar el
superusuario root:
C:\mysql\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 48 to server version: 4.0.18-
nt
Una vez dentro, se debe crear la base de datos, utilizando para ello la sentencia
CREATE:
354
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Una vez creada, debe usarse la sentencia USE para seleccionarla como base de
datos activa.
Una vez creada la base de datos, lo siguiente es la creacin de las tablas que la
compondrn. La creacin de esas tablas se realiza con la correspondiente
instruccin SQL. Por ejemplo, una de las tablas de la base de datos de Cinem@s es
la que permitir guardar la informacin de todos los clientes; en concreto, la
creacin de esta tabla se hara de la siguiente manera:
355
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Los diferentes tipos de datos pueden ser clasificados en varios grupos o categoras:
numricos, cadena de caracteres, fecha y hora, conjuntos y enumeraciones,...
Los tipos numricos pueden, a su vez, ser de dos tipos: enteros y de coma flotante o
decimales. En ambos casos, existen diferentes opciones que permiten trabajar con
nmeros en diferentes rangos.
356
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Tipos Enteros
Nombre Rango Almacenamiento Descripcin
TINYINT -128 a 127 1 byte Entero pequeo
BIT 0o1 1 bit Entero 0 o 1
BOOL 0o1 1 bit Entero 0 o 1
SMALLINT -32768 a 32767 2 bytes Entero pequeo
MEDIUMINT -8388608 a 8388607 3 bytes Entero mediano
INT -2147483648 a 2147483647 4 bytes Entero normal
INTEGER -2147483648 a 2147483647 4 bytes Sinnimo de INT
BIGINT -9223372036854775808 a
8 bytes Entero grande
9223372036854775807
Tabla 14.2 Tipos de datos numricos enteros
Como puede apreciarse en la Tabla 14.2, existen varias posibilidades para trabajar
con tipos enteros, la eleccin concreta depender de lo que realmente se
almacenar en ese argumento; por ejemplo, si se desea definir un argumento para
guardar edades de personas, no parecera muy lgico utilizar el tipo INTEGER por
el enorme desperdicio de espacio en memoria que implicara.
Salvo en los tipos BIT y BOOL, en el resto de tipos de enteros se puede especificar
entre parntesis el nmero mximo de dgitos con el que se mostrar el
correspondiente nmero. El valor mximo de este parmetro es 255.
357
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.14:
Si se define un atributo:
los nmeros de las salas sern mostrados todos ellos con cuatro dgitos,
completando a la izquierda con ceros si fuese necesario.
PRECISION
REAL Sinnimos de double
358
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.15:
Si se define el atributo PRECIO de la siguiente manera:
En ambos casos, a la hora de definir un atributo con tipo CHAR o VARCHAR, debe
indicarse entre parntesis la longitud mxima que admitir. La longitud mxima
posible para esta cadena es, en cualquier caso, de 255 caracteres.
Ejemplo 14.16:
La forma de declarar un atributo NOMBRE para almacenar cadenas de longitud
variable de 20 caracteres como mximo sera:
NOMBRE VARCHAR(20)
359
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.17:
La declaracin:
Existen diferentes variaciones de los tipos TEXT y BLOB que afectan nicamente a
las longitudes mximas de las cadenas que admiten. En la Tabla 14.4 se incluyen
estas versiones junto con los otros tipos de cadenas analizados.
360
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Longitud mxima
Nombre Almacenamiento Descripcin
de caracteres
CHAR 1 1 bytes Un carcter.
361
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.18:
A continuacin se definen dos atributos, uno de tipo ENUM y otro SET:
SESION ENUM('matinal','tarde','noche')
PROY SET('L','M','X','J','V','S','D')
Debe destacarse que los tipos ENUM y SET son visualizados como si
fuesen cadenas de caracteres, pero internamente son tratados y
almacenados como valores numricos. Cada valor predeterminado tiene
asociado el valor numrico correspondiente a su posicin en la lista que
define el atributo. El hecho de que estos tipos de datos sean tratados
NOTA como nmeros hace que su tratamiento sea mucho ms rpido y eficaz
que el de las cadenas de caracteres.
Ejemplo 14.19:
Para MySQL cualquiera de las cadenas siguientes correspondera a la misma fecha:
el 31 de marzo de 1997:
'1997/3/31'
'1997-3-31'
19970331
Respecto a las horas, necesariamente debe usarse el signo ':' como separador o
bien indicar los dgitos correspondientes a las horas, minutos y segundos seguidos,
sin ningn separador. Por ejemplo, las 17 horas 5 minutos y 20 segundos se puede
expresar como:
'17:5:20'
170520
362
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Tamao de
Nombre Rango Descripcin
almacenamiento
1000-01-01 Almacena una fecha con el
DATE 3 bytes
9999-12-31 formato YYYY-MM-DD
3 bytes
-838:59:59 Almacena una hora con el
TIME
838:59:59 formato HH:MM:SS
8 bytes
1000-01-01 00:00:00 Almacena una fecha y una hora
DATETIME con el formato
9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS
El formato en el que son almacenados los instantes de tiempo depende del valor del
parmetro que se haya colocado entre parntesis en la definicin del
correspondiente atributo. La Tabla 14.6 muestra los diferentes formatos asociados a
los diferentes parmetros.
363
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
TIMESTAMP(14) AAAAMMDDHHMMSS
TIMESTAMP(12) AAMMDDHHMMSS
TIMESTAMP(8) AAAAMMDD
TIMESTAMP(6) AAMMDD
TIMESTAMP(4) AAMM
TIMESTAMP(2) AA
364
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Para trabajar con claves forneas es necesario que las dos tablas relacionadas sean
ambas definidas del tipo InnoDB, para ello se colocar al final de la tabla la
clusula:
TYPE = INNODB
365
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
para indicar el campo de la tabla primaria que se encuentra asociado con la clave
de la tabla relacionada. Por supuesto, ambos campos relacionados deben tener
asociado el mismo tipo de datos.
Ejemplo 14.20:
A continuacin se muestra el cdigo completo de creacin de la base de datos
Cinem@s haciendo uso de la integridad referencial:
366
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
EMAIL CHAR(30) ,
PUNTOS_ACUM SMALLINT NOT NULL DEFAULT 0 ,
CLAVE CHAR(6) NOT NULL ,
PRIMARY KEY (NUM_CLIENTE)) TYPE = INNODB;
Como puede observarse, todas las tablas han sido definidas del tipo InnoDB, y en
las tablas PROYECCIONES y ENTRADAS se definen dos claves forneas en cada
una con sus respectivos ndices.
Otra posibilidad para crear la base de datos con las restricciones de integridad
referencial es aadir las claves forneas y los ndices despus de crear todas las
tablas haciendo uso en este caso de la sentencia ALTER TABLE. El cdigo
completo correspondiente a esta alternativa se muestra a continuacin:
367
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
USE CINEMAS;
368
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.21:
Suponiendo que el fichero con las instrucciones de creacin de las tablas se llama
cinemas.sql y que se encuentra en el directorio raz, la creacin de la base de
datos se podra hacer de la manera siguiente:
369
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Por ejemplo, estos mensajes apareceran si se tratan de crear las claves forneas sin
crear los correspondientes ndices.
Si no se produce ningn error, se puede comprobar que las cinco tablas de la base
de datos habrn sido generadas correctamente:
Cuando se crea una tabla con una clave fornea MySQL asigna internamente un ID
que har referencia a la restriccin que establece sobre la tabla. Para conocer estos
ID se puede utilizar la instruccin SHOW CREATE TABLE.
370
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
+--------------+--------------------------------------------------------+
+--------------+--------------------------------------------------------+
| | CONSTRAINT `proyecciones_ibfk_2` |
| | CONSTRAINT `proyecciones_ibfk_1` |
| | ) TYPE=InnoDB |
+--------------+--------------------------------------------------------+
371
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
por ejemplo para eliminar la correspondiente clave fornea con la sentencia ALTER
TABLE. Por ejemplo, si se quisiese suprimir la clave fornea NUM_SALA se podra
ejecutar la sentencia:
Ejemplo 14.22:
En primer lugar se insertar una pelcula y dos salas en las respectivas tablas:
Una vez incluida la pelcula, cuyo identificador es 1, y las salas, con identificadores
1 y 2 respectivamente, es posible, por ejemplo, dar de alta una nueva proyeccin de
la pelcula 1 en la sala 2 para las 16:30 del da 16 de mayo de 2004; esta
proyeccin tendr como identificador el nmero 1:
En cambio, si se trata de insertar una nueva proyeccin que referencie a una sala
inexistente (sala 3) o una pelcula inexistente (pelcula 50), se produce una
violacin de las restricciones de integridad referencial, MySQL detecta esa
violacin, no incluye el registro y muestra un mensaje de error.
372
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.23:
MySQL no permitira borrar la pelcula 1 ni la sala 2 porque existen
proyecciones relacionadas que quedaran hurfanas en caso de producirse el
borrado. En cambio s es posible borrar la sala 1 ya que no tiene ninguna
proyeccin relacionada.
373
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.24:
Si se quisiera que los procesos de borrado se produjeran en cascada en la tabla de
proyecciones, lo primero que se debera hacer es modificar la definicin de sus dos
374
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
De esta forma, a partir de ahora cada vez que se suprima una pelcula o una sala,
automticamente se eliminarn todas las proyecciones de esa pelcula o que tengan
lugar en esa sala.
375
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Con tres sencillas consultas de seleccin se podra consultar el contenido de las tres
tablas en este momento.
376
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Por ejemplo, se desea eliminar la pelcula Piratas del Caribe (cuyo identificador es
10); la sentencia sera:
377
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
378
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.25:
mysql> ALTER TABLE PROYECCIONES
-> DROP FOREIGN KEY proyecciones_ibfk_4;
Query OK, 1 row affected (0.30 sec)
Records: 1 Duplicates: 0 Warnings: 0
379
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.26:
A continuacin se muestra el funcionamiento de la actualizacin en cascada. En
primer lugar se puede observar que la tabla SALAS incluye dos registros, uno de
los cuales (el correspondiente a la sala 1) se encuentra relacionado con un registro
de la tabla PROYECCIONES:
380
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
381
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.27:
Supngase que se dispone de un fichero de texto que contiene la siguiente
informacin:
1 Luis Lpez Floranes 54, Santander 1970-3-31 942221133 llopez@coldmail.com 0 llp70
2 Mara Anta San Juan 22, Oviedo 1981-11-22 686776612 manta@tumail.com 0 as23b
3 Ana Palacios San Andrs 39, Madrid 1968-5-1 null apm55@tumail.com 0 aaa45b
4 Valeria Vzquez Moro 120, Almera 1990-2-13 645162377 vv90@coldmail.com 0 basw25
Como puede apreciarse, cada una de las lneas del fichero contiene los datos
correspondientes a un registro de la tabla CLIENTES, coincidiendo en nmero y
tipo los respectivos datos con los atributos de esa tabla, y estando separados los
datos por tabuladores.
Una vez disponible el fichero anterior, desde la lnea de comandos del sistema (no
desde dentro del monitor de MySQL) se hara una llamada a la utilidad
mysqlimport indicando, por este orden, el nombre de usuario para conectarse al
servidor, el parmetro para solicitar la contrasea, el nombre de la base de datos de
destino y el nombre y ruta del archivo de texto:
Entrando al monitor de MySQL se observa que los datos han sido correctamente
importados.
C:\mysql\bin>mysql -u root -p
Enter password: *******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 97 to server version: 4.0.18-
nt
382
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Otra alternativa para importar datos que se encuentren en ficheros de texto es el uso
del comando LOAD DATA INFILE del monitor de MySQL. Para poder hacer uso
de este comando, a diferencia del caso anterior, se debe estar ya dentro del monitor
de MySQL, e incluso es posible su uso desde aplicaciones programadas al efecto.
383
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Ejemplo 14.28:
Supngase que se desea incluir en la tabla SALAS los 7 registros que se
encuentran en un fichero de texto llamado relacionsalas.txt y cuyo
contenido es:
El parmetro opcional REPLACE indica que en caso de que ya existan registros con
la misma clave en la tabla destino, estos deben ser reemplazados. De igual manera,
se utiliza otro parmetro opcional (FIELDS TERMINATED BY) para indicar el
separador de campos.
Con una consulta SELECT se puede comprobar que los datos han sido
correctamente importados:
384
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
385
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
La generacin de este fichero debe hacerse desde la lnea de comandos del sistema,
utilizando la sintaxis siguiente:
Si despus del nombre de la base de datos se indica el nombre de una de sus tablas,
el fichero generado nicamente contendr la definicin de esa tabla y las sentencias
de insercin de sus registros.
Ejemplo 14.29:
Se puede generar un fichero de respaldo de la tabla clientes de la siguiente manera:
Ejemplo 14.30:
mysql> USE CINEMAS;
Database changed
Con esta instruccin se generara un fichero de texto con los nombres y puntos
acumulados de todos los clientes, siendo el contenido del fichero el siguiente:
386
www.full-ebook.com
EL SISTEMA GESTOR DE BASES DE DATOS MYSQL
Ejemplo 14.31:
Tambin es posible indicar una condicin de seleccin de registros, en este caso se
obtienen los nombres de todos los clientes de Santander:
387
www.full-ebook.com
www.full-ebook.com
PHPMYADMIN:
ADMINISTRACIN DE
BASES DE DATOS
MYSQL DESDE LA
WEB
15.1. INTRODUCCIN
La administracin y gestin de las bases de datos de MySQL mediante el propio
monitor de MySQL resulta en ocasiones un tanto laboriosa, especialmente para
aquellos usuarios acostumbrados al uso de herramientas con interfaz grfica de usuario.
389
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Por supuesto, para poder hacer uso de esta aplicacin de administracin de MySQL
es necesario disponer de un servidor web con un intrprete de PHP, ya que todas las
pginas estn escritas en ese lenguaje. Adems es preciso establecer los valores de
diferentes parmetros de configuracin que se encuentran dentro del fichero
config.inc.php alojado en el directorio que contiene todas las pginas que
componen la aplicacin. Dos de estos parmetros seran PmaAbsoluteUri, que
permite indicar el URL que identifica la localizacin exacta de la aplicacin, y
auth_type, que permite indicar el tipo de autentificacin que se utilizar (existen
tres opciones: autentificacin basada en cookies, basada en http o inclusin en el
fichero de configuracin de los datos de usuario).
En el caso de tener instalado el servidor web sobre el propio equipo (localhost) que
se utilizar para la administracin, se deber escribir en la barra de direcciones del
navegador:
http://localhost/phpmyadmin/
Para ello es necesario tambin que el servidor web tenga configuradas las pginas
index.php como pginas de inicio de directorio.
390
www.full-ebook.com
PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB
391
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
392
www.full-ebook.com
PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB
Una vez seleccionada una base de datos en esta lista, el marco de la derecha de
la ventana mostrar la estructura de dicha base de datos. Por ejemplo, al
seleccionar la base de datos de Cinem@s, la ventana del navegador tendr el
aspecto que muestra la Figura 15.3.
Mediante los enlaces grficos que aparecen delante de cada registro se podrn
editar sus campos o borrar el registro completamente. Adems, pulsando sobre los
nombres de los campos que aparecen en las cabeceras de las columnas se puede
variar el orden en el que se muestran los registros (orden ascendente o descendente
sobre ese campo).
393
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
394
www.full-ebook.com
PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB
395
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
En la parte inferior del formulario existen dos botones de opcin que permiten
especificar si se desea aadir un nuevo registro o simplemente volver a la
estructura de la base de datos.
396
www.full-ebook.com
PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB
Adems, para el caso de campos de tipo blob, preparados para recibir cualquier
tipo de archivo, el formulario permite directamente examinar el contenido del
equipo y seleccionar el archivo a almacenar en la tabla. Este es el caso del campo
CARTELERA de la tabla de PELICULAS (Figura 15.12).
397
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
La siguiente accin que se puede realizar sobre las tablas es la de ver sus
propiedades. En este caso se mostrar la estructura de la tabla, con los nombres y
tipos de sus argumentos, as como cualquier otra propiedad de la misma establecida
en tiempo de diseo (claves primarias, atributos no nulos, valores predeterminados,
ndices,...). A travs de esta opcin no solo es posible consultar las propiedades de
la tabla sino tambin modificarlas. La prxima seccin mostrar detalladamente las
distintas opciones accesibles desde la pgina de propiedades.
Finalmente, las dos ltimas acciones a realizar sobre las tablas son las de eliminar
y vaciar. La eliminacin borra la tabla completa (sentencia DROP TABLE),
mientras que el vaciado nicamente borra los registros que contiene la tabla pero la
mantiene vaca en la base de datos (sentencia TRUNCATE).
Cuando se trabaja en MySQL con tablas que soporten la integridad referencial, las
operaciones de eliminacin de tabla o de vaciado de registros solo son permitidas
cuando no se estn utilizando en otras tablas vinculadas.
398
www.full-ebook.com
PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB
Para analizar la estructura de una de las tablas se puede pulsar sobre el enlace
correspondiente que aparece en el marco izquierdo de la pgina principal (Figura
15.14).
Al hacerlo, se accede a una pgina similar a la que aparece cuando se consultan las
propiedades de una tabla. En la parte superior de esa misma pgina aparecen una
serie de enlaces adicionales que permiten realizar todo tipo de acciones sobre la
tabla: examinar sus registros, ejecutar sentencias SQL, generar consultas de
seleccin, insertar nuevos registros, exportar datos, cambiar el nombre de la tabla,
cambiar su ubicacin,... Algunas de estas acciones pueden realizarse tambin a
travs de la pgina que muestra la estructura completa de la base de datos.
Al seleccionar una tabla, la pgina muestra por defecto sus propiedades, tal como
se ve en la Figura 15.15, para el caso de la tabla CLIENTES.
399
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
400
www.full-ebook.com
PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB
401
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
El siguiente paso, ser definir los 7 campos de la tabla; para ello phpmyadmin
muestra un nuevo formulario en el que este proceso se realiza de forma intuitiva
(Figura 15.20). El formulario permite indicar los nombres de los campos, sus tipos,
402
www.full-ebook.com
PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB
403
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Para importar todos esos datos a la tabla de empleados se tendra que pulsar sobre
el enlace Insertar archivo de texto en la tabla que aparece al final de la pgina que
muestra la estructura de la correspondiente tabla. Al hacerlo se accede al
formulario que muestra la Figura 15.22, en l se debe especificar el fichero fuente
de los datos y los diferentes caracteres que actuarn de separadores de campos y de
registros.
404
www.full-ebook.com
PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB
Para exportar una base de datos debe activarse el enlace Exportar que aparece en la
pgina de inicio de phpmyadmin. Al hacerlo se accede a una nueva pgina en la
que en primer lugar habra que seleccionar la o las bases de datos que se desean
exportar y el formato de exportacin (Figura 15.24).
405
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
CSV para Excel: se generara un fichero de texto con los contenidos de las
tablas de la base de datos en formato CSV (valores separados por comas). Este
formato puede ser ledo directamente por Excel para mostrar los contenidos de
las tablas en una hoja de clculo.
Datos CSV: exporta los datos de las tablas a formato CSV, pero en este caso se
permite que el usuario elija los caracteres delimitadores de campo y de registro,
los caracteres de fin de lnea y los valores a utilizar para reemplazar los valores
nulos.
406
www.full-ebook.com
PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB
407
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
concreta, una tabla, o incluso una sola columna de una tabla, estos privilegios
quedan reflejados en sendos registros de las tablas: db, tables_priv y columns_priv.
408
www.full-ebook.com
PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB
409
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
410
www.full-ebook.com
PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB
Lo primero ser crear el nuevo usuario sin asignarle ningn privilegio global. El
proceso es idntico al realizado con el usuario anterior. A continuacin, de nuevo,
se sealar que se desea definir privilegios especficos para la base de datos
cinemas, en el formulario correspondiente, no se sealar ningn privilegio
especfico para la base de datos y se indicar la tabla sobre la que s se desean
definir privilegios, tal como puede verse en la Figura 15.30.
Tras sealar la tabla PELICULAS, se accede a una nueva pgina (Figura 15.31) en
la que es posible indicar las acciones que el usuario podr realizar sobre las
diferentes tablas e incluso sobre los diferentes campos de cada tabla. En el caso
anterior se est indicando que el usuario podr efectuar operaciones de seleccin,
insercin, actualizacin y borrado sobre todos los campos de la tabla de pelculas.
Pulsando el botn Contine estos privilegios quedarn registrados en la base de
datos mysql.
411
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Para que todos los cambios realizados sobre los usuarios tengan efecto
sobre MySQL, suele ser conveniente reiniciar el servidor de MySQL. Para
NOTA realizar esta accin, en la pgina de inicio de phpmyadmin hay un enlace:
Reinicio de MySQL.
Tras todos los procesos realizados, en la tabla user de la base de datos mysql habr
dos nuevos registros correspondientes a los dos nuevos usuarios; en la tabla db
aparecer un nuevo registro en el que se indica que el usuario cinemasadmin tiene
todos los privilegios sobre la base de datos cinemas; y finalmente, en la tables_priv
habr un nuevo registro en el que se indican los privilegios del usuario
pelculas_op sobre la tabla pelculas de la base de datos cinemas.
412
www.full-ebook.com
CONECTIVIDAD A
BASES DE DATOS
MYSQL DESDE PHP
16.1. INTRODUCCIN
El elemento esencial en todo proceso de generacin de pginas web dinmicas es la
conectividad con aplicaciones de gestin de bases de datos. Muchas de las pginas
que se pueden encontrar en Internet se generan como resultado de una consulta a
una base de datos. En estos casos es preciso utilizar el lenguaje de consulta de las
bases de datos relacionales (SQL) embebido dentro de un lenguaje de
programacin que permita generar esas pginas. En este captulo se mostrar cmo
es posible realizar este proceso usando el lenguaje PHP y cmo la conectividad a
bases de datos en MySQL se caracteriza por su sencillez y efectividad.
Al igual que en los captulos precedentes, el objetivo no ser una mera descripcin
de las diferentes funciones de conexin y de sus sintaxis; ms bien se tratar de
mostrar su funcionamiento a travs de sencillos ejemplos tomando como referencia
el sitio web Cinem@s que se viene desarrollando a lo largo del libro. Usando PHP
413
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
En PHP las funciones de conectividad son especficas del gestor de bases de datos al
que se realiza la conexin. As por ejemplo, para abrir una conexin con una base de
datos MySQL se utiliza la funcin mysql_connect() mientras que si se desea
abrir la conexin con una base de datos Oracle debe utilizarse la funcin
Ora_Open(). Los nombres de todas las funciones PHP relativas a conectividad a
bases de datos comienzan por un prefijo identificativo del gestor al que se dirigen.
Por ejemplo, los nombres de las funciones de conexin a algunos de los gestores de
bases de datos ms conocidos siguen los siguientes patrones:
Funciones de conectividad con MySQL: mysql_nombrefuncion
Funciones de conectividad con Oracle: Ora_nombrefuncion
Funciones de conectividad con Informix: ifx_nombrefuncion
Funciones de conectividad con dBase: dbase_nombrefuncion
Funciones de conectividad con Ingres: ingres_nombrefuncion
mysql_connect(servidor,usuario,contrasea)
Los tres parmetros anteriores permiten identificar el servidor sobre el que est
instalado MySQL, y el nombre de usuario y contrasea necesarios para conectarse.
Por supuesto, estos dos ltimos datos deben coincidir con los de un usuario
registrado en MySQL.
414
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
mysql_close(identificador)
Como puede apreciarse, en primer lugar se realiza la conexin con el servidor local
y utilizando como nombre de usuario root y contrasea miclave. Se asigna el
identificador de la conexin a la variable $c, y se comprueba si su valor es distinto
415
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
mysql_pconnect(servidor,usuario,contrasea)
El cierre de las conexiones persistentes debe realizarse con una funcin especial:
mysql_pclose(identificador)
mysql_select_db(nombreBD, identificador)
416
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
Ejemplo 16.1:
La siguiente estructura aborta el programa si no se puede seleccionar la base de
datos cinemas:
$c = mysql_connect("localhost","root","miclave");
$bd = mysql_select_db("cinemas",$c);
if(!$c) {
die("Base de datos no existente");
}
Una vez seleccionada la base de datos, esta pasa a ser la base de datos activa, y
cualquier operacin posterior se dirigir a ella. En cualquier momento, mientras la
conexin permanezca abierta, puede cambiarse la seleccin de la base de datos
activa con una nueva llamada a la funcin mysql_select_db().
mysql_query(sentencia, identificador)
417
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Existe otra funcin similar que permite ejecutar sentencias sobre cualquier base de
datos, en este caso debe indicarse adems de la sentencia y el identificador de
conexin, el nombre de la base de datos a la que se dirige la consulta:
Ejemplo 16.2:
Supngase que se desea aadir un nuevo atributo a la tabla clientes de la base de
datos cinemas para guardar el NIF de cada cliente. Esta sencilla modificacin
podra realizarse desde un programa PHP como el siguiente:
$c = mysql_connect("localhost","root","miclave");
if(!$c) {
die("Conexin fallida");
}
$ok = mysql_select_db("cinemas",$c);
if(!$ok) {
die("Error en la seleccin de la base de datos");
}
$consulta =
"ALTER TABLE clientes ADD NIF VARCHAR(9) NOT NULL";
$resultado = mysql_query($consulta,$c);
if($resultado) {
print("Tabla actualizada");
} else {
print("No se ha podido actualizar la tabla");
}
mysql_close($c);
$c = mysql_connect("localhost","root","miclave")
or die("Conexin fallida: " . mysql_error());
mysql_select_db("cinemas",$c)
or die("Error en la seleccin: " . mysql_error());
$consulta =
418
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
419
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Fichero clientes.html:
420
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
Cuando el usuario pulse el botn Enviar, los datos introducidos por este llegarn al
fichero nuevocliente.php a travs de variables del mismo nombre que el de los
campos correspondientes. Se asume que esos valores han sido validados en el cliente
antes de ser remitidos al servidor (por ejemplo, mediante un script en JavaScript). A
partir de los valores recibidos el programa PHP debe generar la correspondiente
sentencia INSERT que se dirigir a la base de datos cinemas.
421
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Fichero configuracin.inc:
<?
$host = "localhost";
$usuario = "cinemasadmin";
$password = "miclave";
$db = "cinemas";
?>
En cualquier otra pgina del sitio en la que se requiera hacer uso de esas variables
de configuracin, bastara incluir la sentencia:
require('configuracion.inc');
Fichero nuevocliente.php:
<HTML>
<HEAD>
<TITLE>Registro de nuevo cliente</TITLE>
</HEAD>
<BODY>
<?php
// comprobacin de la recepcin de las variables
if (isset($nombre,$nif,$pass1)) {
// carga de las variables de configuracin
// y realizacin de la conexin
require('configuracion.inc');
$c = mysql_connect($host,$usuario,$password)
or die("Error: " . mysql_error());
422
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
mysql_select_db($db,$c)
or die("Error: " . mysql_error());
423
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
mysql_fetch_row(resultado)
424
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
Cada vez que se produce la llamada a esta funcin se genera un array con los
valores de una de las filas de la tabla de resultados. Mediante un bucle de llamadas
sucesivas se podrn recorrer todas las filas que constituyen el resultado. Cuando no
hay ms filas por leer, la funcin devuelve un valor nulo que puede ser utilizado
como indicador de finalizacin del bucle.
mysql_num_rows(resultado)
Esta funcin devuelve una valor entero indicando el nmero de filas del resultado.
mysql_affected_rows()
que devuelve el nmero de registros que se han visto afectados por la ltima
consulta realizada de insercin, actualizacin o borrado.
425
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Fichero accesocliente.php:
<HTML>
<HEAD><TITLE>Pgina personal</TITLE></HEAD>
<BODY>
<TABLE WIDTH="100%" BORDER BGCOLOR=#99CCFF>
<TR>
<TH WIDTH="16%">
<A HREF="principal.htm">Pgina principal</A></TH>
<TH WIDTH="17%">
<A HREF="proyecciones.htm">Nuestra cartelera</A></TH>
<TH WIDTH="17%">
<A HREF="salas.htm">Nuestras salas</A></TH>
<TH WIDTH="17%">
<A HREF="entradas.htm">Compra de entradas</A></TH>
<TH WIDTH="17%">
<A HREF="estrenos.htm">Prximos estrenos</A></TH>
<TH WIDTH="16%">
<A HREF="foros/index.php">Foro Cinem@s</A></TH>
</TR>
</TABLE>
<BR>
<?php
// comprobacin de la recepcin de las variables
if (isset($numcliente,$pass)) {
// carga de las variables de configuracin
// y realizacin de la conexin
require('configuracion.inc');
$c = mysql_connect($host,$usuario,$password)
or die("Error: " . mysql_error());
mysql_select_db($db,$c)
or die("Error: " . mysql_error());
// comprobacin de peticin de modificacin de datos
if(isset($modificar)) {
// generacin de la consulta de actualizacin
$consulta = "UPDATE CLIENTES SET
NOMBRE = '$nombre',
NIF = '$nif',
DIRECCION = '$direccion',
FECHANAC = '$fecha',
TELEF = '$telefono',
EMAIL = '$email',
CLAVE = '$pass'
WHERE NUM_CLIENTE = $numcliente";
// ejecucin de la consulta
$resultado = mysql_query($consulta,$c);
426
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
if ($resultado)
print "<CENTER><I>
Datos actualizados</I></CENTER>";
}
// generacin de la consulta de seleccin a partir
// de las variables del formulario
$consulta = "SELECT * FROM CLIENTES WHERE
NUM_CLIENTE=$numcliente";
// ejecucin de la consulta
$resultado = mysql_query($consulta,$c);
// comprobacin existencia de algn registro
resultado
if(mysql_num_rows($resultado)) {
// se recupera el registro resultado en un array
$registro = mysql_fetch_row($resultado);
// obtencin del password real del cliente en la
BD
//(octavo campo del registro: ndice 7)
$passwordreal = $registro[7];
// comprobacin de la validez del password
if ($pass == $passwordreal) {
mostrarpagina($registro);
}
else {
// denegar acceso
print "<H2 ALIGN=center>
Contrasea incorrecta</H2>";
}
} else {
// ningn registro coincide con el nmero de
cliente
print("<H2 ALIGN=center>
Error en la identificacin</H2>");
}
// cierre de la conexin
mysql_close($c);
}
?>
<?php
// funcin que genera la pgina personal
function mostrarpagina($datos) {
print "<H2 ALIGN=center> Pgina de $datos[1] </H2>";
print "<CENTER>";
print "<FORM ACTION=accesocliente.php METHOD=post>";
print "<TABLE WIDTH=80% BORDER BGCOLOR=#99CCFF>
<TR>
427
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
428
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
<TD>
<INPUT TYPE=text SIZE=9 NAME=nif
VALUE='$datos[8]'>
</TD>
</TR>
</TABLE>";
print "<INPUT TYPE=hidden NAME=modificar VALUE=1>
<INPUT TYPE=hidden NAME=numcliente
VALUE=$datos[0]>
<BR><INPUT TYPE=submit VALUE=Actualizar>
</FORM>";
print "<H3 ALIGN=center> A fecha de hoy tienes un total
de $datos[6] puntos acumulados </H3>";
print "</CENTER><BR>";
}
?>
<HR>
<A HREF="clientes.htm">Volver al rea de clientes</A>
</BODY>
</HTML>
Este archivo comienza con el cdigo HTML que genera una pequea barra de
navegacin en la pgina para que el usuario pueda desplazarse a otras pginas del
sitio web. Tras este cdigo HTML aparece el programa PHP encargado de la
generacin del contenido de la pgina personal. Este programa comienza
comprobando si se han recibido las variables correspondientes al nmero de cliente
y clave de acceso desde el formulario previo.
La pgina ha sido diseada para que permita tambin actualizar los datos del
cliente, de manera que se utilizar una variable $modificar que tomar el valor
1 cuando se acceda a la pgina despus de una peticin de actualizacin de datos.
En el caso de acceder directamente desde el formulario del rea de clientes, esta
variable no estar definida.
429
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
El aspecto final de la pgina personal del cliente que es generada con este
programa es el que puede verse en la Figura 16.2.
430
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
mysql_fetch_array(resultado)
mysql_fetch_array(resultado, tipo_asociacin)
mysql_fetch_assoc(resultado)
431
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Adems, debe destacarse que no se aprecian diferencias significativas con las otras
dos funciones en cuanto a tiempo de ejecucin.
Esta pgina incorpora en su parte inferior un enlace que dar acceso al programa
que realiza la conexin a la base de datos para recuperar todos los registros de la
tabla salas. El enlace se encuentra definido de la siguiente manera:
432
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
Fichero listadosalas.php:
<HTML>
<HEAD><TITLE>Salas disponibles</TITLE></HEAD>
<BODY>
<?php
// carga de las variables de configuracin
// y realizacin de la conexin
require('configuracion.inc');
$c = mysql_connect($host,$usuario,$password)
or die("Error: " . mysql_error());
mysql_select_db($db,$c)
or die("Error: " . mysql_error());
// generacin de la consulta de seleccin
$consulta = "SELECT * FROM SALAS";
// ejecucin de la consulta
$resultado = mysql_query($consulta,$c);
if ($resultado) {
print "<H2 ALIGN=center>
Listado de salas disponibles</H2>";
// se recorren todos los registros del resultado
print "<TABLE WIDTH=100% BORDER>
<TR> <TH>Numero de sala</TH>
<TH>Aforo</TH>
<TH>Nmero de filas</TH>
<TH>Observaciones</TH> </TR>";
$cont = 0;
while($sala = mysql_fetch_array($resultado)){
$cont++;
$nsala = $sala['NUM_SALA'];
$aforo = $sala['AFORO'];
$nfilas = $sala['NUM_FILAS'];
$observaciones = $sala['OBSERVACIONES'];
if ($cont%2==0)
echo("<TR ALIGN=center BGCOLOR='#99CCFF'>\n");
else
echo("<TR ALIGN=center BGCOLOR='#3399FF'>\n");
print "<TD> $nsala </TD>
<TD> $aforo </TD>
<TD> $nfilas </TD>
433
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
434
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
Esta pgina dispone de un enlace directo a la cartelera del da actual y un calendario con
enlaces a las carteleras de cualquier otro da. Todos estos enlaces dinmicos son creados
por un programa PHP. El primero de ellos, el que genera el enlace a la cartelera del da,
es bastante simple puesto que nicamente utiliza la funcin date() para obtener el da
435
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
actual e incluye esos parmetros en el enlace como parte del URL. El segundo script, el
que genera el calendario, resulta ms complejo y en este caso se ha programado en un
documento diferente e integrado con la funcin include().
Fichero proyecciones.php:
<HTML>
<HEAD>
<TITLE>Nuestra cartelera</TITLE>
</HEAD>
<BODY TEXT=blue>
<TABLE WIDTH="100%" BORDER BGCOLOR=#99CCFF>
<TR>
<TH WIDTH="16%">
<A HREF="principal.htm">Pgina principal</A></TH>
<TH WIDTH="17%">
<A HREF="salas.htm">Nuestras salas</A></TH>
<TH WIDTH="17%">
<A HREF="clientes.htm">rea de clientes</A></TH>
<TH WIDTH="17%">
<A HREF="entradas.htm">Compra de entradas</A></TH>
<TH WIDTH="17%">
<A HREF="estrenos.htm">Prximos estrenos</A></TH>
<TH WIDTH="16%">
<A HREF="foros/index.php">Foro Cinem@s</A></TH>
</TR>
</TABLE>
<H1 ALIGN="center">Nuestra cartelera</H1>
<CENTER>
<TABLE BORDER>
<TR ALIGN=center><TD WIDTH=50%>
<FONT SIZE=+1>
Aqu puedes consultar nuestra oferta para el da de hoy
<BR><BR>
<?php
$dia_hoy=date("d");
$mes_hoy=date("m");
$anno_hoy=date("Y");
print "<A HREF =
cartelera.php?dia=$dia_hoy&mes=$mes_hoy&anno=$anno_hoy>
<IMG SRC='images/rollo.gif' BORDER=0><BR>
Cartelera de hoy
</A>";
?>
436
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
</FONT>
</TD>
<TD WIDTH=50%>
<FONT SIZE=+1>
Si prefieres puedes consultar la cartelera de otro da
seleccionando la fecha deseada en nuestro calendario:
</FONT>
<BR><BR>
<?php
include("calendario.php");
?>
<BR>
</TD>
</TR>
</TABLE>
</CENTER>
</BODY>
</HTML>
Fichero calendario.php:
<?php
$nombremes=array(1=>"ENERO",2=>"FEBRERO",3=>"MARZO",
4=>"ABRIL",5=>"MAYO",6=>"JUNIO",
7=>"JULIO",8=>"AGOSTO",9=>"SEPTIEMBRE",
10=>"OCTUBRE",11=>"NOVIEMBRE",
12=>"DICIEMBRE");
437
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
default:
$nd=31;
}
return($nd);
}
438
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
</TH><TH>
<A HREF =
proyecciones.php?mes=$mes_siguiente&anno=$anno_siguiente>
<FONT COLOR=white>>>
</A>
</TH></TR>";
print "<TR ALIG=center BGCOLOR=#3399FF>
<TH WIDTH=14%>Lu</TH><TH WIDTH=14%>Ma</TH>
<TH WIDTH=14%>Mi</TH><TH WIDTH=14%>Ju</TH>
<TH WIDTH=14%>Vi</TH><TH WIDTH=14%>Sa</TH>
<TH WIDTH=14%>Do</TH> </TR>";
print("<TR>");
$aux=1;
//genera celdas en blanco hasta llegar al comienzo del mes
while($aux<$diasemana) {
print("<TD> </TD>");
$aux++;
}
for($i=1;$i<=$nd;$i++) {
$enlace = "<A HREF =
cartelera.php?dia=$i&mes=$mes&anno=$anno>
<FONT SIZE=+1> $i </A>";
if ($i==$hoy)
print("<TH BGCOLOR=red>$enlace</TH>");
elseif(($diasemana==6) or ($diasemana==7))
print("<TH BGCOLOR=#99CCFF>$enlace</TH>");
else
print("<TH>$enlace</TH>");
$diasemana++;
if($diasemana==8) {
// comienza nueva semana
print("</TR>");
print("<TR>");
$diasemana=1;
}
}
print("</TR></TABLE>");
}
439
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Como puede apreciarse en estos programas, los enlaces generados dinmicamente apuntan
hacia la pgina cartelera.php, envindose a dicha pgina a travs del URL tres parmetros
(da, mes y ao) que identifican la fecha cuya cartelera se quiere consultar. El documento
recibe esos parmetros y generar con ellos la cartelera mediante un programa PHP que se
conecta a la base de datos. El contenido completo de este documento cartelera.php sera:
Fichero cartelera.php:
<HTML>
<HEAD><TITLE>La cartelera</TITLE></HEAD>
<BODY>
<?php
if(isset($dia,$mes,$anno)) {
// carga de las variables de configuracin
// y realizacin de la conexin
require('configuracion.inc');
$c = mysql_connect($host,$usuario,$password)
or die("Error: " . mysql_error());
mysql_select_db($db,$c)
or die("Error: " . mysql_error());
// generacin de la consulta
$fecha = "$anno-$mes-$dia";
$q = "SELECT PELICULAS.IDPELICULA,TITULO,
IDPROY,NUM_SALA,HORA
FROM PELICULAS,PROYECCIONES
WHERE
PROYECCIONES.IDPELICULA =
PELICULAS.IDPELICULA
AND
FECHA = '$fecha'
ORDER BY HORA";
// ejecucin de la consulta
$r = mysql_query($q,$c);
if ($r) {
print "<H2 ALIGN=center>
Cartelera del dia $dia-$mes-$anno</H2>";
// se recorren todos los registros del resultado y
// se genera una tabla con ellos
if(mysql_num_rows($r)==0) {
print "<H2 ALIGN=center>
<I>Lo sentimos, no tenemos disponible
la cartelera de este da </I></H2>";
}
else {
print "<TABLE WIDTH=100% BORDER>
<TR> <TH>Pelcula</TH>
440
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
<TH WIDTH=50>Sala</TH>
<TH WIDTH=80>Hora</TH>
<TH WIDTH=100>Compra</TH>
</TR>";
$cont = 0;
while($proy = mysql_fetch_array($r)){
$cont++;
$idpelicula = $proy['IDPELICULA'];
$idproy = $proy['IDPROY'];
$titulo = $proy['TITULO'];
$num_sala = $proy['NUM_SALA'];
$hora = $proy['HORA'];
list($h,$m,$s)=explode(":",$hora);
if ($cont%2==0)
print "<TR ALIGN=center
BGCOLOR='#99CCFF'>\n");
else
print "<TR ALIGN=center
BGCOLOR='#3399FF'>\n");
print "<TD><A
HREF=pelicula.php?peli=$idpelicula
TARGET='_blank'>
<FONT SIZE=+2> $titulo </FONT>
</A>
</TD>
<TD>
<FONT SIZE=+2> $num_sala </FONT>
</TD>
<TD>
<FONT SIZE=+2> $h:$m </FONT> </TD>";
print "<TD> <A
HREF=comprar.php?idproy=$idproy>
<IMG SRC='images/ticket.gif'
BORDER=0>
</A> </TD>";
print "</TR>";
}
}
print "</TABLE>";
}
// cierre de la conexin
mysql_close($c);
}
?>
<HR>
<A HREF="proyecciones.php">Volver</A>
</BODY>
441
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
442
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
Fichero pelicula.php:
<HTML>
<HEAD><TITLE>Ficha tcnica de la pelcula</TITLE></HEAD>
<BODY>
<?php
// comprobacin de la correcta recepcin del
// identificador de la pelcula
if (isset($peli)) {
// conexin
require('configuracion.inc');
$c = mysql_connect($host,$usuario,$password)
or die("Error: " . mysql_error());
mysql_select_db($db,$c)
or die("Error: " . mysql_error());
// generacin de la consulta
$q = "SELECT * FROM PELICULAS
WHERE IDPELICULA = $peli";
// ejecucin de la consulta
$r = mysql_query($q,$c);
if ($r) {
print "<H2 ALIGN=center>Ficha de la pelicula</H2>";
$p = mysql_fetch_array($r);
$titulo = $p['TITULO'];
$actores = $p['ACTORES'];
$produccion = $p['PRODUCCION'];
$direccion = $p['DIRECCION'];
$guion = $p['GUION'];
$anno = $p['ANNO'];
$duracion = $p['DURACION'];
$nacionalidad = $p['NACIONALIDAD'];
$genero = $p['GENERO'];
$edad = $p['EDAD_RESTRICCION'];
$sinopsis = $p['SINOPSIS'];
$cartelera = $p['CARTELERA'];
// generacin de un archivo temporal con la
// imagen del cartel de la pelcula
$foto=tempnam("/carteles",'car');
$ft=fopen($foto,"w");
fwrite($ft,$cartelera);
fclose($ft);
print "<TABLE WIDTH=100% BORDER BGCOLOR='#99CCFF'>";
print "<TR> <TD>
<H2> $titulo </H2>";
print " <IMG SRC='$foto'>
</TD>";
print "<TD> <B>Sinopsis:</B> $sinopsis <BR>
443
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
444
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
445
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Fichero comprar.php:
<HTML>
<HEAD><TITLE>Compra de entradas</TITLE></HEAD>
<?php
function generarplanosala($filas,$cols) {
global $ocupada;
global $idproy;
// nmero de columnas de la tabla
print "<FORM ACTION=confirmarcompra.php
METHOD='post'>";
print "<TABLE BORDER>";
print "<TR><TH></TH>
<TH COLSPAN=$cols BGCOLOR=#99CCFF>
Asiento </TH>";
print "<TR BGCOLOR=#99CCFF><TH>Fila</TH>";
for($j=1;$j<=$cols;$j++) {
print "<TH WIDTH=50>A$j</TH>";
}
print "</TR>";
for($i=1;$i<=$filas;$i++) {
print "<TR><TH BGCOLOR=#99CCFF>F$i</TH>";
for($j=1;$j<=$cols;$j++) {
if ($ocupada[$i][$j]) {
print "<INPUT TYPE='hidden'
NAME='F$i" . "A$j' VALUE=0>";
print "<TD ALIGN=center BGCOLOR=red>O</TD>";
}
else {
print "<TD ALIGN=center>
<INPUT TYPE='hidden'
NAME='F$i" . "A$j' VALUE=0>
<INPUT TYPE='checkbox'
NAME='F$i" . "A$j' VALUE=1>
</TD>";
}
}
print "</TR>";
}
print "</TABLE>";
print "<INPUT TYPE='hidden' NAME='numfilas'
VALUE=$filas>";
print "<INPUT TYPE='hidden' NAME='numcols'
VALUE=$cols>";
print "<INPUT TYPE='hidden' NAME='idproy'
446
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
VALUE=$idproy>";
print "<P ALIGN=right>Nmero de cliente:
<INPUT TYPE='text' SIZE=6 NAME=numcliente><BR>
Contrasea:
<INPUT TYPE='password' SIZE=6 NAME=clave>";
print "<BR> <INPUT TYPE='submit' VALUE='Comprar'>
</P></FORM>";
}
?>
<BODY>
<?php
if (isset($idproy)) {
// conexin a la base de datos
require('configuracion.inc');
$c = mysql_connect($host,$usuario,$password)
or die("Error: " . mysql_error());
mysql_select_db($db,$c)
or die("Error: " . mysql_error());
// obtencin de las dimensiones de la sala
$q = "SELECT AFORO,NUM_FILAS FROM SALAS,PROYECCIONES
WHERE
IDPROY = $idproy
AND
PROYECCIONES.NUM_SALA = SALAS.NUM_SALA";
// ejecucin de la consulta
$r = mysql_query($q,$c);
list($aforo,$num_filas) = mysql_fetch_array($r);
print "<H2 ALIGN=center> Localidades disponibles
</H2>";
// generacin de un array bidimensional para anotar
// las localidades ya ocupadas
$num_columnas =(integer)($aforo/$num_filas);
for($i=1;$i<=$num_filas;$i++) {
for($j=1;$j<=$num_columnas;$j++) {
$ocupada[$i][$j]=FALSE;
}
}
// recuperacin de todas las localidades ya ocupadas
$q = "SELECT FILA,NUM_ASIENTO FROM ENTRADAS
WHERE IDPROY = $idproy";
// ejecucin de la consulta
$r = mysql_query($q,$c);
if ($r) {
while(list($f,$a) = mysql_fetch_array($r)){
$ocupada[$f][$a]=TRUE;
}
447
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
}
// generacin del plano de la sala
generarplanosala($num_filas,$num_columnas);
// cierre de la conexin
mysql_close($c);
}
?>
<A HREF="proyecciones.php">Volver a la cartelera</A>
</BODY>
</HTML>
El formulario de la Figura 16.8 enva los datos relativos al cliente y las localidades
adquiridas por este a una nueva pgina (confirmarcompra.php) que se encarga de
comprobar la validez de la identificacin del cliente y, en su caso, aadir la compra
a la correspondiente tabla de la base de datos, incrementar el saldo de puntos
acumulados por el cliente y presentarle una pgina de notificacin. El cdigo
completo de este ltimo archivo es el siguiente.
Fichero confirmarcompra.php:
<HTML>
<HEAD><TITLE>Confirmacin de la compra</TITLE></HEAD>
<BODY>
<?php
if (isset($numcliente,$clave)) {
// conexin a la base de datos
require('configuracion.inc');
$c = mysql_connect($host,$usuario,$password)
or die("Error: " . mysql_error());
mysql_select_db($db,$c)
or die("Error: " . mysql_error());
// autentificacin del cliente
$q = "SELECT CLAVE,PUNTOS_ACUM FROM CLIENTES
WHERE NUM_CLIENTE=$numcliente";
$r = mysql_query($q,$c);
if (mysql_num_rows($r)==0)
die("CLIENTE NO REGISTRADO");
$p = mysql_fetch_array($r);
$clave_real=$p['CLAVE'];
$puntos_acum=$p['PUNTOS_ACUM'];
if ($clave!=$clave_real)
die("ERROR: identificacin incorrecta");
// registro de las entradas adquiridas
$compra = FALSE;
$ncompradas = 0;
print "Localidades adquiridas:";
448
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
print "<UL>";
for($i=1;$i<=$numfilas;$i++)
for($j=1;$j<=$numcols;$j++) {
$nomCheck="F$i"."A$j";
if ($$nomCheck) {
// localidad adquirida por el cliente
$compra = TRUE;
$ncompradas++;
// se inserta el registro en la tabla entradas
$q = "INSERT INTO ENTRADAS(IDPROY,FILA,
NUM_ASIENTO,
NUM_CLIENTE,RECOGIDA)
VALUES($idproy,$i,$j,$numcliente,0)";
$r = mysql_query($q,$c);
print "<LI> Fila <B>$i</B>, asiento
<B>$j</B>";
}
}
if ($compra) {
// actualizacin de los puntos acumulados del
cliente
$puntos_acum = $puntos_acum + 5 * $ncompradas;
$q = "UPDATE CLIENTES SET PUNTOS_ACUM=$puntos_acum
WHERE NUM_CLIENTE=$numcliente";
$r = mysql_query($q,$c);
if ($r)
print "<CENTER><U>Tu saldo de puntos tras
esta compra ser de $puntos_acum
puntos</U></CENTER>";
print "<H3 ALIGN=center> <I>Recuerda que tu entrada
estar reservada hasta 5 minutos antes del
inicio de la sesin. Si transcurrido ese
plazo
no has procedido al pago de la misma, la
reserva se anular automticamente </I><BR>
Muchas gracias por tu compra y a difrutar con
el mejor cine!!!</H3>";
}
// cierre de la conexin
mysql_close($c);
}
?>
<A HREF="proyecciones.php">Volver a la cartelera</A>
</BODY>
</HTML>
449
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
mysql_ free_result(resultado)
mysql_affected_rows()
mysql_num_rows(resultado)
mysql_field_name(resultado,indice)
mysql_field_len(resultado,indice)
mysql_field_type(resultado,indice)
450
www.full-ebook.com
CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP
451
www.full-ebook.com
www.full-ebook.com
IMPLEMENTACIN
DE FOROS
17.1. INTRODUCCIN
Mediante el uso combinado de MySQL y el lenguaje PHP resulta muy sencillo
implementar en un sitio web un sistema de foros a travs del cual todos los
visitantes del sitio puedan enviar sus comentarios, responder a mensajes de otros
usuarios, plantear dudas,... Los foros constituyen una de las aplicaciones ms
utilizadas de PHP y MySQL; de hecho, es posible encontrar una amplia variedad
de desarrollos open source para implementarlos. En el Captulo 18, en el que se
presentan algunas de la soluciones open source ms conocidas, se pueden encontrar
algunas referencias a este tipo de aplicaciones de gestin de foros.
453
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Todos los mensajes enviados por los usuarios deben quedar almacenados para
poder ser visualizados por cualquier otro usuario en cualquier momento. Por tanto,
lo primero que se necesitar es una nueva tabla en la base de datos de Cinem@s.
454
www.full-ebook.com
IMPLEMENTACIN DE FOROS
455
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
<HTML>
<HEAD>
<TITLE>El foro de Cinem@s</TITLE>
</HEAD>
<BODY>
<TABLE WIDTH="100%" border bgColor=#99CCFF>
<TR>
<TH WIDTH="16%"><A HREF="../principal.htm">
Pgina principal</A></TH>
<TH WIDTH="17%"><A HREF="../proyecciones.htm">
Nuestra cartelera</A></TH>
<TH WIDTH="17%"><A HREF="../salas.htm">
Nuestras salas</A></TH>
<TH WIDTH="17%"><A HREF="../clientes.htm">
rea de clientes</A></TH>
<TH WIDTH="17%"><A HREF="../entradas.htm">
Compra de entradas</A></TH>
<TH WIDTH="16%"><A HREF="../estrenos.htm">
Prximos estrenos</A></TH>
</TR>
</TABLE>
<H1 ALIGN="center">
<FONT COLOR=blue>El foro de usuarios de Cinem@s</FONT>
</H1>
<TABLE WIDTH="100%" border>
<TR>
<TH WIDTH=100>FECHA</TH>
<TH>TITULO</TH>
<TH WIDTH=100>RESPUESTAS</TH>
</TR>
<?
// conexin a la base de datos
require('configuracion.inc');
$enlace = mysql_connect($host,$usuario,$password);
mysql_select_db($db,$enlace);
// consulta: seleccin de todos los mensajes
// cuyo identificador de mensaje "padre" es 0
$consulta = "SELECT * FROM foro WHERE identificador = 0
ORDER BY fecha DESC";
$consulta = mysql_query($consulta,$enlace);
456
www.full-ebook.com
IMPLEMENTACIN DE FOROS
Como puede apreciarse, la pgina comienza con el cdigo necesario para generar
una tabla con enlaces a las restantes pginas del sito web de Cinem@s, tras esos
enlaces se genera, mediante un script PHP, una nueva tabla con las fechas, ttulos y
nmeros de respuestas de los mensajes cabecera de cada cadena de mensajes. Los
ttulos de cada mensaje se encuentran enlazados con la pgina foro.php, pasando a
esta pgina en dicho enlace el id concreto del mensaje; este id ser utilizado para
acceder al correspondiente registro de la tabla. Finalmente, se encuentra un enlace
a la pgina formulario.php que permitir crear un nuevo mensaje.
457
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
458
www.full-ebook.com
IMPLEMENTACIN DE FOROS
Fichero foro.php:
<HTML>
<HEAD>
<TITLE>Foro Cinem@s</TITLE>
</HEAD>
<BODY>
<?
// comprobacin de la correcta recepcin del
// id del mensaje a travs del URL
if(isset($id)) {
// conexin a la base de datos
require('configuracion.inc');
$enlace = mysql_connect($host,$usuario,$password);
mysql_select_db($db,$enlace);
// consulta: seleccin de todos los mensajes cuyo
// valor del atributo identificador es el que ha
// sido pasado a travs del URL
$consulta = "SELECT * FROM foro
WHERE id = '$id'
ORDER BY fecha DESC";
$consulta = mysql_query($consulta,$enlace);
// muestra de los atributos del mensaje
$row = mysql_fetch_array($consulta);
$titulo=$row["titulo"];
$autor=$row["autor"];
$mensaje=$row["mensaje"];
$fecha=$row["fecha"];
$respuestas=$row["respuestas"];
print "<TABLE WIDTH=100% BORDER>
<TR><TH WIDTH=100 BGCOLOR=blue>
<FONT COLOR=white>Ttulo</TH>";
print "<TD WIDTH=*> $titulo </TD></TR>";
print "<TR><TH BGCOLOR=blue>
<FONT COLOR=white>Fecha</TH>";
print "<TD>" . date("d-m-Y",$fecha) . "</TD></TR>";
print "<TR><TH BGCOLOR=blue>
<FONT COLOR=white>Autor</TH>";
print "<TD> $autor </TD></TR>";
print "<TR><TH BGCOLOR=blue>
<FONT COLOR=white>Mensaje</TH>";
print "<TD> $mensaje </TD></TR></TABLE>";
// generacin de enlaces para aadir respuesta
// y para volver a la pgina principal del foro
print "<CENTER><FONT FACE=arial SIZE=2>";
459
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
$url = "formulario.php?id=$id&" .
"respuestas=$respuestas&" .
"titulo=$titulo";
print "<A HREF=$url>";
print "<BR>Aadir respuesta </A> ";
print "<A HREF=index.php>Volver al foro</A>
</FONT></CENTER>";
460
www.full-ebook.com
IMPLEMENTACIN DE FOROS
Fichero formulario.php:
461
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
</TR>
<TD>Mensaje:</TD>
<TD><TEXTAREA NAME="mensaje" ROWS=6 COLS=30>
</TEXTAREA>
</TD>
</TR>
<TR><TD> <INPUT TYPE=submit VALUE="Enviar"> </TD></TR>
</TABLE>
</FORM>
Una vez que el usuario ha completado todos los campos del formulario, estos sern
enviados a la pgina nuevomensaje.php que se encargar de realizar la insercin en
la base de datos y cuyo cdigo se presenta a continuacin.
Fichero nuevomensaje.php:
<?php
// conexin a la base de datos
require('configuracion.inc');
$enlace = mysql_connect($host, $usuario, $password);
mysql_select_db($db,$enlace);
// obtencin de la fecha y hora actual
$fecha = time();
// si el mensaje no es respuesta a ningn otro
// se asigna el valor 0 al identificador del
// mensaje "padre".
if(empty($identificador)){
$identificador=0;
}
// generacin de la consulta de insercin
$sql = "INSERT INTO foro(autor,titulo,mensaje,
fecha,identificador)
VALUES ('$autor','$titulo',
'$mensaje','$fecha',
'$identificador')";
mysql_query($sql);
// en el caso de ser respuesta a un mensaje previo
// es necesario actualizar el nmero de respuestas
// del mensaje al que responde
if($identificador!=0) {
$respuesta = $respuestas+1;
$sql2 ="UPDATE foro SET respuestas = '$respuesta'
462
www.full-ebook.com
IMPLEMENTACIN DE FOROS
WHERE id = '$identificador'";
mysql_query($sql2);
}
// se vuelve a la pgina principal del foro
header("location: index.php");
?>
463
www.full-ebook.com
www.full-ebook.com
SOLUCIONES OPEN
SOURCE BASADAS EN
PHP Y MYSQL
18.1. INTRODUCCIN
La evolucin y cambios de Internet, tanto en contenidos como en formas y modos
de desarrollarlos y presentarlos al usuario o navegante, ha sido algo continuo.
Partiendo de los desarrollos iniciales en HTML, esttico, se ha ido buscando
progresivamente un mayor dinamismo e interaccin con el usuario, completando
HTML con Html dinmico, lenguajes embebidos Java Script, PHP, etc. A esta
necesidad de dinamismo e interaccin de los sitios web se une otra no menos
importante como es la necesidad de una cada vez mayor cantidad de informacin y
de herramientas informticas apropiadas para su gestin.
465
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
24
En las aplicaciones que no son de cdigo abierto lo que se adquiere es el derecho a usar
la aplicacin pero no la propiedad de la misma ni la capacidad de modificarla, copiarla o
distribuirla, sin el permiso del propietario de la patente, lo que supone la dependencia de
este.
25
Indicar que nos referimos exclusivamente a los gestores de contenido web, pues el
termino gestin de contenido tiene un significado amplio existiendo otro tipo de
aplicaciones de gestin de contenido, como por ejemplo las de gestin de contenido
documental, etc.
466
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
26
Forrester Research: Las condiciones de retorno de un visitante a un sitio disponible en:
http://www.jipo-interactive.com/es/articles/webmastering/article_webmastering_1
467
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
18.2.1. FUNCIONAMIENTO
Pese a la gran diversidad de aplicaciones, generalmente los gestores de contenido
tienen un funcionamiento similar. Son aplicaciones modulares que se apoyan en
bases de datos o repositorios y estn formadas por dos elementos, la aplicacin
gestora de contenidos (CMA) y la aplicacin de presentacin de contenidos (CDA)
que se utilizan mediante una nica interfaz ms o menos intuitiva, dependiendo de
la aplicacin, y por lo general de tipo web. El CMA, permite al autor del sitio, sin
necesidad de que este posea conocimientos de HTML u otro lenguaje, realizar la
creacin, actualizacin y eliminacin del contenido del sitio web. El CDA por su
parte, permite al autor elegir, mediante la seleccin de plantillas, el formato en que
se presentarn los contenidos.
18.2.2. CARACTERSTICAS
La oferta existente de aplicaciones dedicadas a la gestin de contenidos web
(CMS) es muy heterognea tanto en nmero de aplicaciones como en las
caractersticas concretas que estas presentan. Respecto a las aplicaciones de gestin
de contenidos web open source, existe un elevado nmero de alternativas fruto de
un continuo desarrollo y mejora, caracterstico de las comunidades open source.
Pero este elevado nmero de aplicaciones no implica que todas estn al mismo
nivel de desarrollo. Algunas estn ampliamente testadas y consolidadas, con
numerosos manuales y documentacin de apoyo, entre otras se pueden citar como
468
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
El elegir una u otra aplicacin debera venir precedido, tanto para empresas como
particulares, por:
1. Definir cules son los objetivos, caractersticas y pblico objetivo del sitio
web a crear.
2. Analizar las caractersticas de las distintas aplicaciones y de las
comunidades que las han desarrollado para determinar cul se ajusta mejor
a las necesidades detectadas.
A pesar de la gran diversidad de aplicaciones CMS open source, todas tienen una
misma finalidad y convergen en una serie de caractersticas. Estas caractersticas
podran considerarse como las propiedades o requisitos mnimos a exigir a un
CMS, de forma que sirvan de indicativo para cribar entre las numerosas
aplicaciones y determinar cules pueden ser las ms adecuadas en funcin siempre
de las necesidades particulares. A continuacin, examinado el funcionamiento de
distintas aplicaciones CMS, se recoge una orientacin de los requisitos mnimos
deseables para dichas aplicaciones, tanto relativos a la creacin de contenido como
a la gestin, publicacin y presentacin de los contenidos.
Creacin de contenido:
o Interfaz intuitivo y fcil de utilizar, para la creacin y gestin tanto del
sitio web como de los contenidos, por personal no tcnico o sin
conocimientos informticos elevados.
o Separacin de la presentacin, diferentes formatos y diseos definidos,
de los contenidos a publicar.
o Posibilidad de establecer mltiples autores de contenidos.
o Reutilizacin y comparticin de los elementos que conforman el sitio
web, estructuras, contenidos, diseos, etc., evitando duplicaciones y
ahorrando recursos.
Gestin de contenidos
o Control completo del ciclo de vida de los contenidos, entendidos estos
en sentido amplio como cualquier informacin, imgenes, texto, etc.,
desde su creacin hasta su eliminacin o archivo pasando por su
control o validacin, publicacin, actualizacin y control de versiones.
o Nivel de seguridad aceptable para poder proteger la integridad de los
contenidos.
o Permitir la designacin de roles o distintos perfiles de usuarios, cada
uno con unos privilegios respecto a la gestin del contenido.
469
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Publicacin
o Publicacin de contenidos en diferentes formatos HTML, PDF,...
o Permitir la personalizacin, presentar diferente informacin para
diferentes perfiles.
o Definir los flujos de trabajo incluyendo actualizacin, validacin y
publicacin en funcin de los distintos perfiles definidos.
o Proporcionar estadsticas sobre hbitos de navegacin de los visitantes,
contenidos ms visitados, etc.
o Previsualizacin interna de contenidos anterior a su publicacin a los usuarios.
o Composicin especificada en plantillas basadas en XML.
o Posibilidad de ofrecer soporte multilinge.
Presentacin final
o Usabilidad, recoge conceptos de facilidad de uso y eficiencia para todos los
usuarios adems de una navegacin coherente y comprensible.
o Accesibilidad, el sitio que se desarrolle debe ser conforme a estndares
como los de W3C y permitir ser soportado por distintos navegadores.
o Velocidad de descarga, limitar el tamao del sitio para garantizar un
tiempo de descarga aceptable para el usuario.
o Metadatos, las pginas del sitio deben ofrecer suficientes metadatos
para asegurar la indexacin en buscadores.
Ventajas Inconvenientes
Facilitan la creacin de un sitio web y la Dominar una aplicacin CMS requiere
completa gestin de sus contenidos sin tener tiempo y en el caso de grandes empresas,
excesivos conocimientos informticos. pueden suponer un alto coste en consultores
Permiten incorporar al sitio web diferentes que integren la aplicacin con el sistema
servicios como foros, chats, encuestas,... existente en la organizacin.
Facilidad para la modificacin del sitio y de los En algunos casos puede generar un exceso
contenidos de forma remota, desde cualquier de homogeneidad con otros sitios
punto con conexin a Internet. desarrollados con el mismo CMS.
Personalizacin del sitio en funcin del El desarrollo y mejoras de la aplicacin
usuario, creando distintos perfiles. estn vinculados al desarrollo de la
Gratuidad y cdigo abierto. comunidad creadora del software.
Tabla 18.1 Ventajas e inconvenientes de los gestores de contenido
470
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
18.3.1. PHP-NUKE
Sitio oficial http://www.phpnuke.org
www.phpnuke-espanol.org/
471
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
472
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
18.3.2. POSTNUKE
Sitio oficial www.postnuke.com
www.postnuke-hispano.com
473
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Mambo open source es una aplicacin escrita en PHP basada en los sistemas de
administracin de contenidos, que permite la fcil creacin y mantenimiento de
sitios web y portales. Como todos los CMS, su simplicidad se traduce en que no
son necesarios grandes conocimientos para actualizar, mantener y personalizar los
contenidos. Incorpora un editor WYSIWYG propio de contenido. Sus
caractersticas son similares a las de los productos anteriores.
Est disponible para diferentes plataformas, entre las que se encuentran Linux,
FreeBSD, MacOSX Server, Solaris, AIX, SCO, WinNT y Win2K.
474
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
18.3.4. PHPWEBSITE
Sitio oficial phpwebsite.appstate.edu
A fecha de hoy no existe sitio oficial en espaol y tiene pocos complementos para
aadir. Puede ser una opcin interesante para desarrollar sitios de empresas sin los
requerimientos de una comunidad.
475
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
18.3.5. PHP-WCMS
Sitio oficial www.phpwcms.de
Es un CMS optimizado para una rpida y fcil instalacin sobre cualquier servidor
web que soporte PHP y MySQL. Ha sido probado satisfactoriamente sobre
Windows 2000/XP, MacOSX y LINUX.
476
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
18.3.6. XOOPS
Sitio oficial www.xoops.org
www.esxoops.com
477
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
18.3.7. DRUPAL
Sitio oficial www.drupal.org
drupal.badopi.org
Drupal es un CMS desarrollado en PHP, puede ser usado con MySQL o con
PostgreSQL y ejecutado sobre mltiples plataformas, incluyendo los servidores
Apache o IIS de Microsoft.
478
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
18.3.8. SITEFRAME
Sitio oficial siteframe.org
Se trata de un CMS diseado para crear rpidamente sitios web para comunidades.
Dispone de un conjunto de plantillas con un diseo agradable y artstico.
479
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
18.4.1. WEBLOGS
Los weblogs, tambin conocidos como bitcoras, constituyen una de las formas
ms sencillas de crear y actualizar una pgina web. De este fenmeno emergente
han nacido varios sistemas de publicacin gratuitos basados en PHP y MySQL que
permiten poner un weblog en marcha en menos de cinco minutos, sin ningn
conocimiento previo.
Antes de nada conviene tratar de clarificar lo que se entiende por weblog, aunque
no es fcil encontrar una definicin precisa, y de hecho existe un debate abierto
sobre el tema, se podra decir que un weblog es un sitio web donde se recopilan
cronolgicamente mensajes de uno o varios autores, sobre una temtica o a modo
de diario personal. Estos sitios web suelen incorporar enlaces a otros weblogs,
archivos de entradas anteriores, enlaces para citar anotaciones, funciones para
aadir comentarios,...
GeekLog
Sitio oficial www.geeklog.net
Permite que los usuarios se registren como miembros y enven sus historias o
artculos.
Dispone de un sistema para aadir comentarios a los artculos publicados por
los miembros.
Sistema basado en plugins para extender la aplicacin.
Generacin automtica de estadsticas del sitio.
Dispone de un calendario para aadir eventos o citas.
Herramientas de comunicacin entre los miembros de la comunidad de
usuarios.
480
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
481
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Pmachine
Sitio oficial www.pmachine.com
Sistema de weblogs muy completo que permite una administracin por web
mediante un interfaz grfico fcil de utilizar y muy intuitivo. Soporta mltiples
weblogs, organizndolos en categoras, separndolos en pginas independientes o
colocando mltiples weblogs en la misma pgina. Puede llegar a convertir un
weblog en una comunidad on line.
482
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
483
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
484
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
Phpbb
Sitio oficial www.phpbb.com
PHPBB es una aplicacin open source muy potente y de fcil personalizacin para
establecer comunidades virtuales con foros interactivos donde los usuarios pueden
aadir temas, crear y responder mensajes... Su interfaz de usuario es muy fcil de
usar por el visitante, con un panel de administracin simple y de ejecucin rpida y
sencilla y una seccin de ayuda siempre a mano.
485
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
Minibb
Sitio oficial www.minibb.net
486
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
Moodle
Sitio oficial moodle.org
487
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
OSCommerce
Sitio oficial www.oscommerce.com
488
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
Cubecart
Sitio oficial www.cubecart.com
Debe destacarse que CubeCart no se distribuye como cdigo abierto, por lo que no
puede ser redistribuido.
489
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
OsTicket
Sitio oficial www.osticket.com
490
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
PHP-Support-Tickets
Sitio oficial www.phpsupporttickets.com
491
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
SugarSales
Sitio oficial www.sugarcrm.com
492
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
PHPCollab
Sitio oficial www.php-collab.com
493
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
DotProject
Sitio oficial www.dotproject.net
494
www.full-ebook.com
SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL
PhpAdsNew
Sitio oficial phpadsnew.com
4images
Sitio oficial www.4homepages.de
OWL
Sitio oficial owl.sourceforge.net
495
www.full-ebook.com
PHP Y MYSQL. TECNOLOGAS PARA EL DESARROLLO DE APLICACIONES WEB
OpenClinic
Sitio oficial openclinic.sourceforge.net
PHPList
Sitio oficial tincan.co.uk/phplist
PHP Auction
Sitio oficial www.phpauction.org
Web Calendar
Sitio oficial www.k5n.us/webcalendar.php
496
www.full-ebook.com
ndice alfabtico
124 &
! & 127, 203
! 130 && 130
!= 128
!== 128 .
. 131
$
$_COOKIE 291 @
$_GET 142
@ 132
$_POST 142
$_REQUEST 142
[
$_SERVER 110
[] 216
$GLOBALS 208, 265
^
$HTTP_COOKIE_VARS 290
^ 127
$HTTP_GET_VARS 143
$HTTP_POST_VARS 143
132
$this 275
|
| 127
%
|| 130
% 124
~
~ 127
+
497
www.full-ebook.com
++ 124 array_diff_assoc 239
< array_fill 237
< 128 array_filter 228
<< 127 array_intersect 239
<= 128 array_intersect_assoc 239
= array_key_exists 230
== 128 array_keys 229
=== 128 array_map 240
> array_pad 237
> 128 array_pop 237
-> 278 array_push 237
>= 128 array_rand 230
>> 127 array_reverse 245
array_search 231
array_shift 237
A array_splice 235
array_unique 237
A 82 array_unshift 238
ACTION 137 array_values 232
ALL 331 array_walk 242
ALTER 318, 321 Arrays 113
mbito de las variables 116 arrays asociativos 217
and 130 arsort 244
applet 10 ASC 334
Applet 19 asort 244
argumentos ASP 21
longitud variable 201 AVG 335
opcionales 199
por referencia 203 B
por valor 203
valores por defecto 200 B 69
argumentos opcionales 199 BIGINT 357
array 215, 216 BINARY 360
multidimensional 218 BIT 357
array_change_key_case 225 BLINK 69
array_chunk 226 BLOB 360
array_combine 232 BLOCKQUOTE 70
array_count_values 227 BODY 62
array_diff 239 BOOL 357
498
www.full-ebook.com
borrado en cascada 324 CREATE INDEX 323
break 170, 188 CREATE TABLE 318
ctype_alnum 250
C ctype_alpha 250
ctype_digit 250
Cadenas 113 ctype_lower 250
case 170 ctype_print 250
CASE_LOWER 225 ctype_punct 250
CASE_UPPER 225 ctype_space 250
CGI 21 ctype_upper 250
Ch D
499
www.full-ebook.com
endswitch 173 func_get_args 202
endwhile 175 func_num_args 202
ENUM 361 funciones variables 211
EXIT 344 function 193
explode 251 function_exists 212
extends 283 fwrite 303
EXTR_OVERWRITE 233
EXTR_PREFIX_ALL 233 G
EXTR_PREFIX_SAME 233
EXTR_SKIP 233 get_defined_functions 212
extract 233 gettype 118
global 207
F GNU 29
GPL 37
fclose 297 GROUP BY 331, 336
feof 298
fgetc 300 H
fgets 298
file 299 HAVING 331, 336
file_exists 307 HEAD 62
filesize 299 herencia 281
FLOAT 358 hipertexto 5
FLUSH PRIVILEGES 351 Hn 68
FONT 69 HTML 7, 57
fopen 296 http 7, 55
for 179
foreach 187, 220 I
Foreign Key 313
FOREIGN KEY 323 I 69
FORM 90 if 158
fputs 303 IMG 79
FRAME 86 implode 251
FRAMESET 85 in_array 232
fread 299 include 209
free software 27 INDEX 366
FROM 331 ndices 322
fscanf 300 InnoDB 365
FSF 29 INSERT 325
func_get_arg 202 INT 357
500
www.full-ebook.com
INTEGER 357 metatags 62
integridad referencial 364 mtodo GET 144
Internet 3 Mtodo GET 143
is_array 118 mtodo POST 145
is_float 118 Mtodo POST 143
is_int 118 mtodos 270
is_object 118 MIN 335
is_string 118 mktime 187, 260
isset 118 MySQL 339
mysql_ free_result 450
J mysql_affected_rows 425, 450
MYSQL_ASSOC 431
Java 19 MYSQL_BOTH 431
JavaScript 18 mysql_close 415
JSP 21 mysql_connect 414
mysql_db_query 418
K mysql_error 419
mysql_fetch_array 431
krsort 244 mysql_fetch_assoc 431
ksort 244 mysql_fetch_row 424
mysql_field_len 450
L mysql_field_name 450
mysql_field_type 450
LI 71 mysql_insert_id 424
list 221 MYSQL_NUM 431
LOAD DATA INFILE 381 mysql_num_rows 425, 450
localhost 104 mysql_pclose 416
mysql_pconnect 416
M mysql_query 417
mysql_select_db 416
mail 424 mysqld 341
matriz 215 mysqldump 385
MAX 335 mysqlimport 381
max_execution_time 181 mysqlshow 341
MAX_FILE_SIZE 308
MEDIUMINT 357 N
META HTT-EQUIV 63
META NAME 65 natcasesort 245
metaetiquetas 62 natsort 245
501
www.full-ebook.com
new 277 operador Y 130
NO ACTION 324 operadores aritmticos 124
NOT NULL 325 operadores de bit 127
NULL 325 Operadores de comparacin 128
NUMERIC 358 operadores de desplazamiento de bits
Nmeros en coma flotante 113 127
Nmeros enteros 113 operadores lgicos 130
OPTION 92
O or 130
ORDER BY 331, 333
objetos 269
Objetos 113 P
OL 71
ON DELETE 324, 374 P 70
ON UPDATE 379 PASSWORD 351
open source 2, 27 PHP 23, 99
operacin de negacin 130 phpinfo 106
operador asignacin 125 phpmyadmin 389
operador condicional 130, 164 PRE 70
operador de cast 116 PRECISION 358
operador de concatenacin 131 Primary Key 313
Operador de conversin de tipo 133 print 106
operador de direccin 203 print_r 219
operador de ejecucin 132 print_r() 198
operador de identidad 128 prioridad de operadores 133
operador de igualdad 128 programacin orientada a objetos 269
operador de negacin 127
operador de negacin de identidad 128 Q
operador de negacin de igualdad 128
operador de supresin de error 132 QUIT 344
operador decremento 124
operador diferencia 124 R
operador divisin 124
operador incremento 124 rand 182
operador O 130 range 234
operador O exclusivo 130 REAL 358
operador producto 124 register_globals 141
operador resto 124 rename 307
operador suma 124 require 209
502
www.full-ebook.com
return 194 strlen 259
rewind 304 strnatcasecmp 256
rsort 245 strnatcmp 256
strpos 257
S strrchr 256
strrev 254
S 69 strrpos 257
SCRIPT 108 strstr 110, 257
script, inserccin 108 strtok 258
secuencias de escape 120 strtolower 254
SELECT 92, 330 strtoupper 254
SELECT INTO OUTFILE 386 SUB 69
Servidor 5 subclases 281
servlets 21 substr 257
SET 361 substr_count 257
SET NULL 324 substr_replace 254
SET PASSWORD 350 SUM 335
setcookie 286 SUP 69
settype 116 switch 169
Shareware 27
SHOW COLUMNS 347 T
show databases 345
SHOW TABLES 347 TABLE 76
shutdown 341 TD 77
SMALLINT 357 tempnam 445
sort 245 TEXT 360
SOURCE 369 TEXTAREA 91
SQL 316 TH 76
str_pad 253 this 275
STR_PAD_BOTH 253 time 260
STR_PAD_LEFT 253 TIMESTAMP 363
STR_PAD_RIGHT 253 TINYINT 357
str_repeat 253 TITLE 62
str_replace 254 TR 76
str_word_count 252
strcasecmp 256 U
strchr 256
strcmp 256 U 69
stristr 257 ucfirst 255
503
www.full-ebook.com
ucwords 255 variables 114
UL 73 mbito 206
unlink 307 VBScript 20
unset 118, 204
UNSIGNED 357 W
UPDATE 329
USE 346 W3C 59
user 346 web 1, 4
WHERE 331
V while 175
wordwrap 258
valores por defecto 200
var 273 X
VARCHAR 359
variable xor 130
esttica 208
global 207 Z
local 206
variable global 117 ZEROFILL 357
variable local 117
504
www.full-ebook.com
www.full-ebook.com
www.full-ebook.com
www.full-ebook.com
www.full-ebook.com