Sunteți pe pagina 1din 240

Programacin en PHP

Version imprimible
Este documento deber servir exclusivamente como material de apoyo
al contenido del curso interactivo accesible a travs de internet.

Indice
Evaluacin inicial...................................................................... 4
Mdulo I. Introduccin............................................................... 5
U.D.1. Lenguajes de programacin Web...................................... 5
U.D.2. Qu es PHP?............................................................ 9
U.D.3. Qu es apache?....................................................... 12
U.D.4. Instalacin................................................................. 13
Pgina esttica / dinmica...................................................... 21
Resumen mdulo I............................................................... 21
Prctica: nuestra primera pgina web........................................ 21
Autoevaluacin mdulo I........................................................ 22
Mdulo II. Conceptos bsicos..................................................... 25
U.D.1. Panormica del lenguaje............................................... 25
U.D.2. Variables................................................................... 31
U.D.3. Operadores............................................................... 35
U.D.4. Sentencias de control................................................... 45
Resumen mdulo II.............................................................. 58
Prctica: conceptos bsicos.................................................... 58
Autoevaluacin mdulo II....................................................... 58
Mdulo III. Conceptos avanzados................................................ 62
U.D.1. Cadenas................................................................... 62
U.D.2. Arrays...................................................................... 73
U.D.3. Funciones................................................................. 83

Plataforma de Teleformacin de IFES

Pgina 1 de 240

U.D.4. Formularios............................................................... 94
U.D.5. Manejo de ficheros.....................................................105
Resumen mdulo III............................................................ 114
Prctica: Conceptos avanzados.............................................. 114
Autoevaluacin mdulo III..................................................... 114
Prctica intermedia................................................................ 118
Evaluacin primera................................................................ 119
Mdulo IV. PHP y las bases de datos......................................... 120
U.D.1. Estructura de una aplicacin web con bases de datos.......... 120
U.D.2. Qu es MySQL?...................................................... 122
U.D.3. El lenguaje SQL........................................................ 123
U.D.4. Funciones de PHP con MySQL..................................... 154
Arquitectura de 3 capas....................................................... 162
Resumen mdulo IV............................................................ 162
Prctica: PHP y las bases de datos......................................... 163
Autoevaluacin mdulo IV..................................................... 163
Videotutoriales................................................................... 166
Servidor local XAMPP....................................................... 166
Crear una base de datos................................................... 166
Evaluacin segunda............................................................... 167
Mdulo V. Aplicaciones comunes en PHP.................................... 168
U.D.1. Fecha y hora............................................................ 168
U.D.2. Envo de correo electrnico.......................................... 175
U.D.3. Sesiones................................................................. 183
U.D.4. Control de acceso...................................................... 191
U.D.5. Registro de accesos................................................... 201
U.D.6. Plantillas................................................................. 206
Resumen mdulo V............................................................ 215
Prctica: Aplicaciones comunes en PHP................................... 215
Autoevaluacin mdulo V..................................................... 215
Evaluacin tercera................................................................. 219
Pgina 2 de 240

Programacin en PHP

Prctica final........................................................................ 220


Evaluacin final.....................................................................221
Glosario.............................................................................. 222
FAQ................................................................................... 235
Bibliografa.......................................................................... 238
Enlaces.............................................................................. 239

Plataforma de Teleformacin de IFES

Pgina 3 de 240

Programacin en PHP

Evaluacin inicial
Este recurso es de tipo Evaluacin.
Debe conectarse a la plataforma para realizar la evaluacin. Recuerde que las
evaluaciones son obligatorias ya que determinan la nota final.

Pgina 4 de 240

Programacin en PHP

Programacin en PHP

Mdulo I. Introduccin
U.D.1. Lenguajes de programacin Web

Tipos de pginas web. Estticas y dinmicas.


Las primeras pginas que aparecieron en Internet eran muy sencillas y poco
interactivas. Solo permitan mostrar informacin (texto o imgenes) y seguir enlaces a
nuevas pginas.
Para compensar esta falta de interactividad aparecieron los lenguajes de programacin
del lado del cliente (el navegador de Internet) que permitan una interactividad
limitada. En esta categora el principal lenguaje es Javascript. Un ejemplo tpico de
programacin mediante Javascript es el de un men jerrquico desplegable.
Pero hay multitud de funcionalidades que estn fuera del alcance de los lenguajes de
programacin en el cliente. La interactividad que permiten se reduce prcticamente a
mejorar la apariencia de la informacin en la pgina web, y a aadir efectos visuales
que aunque puedan ser curiosos no aportan un valor aadido.
Con la llegada de los lenguajes del lado del servidor aparecieron las primeras pginas
dinmicas. Hoy en da la mayor parte de Internet est formada por este tipo de pginas.
El buscador de Internet que usamos cada vez que queremos encontrar pginas de una
temtica es una pgina dinmica. La Plataforma de Teleformacin de IFES es tambin
una pgina dinmica.

Generacin de pginas web


Para poder comprender la diferencia entre una pgina esttica y una pgina dinmica
hay que tener presente el proceso que sigue una pgina web desde que la solicitamos
(haciendo clic en un enlace del navegador) hasta que la recibimos y se muestra por
pantalla.

Plataforma de Teleformacin de IFES

Pgina 5 de 240

Pgina esttica

Elementos del proceso:


a) Navegador. Aplicacin que permite al usuario recibir y mostrar
pginas web.
b) Cliente. En el mbito de Internet, es el ordenador que est
conectado a la red. Su funcin se limita a realizar peticiones de pginas
web y mostrar los resultados. Para esto hace uso del Navegador.
c) Internet. Red informtica mundial, descentralizada, formada por
la conexin directa entre computadoras u ordenadores mediante un
protocolo especial de comunicacin.
d) Servidor web (hardware). Ordenador conectado a Internet que aloja
pginas web.
e) Servidor web (software). Programa que transfiere pginas web a los
clientes mediante el protocolo HTTP.

Pgina 6 de 240

Programacin en PHP

El trmino servidor web se usa indistintamente para denominar tanto al ordenador


conectado a Internet que aloja pginas web como a la aplicacin software que gestiona
la transferencia de pginas web.

Pgina dinmica

Ahora hay un nuevo elemento, el servidor de aplicacin.


f) Servidor de aplicacin . Es el programa que colabora con el servidor web para
generar pginas dinmicas.
A diferencia de las pginas estticas, en las que se guardaba en el disco duro
del servidor web el archivo html, las pginas dinmicas no estn directamente
almacenadas en el disco duro del servidor web. En su lugar, hay un programa que se
ejecuta en el servidor de aplicaciones, que es el encargado de crear el archivo que se
transferir al cliente.

Plataforma de Teleformacin de IFES

Pgina 7 de 240

Lenguajes de programacin web


Para generar pginas web se han usado a lo largo del tiempo un gran nmero de
tecnologas. En los comienzos no haba ningn lenguaje de programacin especfico,
por lo que se haca uso de lenguajes de uso ms general como C, C++, Basic o Pascal.
Para comunicar estos programas con el servidor web se haca uso de la especificacin
CGI (Common Gateway Interface o Pasarela de Interfaz Comn). Hoy en da an hay
aplicaciones que siguen este enfoque, y comnmente se las conoce como CGI's.
Pero el uso de lenguajes de uso general haca complicado el proceso de construir
pginas web dinmicas. El cdigo se escriba de forma casi artesanal y era difcil de
mantener y actualizar. Adems el cdigo que funcionaba en un servidor web poda no
funcionar en otro o requerir de un esfuerzo grande para su instalacin. Para colmo de
todos los males, por lo general, los CGI son poco eficientes.
Afortunadamente hoy en da el panorama ha cambiado. El xito de Internet ha ido
acompaado de la aparicin de lenguajes de programacin web que faciliten todo el
proceso. Para especializarse en la creacin de pginas web dinmicas estos lenguajes
intentan cumplir los siguientes objetivos:
Ser de fcil uso, para permitir una curva de aprendizaje sencilla.
Adaptarse rpidamente a la rpida evolucin de Internet, ofreciendo continuamente
nuevas caractersticas y actualizaciones de seguridad.
Tener una gran comunidad de usuarios que garanticen el xito del producto.
De hecho han proliferado tanto que ahora hay una gran cantidad de tecnologas
disponibles, que lanzan los fabricantes con la intencin de acaparar la mayor cuota de
mercado posible. Aun as, hay tres tecnologas mediante las cuales se desarrollan la
mayora de los sitios web.

ASP- Active Server Pages


sta es una tecnologa propietaria de Microsoft. Actualmente est engloba en su
estrategia .NET. Su principal ventaja es su sencillez, adems de una muy buena
integracin con otros productos de Microsoft como su entorno de desarrollo .NET que
permite crear aplicaciones en un tiempo rcord. Se integra muy bien con el servidor
web de Microsoft, el IIS (Internet Information Center).

Pgina 8 de 240

Programacin en PHP

JSP - Java Server Pages


sta es una tecnologa basada en uno de los lenguajes de uso general ms populares,
Java. Es quizs el ms complejo de los tres pero a su vez el ms potente. La gran
comunidad de usuarios garantiza la existencia de numerosas herramientas, libreras
de cdigo abierto y bases de conocimiento. Adems se integra muy bien en el servidor
web mayoritario, Apache, gracias a la extensin Tomcat.

PHP - PHP Hypertext Preprocessor


A su favor tiene el ser una iniciativa de cdigo abierto, por lo que es mantenido e
impulsado por una gran comunidad de programadores. Adems es el ms sencillo de
los tres, por lo que atrae a usuarios de muy diferentes procedencias: programadores en
lenguajes de programacin ms generalistas, diseadores que desean completar sus
conocimientos...

U.D.2. Qu es PHP?

Un poco de historia
Ya hemos visto que PHP responde a las siglas PHP Hypertext Procesor. Pero, como
surgi?
En el ao 1994 el programador dans-canadiense Rasmus Lerdorf lo cre para poder
programar su pgina web personal, que consista bsicamente en un currculum vtae
y un registro del trfico que reciba. Un ao ms tarde lo public con el nombre de
Personal Home Page Tools. En 1997 atrajo el inters de dos programadores israeles
del Technion que rescribieron el intrprete gramatical de este lenguaje creando la base
de la primera versin realmente popular de PHP, PHP 3.
En 1999 rescribieron el lenguaje y lo dotaron de mayor eficiencia mediante el motor
Zend, dando lugar a la versin PHP 4.
La versin 5 de este lenguaje, que incluye un sistema novedoso, el PDO (Objetos
de Informacin de PHP o PHP Data Objects) y mejoras utilizando las ventajas que
provee el nuevo Zend Engine 2. Los cambios que incorpora la versin son notables, y
posicionan a PHP como un lenguaje dinmico muy potente.

Plataforma de Teleformacin de IFES

Pgina 9 de 240

Mientras se escriben estas lneas, se est trabajando en la versin 6 de PHP, aunque


todava no hay una fecha prevista para su lanzamiento.

Caractersticas de PHP
A nivel tcnico se pueden destacar los siguientes aspectos:

Es un lenguaje interpretado (tambin llamado de tipo script).


La sintaxis es similar a los lenguajes de programacin estructurada ms
populares, como C, por lo que resulta muy sencilla la transicin desde otros
lenguajes.
En el cdigo fuente se mezclan habitualmente fragmentos de cdigo PHP
con el cuerpo de la pgina HTML, generando dinmicamente el contenido de
la misma.
Dispone de una gran cantidad de mdulos (tambin llamados extensiones)
que amplian su funcionallidad.
Es un lenguaje portable, es decir, puede ser ejecutado en la mayora de los
sistemas operativos. Tambin existen mdulos interprete para casi todos
los servidores web, y en muchos de ellos viene ya instalado en el paquete
bsico.
Soporta algunas caractersticas de la programacin orientada a objetos.
Se integra bien con otras tecnologas, como XML, Javascript...
Ofrece conexin a numerosas bases de datos en modo nativo: MySQL,
Postgres, Oracle, SQL Server...

Un uso comn es dotar a una aplicacin web de un servidor de base de datos, en el


mundo PHP y Apache sta es MySQL, lo que en conjunto se ha denominado como la
solucin LAMP (Linux, Apache, MySQL y Php).

Pgina 10 de 240

Programacin en PHP

Durante este curso se recomienda el uso de Xampp 1.7.3, un servidor web local que
podr instalar en su ordenador, que viene con Apache, la versin 5.3.1 de PHP y la
herramienta grfica phpMyAdmin 3.2.4 para gestionar bases de datos MySql. Ms
adelante veremos cmo descargar, instalar y configurar este software libre.

Por qu PHP?
Hay muchas razones para aprender a usar PHP:

Como ya se ha dicho con anterioridad el aprendizaje de este lenguaje es


muy sencillo.
No obstante PHP ofrece muchas caractersticas avanzadas al alcance del
programador experto.
Es seguro y robusto, cumpliendo con las exigencias de cualquier entorno
profesional.
Es gratuito (open source), por lo que ha atrado a una gran comunidad
de usuarios. Todos contribuyen de una u otra forma. Los desarrolladores

Plataforma de Teleformacin de IFES

Pgina 11 de 240

expertos arreglando errores y aportando mejoras, los usuarios testeando el


cdigo e intercambiando ideas que podran mejorar el lenguaje.
Existe una gran cantidad de aplicaciones de cdigo abierto que estn
desarrolladas en PHP. Conociendo PHP se tiene siempre la posibilidad de
ampliarlas, personalizarlas y darles el mantenimiento adecuado.
La prctica totalidad de los proveedores de alojamiento de pginas web
ofrece soporte para este lenguaje y acceso a una base de datos MySQL.

U.D.3. Qu es apache?
Apache es un producto software desarrollado por una asociacin de carcter no
lucrativo, la Apache Software Foundation (ASF). La ASF no solo desarrolla el servidor
HTTP Apache, tambin engloba mltiples proyectos, algunos como extensiones del
servidor web y otros independientes.
Dentro de toda la gama de servidores web, Apache es sin duda el que mejor
considerado est por parte de los usuarios. La prueba es que cerca del 60% de los
sitios web estn alojados en servidores de este tipo (estadsticas de enero de 2011 de
http://news.netcraft.com/archives/web_server_survey.html).
Apache se ha ganado la confianza de los usuarios principalmente debido a las
siguientes razones:

Es muy eficiente, robusto y seguro.


Dispone de caractersticas avanzadas como mensajes de error altamente
configurables, contenido negociable, autentificacin...
Est disponible para la mayora de las Plataformas, incluyendo Windows y
Linux.
Es software libre, con las ventajas que esto supone. No solo es que sea
gratuito, sino que adems dispone de una numerosa comunidad de usuarios
que contribuyen a su continua mejora.

La mayor objecin que se le ha puesto a Apache es que no dispone de un modo grfico


amigable para su configuracin, por lo que su aprendizaje puede suponer ms esfuerzo
que el de otros servidores.
Durante este curso se propone la utilizacin de Apache como servidor al que se le
aade como extensin el interprete de PHP.

Pgina 12 de 240

Programacin en PHP

Otros servidores web


La ventaja de este servidor es que dispone de un interfaz grfico amigable que hace
ms sencilla su instalacin, configuracin y despliegue de sitios web. Existen otros
servidores, que, o bien son pequeos productos con pocas caractersticas, o bien son
desarrollos de grandes empresas que no son accesibles al pblico en general.

U.D.4. Instalacin
Las pginas con cdigo PHP son archivos que usan la extensin .php . Como hemos
visto, para poder visualizarlas, tienen que estar alojadas en un servidor web remoto.
Esta solucin no es factible para practicar con el lenguaje ya que tiene las siguientes
desventajas:

Hay que contratar un servicio de alojamiento, lo que puede resultar costoso.


Hay dependencia de la conexin a Internet.
Gestionar los archivos que subimos al servidor a travs de FTP es algo
engorroso y lento, por lo que no se pueden hacer pruebas de cdigo con
agilidad.

La solucin no puede ser ms sencilla. Haremos que nuestro ordenador acte como
servidor web. A esta forma de trabajo se le llama coloquialmente desarrollar en local.
Dependiendo de las habilidades de cada uno en el manejo e instalacin de
aplicaciones un poco ms complejas, como es el caso que nos lleva, del servidor
Apache y su mdulo para PHP, se necesitara un curso para todo ello. Apache se ha
criticado en este aspecto de no contar con una instalacin y/o configuracin grfica/
amigable al usuario, tanto novel como experto.
Afortunadamente existen en el mercado soluciones que integran todo lo que
necesitamos para trabajar, y adems disponen de los llamados instaladores
automticos, que nos dejan preparado y, lo ms importante, configurado de manera
homognea el entorno de desarrollo que vamos a emplear en todo este curso.
De entre los instaladores disponibles, hemos elegido una solucin probada y que cubre
varios sistemas operativos (Windows, GNU/Linux y Mac), como dijimos anteriormente,
se llama XAMPP y la versin ser la 1.7.3. En el curso vamos a usar la versin
para Windows, que ser la referente por facilidad de uso para los usuarios menos
avanzados, aunque veremos algunas pantallas de Linux como alternativa (99%
idnticas).

Plataforma de Teleformacin de IFES

Pgina 13 de 240

En Linux y otros sistemas, podemos usar XAMPP o nos instalaremos Apache+PHP


+MySQL por nuestra cuenta. Esto ltimo para usuarios avanzados, dado que hay que
configurar el sistema, aunque ltimamente, en algunas distribuciones de Linux es muy
sencillo que el sistema nos instale y configure todo por si mismo bajo demanda.

XAMPP en la versin elegida instala las siguientes versiones de Apache, Php y Mysql:

Apache: versin 2.2.14


Php: versin 5.3.1
PhpMyAdmin: versin 3.2.4

Requerimientos:

64Mb de memoria RAM


58Mb de disco
Windows 98, ME, XP Home.Windows NT,2000,XP Professional,GNU/
Linux,MacOS.

Hay que tener en cuenta que XAMPP evoluciona muy rpidamente y que en el
momento de realizar el curso puede encontrarse en una versin posterior. De todas
formas es de esperar que la instalacin siga siendo muy similar o igual.
Descargamos la versin deseada segn el sistema operativo que tengamos desde las
direcciones siguientes:

Windows: http://www.apachefriends.org/en/xampp-windows.html
Linux: http://www.apachefriends.org/en/xampp-linux.html

Instalacin paso a paso sobre Windows


1. Ejecutamos el fichero descargado. Nos aparecer la siguiente ventana
preguntndonos dnde instalar XAMPP:

Pgina 14 de 240

Programacin en PHP

Le dejamos los valores que trae y hacemos clic en Install. En C:\ crear el directorio
xampp.
2. Una vez instalado, entramos en la carpeta C:\xampp y ejecutamos el archivo xamppcontrol. Nos mostrar la siguiente ventana:

Plataforma de Teleformacin de IFES

Pgina 15 de 240

3. Para poner en funcionamiento el servidor apache, haremos clic en el botn Start que
tiene a su derecha. Tambin haremos clic en el botn que hay a la derecha de MySql.
Si todo ha ido bien, nos aparecer la siguiente pantalla:

Pgina 16 de 240

Programacin en PHP

La cual nos muestra el texto Running, lo que indica que tanto Apache como Mysql
estn en funcionamiento.
Mientras estemos utilizando PHP y/o MySql no debemos cerrar esta ventana. Cuando
queramos dejar de usar XAMPP no se debe terminar haciendo clic en el botn cerrar
de la ventana, ya que esto lo que hace es minimizar el programa junto al reloj que hay
abajo a la derecha. Deberemos hacer clic en el botn Exit. Si XAMPP se ha quedado
minimizado, al hacer clic sobre el icono, se muestra la ventana de control.
4. Vamos a comprobar que Apache est funcionando, para ello vamos a ir a la direccin
http://localhost con nuestro navegador favorito y deberamos ver la siguiente pgina:

Plataforma de Teleformacin de IFES

Pgina 17 de 240

Esta pgina web est siendo servida por Apache y PHP (mira la direccin en el
navegador). Pulsaremos en el idioma espaol (Spanish ) para continuar.
5. Pulsaremos en el enlace Estado para probar toda la instalacin definitivamente:

Pgina 18 de 240

Programacin en PHP

Deberamos tener todos los componentes con el estado Activado (color verde) menos
los tres ltimos (color rojo).
Los scripts que creemos deben estar guardados en la carpeta htdocs. Dentro de
esta carpeta podremos crear ms carpetas. Por ejemplo, si tengo la ruta c:\xampp
\htdocs\ejercicios\ejercicio1.php, para probar mi script, en el navegador, y una vez
funcionando XAMPP, escribir lo siguiente http://localhost/ejercicios/ejercicio1.php y
nuestro navegador deber mostrar lo que haga nuestro script.

Instalacin paso a paso sobre Linux


1. Entre como administrador root en su sistema Linux
Su
2. Descomprima el archivo que ha bajado en /otp
tar xvfz xampp-linux-1.7.3a.tar.gz C /opt

Plataforma de Teleformacin de IFES

Pgina 19 de 240

Use slo este comando para instalar XAMPP.


No use ninguna herramienta de Windows para
descomprimir el archivo ya que no funcionar.
Si tiene una versin anterior, sta ser sobrescrita.

Esto es todo. XAMPP ya est instalado en el siguiente directorio /opt/lampp


3. Para que XAMPP empiece a funcionar, escriba el siguiente comando:
/opt/lampp/lampp start
y en su pantalla deber aparecer lo siguiente:
Starting XAMPP 1.7.3a...
LAMPP: Starting Apache...
LAMPP: Starting MySQL...
LAMPP started.
Lo que indica que Apache y MySql estn ejecutndose.
Para detener XAMPP deberemos escribir el siguiente comando:
/opt/lampp/lampp stop
y en la pantalla deber aparecer el siguiente mensaje:
Stopping LAMPP 1.7.3a...
LAMPP: Stopping Apache...
LAMPP: Stopping MySQL...
LAMPP stopped.
4. Vamos a comprobar que est funcionando. Para ellos escribiremos en nuestro
navegador favorito: http://localhost (XAMPP debe estar ejecutndose).
Si todo ha ido bien, deberamos ver la siguiente pantalla

Pgina 20 de 240

Programacin en PHP

Los scripts que creemos deben estar guardados en el siguiente directorio /opt/lampp/
htdocs/. Dentro de ese directorio podremos crear ms directorios. Por ejemplo, si
tengo la ruta /opt/lampp/htdocs/ejercicios/ejercicio1.php, para probar mi script, en
el navegador, y una vez funcionando XAMPP, escribir lo siguiente http://localhost/
ejercicios/ejercicio1.php y el navegador deber mostrar lo que haga nuestro script.

Pgina esttica / dinmica


Este recurso es de tipo Multimedia.
Tiene que conectarse a la plataforma para acceder a este recurso.

Resumen mdulo I
Este recurso es de tipo Multimedia.
Tiene que conectarse a la plataforma para acceder a este recurso.

Plataforma de Teleformacin de IFES

Pgina 21 de 240

Prctica: nuestra primera pgina web


Este recurso es de tipo Prctica.
Tiene que conectarse a la plataforma para acceder a este recurso.

Autoevaluacin mdulo I
Pregunta 1:
Javascript es un lenguaje de programacin que se ejecuta en la mquina cliente.

Verdadero
Falso

Respuesta correcta: Verdadero


Pregunta 2:
Las pginas dinmicas se almacenan en el disco duro del servidor y cuando son
solicitadas posteriormente, se recuperan y transfieren sin ningn procesado
previo.

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 3:
Se puede programar una pgina web dinmica en el lenguaje de uso general C++
y comunicarla con el servidor web mediante la especificacin CGI.

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 4:
PHP se encuentra actualmente en su versin 6.

Verdadero
Falso

Respuesta correcta: Falso

Pgina 22 de 240

Programacin en PHP

Pregunta 5: PHP no permite interconectividad de forma nativa con bases de


datos.

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 6:
Una de las razones del xito de PHP es que es un producto de pago y por lo tanto
el usuario puede reclamar nuevas caractersticas.

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 7:
La solucin LAMP consiste en un servidor web con: Linux, Apache, MySQL y
PHP.

Verdadero
Falso

Respuesta correcta: Verdadero


Pregunta 8:
Instalar un servidor Apache es, por lo general, un proceso complejo que slo est
al alcance de usuarios expertos.

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 9:
La direccin base en la que se pueden ver las pginas que sirve nuestro servidor
Apache en local es http://localhost

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 10:

Plataforma de Teleformacin de IFES

Pgina 23 de 240

Las pginas web que queramos alojar en nuestro servidor de Apache en local
las deberemos poner por debajo de C:\xampp\htdocs\ (donde C:\xampp es el
directorio en el que hemos intalado Apache).

Verdadero

Falso
Respuesta correcta: Verdadero

Pgina 24 de 240

Programacin en PHP

Programacin en PHP

Mdulo II. Conceptos bsicos


U.D.1. Panormica del lenguaje
En este mdulo y en el siguiente se van a describir los elementos y estructuras del
lenguaje. Quien est familiarizado con la programacin estructurada encontrar que la
mayora le son familiares. Concretamente la sintaxis de PHP es heredada del lenguaje
C, Java y Perl. Si ya conocemos C o Java entonces tenemos el 90% del camino
recorrido, en lo que a sintaxis se refiere.
Las explicaciones vienen acompaadas por ejemplos para facilitar su comprensin.
Todos los ejemplos pueden ser probados tal y como se explica en la prctica del
mdulo I. Para ello hay que crear un fichero con un editor de textos, como puede ser el
Bloc de Notas (ficheros planos), dndole un nombre y guardndolo con extensin .php
en la carpeta de publicacin C:\xampp\htdocs\practicasPHP.
Puedes utilizar Notepad++, un editor de texto
gratuito y con buenas prestaciones, que te permite
guardar los archivos con extensin .php. Lo puedes
decargar desde la siguiente direccin http://notepadplus-plus.org/downloads
Los resultados de los programas que hagamos se visualizarn a travs del navegador,
escribiendo en la barra de direcciones la URL de nuestra pgina en local.

http://localhost/practicasPHP/miprograma.php

Vamos a pasar directamente a dar una visin general del lenguaje.

Bloques de cdigo PHP


Una pgina web en PHP generalmente contiene dos tipos de cdigo: cdigo HTML y
cdigo PHP. El cdigo de PHP que va a procesar el interprete puede estar dentro de
una de las siguientes etiquetas:
<?php ... ?>

Plataforma de Teleformacin de IFES

Pgina 25 de 240

<script language="php"> ... </script>


<% ... %>
<? ... ?>
Nosotros vamos a usar la primera (es la ms usual), las dos ltimas hay que activarlas
exprsamente en la configuracin de PHP.
Ejemplo 2.1.1. Aqu podemos ver una pgina muy sencilla. Tiene tres bloques de
cdigo: al comienzo la cabecera HTML, despus un fragmento en PHP y finalmente el
cierre de la pgina otra vez en HTML.

En un fichero PHP pueden alternarse tantos bloques HTML con bloques PHP como
se quiera, siempre que estos ltimos estn abiertos y cerrados por las etiquetas
adecuadas.

Sentencias en PHP
Una sentencia es una instruccin bsica que realiza alguna accin. Tambin se le
llama a veces lnea de cdigo, aunque estrictamente hablando no tiene que ocupar
exactamente una lnea en el fichero.

Pgina 26 de 240

Programacin en PHP

Es imprescindible que las sentencias estn bien diferenciadas. Para ello en PHP toda
sentencia debe ser terminada con un punto y coma " ; ". La nica excepcin a esto es
la ltima sentencia antes del fin de un bloque de cdigo PHP, indicado por "?> ".
Ejemplo 2.1.2. Los siguientes bloques de cdigo estn bien formados, ya que todas las
sentencias, salvo la ltima, terminan con un punto y coma:
<?php echo "Este texto se mostrar en la pgina web." ?>
<?= "Este texto se mostrar en la pgina web." ?>
<?php print("Este texto se mostrar en la pgina web.") ?>

Las instruccines echo y print()


Una de las instrucciones bsicas de PHP es la instruccin echo . Se limita a interpretar
el texto que se pone a continuacin e insertarlo en la pgina web. Una forma alternativa
de conseguir esto es haciendo uso de la etiqueta:
<?= ... ?>
La funcin print() tambin es equivalente a echo .
Ejemplo 2.1.3. Los siguientes bloques de cdigo PHP son equivalentes y por lo tanto
producen el mismo resultado:
<?php echo "Este texto se mostrar en la pgina web." ?>
<?= "Este texto se mostrar en la pgina web." ?>
<?php print("Este texto se mostrar en la pgina web.") ?>
Ejemplo 2.1.4. En muchas ocasiones querremos insertar un salto de lnea en la pgina
de salida. En HTML el salto de lnea se marca con la etiqueta <br> , por lo que para
conseguir este resultado lo haremos de forma similar a como se hace a continuacin:
<?php
echo "Esta es la primera lnea.";
echo "<br>"; //Salto de lnea HTML

Plataforma de Teleformacin de IFES

Pgina 27 de 240

echo "Esta es la segunda lnea.";


?>
No se debe usar el formato corto de etiquetas
cuando se desarrollen aplicaciones o bibliotecas con
intencin de redistribuirlas, o cuando se desarrolle
para servidores que no estn bajo nuestro control,
porque puede ser que el formato corto de etiquetas
no est soportado en el servidor. Para generar
cdigo portable y redistribuble, asegrate de no
usar el formato corto de etiquetas.

Funciones en PHP
En PHP hay dos tipos de funciones, las que estn definidas por el propio lenguaje y las
que puede crear a medida el programador. Estas ltimas las veremos en la U.D.3. del
mdulo III.
Pero en los trozos de cdigo que vienen a continuacin nos encontraremos que para
hacer acciones complejas deberemos usar las funciones predefinidas del lenguaje PHP.
stas se caracterizan por un identificador seguido por un parntesis,dentro del cual
ponemos los parmetros que tenemos que pasarle a la funcin.
A medida que las vayamos usando, iremos describiendo las funciones definidas. Un
ejemplo de este tipo de funciones que hemos visto ya es la instruccin print() .

Comentarios en PHP
Los cometarios son ignorados por el interprete a la hora de generar la pgina. De
todas formas cumplen una funcin esencial, aumentar la legibilidad del cdigo, para
su posterior mantenimiento por nosotros o por otra persona. Con los comentarios
describiremos la funcin de determinados fragmentos de cdigo.
En PHP hay tres formas de poner comentarios:
<?php
// Este es un comentario de una sola lnea
/* Este es un comentario

Pgina 28 de 240

Programacin en PHP

que ocupa varias lneas */


# Esta forma de poner comentarios de una lnea se usa menos
?>
Hay que tener en cuenta que si bien los comentarios ayudan a comprender el cdigo
y ,por lo tanto ,facilitan el mantenimiento del cdigo por nuestra parte o por la de otras
personas. Un abuso de los mismos puede hacer difcil distinguir a primera vista el
propsito del cdigo. Lo ideal es escribir un cdigo limpio que resulte lo ms legible
posible y limitar el uso de comentarios a aquellas ocasiones en los que haya que hacer
una aclaracin imprescindible.
Tambin es habitual insertar anotaciones en el cdigo a medida que se est
construyendo, cuando an no ha tomado su forma final. Este tipo de comentarios es
conveniente eliminarlo en cuanto dejan de ser necesarios.
Hay dos palabras que se usan habitualmente en los comentarios durante el desarrollo.
<?php
//FIXME: Marca un trozo de cdigo que habra que mejorar
//DOME: Marca una caracterstica sin programar
?>
No est de ms recordar que los comentarios son parte del cdigo PHP, por lo que
han de estar en bloques de cdigo PHP (es decir, abiertos por la etiqueta "<php " y
cerrados por la etiqueta "?> ".

Errores en PHP
Sin lugar a dudas, cuando programemos, cometeremos errores, como olvidar poner
un punto y coma al final de una instruccin, o no cerrar adecuadamente unas comillas.
Cuando vayamos a intentar ver el resultado en el navegador aparecer un mensaje de
error (o varios) similar a ste.

Plataforma de Teleformacin de IFES

Pgina 29 de 240

El mensaje est en ingls y es muy probable que no nos oriente de qu es lo que


est fallando. Pero lo importante es que s que nos muestra dnde (en qu lnea) est
fallando, por lo que podremos dirigirnos a ella y arreglar el fallo.

Inhibir errores
En ocasiones no querremos que el error se vea por pantalla. Para conseguir esto
pondremos el smbolo arroba "@" antes de la sentencia en la que se produce el fallo.
Ejemplo 2.1.5. El primer trozo de cdigo muestra un mensaje de error al intentar abrir
un archivo que no existe. En cambio en el segundo fragmento se hace uso del smbolo
@ para evitar que dicho error se muestre por pantalla.
<?php
$archivo = fopen("noexiste.txt", "r");
?>
<?php
@$archivo = fopen("noexiste.txt", "r");
Pgina 30 de 240

Programacin en PHP

?>

U.D.2. Variables

Datos en PHP
En PHP definimos los datos con los que vamos a trabajar como variables. Una variable
no es ms que una estructura de datos cuyo valor puede cambiar durante la ejecucin
del programa. PHP trabaja con cuatro tipos de datos sencillos: integer (nmero entero),
float (nmero con decimales), string (cadena de texto) y boolean (verdadero o falso).
El separador de decimales en PHP es el punto, como en la mayora de los lenguajes de
programacin.
Ejemplo 2.2.1. Veamos algunos ejemplos de los diferentes tipos de datos. Como se
observa, los tipos string se escriben entre comillas, que pueden ser simples o dobles.
11
43.95
"Cdigo postal"
'08080'
TRUE

//esto es un dato de tipo integer


//esto es un dato de tipo double
//esto es un dato de tipo string
//esto tambin es un dato de tipo string
// esto es un dato de tipo boolean

Para especificar un literal boolean, use alguna de las palabras clave TRUE o FALSE.
Ambas son insensibles a maysculas y minsculas.
Ejemplo 2.2.2. Si queremos escribir un dato que contenga comillas dobles lo
escribiremos encerrado entre comillas simples. Y si queremos escribir un dato que
contenga comillas simples lo encerraremos en comillas dobles.
'Leopoldo Alas "Clarin" fu un gran escritor...'

Nombre de variables
Todas las variables en PHP se distinguen por comenzar con el smbolo del dolar,
"$", seguido del nombre de la variable. El nombre de una variable ha de empezar

Plataforma de Teleformacin de IFES

Pgina 31 de 240

necesariamente por una letra o el smbolo guin bajo "_" seguido por cualquier
combinacin de nmeros, letras o guiones bajos.
Ejemplo 2.2.3. Diferentes ejemplos de nombres de variables, vlidos y no vlidos.
<?php
$apellido1;
$_tfno;
$1apellido;
$email@;

//nombre de variable vlido


//nombre de variable vlido
//no vlido, empieza por un nmero
//no vlido, contiene el smbolo @

?>

El tipo de una variable usualmente no es declarado por el programador; en cambio, es


decidido en tiempo de ejecucin por PHP dependiendo del contexto en el que es usada
la variable.
En el siguiente cdigo podemos comprobar que las variables $numero1 y $numero2 se
han definido como string (van entre comillas), pero como la operacin que realizamos
entre ellas es una suma, PHP entienda que se tiene que tratar de nmeros, por ello en
la variable $resultado almacena 30.
<?php
$numero1 = "10";
$numero2 = "20";
$resultado = $numero1 + $numero2;
echo "El resultado es $resultado";
?>
Otros lenguajes de programacin usan el signo ms
para concatenar cadenas. No es el caso de PHP,
el cual utiliza el punto. Si cambiamos el signo ms
por el punto, veremos que el resultado en este caso
ser 1020. El manejo de cadenas se estudiar ms
adelante.

Pgina 32 de 240

Programacin en PHP

Es importante tener en cuenta que en los nombres


de variables se distingue entre maysculas y
minsculas.

Ejemplo 2.2.4. Mediante este ejemplo se puede ver que PHP distingue entre
maysculas y minsculas en los nombres de variables.
<?php
$precio = 33;
$Precio = 55;
echo "La variable precio contiene el valor ";
echo $precio;
echo "<br>";
echo "La variable Precio contiene el valor ";
echo $Precio;
?>
A pesar de que tenemos gran libertad a la hora de poner nombres a las variables, es
recomendable seguir los siguientes consejos para que el cdigo resulte ms legible:

Usar nombres de variable que tengan significado.


No usar nombres de variable demasiado largos (12-16 caracteres deberan
ser suficientes en la mayora de los casos).
No usar como nombre de variable palabras clave de PHP.

Ejemplo 2.2.5. Los siguientes nombres de variable no son recomendables.


<?php
$x37;
//no tiene significado
$preciodelproductoconiva //demasiado largo
$echo
//echo es una palabra clave de PHP
?>

Plataforma de Teleformacin de IFES

Pgina 33 de 240

Asignacin de datos a variables


Como se ha ido viendo en los ejemplos, a las variables se les asigna un dato mediante
el smbolo igual "=".
Ejemplo 2.2.6. Asignacin de un dato de tipo cadena a una variable.
<?php
$telefono = "918903220";
?>
Hay que tener en cuenta que PHP es un lenguaje poco tipado, Las variables no tienen
un tipo de datos predefinido, el tipo vendr dado segn el contenido de la variable o el
contexto donde se trate. Este es el punto mas dbil del lenguaje, aunque le aporta una
sencillez y flexibilidad propias.

Constantes
Las constantes son una manera de asignar a un identificador valores simples que no
van a variar. La declaracin de una constante se realiza mediante la funcin define() .
El nombre de la constante debe seguir las mismas reglas que las variables, solo que no
lleva delante el smbolo del dlar, "$", ya que no es una variable. Una prctica habitual
es poner los nombres de las constantes en maysculas.
Ejemplo 2.2.7. Mostramos a continuacin declaraciones de constantes. Algunas son
correctas y otras incorrectas.
<?php
// Nombre de constantes correctos
define("PAIS", "Espaa");
define("CAPITAL2010","Madrid");
define("HABITANTES_ACTUALES", "46M");
// Nombres de constantes incorrectos
define("2AUTONOMIAS", 17); // No puede comenzar por nmero
?>

Pgina 34 de 240

Programacin en PHP

Ejemplo 2.2.8. Sabemos a ciencia cierta que el nmero PI no va a cambiar. En lugar


de tener que teclearlo varias veces a lo largo del cdigo podemos definir una constante
con el identificador PI.
<?php
$define("PI", 3.1416);
echo PI; //No se pone el smbolo dlar
?>
Existen constantes predefinidas por el ncleo de PHP. Pero por el momento no las
vamos a utilizar.
Si en mi cdigo coincide una constante que yo defina con otra predefinida por PHP, no
me mostrara el valor indicado en la funcin define(), si no el valor que PHP le tiene
asignado.
Ejemplo 2.2.9. En el siguiente fragmento de cdigo el valor mostrado no ser Espaa,
mostrar 5.3.1 que es el valor predefinido por PHP para esa constante. Que es la
versin que estoy ejecutando de PHP.
<?php
define("PHP_VERSION", "Espaa");
echo PHP_VERSION;
?>

U.D.3. Operadores
Los operadores son utilizados para realizar clculos y manipular datos en el mbito de
una expresin. Las expresiones ms comunes que conocemos, como la multiplicacin,
implican la participacin de dos operandos (los datos) y un operador (el smbolo de
la multiplicacin). En PHP puede haber:

Operadores unarios: La expresin manipula un nico dato.


Operadores binarios: La expresin manipula dos datos.
Operadores ternarios: La expresin manipula tres datos.

Plataforma de Teleformacin de IFES

Pgina 35 de 240

Ejemplo 2.3.1. Los datos pueden ser introducidos directamente o estar almacenados
en variables. El resultado de la operacin se suele asignar a una variable, aunque
puede formar parte de una expresin mayor. Esta variable a la que se asigna el
resultado puede ser parte de la expresin.
<?php
echo "La variable z vale ";
$z = 1 + 5; //Los datos se introducen directamente
echo $z;
echo "<br>";
echo "La variable z vale ";
$x = 2;
$y = 3;
$z = $x + $y; //Los datos estn almacenados en variables
echo $z;
echo "<br>";
echo "La variable z vale ";
$z = $x + $z; //La variable $z aparece en la expresin
echo $z;
?>
Lo habitual es clasificar a los operadores segn el tipo de clculo o manipulacin que
realizan.

Operadores aritmticos
En PHP hay cinco operadores que realizan operaciones matemticas entre dos datos y
un operador unario, el signo de negacin.

Pgina 36 de 240

Programacin en PHP

Ejemplo 2.3.2. Aqu se experimenta con varias operaciones aritmticas.


<?php
echo "El resultado de sumar 5 y 3 es ";
$z = 5 + 3;
echo $z;
echo "<br>";
echo "El resultado de restar 3 a 5 es ";
$z = 5 - 3;
echo $z;
echo "<br>";
echo "El resultado de multiplicar 5 y 3 es ";
$z = 5 * 3;
echo $z;
echo "<br>";
echo "El resultado de dividir 5 entre 3 es ";
$z = 5 / 3;
echo $z;
echo "<br>";
echo "El resultado de calcular 5 mdulo 3 es ";

Plataforma de Teleformacin de IFES

Pgina 37 de 240

$z = 5 % 3;
echo $z;
echo "<br>";
echo "El resultado de cambiar el signo a la variable $z es ";
$z = -$z;
echo $z;
?>

Operadores de comparacin
En el siguiente mdulo se tratar de las sentencias de control. stas utilizan el
resultado de unas expresiones especiales para decidir cules sern las instrucciones
que ejecutarn luego. Las expresiones bsicas que utilizan son el resultado de una
condicin. Este resultado solo puede tomar dos valores: verdadero o falso.
PHP tiene dos constantes predefinidas para designar los valores verdadero y falso,
que son, como caba esperar, TRUE y FALSE. Se pueden usar tambin en minsculas,
aunque conviene recordar que la prctica habitual en programacin es usar las
constantes en maysculas.
Cuando el resultado es verdadero la expresin de comparacin devolver TRUE, si la
evaluacin de la expresin de comparacin es falsa PHP devolver como resultado
FALSE.

Pgina 38 de 240

Programacin en PHP

A nivel interno PHP no almacena TRUE o FALSE, sino que interpreta el valor 0 como
falso y el 1 como verdadero (realmente interpreta como verdadero cualquier valor que
sea diferente de 0. Por ejemplo, en PHP el valor 5 es interpretado como verdadero ).
Ejemplo 2.3.3. En este ejemplo aparece la construccin if ... else que se ver en la
proxima unidad didctica.
<?php
echo "Es 5 igual a 3? ";
if (5 == 3) {
echo "TRUE";
}
else {
echo "FALSE";
}
echo "<br>";
echo "Es 5 diferente a 3? ";
if (5 != 3) {
echo "TRUE";
}
else {
echo "FALSE";
}
Plataforma de Teleformacin de IFES

Pgina 39 de 240

echo "<br>";
echo "Es 5 menor que 3? ";
if (5 < 3) {
echo "TRUE";
}
else {
echo "FALSE";
}
echo "<br>";
echo "Es 5 mayor que 3? ";
if (5 > 3) {
echo "TRUE";
}
else {
echo "FALSE";
}
?>

Operadores lgicos
Los operadores lgicos sirven para relacionar los resultados de condiciones, es decir,
combinan los resultados de valores TRUE y FALSE. Son tiles para representar
expresiones del tipo Es cierto que Madrid es la capital de Espaa y que a la vez
Madrid es la ciudad ms poblada de Espaa?

Pgina 40 de 240

Programacin en PHP

Ejemplo 2.3.4. Al conjunto de combinaciones de valores que pueden tomar los


operandos y el resultado de la operacin se le conoce en lgica como tabla de verdad.
En el siguiente ejemplo construiremos la tabla de verdad del operador AND. De forma
similar se podra construir la tabla de verdad del resto de los operadores.
<pre>
<?php
echo "Tabla de verdad del operador AND ";
echo "<br>";
echo "<br>";
echo "opdo1 | opdo2 | opdo1 AND opdo2";
echo "<br>";
echo "------+-------+----------------";
echo "<br>";
echo "TRUE | TRUE | ";
if (TRUE && TRUE) {
echo "TRUE ";
}
else {
echo "FALSE";
}
echo "<br>";
echo "TRUE | FALSE | ";
if (TRUE && FALSE) {
Plataforma de Teleformacin de IFES

Pgina 41 de 240

echo "TRUE ";


}
else {
echo "FALSE";
}
echo "<br>";
echo "FALSE | TRUE | ";
if (FALSE && TRUE) {
echo "TRUE ";
}
else {
echo "FALSE";
}
echo "<br>";
echo "FALSE | FALSE | ";
if (FALSE && FALSE) {
echo "TRUE ";
}
else {
echo "FALSE";
}
?>
</pre>

Operador de unin de cadenas


En la mayora de ejemplos anteriores, cuando hemos querido imprimir un texto
por pantalla que estaba formado por varios fragmentos, hemos tenido que usar
una instruccin echo por cada uno de los fragmentos. El operador de unin de cadenas
nos permite unir los fragmentos para, por ejemplo, usar una sola instruccin echo.

Pgina 42 de 240

Programacin en PHP

Ejemplo 2.3.5. Se pueden concatenar directamente cadenas de texto con datos de tipo
entero. Los datos que se concatenan se pueden introducir directamente o extraer de
variables.
<?php
$x = 2;
$y = 3;
$z = $x + $y;
echo "El resultado de sumar 2 y 3 es " . 5 . "<br>";
echo "El resultado de sumar 2 y 3 es " . (2 + 3) . "<br>";
echo "El resultado de sumar 2 y 3 es " . $z . "<br>";
?>

Operadores de asignacin
En la unidad didctica sobre variables hemos visto el operador bsico de asignacin,
que es el smbolo igual "=". Pero hay otros operadores que permiten hacer una
operacin y una asignacin a la vez y, por lo tanto, producen un cdigo ms
comprimido. El uso de estos operadores es desaconsejable para el programador
principiante ya que puede llevar a un cdigo poco legible y como consecuencia a
asignaciones errneas.
Los operadores de asignacin comprimidos y sus equivalencias son:

Plataforma de Teleformacin de IFES

Pgina 43 de 240

Precedencia de operadores
Un ltimo aspecto que conviene mencionar es, qu pasa cuando en una expresin
compleja aparece ms de un operando? En ese caso, qu operaciones se evaluan
antes?.
Cuando hay expresiones complejas con ms de un operando, hay unos que se evaluan
antes de otros, con el siguiente orden, teniendo en cuenta que los de arriba se evalan
antes que los de abajo, y que los de la misma fila tienen igual precedencia (se evalan
de izquierda a derecha):

En cualquier caso podemos alterar la precedencia mediante la inclusin de partentesis


alrededor de las expresiones. De hecho es muy recomendable hacerlo incluso aunque

Pgina 44 de 240

Programacin en PHP

exista una regla de precedencia que produzca el mismo resultado, para dar mayor
claridad al cdigo.
Ejemplo 2.3.6. La multiplicacin tiene precedencia sobre la suma por lo que, sin
parntesis, en la expresin 2 + 5 * 4 se evala primero 5 * 4 y luego se le suma 2.
<?php
echo "El resultado de (2 + 5) * 4 es " . ((2 + 5) * 4);
echo "<br>";
echo "El resultado de 2 + 5 * 4 es " . (2 + 5 * 4); //El ltimo caso resulta
ms legible si ponemos lo que sigue
echo "El resultado de 2 + 5 * 4 es " . (2 + (5 * 4));
?>

U.D.4. Sentencias de control


Hasta ahora solo hemos visto instrucciones muy sencillas. Adems lo nico
que podamos hacer con ellas es ejecutarlas secuencialmente. Pero, tenemos
herramientas para elegir una alternativa entre dos? O para escribir 5 veces un texto
por pantalla? Para hacer frente a estas situaciones se incluyen las sentencias de
control.

Estructuras condicionales.
Instruccin if
Las instrucciones condicionales permiten ejecutar diferentes fragmentos de cdigo
en funcin del resultado de una expresin condicional. La instruccin bsica es if . La
sintaxis es:
if (condicin ) {
Cdigo a ejecutar si la condicin es cierta
}

Plataforma de Teleformacin de IFES

Pgina 45 de 240

Cuando el cdigo a ejecutar si la condicin es cierta es una sola sentencia se


pueden omitir las llaves "{" "}". En cualquier caso es preferible no omitirlos ya que dan
mayor claridad a cules son exctamente las sentencias que se ejecutan en el caso de
cumplirse la condicin.
Ejemplo 2.4.1. Las dos construcciones siguientes son equivalentes, aunque es
preferible siempre usar la primera por claridad:
<?php
$hora = 8; // La hora en formato de 24 horas
if ($hora == 8) {
echo "Suena el despertador.";
}
echo "<br>";
if ($hora == 8) echo "Suena el despertador.";
?>
Ejemplo 2.4.2. Veamos la diferencia entre poner llaves para encuadrar un bloque de
texto entre llaves y no hacerlo:
<?php
$hora = 11; // La hora en formato de 24 horas
if ($hora == 8) {
echo "Suena el despertador. ";
echo "Es la hora de levantarse.";
}
echo "<br>";
if ($hora == 8) echo "Suena el despertador. ";
echo "Es la hora de levantarse.";
?>

Instruccin else
En muchos casos no nos bastar con ejecutar un cdigo si ese cumple la condicin
sino que querremos elegir entre dos opciones alternativas y mutuamente excluyentes.

Pgina 46 de 240

Programacin en PHP

En estos casos la sentencia if se completa con un bloque de cdigo que se ejecuta solo
si es falsa la condicin:
if (condicin ) {
Cdigo a ejecutar si la condicin es cierta
}
else {
Cdigo a ejecutar si la condicin es falsa
}
Ejemplo 2.4.3.
<?php
$hora = 17; // La hora en formato de 24 horas
if ($hora <= 12) {
echo "Son las " . $hora . " de la maana";
}
else {
echo "Son las " . ($hora - 12) . " de la tarde";
}
?>

Instruccin else if
Tambin puede suceder que queramos encadenar diferentes condiciones. Para ello
se puede encadenar una sentencia else con un nuevo condicional. A su vez la nueva
sentencia if puede ser completada por un else.
if (condicin1 ) {
Cdigo a ejecutar si la condicin1 es cierta
} else if (condicin2 ) {
Cdigo a ejecutar si la condicin1 es falsa y la 2 cierta
}
else {
Cdigo a ejecutar si ambas condiciones son falsas
}

Plataforma de Teleformacin de IFES

Pgina 47 de 240

Ejemplo 2.4.4. Se pueden encadenar varias sentencias else if como se ve en el


siguiente programa:
<?php
$hora = 14; // La hora en formato de 24 horas
if ($hora == 8) {
echo "Es la hora de desayunar.";
} else if ($hora == 14) {
echo "Es la hora de la comida.";
}
else if ($hora == 21) {
echo "Es la hora de la cena.";
}
else {
echo "Ahora no toca comer.";
}
?>

Instruccin switch
En el caso anterior se elega entre varias opciones alternativas y excluyentes. PHP
nos ofrece una instruccin que nos facilita la tarea, siempre que haya que elegir entre
varias posibles. A diferencia de la instruccin if , si queremos que se ejecuten varias
instrucciones, no ser necesario englobarlas entre llaves "{" "}". La ejecucin seguir
hasta que encuentre el siguiente break.
switch (expresion ) {
case etiqueta1 :
Cdigo a ejecutar si expresin == etiqueta1
break;
case etiqueta2 :
Cdigo a ejecutar si expresin == etiqueta1
break;
case default :
Cdigo a ejecutar si no se verifica ninguna etiqueta
break;
}

Pgina 48 de 240

Programacin en PHP

El bloque de cdigo detras de default se ejecuta en el caso de que no se haya


verificado ninguno de los casos anteriores. Terminar el bloque de instrucciones
default con una instruccin break es opcional, pero es recomendable ya que mejora la
legibilidad.
Ejemplo 2.4.5. Puede haber tantas sentencias case como sea necesario.
<?php
$hora = 14; // La hora en formato de 24 horas
switch ($hora) {
case 9:
echo "Es la hora de desayunar.";
break;
case 14:
echo "Es la hora de comer.";
break;
case 21:
echo "Es la hora de merendar.";
break;
default:
echo "Ahora no toca comer.";
break;
}
?>
Ejemplo 2.4.6. Aqu se puede observar dos estrategias que nos pueden ser tiles
en algunos casos. La primera es formar un grupo de alternativas que producen un
resultado. La segunda es omitir intencionadamente la instruccin break al final de un
bloque.
<?php
$hora = 19; // La hora en formato de 24 horas
switch($hora) {
case 24: case 23: case 22:
echo "Ya he cenado.";
case 21: case 20: case 19: case 18: case 17: case 16: case 15:
echo "Ya he comido.";
case 14: case 13: case 12: case 11: case 10:

Plataforma de Teleformacin de IFES

Pgina 49 de 240

echo "Ya he desayunado.";


break;
default:
echo "Tengo hambre";
break;

?>

Estructuras iterativas
En muchas ocasiones, al programar, hay una accin que se repite varias veces.
Podramos poner varios bloques de cdigo iguales seguidos para conseguir este
efecto, pero esto nos conducira a un cdigo redundante y muy largo. Adems, qu
sucede si no conocemos las veces que queremos repetir el cdigo a priori?

Instruccin while
Es la estructura ms sencilla. Repite indefinidamente la ejecucin de un bloque de
cdigo mientras la evaluacin de la condicin sea cierta. La forma que tenemos de
controlar cuantas veces se repite el bucle while es a travs de la condicin. Por lo tanto,
en el cuerpo del bucle se han de modificar las variables que intervienen en la condicin
de tal forma que en algn momento sea falsa.
while (condicin ) {
Cdigo a ejecutar mientras la condicin sea cierta
}
Ejemplo 2.4.7. El ejemplo ms tipo de ejecucin de un bucle es contar. Es importante
observar dos cosas:
1. La variable $i se inicializa fuera del bucle.
2. La variable $i se modifica en la ltima instruccin del cuerpo del
bucle. De esta forma cada vez que se evala la condicin ha cambiado.
Cuando $i llega a valer 11 la condicin es falsa y el bucle termina.
<?php
$i = 1;

Pgina 50 de 240

Programacin en PHP

while ($i <= 10) {


echo "Lnea " . $i;
echo "<br>";
$i++;
}
?>
Ejemplo 2.4.8. Un ejemplo un poco ms complejo. En la expresin condicin del bucle
se hace uso de una constante por primera vez en los ejemplos.
<?php
define(HORA_DE_CENAR, 21); //Constante
$hora = 12; // La hora en formato de 24 horas
while ($hora < HORA_DE_CENAR) {
echo "Son las " . $hora . ". ";
echo "Faltan " . (HORA_DE_CENAR - $hora) . " horas ";
echo "para la cena.";
echo "<br>";
$hora++;
}
echo "Son las " . $hora . ". Es la hora de la cena.";
?>

Instruccin do ... while


En PHP se dispone tambin de la estructura do ... while, que a diferencia de la anterior
evala la condicin al final en lugar de al principio del bucle. De esta forma el bucle
se ejecuta siempre al menos una vez y a partir de ese momento se repite mientras la
condicin sea cierta.
do {
Cdigo a ejecutar
} while (condicin );
Ejemplo 2.4.9. Uno de los casos en los que se usa esta estructura es cuando se est
esperando recibir un dato en concreto y hay que realizar varias veces una lectura de un
Plataforma de Teleformacin de IFES

Pgina 51 de 240

dato hasta que se recibe el dato esperado. Como an no conocemos ninguna forma de
recibir datos, se ha optado por generarlos aleatoriamente. En este ejemplo se simula el
lanzamiento de un dado de parchs.
<?php
do {
$dado = rand(1,6); //rand() devuelve un valor aleatorio
echo "Tirando el dado... ";
echo "ha salido un " . $dado . ".";
echo "<br>";
} while ($dado != 5);
echo "Bien! Saco una ficha de casa.";
?>

Instruccin for
La instruccin for es probablemente la ms fcil de comprender para las personas que
estn aprendiendo a programar, dado que, en la mayora de los casos se conoce el
nmero de veces que se va a ejecutar el bucle antes de entrar al mismo. La sintaxis
que tiene PHP es:
for (inicializacin ; condicin ; incremento ) {
Cdigo a ejecutar
}
El bucle se ejecutar mientras la condicin sea TRUE.
Ejemplo 2.4.10. Aqu se puede ver un bucle for sencillo que, al igual que el bucle while
del ejemplo 2.4.7., imprime 10 lneas numeradas. Como se puede observar es habitual
utilizar la variable $i en el cuerpo del bucle. A esta variable se le llama a veces ndice.
<?php
for ($i = 1; $i <= 10; $i++) {
echo "Lnea " . $i;
echo "<br>";
}

Pgina 52 de 240

Programacin en PHP

?>
Ejemplo 2.4.11. La instruccin de incremento no tiene por qu hacer aumentar el valor,
tambin lo puede hacer retroceder. En este ejemplo se imprime una cuenta atrs.
<?php
echo "Cuenta atrs.";
echo "<br>";
for ($i = 10; $i >= 0; $i--) {
echo $i . " ... ";
echo "<br>";
}
echo "Ignicin!";
?>
Ejemplo 2.4.12. Tambin se puede hacer que la instruccin incremento aumente el
valor en cada paso un nmero distinto de 1. El siguiente programa cuenta los nmeros
del 3 al 15 de 3 en 3.
<?php
for ($i = 3; $i <= 15; $i = $i + 3) {
echo $i;
echo "<br>";
}
?>
Ejemplo 2.4.13. La condicin no tiene por qu ser necesariamente sobre la variable
declarada como ndice . En este ejemplo se puede observar esto. El resultado es el
mismo que con el ejercicio anterior.
<?php
$j = 3;
for ($i = 1 ; $j <= 15 ; $i++) {
$j = $i * 3;

Plataforma de Teleformacin de IFES

Pgina 53 de 240

echo $j;
echo "<br>";
}
?>
De todas formas es muy recomendable que la condicin sea sobre el ndice. Tambin
hay que evitar alterar el contenido del ndice en el cuerpo del bucle, pues puede llevar a
comportamientos impredecibles si no se tiene cuidado.

Anidamiento de bloques de cdigo


Hasta ahora hemos visto a las sentencias de control actuar de forma aislada. Pero
en la mayora de las situaciones nos encontraremos que para obtener el resultado
esperado hemos de hacer que trabajen juntas. Esto no supone ningn problema. Un
bloque de cdigo dentro de una sentencia de control puede contener varias sentencias
condicionales, y a su vez los bloques de cdigo de stas, nuevas sentencias
condicionales.
Ejemplo 2.4.14. Aqu se puede ver un caso tpico del uso de sentencias de control
anidadas.
<?php
for ($i = 1; $i <= 10; $i++) {
if (($i % 2) == 1) {
echo "El " . $i . " es un nmero impar.";
echo "<br>";
}

else {
echo "El " . $i . " es un nmero par.";
echo "<br>";
}

?>
El principal problema con el que nos podemos encontrar es tener un cdigo poco
legible. Para evitarlo es recomendable poner espacios delante de cada bloque de
cdigo de tal forma que el comienzo de las instrucciones comience a diferentes

Pgina 54 de 240

Programacin en PHP

distancias del margen dependiendo del bloque en el que se est. A esta tcnica se le
llama sangrado.
El sangrado ms habitual es de 4 espacios en blanco por cada nivel de anidamiento.
Todos los fragmentos de cdigo que se han incluido hasta ahora se han puesto con
este estilo de sangrado con el que es ms frecuente encontrrselos.
Ejemplo 2.4.15. Este cdigo es idntico al anterior pero sin sangrado. Es obvio que en
ste es mucho ms difcil comprender el flujo del programa.
<?php
for ($i = 1; $i <= 10; $i++) {
if (($i % 2) == 1) {
echo "El " . $i . " es un nmero impar.";
echo "<br>";
} else {
echo "El " . $i . " es un nmero par.";
echo "<br>";
}
}
?>
El sangrado no es obligatorio, el cdigo funcionara igual sin hacerlo, pero como se ha
visto en este ejemplo, los programas se vuelven prcticamente ilegibles.
Ejemplo 2.4.16. Mediante el anidamiento se pueden conseguir resultados interesantes
con muy poco cdigo. En el siguiente ejemplo se va a dibujar una tabla de multiplicar.
<table>
<?php
for ($i = 1; $i <= 10; $i++) {
echo "<tr align='right'>";
for ($j = 1; $j <= 10; $j++) {
echo "<td width='25'>" . ($i*$j) . "</td>";
}
}

echo "</tr>";

Plataforma de Teleformacin de IFES

Pgina 55 de 240

?>
</table>

Terminacin de los bucles


Si no controlamos bien la condicin del bucle, sta nunca se evaluar a falso y el bucle
se evaluar indefinidamente, dando lugar a un bucle infinito. ste es uno de los errores
ms habituales. En bucles complejos puede ser fcil perder de vista cules son las
variables que intervienen en la evaluacin de la condicin.
Ejemplo 2.4.17. ste es un bucle infinito que escribir indefinidamente una frase por
pantalla. El bucle no se detiene hasta que no paremos la descarga desde el navegador
o nos quedemos sin memoria.
<?php
while (TRUE) {
echo "Hasta el infinito ";
echo "y ms all...";
echo "<br>";
}
?>
Antes de ejecutar este ejemplo, guarda lo que ests
haciendo. Puede ser que se te bloquee el ordenador
y tengas que reiniciarlo.

break
La ejecucin natural de los bucles se puede interrumpir mediante la sentencia break.
En el cuerpo de cualquiera de los tipos de bucle que hemos visto, una sentencia break
causa la finalizacin del mismo sin ejecutarse ninguna sentencia ms del cuerpo del
bucle. En otras palabras, en cuanto se encuentra una sentencia break, se interrumpe la
ejecucin del bucle y se pasa a la siguiente lnea de cdigo despus del bucle.
Ejemplo 2.4.18. Bucle que se interrumpe mediante un break.

Pgina 56 de 240

Programacin en PHP

<?php
while (TRUE) {
echo "Hasta el infinito";
break;
echo " y ms all...";
echo "<br>";
}
?>
Ejemplo 2.4.19. En ocasiones se pone intencionadamente un bucle infinito que se
pretende romper con una sentencia break en su cuerpo.
<?php
define(ALERTA_MISION, 5);
$nivel_alerta = 1;
while (TRUE) {
echo "Hasta el infinito";
if ($nivel_alerta == ALERTA_MISION) {
break;
}
echo " y ms all...";
echo "<br>";
$nivel_alerta++; // Se incrementa en uno
}
echo "Parece que hay alguien en apuros.";
?>

continue
La sentencia continue tiene cierta similitud con la sentencia break.
Su funcionamiento es el siguiente. En cuanto se encuentra una sentencia continue se
ignoran el resto de las instrucciones del cuerpo del bucle pero no se sale del mismo,
sino que se salta a la sentencia de evaluacin de la condicin . Obviamente, si en

Plataforma de Teleformacin de IFES

Pgina 57 de 240

ese momento la condicin del bucle es verdadera, el bucle comenzar una nueva
ejecucin.
Ejemplo2.4.20. Este programa lista los nmeros del 1 al 10, indica los que
son mltiplos de 3, y si son divisibles por 3 nos muestra el resultado de esta divisin.
<?php
for ($i = 1; $i <= 10; $i++) {
echo "El nmero " . $i;
if (($i % 3) != 0) {
echo " no es multiplo de 3.";
echo "<br>";
continue;
}

echo " es multiplo de 3. ";


echo "Por lo tanto ";
echo $i . " dividido entre 3 es igual a " . ($i / 3);
echo "<br>";

?>
Las sentencias break y continue dan lugar, por lo general, a un cdigo ms complejo
y propenso a errores, por lo que no se recomienda su uso por parte del programador
principiante.

Resumen mdulo II
Este recurso es de tipo Multimedia.
Tiene que conectarse a la plataforma para acceder a este recurso.

Prctica: conceptos bsicos


Este recurso es de tipo Prctica.
Tiene que conectarse a la plataforma para acceder a este recurso.

Autoevaluacin mdulo II
Pgina 58 de 240

Programacin en PHP

Pregunta 1:
En las pginas dinmicas programadas en PHP se alternan bloques de cdigo
HTML y bloques de cdigo PHP.

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 2:
Todas las instrucciones, salvo la ltima, han de acabar con un punto y coma.

Verdadero
Falso

Respuesta correcta: Verdadero


Pregunta 3:
En PHP hay solo una forma de mostrar un texto en la pgina web, y es mediante
la sentencia echo .

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 4:
PHP es un lenguaje de programacin fuertemente tipado. Soporta los tipos de
dato integer , long , float , double , boolean y string.

Verdadero
Falso

Respuesta correcta: Falso


Pregunta 5:
"$4ruedas" es un nombre de variable vlido.

Verdadero
Falso

Respuesta correcta: Falso


Pregunta 6:
Plataforma de Teleformacin de IFES

Pgina 59 de 240

Cuando una expresin contiene varios operadores estos se evalan siempre de


izquierda a derecha.

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 7:
La siguiente expresin es verdadera para todos los individuos que tiene el pelo
rubio y los ojos azules.
($pelo == "rubio") && ($ojos != "azules")

Verdadero
Falso

Respuesta correcta: Falso


Pregunta 8:
El siguiente cdigo pintar por pantalla la frase "Ins es una chica muy alta."
<?php
$altura = 1.82;
echo "Ins es una chica ";
if ($altura >= 1.80) {
echo "muy alta.";
} else if ($altura >= 1.70) {
echo "alta.";
} else if ($altura >= 1.60) {
echo "de altura media.";
} else {
echo "bajita.";
}
?>

Verdadero

Falso

Pgina 60 de 240

Programacin en PHP

Respuesta correcta: Verdadero


Pregunta 9:
Si al entrar en un bucle la condicin es verdadera y no se modifica en el cuerpo
del bucle nunca se podr salir de l. Se trata de un bucle infinito.

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 10:
En PHP solo se puede anidar un mximo de una estructura condicional o iterativa
dentro de otra.

Verdadero

Falso
Respuesta correcta: Falso

Plataforma de Teleformacin de IFES

Pgina 61 de 240

Programacin en PHP

Mdulo III. Conceptos avanzados


U.D.1. Cadenas
El manejo de cadenas en PHP es de vital importancia, ya que la nica forma que
tenemos de comunicarnos con el usuario es a travs de texto. Hay que tener en cuenta
que el resultado de un programa en PHP es una pgina web con formato HTML.

Combinar cdigo HTML con cdigo PHP


Como en una pgina web dinmica programada en PHP hay cdigo de dos tipos,
lo mejor es mantenerlos bien diferenciados. Hay que ser especialmente cuidadoso
procurando que el cdigo sea muy legible. Esto facilitar el mantenimiento de la pgina
y har mucho ms sencillo dotarla de elementos de diseo.
El objetivo ideal sera que un diseador web pudiera aplicar diseo a una pgina
PHP sin tener que preocuparse de la programacin que contiene. En el mdulo V
veremos una breve introduccin a las plantillas que nos facilitan notablemente la tarea
de separar el cdigo HTML del cdigo PHP.

Variables dentro de cadenas


Hasta ahora, siempre que hemos necesitado mostrar un texto compuesto por una
cadena y el valor de una variable los hemos tenido que unir usando el operador
concatenar " . ". Pero PHP ofrece una sintaxis alternativa que resulta ms compacta y
puede ser de utilidad en muchos casos.
<?php
$edad = 46;
echo "Belinda tiene " . $edad . " aos.";
?>
<?php
$edad = 46;
Pgina 62 de 240

Programacin en PHP

echo "Belinda tiene $edad aos.";


?>

Uso de la sentencia echo


Es recomendable usar esta forma de conseguir salida cuando es predominante la
cantidad de cdigo PHP sobre la cantidad de cdigo HTML. Lo mismo se aplica al
uso de la funcin print() que produce los mismos resultados. Hay partidarios de usar
una forma y partidarios de usar la otra, lo que no es muy recomendable es mezclarlas
dentro del mismo programa.
Ejemplo 3.1.2. En este pequeo programa predomina el cdigo PHP sobre el cdigo
HTML.
<html>
<head>
<title>Nmeros primos</title>
</head>
<body>
<?php
define(LIMITE, 100);
echo "Los nmeros primos del 1 al " . LIMITE . " son:";
echo "<br>";
for ($i = 1; $i <= LIMITE; $i++) {
$es_primo = TRUE; //Hiptesis inicial, es primo
for ($j =2; $j < $i; $j++) {
if(($i % $j) == 0) { //Tiene un divisor
$es_primo = FALSE; //Luego no es primo
break;
}
}
if ($es_primo) {
echo "$i";
echo "<br>";
}
}
?>

Plataforma de Teleformacin de IFES

Pgina 63 de 240

</body>
</html>

Uso de la sintaxis <?= ... ?>


A la inversa, cuando predomina el cdigo HTML sobre el cdigo PHP es interesante
mostrar la salida usando esta sintaxis, siempre y cuando la hayamos activado en la
configuracin de PHP.
Para activarlo hay que acceder al archivo php.ini, dentro del directorio C:\xampp\php, y
aadirle la siguiente lnea: short_open_tag=1. Se puede aadir al final del archivo, pero
antes aseguraos de que no existe ya dicha lnea.
Una vez aadida esta lnea, debis reiniciar el servidor Apache para que los cambios
surtan efecto.
En cualquier caso, no os aconsejo esta sintaxis, porque puede ocurrir que no est
activado en la configuracin PHP del sistema que aloje los scripts que estis creando y
no tengis acceso al archivo de configuracin.
Ojo al manipular el archivo de configuracin php.ini.
Un uso incorrecto puede provocar que vuestro
servidor Apache no funcione bien.

Ejemplo 3.1.3. En este pequeo programa predomina el cdigo HTML sobre el cdigo
PHP.
<html>
<head>
<title>El hombre del tiempo</title>
</head>
<body bgcolor="#cccccc">
<table border="1">
<tr>
<td align="center" colspan="2">
Hola, soy el hombre del tiempo.<br>
Mi mtodo para adivinar el clima es infalible.
</td>
</tr>
<tr>

Pgina 64 de 240

Programacin en PHP

<td align="center">
Temperatura mnima prevista
</td>
<td align="center">
Temperatura mxima prevista
</td>
</tr>
<tr>
<td align="center">
<font size="+2"><?= rand(0, 15)?></font> grados.
</td>
<td align="center">
<font size="+2"><?= rand(15, 30)?></font> grados.
</td>
</tr>
</table>
</html>

Fragmentos de HTML dentro de estructuras


condicionales
Cuando tenemos que mostrar trozos de cdigo HTML muy grandes y este se encuentra
dentro de una estructura condicional, puede ser muy pesado construirlos a base de
sentencias echo . En este caso es preferible volver a cerrar el bloque de cdigo PHP
con la etiqueta ?>, escribir el cdigo HTML que se ejecuta condicionalmente, y abrir
otra vez el cdigo PHP con la etiqueta <?php para terminar la estructura condicional.
Este sistema, combinado con el uso de la sintaxis <=? ... ?> produce un cdigo
compacto y fcil de leer.
Ejemplo 3.1.4. Aqu se ven las dos estrategias. La segunda es ms compacta y clara.
<?php
$autorizado = FALSE;
if (!$autorizado) {
echo <center>;
echo <table bgcolor="#cccccc">;
echo <tr>;
echo <td align="center">;

Plataforma de Teleformacin de IFES

Pgina 65 de 240

echo <font color="#ff0000" size="+2">;


echo No est autorizado a ver esta pgina.;
echo <br>;
echo Contacte con el administrador del sistema.;
echo </font>;
echo </td>;
echo </tr>;
echo </table>;
echo </center>;

?>
<?php
$autorizado = FALSE;
if (!$autorizado) {
?>
<center>
<table bgcolor="#cccccc">
<tr>
<td align="center">
<font color="#ff0000">
No est autorizado a ver esta pgina.<br>
Contacte con el administrador del sistema.
</font>
</td>
</tr>
</table>
</center> <?php
}
?>

Distribucin del cdigo


La ltima cuestin que nos queda por resolver es dnde situar el cdigo. Salvo el
cdigo que muestra resultados por pantalla, que tiene que aparecer en el lugar

Pgina 66 de 240

Programacin en PHP

apropiado de la pgina, el cdigo PHP se puede situar en cualquier lugar. La mejor


opcin es separarar en la medida de lo posible el cdigo encargado de:

Inicializar las constantes y variables.


Leer datos de entrada.
Realizar operaciones.

Este cdigo es conveniente ponerlo al principio de la pgina. Los resultados de las


operaciones que se quieran mostrar se almacenan entonces en variables auxiliares y
se muestran en el cuerpo de la pgina HTML donde corresponda haciendo uso de las
etiquetas <?= ... ?>.
Ejemplo 3.1.5. sta es una pgina web en PHP bien construida. Usa un algoritmo para
hallar el mximo comn divisor de dos nmeros generados aleatoriamente.
<?php
//Inicializacin
DEFINE(LIMITE, 100);
//Lectura de datos
$i = rand(1, LIMITE); //Simulamos la lectura
$j = rand(1, LIMITE);
//Operaciones con los datos
if ($i > $j) {
$mayor = $i;
$menor = $j;
} else {
$mayor = $j;
$menor = $i;
}
while (($mayor % $menor) != 0) {
$auxiliar = $menor;
$menor = $mayor % $menor;
$mayor = $auxiliar;
}
$mcd = $menor;
?>
<html>
<head>
<title>Mximo comun divisor</title>
Plataforma de Teleformacin de IFES

Pgina 67 de 240

</head>
<body>
El mximo comn divisor de <?= $i ?>y <?= $j ?>es <?= $mcd ?>.
</body>
</html>
Esto no es posible siempre. Por ejemplo, si tenemos que mostrar una lista de 11
resultados el bucle que los recorre deber estar mezclado con el cdigo HMTL. De
todas formas con la experiencia iremos aprendiendo poco a poco a extraer la mayor
parte del cdigo PHP al comienzo de la pgina.

Manipulacin de cadenas
PHP dispone de funciones predefinidas en el ncleo que nos permiten hacer
operaciones con los textos almacenados en cadenas. Ya hemos visto las funcin echo
y printf(), pero hay unas cuantas ms.

Acceder a los caracteres de una cadena


Se puede acceder a los caracteres de las cadenas indicando la posicin del carcter
que queremos extraer. Las posiciones van desde 0 hasta el nmero de caracteres
(longitud) menos uno. Si intentamos acceder a una posicin ms all del final de la
cadena nos devolver la cadena vaca (cadena sin ningn caracter = "").
Ejemplo 3.1.6. Varias pruebas extrayendo caracteresde una cadena.
<?php
$cadena = "Pernambuco";
echo "Cadena a analizar: '$cadena'<br>";
//Caracter en la primera posicin
echo "Caracter en la posicin 0: '$cadena[0]'<br>";
//Caracteres de posiciones intermedias
echo "Caracter en la posicin 1: '$cadena[1]'<br>";
echo "Caracter en la posicin 5: '$cadena[5]'<br>";
echo "Caracter en la posicin 7: '$cadena[7]'<br>";
//La cadena tiene longitud 10, la ltima posicin es la 9

Pgina 68 de 240

Programacin en PHP

echo "Caracter en la posicin 9: '$cadena[9]'<br>";


//La cadena tiene longitud 10, en la posicin 12 no hay nada
echo "Caracter en la posicin 12: '$cadena[12]'<br>";
?>

strlen()
strlen(cadena )
Por lo general no conceremos la longitud de la cadena a priori. Esta funcin nos
permite obtenerla

strpos()
En ocasiones nos interesar conocer la posicin de la primera aparicin de un carcter
en una cadena. Si no se encuentra el carcter devuelve FALSE.
strpos(cadena , carcter )
Alternativamente podemos indicarle la posicin a partir de la cual queremos que
empiece a buscar.
strpos(cadena, carcter, posicin inicial )

substr()
Habr muchos casos en los que nos interesar extraer un trozo del texto de una
cadena. Para hacerlo disponemos de esta funcin.
substr(carcter, posicin inicial, posicin final )
Ejemplo 3.1.7. El funcionamiento de las funciones se va a explicar con un ejemplo
tpico, la comprobacin de que una direccin de correo electrnico es correcto y la
extraccin de datos del mismo.
<?php
$email = "maurodosantos@pernambuco.com ";

Plataforma de Teleformacin de IFES

Pgina 69 de 240

echo "Email a analizar: $email<br>";


echo "<br>";
echo "Tiene " . strlen($email) . " letras.<br>";
//Indica la posicin del caracter "@" o FALSE si no est
$posicion_arroba = strpos($email, "@");
//Busca la aparicin de un punto (.) partir de la arroba
$posicion_punto = strpos($email, ".", $posicion_arroba);
if ($posicion_arroba && $posicion_punto) {
echo "Es una direccin de email vlida<br>";
$usuario = substr($email, 0, $posicion_arroba);
$dominio = substr($email, $posicion_arroba + 1);
echo "El nombre de usuario es: $usuario<br>";
echo "El dominio es: $dominio<br>";
} else {
echo "No es una direccin de email vlida<br>";
if (!$posicion_arroba) {
echo "Le falta el caracter arroba<br>";
}
if (!$posicion_punto) {
echo "El dominio no es vlido<br>";
}
}
?>

trim()
Elimina los espacios en blanco al principio y final de una cadena.
trim(cadena )

str_replace()
En un texto, reemplaza las apariciones de una cadena por otra.
str_replace(cadena original, cadena a buscar, cadena reemplazar )

Pgina 70 de 240

Programacin en PHP

Ejemplo 3.1.8. En este ejemplo se supone que podemos recibir direcciones de correo
electrnico errneas, y las intentamos arreglar. El primer error que eliminamos es
la aparicin de espacios en blanco al principio y al final de la direccin. El segundo
cuando los usuarios escriben el dominio pernambuco.es cuando el correcto es
pernambuco.com.
<?php
$email = " maurodosantos@pernambuco.es ";
echo "Direccin recibida: $email<br>"; //Eliminamos los espacios en
blanco
$email = trim($email); // Posicin que ocupa el signo arroba
$posicion_arroba = strpos($email, "@"); //Nos quedamos con el nombre
de usuario
$usuario = substr($email, 0, $posicion_arroba); //Reemplazamos
pernambuco.es por pernambuco.com
$dominio = str_replace($email, "pernambuco.es","pernambuco.com");//
Esta es la nueva direccin
$nuevoemail=$usuario."@".$dominio;
echo "Direccin corregida: $nuevoemail";
?>

strtoupper() y strtolower()
La funcin strtoupper() convierte los textos a maysculas, y strtolower() a minsculas.
strtoupper(cadena )
strtolower(cadena )
Ejemplo 3.1.9. En este ejemplo vamos a pasar la direccin de correo a minsculas.
<?php
$email = " MAUROSOSANTOS@PERNAMBUCO.ES ";
echo "Direccin recibida: $email.<br>";
//Convertimos a minsculas
$email = strtolower($email);
echo "Direccin corregida: $email.";
?>

Plataforma de Teleformacin de IFES

Pgina 71 de 240

Ejemplo 3.1.10. Un uso muy habitual de estas funciones es para comparar cadenas.
Para PHP la cadena "MADRID" es diferente a la cadena "Madrid", pero mediante estas
funciones se pueden comparar como iguales.
<?php
echo "Comparacin de cadenas directamente: ";
if ("MADRID" == "Madrid") {
echo "MADRID es igual a Madrid<br>";
}
else {
echo "MADRID no es igual a Madrid<br>";
}
echo "<br>";
echo "Antes de compararar pasamos ambas a minsculas: ";
if (strtolower("MADRID") == strtolower("Madrid")) {
echo "MADRID es igual a Madrid<br>";
}
else {
echo "MADRID no es igual a Madrid<br>";
}
?>

number_format()
Esta funcin es til cuando hay que mostrar datos de tipo double, es decir, nmeros
con decimales. Permite especificar el nmero de decimales que queremos que se
muestren, en lugar de los diez decimales que se muestran habitualmente.
number_format(nmero, decimales )
Ejemplo 3.1.11. Esta funcin ya apareci en una prctica del mdulo anterior.
<?php
$precio_kg = 1.29;
$peso = 2.17;
$a_pagar = $precio_kg * $peso;
//Saca el dato $a_pagar ocn 2 decimales

Pgina 72 de 240

Programacin en PHP

echo "A pagar " . number_format($a_pagar, 2) . " euros.";


?>

U.D.2. Arrays
Hasta ahora hemos trabajado en nuestros programas con una pequea cantidad de
datos, y la cantidad de los mismos no variaba a lo largo del programa. Pero la mayora
de los programas que hacen algo til requieren tratar gran cantidad de datos. En este
caso sera muy incomodo tener una variable para cada dato.
Afortunadamente cuando se tratan muchos datos, stos suelen ser de unos tipos muy
similares entre s. Para tratarlos en grupos, PHP ofrece tipos de datos compuestos, es
decir, tipos de datos que permiten almacenar varios datos en una misma variable.
El tipo de datos compuesto ms sencillo es el array . Es una estructura muy potente,
flexible y de uso muy intuitivo. Un array est compuesto por varios elementos. Cada
elemento almacena un valor diferente. Y para poder localizar un elemento, disponemos
del ndice (algo as como una direccin).

Arrays indexados numricamente


El tipo ms sencillo de array es el indexado numricamente, en los que el ndice
de cada elemento corresponde con su posicin. Hay que tener en cuenta que, al igual
que suceda con las cadenas, el primer elemento de un array tiene ndice 0 (y no 1
como cabra esperar).

Inicializar un array
Los arrays se suelen almacenar en variables, como cualquier otro tipo de datos.
La forma ms sencilla de crear un array es asignando los valores de sus elementos a
la vez que se crea. Para ello primero declaramos el nombre de la variable y usamos la

Plataforma de Teleformacin de IFES

Pgina 73 de 240

funcin array() , a la que le pasamos como parmetros un grupo de valores separados


por comas.
Ejemplo 3.2.1. Creacin de un array por asignacin directa mediante la funcin array()
:
<?php
$edades = array(28, 43, 32, 55);
$formas = array("tringulo", "cuadrado", "crculo");
?>
La segunda forma de crear un array es aadindole elementos al final del array. Para
aadir un elemento a un array se usa su identificador seguido de corchetes "[ ]", sin el
ndice, y se le asigna un valor.
Ejemplo 3.2.2. Aqu se puede ver cmo se crea un array mediante la adicin de
elementos.
<?php
$paises[] = "Italia"; //Aade el elemento con ndice 0
$paises[] = "Francia"; //Aade el elemento con ndice 1
$paises[] = "Portugal"; //Aade el elemento con ndice 2
?>
Ejemplo 3.2.3. Se pueden combinar ambas formas, primero declarar un array
directamente y cuando sea necesario ir aadiendo elementos.
<?php
$frutas = array("meln", "sanda", "naranja");
$frutas[] = "manzana";
$frutas[] = "melocoton";
?>

Pgina 74 de 240

Programacin en PHP

Acceder a un elemento de un array


Necesitaremos acceder a los elementos de un array para asignarles valores o para leer
su contenido. Esto es muy sencillo, basta poner el ndice del elemento al que queremos
acceder entre corchetes "[ ... ]".
Ejemplo 3.2.4. Aqu se leen los valores de los elementos de un array para sacarlos por
pantalla. Luego se asigna un nuevo valor al primer elemento (recordamos, con ndice
0).
<?php
$frutas = array("meln", "sanda", "naranja");
echo "La primera fruta de la lista es $frutas[0].<br>";
echo "La segunda fruta de la lista es $frutas[1].<br>";
echo "La tercera fruta de la lista es $frutas[2].<br>";
$frutas[0] = "limn"; //Asigna un nuevo valor al elemento 1
echo "La primera fruta de la lista es $frutas[0].";
?>

Recorrer un array
Los arrays se suelen utilizar para almacenar listas de valores. Por ello, una de las
acciones ms habituales, es recorrerlos de principio a fin para leer o modificar uno o
varios de ellos.
Las estucturas iterativas (bucles) que se vieron en la unidad didctica 4 del mdulo
II son idneas para recorrer arrays. Lo nico que hay que hacer es limitar el nmero
de iteraciones al nmero de elementos del array. Para esto disponemos de la funcin
count().
count(array )
Ejemplo 3.2.5. La funcin count() nos dice cuantos elementos contiene un array.
<?php
$frutas = array("meln", "sanda", "naranja");
Plataforma de Teleformacin de IFES

Pgina 75 de 240

echo "La lista contiene " . count($frutas) . " frutas.";


?>
Ejemplo 3.2.6. Recorriendo un array para mostrarlo por pantalla.
<?php
$frutas = array("meln", "sanda", "naranja");
for ($i = 0; $i < count($frutas); $i++) {
echo "Elemento $i: $frutas[$i]<br>";
}
?>
Ejemplo 3.2.7. Recorriendo un array para modificar todos sus elementos. Aqu se usan
dos arrays que estn relacionados por sus posiciones.
<?php
$nombres = array(Juan, Ins, Andrea, Roberto);
$edades = array(33, 28, 45, 52);
for ($i = 0; $i < count($edades); $i++) {
echo "$nombres[$i] tiene $edades[$i] aos.<br>";
}
echo "<br>";
for ($i = 0; $i < count($edades); $i++) {
$edades[$i]++;
}
echo "Ha pasado un ao...<br>";
for ($i = 0; $i < count($edades); $i++) {
echo "$nombres[$i] tiene $edades[$i] aos. <br>";
}
?>

Pgina 76 de 240

Programacin en PHP

Ejemplo 3.2.8. Recorriendo un array para buscar un elemento. Se vuelve a hacer


uso de dos arrays relacionados por las posiciones de sus ndices. En este cdigo
se da por supuesto que se va a encontrar el valor buscado. No es seguro, fallara
si preguntaramos por la edad de una persona cuyo nombre estuviera en el array
nombres.
<?php
$nombres = array(Juan, Ins, Andrea, Roberto);
$edades = array(33, 28, 45, 52);
echo "Cuantos aos tiene Andrea?<br>";
for ($i = 0; $i < count($nombres); $i++) {
if ($nombres[$i] == "Andrea") {
echo "$edades[$i] aos";
}
}
?>

Ordenar un array
La funcin sort() ordena los elementos de un array. Si el array est formado por
cadenas de texto considera menores las minsculas que las maysculas.
sort(array )
Ejemplo 3.2.9. En esta ejemplo se ordena una lista de nombres, primero por el
procedimiento normal. Luego se muestra la forma de ordenar el mismo array sin hacer
distincin entre maysculas y minsculas.
<?php
$astros = array("planeta", "cometa", "Venus", "Jupiter");
echo "Ordenacin distinguiendo maysculas y minsculas:<br>";
sort($astros);
for ($i = 0; $i < count($astros); $i++) {
echo "$astros[$i]<br>";

Plataforma de Teleformacin de IFES

Pgina 77 de 240

}
echo "<br>";
echo "Ordenacin sin distinguir maysculas y minsculas:<br>";
$astros_minusculas = array_map("strtolower", $astros);
array_multisort($astros_minusculas, SORT_ASC, SORT_STRING,
$astros);
for ($i = 0; $i < count($astros); $i++) {
echo "$astros[$i]<br>";
}
?>

Arrays no secuenciales
er

Hasta ahora lo arrays que hemos visto tenan como ndices la sucesin 0 (1 elemnto),

er

1 (2 elemento), 2 (3 elemento) ...


En PHP los ndices de un array no tiene por qu ser consecutivos, pueden incluso estar
desordenados.

El ndice de los arrays asociativos no tiene por qu ser necesariamente un entero,


puede ser tambin un numero decimal o una cadena. Este tipo de arrays es ms difcil
de usar y aunque permite una mayor flexibilidad, pueden ser fuente de muchos errores
difciles de detectar si no se usan con cuidado.

Arrays asociativos
stos son un caso especfico de arrays no secuenciales en los que el ndice es una
cadena de texto. Pueden resultar tiles para guardar listas en las cuales se asocia un
valor a una palabra clave.

Pgina 78 de 240

Programacin en PHP

La creacin de este tipo de arrays se puede hacer de dos formas. La primera es


mediante la funcin array() de forma parecida a como lo hacamos antes, solo que
ahora deberemos especificar un valor para el ndice.
Ejemplo 3.2.10. Cuando se declaran explcitamente los ndices se escribe el valor del
indice seguido por "=>" y el valor del elemento que contiene.
<?php
$capitales = array("Italia" => "Roma",
"Francia" => "Paris",
"Portugal" => "Lisboa");
echo "La capital de Francia es {$capitales["Francia"]}";
?>
Como se puede observar en el ejemplo, si queremos hacer referencia a un elemento de
un array indexado por una cadena dentro de un texto entre comillas, lo tendremos que
encerrar entre llaves "{ }". Si no, nos dar un error al interpretar la comilla de apertura
del ndice del array como la comilla final de la cedena.
Ejemplo 3.2.11. En la siguiente sentencia, PHP dar un error.
<?php
echo "La capital de Francia es $capitales["Francia"]";
?>
La segunda forma de crear un array asociativo es aadiendo elementos al array y
asignndoles de forma explcita cual es su ndice.
Ejemplo 3.2.12. Veamos esta segunda forma de inicializar arrays declarando
explcitamente sus ndices.

Plataforma de Teleformacin de IFES

Pgina 79 de 240

<?php
$alturas["Aneto"] = 3404;
$alturas["Teide"] = 3718;
$alturas["Mulhacen"] = 3748;
echo "El Aneto mide {$alturas["Aneto"]} metros";
?>
Hay que tener cuidado con este sistema de creacin pues se usa indistintamente para
crear un elemento y para acceder a su valor.
Ejemplo 3.2.13. En este ejemplo primero se relaciona un array con otro a travs de
ndices de tipo cadena. Los valores del primer array sirven a su vez como ndices del
segundo.
<?php
$nombres = array("Eva", "Antonio", "Felipe", "Rosa");
$edades = array("Eva" => 28,
"Antonio" => 43,
"Felipe" => 32,
"Rosa" => 55);
for ($i = 0; $i < count($nombres); $i++) {
echo "$nombres[$i] tiene {$edades[$nombres[$i]]} aos.<br>";
}
?>
Aun as, al igual que ocurra con los arrays no secuenciales, su uso no es
recomendable si no se tiene dominio sobre el lenguaje de programacin PHP.

Arrays no homogneos.
Como estamos viendo, PHP establece muy pocas limitaciones a las estructuras de los
arrays. Aunque hasta el momento todos los arrays que hemos visto los hemos usado
para manipular datos del mismo tipo (arrays de enteros, arrays de cadenas...) sta es
una restriccin que no era necesaria.

Pgina 80 de 240

Programacin en PHP

PHP permite mezclar en los elementos de los array valores de diferentes tipos. Incluso
permite que los ndices de los elementos de un mismo array sean de diferentes tipos.
Pero una vez ms esta es una estrategia peligrosa a seguir y a la que en la mayora de
los casos no ser necesario recurrir.

Arrays multidimensionales
El contenido de un elemento de un array puede, a su vez, ser un array. De esta forma
se pueden construir arrays multidimensionales.
Ejemplo 3.2.14. Aqu se muestra como almacenar una matriz (array de dos
dimensiones) que contiene una sopa de letras generada aleatoriamente (la funcin
chr() devuelve un carcter dado su nmero ascii).
<?php
DEFINE(ALTO,10);
DEFINE(ANCHO,20);
$sopa_letras = array();
for ($i = 0; $i < ALTO; $i++) {
for ($j = 0; $j <ANCHO; $j++) {
$sopa_letras[$i][$j] = chr(rand(65, 90));
}
}
echo "SOPA DE LETRAS<br>";
echo "<br>";
for ($i = 0; $i < ALTO; $i++) {
for ($j = 0; $j <ANCHO; $j++) {
echo $sopa_letras[$i][$j];
}
echo "<br>";
}

Plataforma de Teleformacin de IFES

Pgina 81 de 240

?>

Mostrar el contenido de un array


Ejemplo 3.2.15. PHP dispone de la funcin print_r() a la que se le pasa como
argumento un array e imprime por pantalla su contenido. Para poderlo ver bien se usa
la etiqueta HTML <pre>... </pre> que sirve para mostrar el texto y los saltos de lnea tal
cual.
<pre>
<?php
$edades = array("Eva" => 28,
"Antonio" => 43,
"Felipe" => 32,
"Rosa" => 55);
print_r($edades);
?>
</pre>

Desbordamiento de arrays
Si se intenta acceder a un elemento que no existe en un array, PHP nos devolver la
cadena vaca (""). sta es una causa de error muy habitual, sobre todo si luego vamos
a hacer operaciones con ese dato.

Pgina 82 de 240

Programacin en PHP

Ejemplo 3.2.16. Aqu se accede al quinto elemento del array, que no existe.
<?php
$formas = array("tringulo", "cuadrado", "crculo");
echo $formas[4];
?>

Otra forma de recorrer un array


foreach
PHP 4 introdujo un constructor foreach, muy parecido al de Perl y algunos otros
lenguajes. Proporciona un modo fcil de iterar sobre arrays. foreach trabaja solo sobre
arrays y dar un error al intentar usarlo en una variable con un tipo de datos diferente o
una variable no inicializada.
foreach (array as $valor){
sentencias
}
En cada ciclo, el valor del elemento actual es asignado a $valor y el ndice interno del
array avanza en uno (as en el prximo ciclo se estar mirando el siguiente elemento).
Ejemplo 3.2.17. Recorremos el array, y nosotros no tenemos que controlar el ndice.
<?php
$frutas = array("meln", "sanda", "naranja");
echo "El array contiene los siguientes elementos: <br>";
foreach ($frutas as $valor) {
echo $valor;
echo '<br>';
}
?>

Plataforma de Teleformacin de IFES

Pgina 83 de 240

U.D.3. Funciones
PHP es un lenguaje estructurado y como tal dispone de funciones. Las funciones no
son ms que fragmentos de cdigo a los que se puede llamar desde cualquier parte del
cdigo. Gracias a esto permiten:

Reutilizar cdigo que se usa frecuentemente.


Estructurar lgicamente el cdigo para que sea ms comprensible.
Separar el cdigo en diferentes ficheros para poder compartirlo en diferentes
pginas PHP.

Funciones definidas por el usuario


Declaracin de una funcin
Antes de poder utilizar una funcin, sta ha de ser escrita. Por lo tanto, el lugar en
el que se suelen situar las funciones es al comienzo del archivo, de tal forma que
estn disponibles a partir de ese momento. Situarlas al comienzo tambin ayuda a una
estructuracin del cdigo ms lgica.
Las funciones se declaran, como las variables, con un nombre , precedido de la palabra
function , unos parntesis (para albergar los datos de entrada, llamados argumentos o
parmetros) y unas llaves que incluyen el cuerpo de la funcin. Dentro del cuerpo de la
funcin podemos declarar variables, llamadas a otras funciones y dems sentencias.
function nombre_funcion (arg1, arg2, arg3, ...) {
bloque de cdigo
return valor ; //Opcional
}

Llamada a una funcin


Para utilizar una funcin se escribe su nombre, seguido de parntesis y dentro de stos
se escriben los datos que se quieren pasar a la funcin (o variables que contienen
dichos datos).
nombre_funcion (arg1, arg2, arg3, ...);

Pgina 84 de 240

Programacin en PHP

Si la funcin devuelve un dato, ste se puede asignar a una variable o usar


directamente como parte de una expresin.
Ejemplo 3.3.1. A continuacin se muestra una funcin muy sencilla, que no tiene
argumentos.
<?php
function hola_mundo() { // Declaracin de la funcin
echo "Hola Mundo!";
}
hola_mundo();
// Llamada a la funcin
?>

Devolucin de un valor
Las funciones son mucho ms tiles si pueden devolver un dato. Para ello usan la
sentencia return . Una vez que se llega a esta instruccin, no se ejecuta el cdigo que
se pueda encontrar a continuacin.
Ejemplo 3.3.2. La siguiente funcin devuelve aleatoriamente un da de la semana.
<?php
function dia_semana() {
$semana = array("lunes", "martes", "mircoles", "jueves",
"viernes", "sabado", "domingo");
$dia = $semana[rand(0, 6)];
return $dia;
}
$dia_cine = dia_semana();
echo "El prximo $dia_cine voy al cine.";
?>

Argumentos

Plataforma de Teleformacin de IFES

Pgina 85 de 240

Aun as, estas funciones que hemos visto son muy sencillas y no permiten hacer
grandes cosas. Lo ms habitual es que a las funciones se les pasen datos, que
luego operen con stos y que al terminar la funcin devuelva el resultado. A los datos
que recibe una funcin se les llama argumentos o parmetros.
En la declaracin de la funcin, tras la palabra clave function , va el nombre de la
funcin seguido por una lista de argumentos entre parntesis y separados por comas.
Dentro del cuerpo de la funcin estos datos se pueden utilizar como una variable
cualquiera.
Ejemplo 3.3.3. Funcin sencilla que recibe un parmetro y devuelve un resultado.
Luego es llamada dentro de un bucle para mostrar el cuadrado de los nmeros de 1 a
10;
<?php
function cuadrado($numero) {
return $numero * $numero;
}
for ($i = 1; $i <= 10; $i++) {
echo "$i al cuadrado es igual a " . cuadrado($i) . ".<br>";
}
?>

Paso de argumentos por valor


Cuando se pasan valores a las funciones hay varias formas de hacerlo. El
comportamiento predefinido es lo que se conoce como paso por valor. Esto quiere
decir que la variable que recibe el valor hace una copia del mismo y a partir de ese
momento acta como una variable independiente de manera que si cambias el valor
del argumento dentro de la funcin, no se ve modificado fuera de ella.

Paso de argumentos por referencia


En ocasiones es preferible no hacer la copia del dato que se pasa. Esto puede interesar
cuando se trabaje con arrays (la copia de muchos datos puede perjudicar el tiempo
de ejecucin del programa) o, ms comunmente, cuando se quiere alterar el valor
de la variable para obtener algn efecto. A esto se le llama paso de parmetros por

Pgina 86 de 240

Programacin en PHP

referencia. Para indicar que un parmetro se pasa por referencia se le antepone el


smbolo ampersand, "&".
Una funcin puede emplear argumentos pasados por valor y por referencia.
Ejemplo 3.3.4. Comparacin entre el paso por valor y por referencia.
<?php
function duplicar_por_valor($argumento) {
$argumento = $argumento * 2;
echo "Dentro de la funcin vale $argumento.<br>";
}
function duplicar_por_referencia(&$argumento) {
$argumento = $argumento * 2;
echo "Dentro de la funcin vale $argumento.<br>";
}
$numero1 = 5;
echo "Antes de llamar a la funcin vale $numero1.<br>";
duplicar_por_valor($numero1);
echo "Despus de llamar a la funcin vale $numero1.<br>";
echo "<br>";
$numero2 = 7;
echo "Antes de llamar a la funcin vale $numero2.<br>";
duplicar_por_referencia($numero2);
echo "Despus de llamar a la funcin vale $numero2.<br>";
?>
Ejemplo 3.3.5. No se puede hacer que una funcin devuelva dos valores. Pero en su
lugar es posible pasar por referencia las variables a devolver y modificar su contenido
en el cuerpo de la funcin. Aqu se emplea esta estratagema para intercambiar el
contenido de dos variables.
<?php
function intercambiar(&$argumento1, &$argumento2) {
$auxiliar = $argumento1;

Plataforma de Teleformacin de IFES

Pgina 87 de 240

$argumento1 = $argumento2;
$argumento2 = $auxiliar;

$numero1 = 5;
$numero2 = 8;
echo "($numero1, $numero2)<br>";
intercambiar($numero1, $numero2);
echo "($numero1, $numero2)";
?>

Alcance de las variables


Dentro de las funciones tambin podemos declarar nuevas variables, pero, qu pasa
si hay una variable dentro de una funcin que se llama igual que una variable que se
encuetra fuera de la funcin? La respuesta es que la variable de dentro de la funcin es
diferente de la que est fuera y por lo tanto su valor es independiente.
A esto se le llama alcance de una variable. Las variables que se declaran dentro de una
funcin solo existen en el cuerpo de la funcin.
Ejemplo 3.3.6. Este cdigo muestra el alcance de una variable dentro de una funcin.
No hay que confundir este ejemplo con el ejemplo 3.3.4. En este caso no hay ningn
argumento.
<?php
function mi_ciudad() {
$ciudad = "Madrid";
echo "Dentro de la funcin vale $ciudad.<br>";
}
$ciudad = "Barcelona";
echo "Antes de llamar a la funcin vale $ciudad.<br>";
mi_ciudad();
echo "Despus de llamar a la funcin vale $ciudad.<br>";
?>

Pgina 88 de 240

Programacin en PHP

Ejemplo 3.3.7. Puede darse el caso de que queramos acceder a una variable global
dentro del cuerpo de la funcin. Para conseguirlo le antepondremos la palabra clave
global a la primera referncia de la variable, con lo que el interprete PHP sabe que
estamos llamando a la variable externa.
<?php
function mi_ciudad() {
global $ciudad;
$ciudad = "Madrid";
echo "Dentro de la funcin vale $ciudad.<br>";
}
$ciudad = "Barcelona";
echo "Antes de llamar a la funcin vale $ciudad.<br>";
mi_ciudad();
echo "Despus de llamar a la funcin vale $ciudad.<br>";
?>
No obstante, es altamente recomendable usar en las funciones nombres de variables
diferentes a los de las variables del programa principal para evitar confusiones.
Tampoco es conveniente usar variables globales dentro de las funciones. Siempre que
se pueda es mejor pasar estas variables como parmetros, mejora notablemente la
fiabilidad y claridad del cdigo.

Creacin de bibliotecas
Para conseguir un cdigo lo ms claro posible es deseable que ste sea
breve. Una forma de conseguirlo es extraer las funciones que se declaran a un
archivo independiente con extensin .php. Una ventaja de esta estrategia es que se
pueden hacer accesibles estas funciones a ms de una pgina en PHP.
Ejemplo 3.3.8. Una biblioteca de funciones guardada en el archivo utils.php . Se ha
optado por poner un breve comentario antes de cada funcin explicando su cometido
para contribuir a la legibilidad y mantenibilidad del cdigo.
<?php
// Biblioteca de funciones de usuario

Plataforma de Teleformacin de IFES

Pgina 89 de 240

// Archivo utils.php
// Devuelve el argumento elevado al cuadrado
function cuadrado($numero) {
return $numero * $numero;
}
// Devuelve la raz cuadrada del argumento
function raiz($numero) {
return sqrt($numero);
}
// Devuelve verdadero si el nmero es igual o mayor que cero
function es_positivo($numero) {
return ($numero >= 0);
}
?>
Ejemplo 3.3.9. En los ficheros de biblioteca se puede incluir cualquier tipo de cdigo.
Tambin se pueden poner archivos de configuracin, de constantes predefinidas, etc.
En este caso se guarda en el archivo config.php.
<?php
// Fichero de configuracin
// Archivo config.php
DEFINE(PI, 3.1416);
DEFINE(NUMERO_E, 2.7183);
DEFINE(EULER, 0.5772);
?>

Las instruccines include() y require()


Para tener disponibles las funciones de un fichero externo hay que indicarle al cdigo
PHP que las ha de incorporar al script actual. Mediante estas instrucciones se incluye
un fichero en el punto en el que se importa. La diferencia es que require() lanza un error
fatal en el caso de no encontrar el fichero mientras que include() no lo hace.

Pgina 90 de 240

Programacin en PHP

Ejempo 3.3.10. La inclusin de bibliotecas se suele poner al principio para que estn
disponibles en el resto del cdigo.
<?php
include("config.php");
include("utils.php");
$radio = 5;
$circunferencia = 2 * radio * PI;
$area = PI * cuadrado($radio);
echo "Un crculo de rdio $radio tiene circunferencia ";
echo "$circunferencia y rea $area.<br>";
$area = -8;
if (es_positivo($area)) {
$radio = raiz(area / PI);
echo "Un crculo de rea $area tiene un rdio $radio";
}
else {
echo "No se puede calcular, rea negativa.";
}
?>
Hay que tener en cuenta el orden en el que se cargan los archivos externos, sobre todo
si unos hacen uso de cdigo de otros.

Otros tipos de funciones


Hasta ahora hemos visto las funciones que nosotros definimos. Pero a lo largo de
muchos ejemplos hemos ido usando funciones como rand() o number_format() que ya
estaban disponibles en el lenguaje. stas son funciones del ncleo de PHP y, por lo
tanto, no hace falta hacer un include() para poder usarlas.
Extensiones de PHP
Las funciones que incorpora de forma predefinida PHP estn agrupadas en
extensiones.
Ejemplo 3.3.11. Para saber qu extensiones estn instaladas en nuestro interprete de
PHP tenemos una opcin muy til, la funcin phpinfo() que genera una pgina con la
informacin del intrprete que tenemos instalado.
Plataforma de Teleformacin de IFES

Pgina 91 de 240

<?php
phpinfo();
?>
Debe aparecernos una pantalla similar a la siguiente:

Pgina 92 de 240

Programacin en PHP

Plataforma de Teleformacin de IFES

Pgina 93 de 240

Referencia sobre funciones


Toda la referencia sobre funciones se puede encontrar en la pgina oficial sobre PHP:

http://es.php.net/manual/es/funcref.php

Hay una gran multitud de funciones en PHP de las cuales probablemente usaremos
unas pocas. Las extensiones ms tiles son:

Funciones matemticas - http://es.php.net/manual/es/ref.math.php

Funciones de cadenas - http://es.php.net/manual/es/ref.strings.php

Funciones de mysql - http://es.php.net/manual/es/ref.mysql.php

Funciones de fecha y hora - http://es.php.net/manual/es/ref.datetime.php

La pgina dispone tambin de un buscador que resulta bastante til.

U.D.4. Formularios
Hasta este momento todas las pginas que hemos visto a travs de ejemplos tenan
una caracterstica, no eran interactivas. Hacan operaciones en funcin de los datos de
los que ya disponan pero eran incapaces de recibir datos del navegador.
Una de las formas ms habituales de recibir datos por parte de una pgina web
dinmica es a travs de formularios web. Estrictamente hablando, los formularios no
son parte del lenguaje PHP sino del lenguaje HTML. Pero para recibir los datos de un
formulario en HTML hace falta, por lo general, una pgina dinmica que los procese.
Hay que tener en cuenta que adems de formularios HTML hay otras tecnologas que
permiten el envo de datos a pginas web, como Flash u otras pginas web dinmicas.

Formularios HTML
Los formularios pueden llegar a ser muy complejos, con una gran cantidad de campos
de entrada, validacin de datos por Javascript, campos ocultos... Pero el objetivo del
curso no es explicar su funcionamiento, as que se har un repaso muy superficial.
Un formulario est formado por tres tipos de elementos: Etiquetas de comienzo y final,
campos de entrada de datos y botones para realizar acciones.

Pgina 94 de 240

Programacin en PHP

Declaracin del formulario


Un formulario se distingue por estar encuadrado entre una etiqueta de comienzo de
formulario <form ...> y una de final de formulario </form>. La etiqueta de comienzo de
formulario ha de tener al menos tres atributos.

name - No es obligatorio pero s muy recomendable darle un nombre al


formulario para que sea fcil de identificar.
method - Este parmetro puede tomar dos valores segn la forma de enviar
los datos:

get - Los datos se envan codificados en la URL (direccin de la


pgina destino).

post - Los datos se envan ocultos.


action - Indica la pgina destino que se encargara de procesar los datos que
enva el formulario.
<form name="formulario" method="get" action="procesar.php">
Campos de entrada de datos
Botones de acciones
</form>

Campos
Una vez declarado el formulario hemos de poner un campo para cada uno de los datos
que queremos recibir. Hay 6 tipos de campos:

Texto - Se usa para recibir una lnea de texto.


<input type="text" name="nombre">

Seleccin nica - Se usa para elegir una opcin entre varias. Las opciones
que son excluyentes entre s han de tener el mismo nombre.
<input type="radio" name="sexo" value="hombre">
<input type="radio" name="sexo" value="mujer">

Seleccin mltiple - Se usa para elegir opciones de forma independiente.


Esto es, se pueden elegir todas, algunas o ninguna.
<input type="checkbox" name="cine">

Plataforma de Teleformacin de IFES

Pgina 95 de 240

<input type="checkbox" name="musica">


<input type="checkbox" name="lectura">

Lista de seleccin - Es un sistema alternativo al campo de seleccin


nica para elegir una opcin entre varias, esta vez con formato de lista
desplegable.
<select name="sexo">
<option>hombre</option>
<option>mujer</option>
</select>

rea de texto - Sirve para poder recibir textos largos compuestos por varias
lneas.
<textarea name="opinion"></textarea>

Campo oculto - En ocasiones queremos pasar un dato a la pgina PHP


que procesar el formulario pero no queremos que ste se muestre en un
campo visible. Puede ser til para pasar informacin entre pginas PHP
independientes.
<input type="hidden" name="referencia">

En todos ellos es importante poner el atributo name que es el nombre de variable con el
cual vamos a recibir los datos. El atributo value es opcional e indica el valor predefinido
que se les da.

Botones
Todos los formularios han de tener un botn para enviar los datos una vez que se han
rellenado.
<input type="submit" name="Enviar">
Tambin se suele incluir un botn para limpiar los campos del formulario.
<input type="reset" name="Borrar todo">

Pgina 96 de 240

Programacin en PHP

Ejemplo 3.4.1. A continuacin se muestra un formulario formado por algunos de los


tipos de campos descritos con anterioridad y se guarda en un archivo llamado
encuesta.html .
<html>
<head>
<title></title>
</head>
<body>
<form name="encuesta" method="get" action="verificar.php">
NOMBRE <input type="text" name="nombre" size="43"><br>
<br>
NIVEL DE INTERNET<br>
bajo <input type="radio" name="nivel" value="bajo" checked>
medio <input type="radio" name="nivel" value="medio">
alto <input type="radio" name="nivel" value="alto"><br>
<br>
EXPERIENCIA PREVIA EN PROGRAMACIN<br>
Visual Basic <input type="checkbox" name="basic">
C/C++ <input type="checkbox" name="c_cplus">
Java <input type="checkbox" name="java"><br>
<br>
TU OPININ SOBRE ESTE CURSO<br>
<textarea name="opinion" cols="40" rows="5"></textarea><br>
<br>
<input type="submit" value="Enviar">
<input type="reset" value="Borrar todo">
</form>
</body>
</html>
Deberamos ver un formulario similar a este:

Plataforma de Teleformacin de IFES

Pgina 97 de 240

Recepcin de datos de formularios


Recibir los datos no puede ser ms sencillo. El script de destino tendr definida un
variable por cada campo con el mismo nombre que se le haya dado en el formulario. Y
esta variable contendr el valor que se haya introducido en el campo. Esta variable ya
est disponible desde el comienzo del script, no hay que hacer nada especial, slo leer
su contenido.
Ejemplo 3.4.2. Esta pgina PHP recibe los datos de la encuesta y los muestra. Para
que funcione hay que guardarla con el nombre verificar.php , que es el que apareca en
el atributo action del formulario.
<?php
echo "Comprueba si tus datos son correctos.<br>";

Pgina 98 de 240

Programacin en PHP

echo "<br>";
echo "$nombre.<br>";
echo "Nivel de internet $nivel.<br>";
if (($basic == "on") || ($c_cplus == "on") || ($java == "on")) {
echo "Con experiencia en ";
if ($basic == "on") {
echo "Visual Basic";
if ($c_cplus == "on") {
echo ", C/C++";
}
if ($java == "on") {
echo ", Java";
}
}
else if ($c_cplus == "on"){
echo "C/C++";
if ($java == "on") {
echo ", Java";
}
}
else {
if ($java == "on") {
echo "Java";
}
}
echo ".<br>";
}
else {
echo "Sin experiencia previa en programacin.<br>";
}
echo "<br>";
echo "OPININ SOBRE EL CURSO:<br>";
echo nl2br($opinion); //convierte saltos de lnea en <br>
?>

Ejemplo 3.4.3. Los parametros que nos han llegado se encuentran almacenados en
un array asociativo con nombre de variable $_REQUEST. Podemos ver su contenido

Plataforma de Teleformacin de IFES

Pgina 99 de 240

usando la funcin print_r() que se vi en la unidad didctica anterior. Esto nos ofrece
otra forma de acceder a los datos recibidos, que es ms explcita y por lo tanto hace el
cdigo ms legible.
<pre>
<?php
print_r($_REQUEST);
?>
</pre>
Ejemplo 3.4.4. El ejemplo 3.4.3. Podra haber sido escrito tambin de la siguiente
forma (se muestran slo las primeras lneas, un buen ejercicio sera completarlas).
<?php
echo "Comprueba si tus datos son correctos.<br>";
echo "<br>";
echo "{$_REQUEST["nombre"]}.<br>";
echo "Nivel de internet {$_REQUEST["nivel"]}.<br>"; //...
?>

Pginas que envan, reciben y procesan datos


Ejemplo 3.4.5. Esta pgina web une el formulario de entrada de datos y la recepcin
de los mismos. El atributo action de la etiqueta form ha de ser el mismo que el nombre
de la pgina. Para ello usamos la variable predefinida $PHP_SELF que contiene el
nombre de archivo de la misma pgina. Podemos guardar este archivo con el nombre
juegoppt.php.
<?php
$opciones = array("piedra", "papel", "tijera");
$jugada=$_POST['jugada'];
if ($_POST) {
$mijugada = $opciones[rand(0, 2)];
if ($jugada == $mijugada) {
$resultado = "Empates.";

Pgina 100 de 240

Programacin en PHP

}
else {
if (($jugada == "piedra" && $mijugada == "tijera") || ($jugada == "tijera"
&& $mijugada == "papel") || ($jugada == "papel" && $mijugada ==
"piedra")) {
$resultado = "Tu ganas.";
}
else {
$resultado = "Gano yo.";
}
}
}
?>
<!-- Mientras no se seleccione una opcin, aunque hagamos clic en
jugar, se mostrar el formulario. -->
<html>
<head>
<title>Piedra, papel o tijera</title>
</head>
<body>
<?php
if ($jugada) {
?>Has elegido <?php echo $jugada ?>, yo he elegido <?php echo
$mijugada ?>. <?php echo $resultado ?>
<br>Quieres jugar otra vez?<br>
<?php
}
?>
<form name="juego" method="post" action="<?php echo $PHP_SELF ?
>">
Piedra<input type="radio" name="jugada" value="piedra">
Papel<input type="radio" name="jugada" value="papel">
Tijera<input type="radio" name="jugada" value="tijera">
<input type="submit" value="Jugar">
</form>
</body>
</html>
El cdigo que se incluye al principio solo se ejecuta si el dato $jugada no llega vaci, es
decir, cuando se le ha dado al menos una vez al botn de enviar.

Plataforma de Teleformacin de IFES

Pgina 101 de 240

Redireccin de pginas web


En ocasiones se necesita que un programa PHP reciba datos y haga una operacin
"silenciosa" con los mismos. Es decir, que no sea necesario que se muestre una pgina
al navegador sino que se vuelva a la inicial. Esto se puede hacer con un formulario que
enva, recibe y procesa datos.
Una alternativa es hacer una pgina que procese los datos y que al terminar se redirija
automticamente a otra. Para poder hacerlo PHP nos ofrece la funcin header(), que se
usa de la siguiente forma.
header("location:url ")
La direccin de destino url puede ser una ruta absoluta o relativa.
Es imprescindible que la pgina no contenga al principio cdigo HTML. Tambin
hay que tener en cuenta que una vez que se llega a la funcin header no se sigue
ejecutando el resto de la pgina, por lo que las operaciones que queramos hacer las
habremos de ejecutar antes.
Ejemplo 3.4.6. ste es un ejemplo tpico de recepcin de datos. En primer lugar
se incluye una sencilla pgina web con un formulario que pide el nombre y un
comentario para almacenarlo en un registro de visitas. En el script insertar.php se
almacena en la base de datos y se redirecciona a una pgina para dar las gracias.

visita.html
<html>
<head> <title>Libro de visitas</title>
</head>
<body> <form name="visita" method="post" action="insertar.php">
Nombre: <input type="text" name="nombre" size="44"><br>
Comentario:<br>
<textarea name="comentario" cols="40" rows="5"></textarea><br>
<input type="submit" value="Enviar">
</form> </body>
</html>

insertar.php
<?php

Pgina 102 de 240

Programacin en PHP

// Aqu vendra el cdigo para guardar en la base de datos


header("location:gracias.html"); //Redireccin
?>
Mucho ojo. Ni
siquiera dejar un
espacio en blanco al
principio, antes de
<?php, del archivo
insertar.php, ya
que se interpreta
como HTML y
no funcionar la
instruccin header.

gracias.html
<html>
<head> <title>Gracias</title>
</head>
<body>
Su comentario ha sido registrado en el libro de visitas.<br>
Gracias por su participacin.
</body>
</html>

Ejemplo 3.4.7. Un uso habitual de la redireccin es para redirigir hacia una pgina de
error en el caso de que haya fallos en los datos. En este ejemplo se pide una direccin
de correo electrnico, se valida y si es incorrecta se reenva a una pgina de error.

suscripcion.html
<html>
<head> <title>Suscripcin al boletn electrnico</title>
</head>
<body>
Bienvenido al servicio de suscripcin.<br>
Por favor, introduzca una direccin de email vlida.<br> <form
name="suscripcion" method="post" action="guardar.php">
Email: <input type="text" name="email" size="40"><br>

Plataforma de Teleformacin de IFES

Pgina 103 de 240

<input type="submit" value="Enviar">


</form> </body>
</html>

guardar.php
<?php
$email=$_POST[email]; // Asigna el valor que se indic en el formulario.
//Indica la posicin del caracter "@" o FALSE si no est
$posicion_arroba = strpos($email, "@");//Busca la aparicin de un
punto (.) a partir de la arroba
$posicion_punto = strpos($email, ".");
if ($posicion_arroba && $posicion_punto) { // Aqu vendra el cdigo
para guardar en la base de datos
header("location:confirmacion.html"); //Redireccin
}
else { // Aqu vendra el cdigo para guardar en la base de datos
header("location:error.html"); //Redireccin
}
?>

confirmacion.html
<html>
<head> <title>Confirmacion</title>
</head>
<body>
Su suscripcin ha sido registrada.</br>
Gracias por su inters.
</body>
</html>

error.html
<html>
<head> <title>Error</title>
</head>

Pgina 104 de 240

Programacin en PHP

<body>
Introdujo una direccin de correo no vlida.<br>
Por favor vuelva a solicitar la suscripcin.
<a href="suscripcion.html"> Volver </a> </body>
</html >

U.D.5. Manejo de ficheros


Mediante los formularios hemos conseguido aportar interactividad a nuestra pginas
web. Pero otra de las limitaciones fundamentales de lo que podemos hacer con lo que
sabemos hasta el momento es que una vez que se cierra una pgina web los datos que
contiene se pierden.
En el prximo mdulo veremos como guardar la informacin en una base de datos.
Esto es til para grandes cantidades de informacin muy estructurada, pero hay casos
en los que la informacin que queremos guardar es pequea. En esta unidad didctica
veremos cmo podemos usar PHP para acceder al sistema de archivos del servidor
para poder leer o guardar datos.

Manejo de ficheros
Abrir
Para acceder a un archivo primero es necesario abrirlo. Para ello usaremos la funcin
fopen() que tiene dos argumentos, el nombre del archivo a acceder y el modo de
acceder a ste.
fopen(ruta al archivo, modo de acceso )
PHP ofrece los siguientes modos de acceso:

Plataforma de Teleformacin de IFES

Pgina 105 de 240

El apuntador es la posicin del archivo en la que leemos o escribimos. Como podemos


ver lo ms habitual es que lo situemos al principio para leer todo su contenido o al final
para ir aadiendo datos.
La funcin devuelve un manejador que usaremos posteriormente para manipular
el archivo (y que guardaremos en una variable), o devuelve FALSE si no ha podido
acceder por alguna causa (permisos, ruta, memoria,etc.).

Cerrar
Mientras hacemos operaciones con el archivo, ste lo hemos de mantener abierto, pero
al terminar de trabajar con l, hay que cerrarlo para que el sistema operativo pueda
disponer de este archivo (mientras est abierto el sistema operativo lo bloquea para
que no puedan escribir en l dos programas y destruir mutuamente lo que escriben).
Para cerrar un archivo abierto se usa la funcin fclose() pasndole como parmetro la
variable que contiene el manejador del archivo.
fclose(archivo )
Ejemplo 3.5.1. En este cdigo se abre un fichero en modo lectura. Si la funcin de
apertura se ha conseguido, se muestra un mensaje de confirmacin, y si ha fallado se
muestra un mensaje de error. Finalmente el archivo se cierra.

Pgina 106 de 240

Programacin en PHP

<?php
$ruta = "utils.php";
$archivo = fopen($ruta, "r");
if ($archivo) {
print "Archivo $ruta abierto para lectura.";
}
else {
print "No se pudo abrir el archivo: $ruta.";
}
fclose($archivo);
?>
Si la apertura o el cierre falla, se genera un error de
nivel E_WARNING. Se puede usar @ para suprimir
esta advertencia. @$archivo = fopen($ruta, "r"); y
@fclose($archivo);
Ejemplo 3.5.2. El fichero que abrimos lo podemos localizar mediante una ruta absoluta
o relativa. Aunque en Windows las rutas se construyan usando la contrabarra " \ " PHP
admite que se separen los directorios con la barra normal " / " como en Linux. sta
es la forma que elegiremos ya que las rutas relativas que contruyamos de esta forma
sern vlidas tanto si instalamos nuestra aplicacin en Linux como en Windows.
<?php
$ruta_absoluta = "c:/xampp/htdocs/index.php";
$ruta_relativa = "../practicasPHP/config.php";
if ($archivo1 = fopen($ruta_absoluta, "r")){
echo "El archivo $ruta_absoluta ha sido abierto";
echo "<br>";
}
if ($archivo2 = fopen($ruta_relativa, "r")){
echo "El archivo $ruta_relativa ha sido abierto";
echo "<br>";
}
fclose($archivo1);
fclose($archivo2);
?>
Plataforma de Teleformacin de IFES

Pgina 107 de 240

Ejemplo 3.5.3. Es incluso posible abrir archivos que estn alojados en otros servidores,
aunque lo ms habitual es que solo tengamos permisos de lectura.
<?php
$url = "http://www.google.es/index.html ";
$archivo = fopen($url, "r");
fclose($archivo);
?>

Leer
Lo ms habitual es que queramos leer el archivo. PHP ofrece muchas formas de
hacerlo. Una de las ms sencillas es mediante la funcin fread() que lee un nmero de
caracteres de un archivo. En conjuncin con la funcin filesize() que nos devuelve el
tamao del archivo en bytes se puede usar para leer todo el archivo.
fread(archivo, tamao )
Ejemplo 3.5.4. Lectura del archivo prueba.txt . Para que el archivo funcione tendremos
que haberlo creado antes y copiado en la misma carpeta que este script.
<pre>
<?php
$archivo = fopen("prueba.txt", "r");
$tamano = filesize("prueba.txt");
$texto = fread($archivo, $tamano);
echo $texto;
fclose($archivo);
?>
</pre>

Escribir
Otra accin que querremos hacer habitualmente es aadir datos a un archivo. Para ello
se usa una funcin muy sencilla, fwrite() que escribe en la posicin en la que est el
Pgina 108 de 240

Programacin en PHP

apuntador (normalmente, si hemos abierto el archivo en modo "a" escribiremos al final


del archivo).
La funcin fwrite() usa dos parmetros. El primero el manejador del archivo y el
segundo la cadena que queremos escribir.
fwrite(archivo, cadena de texto )
Ejemplo 3.5.5. En este ejemplo se usa esta funcin dos veces para escribir dos frases
en el archivo.
<?php
$archivo = fopen("refranes.txt", "a");
fwrite($archivo, "Si las barbas de tu vecino ves cortar ...\r\n");
fwrite($archivo, "...pon las tuyas a remojar \r\n");
fclose($archivo);
?>
La cadena " \r\n " sirve para insertar un salto de lnea en el archivo en el sistema
operativo Windows. En Linux se usa solo la cadena " \n ".
Si lo que queremos es sobrescribirlo, abriremos el archivo en modo "w", de tal forma
que se borre el contenido al abrirlo y dispondremos de un fichero vaco.

Crear un fichero
Si queremos crear un archivo bastar que lo abramos con el modo "a" o "w". Al abrirlo,
si el archivo no existe lo crear.

Eliminar un fichero
La funcin unlink() que recibe como parmetro una ruta a un fichero lo borra. En el caso
de que no lo haya conseguido (por no tener permisos o sencillamente porque no existe
el archivo) devuelve FALSE.
unlink(archivo )

Plataforma de Teleformacin de IFES

Pgina 109 de 240

Ejemplo 3.5.6. Este programa intenta borrar un archivo y en el caso de no conseguirlo


muestra un mensaje de error.
<?php
if (!unlink("prueba.txt")) {
echo "No se ha podido borrar el archivo.";
}
else {
echo "El archivo ha sido borrado";
}
?>

Atributos de un archivo
Para manejar de forma segura un archivo, es conveniente que conozcamos sus
atributos. Por ejemplo, antes de abrir un archivo para escritura convendra comprobar si
tenemos permisos de escritura. Las siguientes funciones nos ayudarn en esta tarea.

file_exists()
Devuelve TRUE si el archivo por el que preguntamos existe.

file_size()
Ya ha aparecido al hablar de la lectura de un archivo. Devuelve el tamao en bytes del
mismo.

is_file()
Devuelve TRUE si el archivo es un fichero.

is_dir()
Devuelve TRUE si el archivo es un directorio.

Pgina 110 de 240

Programacin en PHP

is_readable()
Devuelve TRUE si el archivo se puede abrir para lectura.

is_writeable()
Devuelve TRUE si el archivo se puede abrir para escritura.
Ejemplo 3.5.7. Mediante este programa se muestran las propiedades del archivo
prueba.txt.
<?php
$ruta = "prueba.txt";
if (file_exists($ruta)) {
echo "$ruta tiene un tamao de ";
echo filesize($ruta) . " bytes.<br>";
if (is_file($ruta)) {
echo "$ruta es un fichero.<br>";
}
if (is_dir($ruta)) {
echo "$ruta es un directorio.<br>";
}
if (is_readable($ruta)) {
echo "$ruta se puede abrir para lectura.<br>";
}
if (is_writable($ruta)) {
echo "$ruta se puede abrir para escritura.<br>";
}
}
else {
echo "$ruta no existe.";
}
?>

Manejo de directorios
PHP ofrece muchas funciones para manejar directorios, pero lo ms probable es que
en la mayora de los casos lo nico que nos interese de un directorio es conocer los

Plataforma de Teleformacin de IFES

Pgina 111 de 240

archivos que tiene. Una vez que conozcamos este dato, podremos construir rutas
relativas a sus subdirectorios y a su vez listarlos y as de forma sucesiva.

Abrir un directorio
De forma similar a como suceda con los archivos, antes de trabajar con un directorio
lo tendremos que abrir. Nos serviremos de la funcin opendir() que devuelve un
manejador del directorio.
opendir(ruta al directorio)

Listar los archivos de un directorio


Para conocer los ficheros y subdirectorios que contiene un directorio se usa la funcin
readdir(). Cada vez que llamemos a esta funcin, nos devolver el nombre de cada
archivo encontrado o FALSE si no quedan ms archivos en el directorio.
readdir(directorio)
Ejemplo 3.5.8. Aqu se puede ver como listar todos los contenidos del directorio
actual (referenciado mediante la ruta relativa " . ") indicando a su vez si son ficheros o
directorios.
<?php
$num_dir=0; // Cuenta el nmero de directorios
$num_fic=0; // Cuenta el nmero de ficheros
$contador=1; // Enumera los que va habiendo
$directorio = opendir(".");
while ($archivo = readdir($directorio)) {
if (is_file($archivo)) {
echo "$contador.- $archivo es un fichero.<br>";
$num_fic++;
$contador++;
}
if (is_dir($archivo)) {
echo "$contador.- $archivo es un directorio.<br>";
$num_dir++;
$contador++;
}
Pgina 112 de 240

Programacin en PHP

}
echo "El nmero de directorios es $num_dir <br> ";
echo "El nmero de ficheros es $num_fic";
?>

Subir archivos al servidor


El envo de archivos desde el cliente, es una de las posibilidades ms atractivas para
una aplicacin web. Se pueden subir de esta forma fotos, un currculum, un documento
PDF, etc..
Ejemplo 3.5.9. Se va a explicar cmo subir un archivo a travs de un ejemplo. En
primer luga necesitamos un formulario especial, que llamaremos subir.html .

subir.html
<html>
<head>
<title>Elija el archivo a subir</title>
</head>
<body>
<form name="subir" method="post" action="guardar.php"
enctype="multipart/form-data">
Archivo a subir <input type="file" name="miarchivo"><br>
<input type="submit" value="Subir el archivo">
</form>
</body>
</html>

Adems de este formulario necesitaremos una pgina dinmica en PHP que reciba el
archivo y lo guarde en el disco duro. Esto se hace en 3 pasos:

El servidor guarda el archivo en un fichero temporal.


Movemos el archivo en la posicin definitiva usando la funcin
move_uploaded_file(). Esto es imprescindible ya que pasado cierto tiempo el
servidor web eliminar automticamente el fichero temporal.
Si la operacin de mover el archivo falla mostramos un mensaje de error.

El cdigo que se ha escrito en este caso, en el script guardar.php es:

guardar.php

Plataforma de Teleformacin de IFES

Pgina 113 de 240

<?php
$temporal = $_FILES["miarchivo"]["tmp_name"];
$destino = "uploads/" . $_FILES["miarchivo"]["name"];
if (move_uploaded_file($temporal, $destino)) {
echo "Archivo subido con xito";
} else {
echo "Ocurri un error, no se ha podido subir el archivo";
}
?>
Hay que tener cuidado, en este script se supone que el directorio uploads ya existe. Si
no es as la operacin fallara.
El tamao mximo de subida viene indicado con
la variable upload_max_filesize, que se encuentra
definida en el archivo de configuracin de php. Este
valor se puede variar, pero teniendo presente que
valores muy elevados podran provocar que nuestro
servidor se quedara sin espacio de disco duro.
Si el archivo existe, ste se sobrescribe.

Resumen mdulo III


Este recurso es de tipo Multimedia.
Tiene que conectarse a la plataforma para acceder a este recurso.

Prctica: Conceptos avanzados


Este recurso es de tipo Prctica.
Tiene que conectarse a la plataforma para acceder a este recurso.

Autoevaluacin mdulo III

Pgina 114 de 240

Programacin en PHP

Pregunta 1:
No se puede acceder a un carcter aislado de un dato de tipo cadena.

Verdadero
Falso

Respuesta correcta: Falso


Pregunta 2:
Cuando se incluyen determinados caracteres entre comillas, es necesario
"escaparlos" para que los reconozca el interprete de PHP.

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 3:
En un array los ndices han de ser siempre nmeros enteros.

Verdadero
Falso

Respuesta correcta: Falso


Pregunta 4:
Las sentencias ms adecuadas para recorrer arrays son las estructuras iterativas
(bucles) como por ejemplo while y for.

Verdadero
Falso

Respuesta correcta: Verdadero


Pregunta 5:
Este programa imprime un 8 por pantalla:
<?php
function dividir($numero) {
$numero = $numero / 2;
}

Plataforma de Teleformacin de IFES

Pgina 115 de 240

$numero = 8;
dividir($numero);
echo $numero;
?>

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 6:
Para hacer uso de una funcin del ncleo de PHP (predefinida del lenguaje PHP)
es necesario incluir antes la extensin correspondiente mediante la instruccin
include().

Verdadero
Falso

Respuesta correcta: Falso


Pregunta 7:
Tenemos el siguiente formulario(no se muestra la cabecera HTML):
<form name="formulario" method="get" action="procesar.php">
<input type="text" name="edad">
<input type="submit" value="Enviar">
</form>
Y la siguiente pgina llamada procesar.php .
<?php
echo "$edad aos, ests hecho un chaval";
?>
Este cdigo tiene el comportamiento esperado, es decir, si en el fomulario
ponemos edad: 33 y pulsamos enviar el navegador mostrar una pgina con "33
aos, ests hecho un chaval".

Verdadero

Falso

Pgina 116 de 240

Programacin en PHP

Respuesta correcta: Falso


Pregunta 8:
Para pasar datos entre pginas PHP independientes se pueden usar formularios
con campos ocultos (del tipo hidden ).

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 9:
Desde un script PHP podemos abrir cualquier fichero, independientemente de
que est protegido por el sistema operativo del servidor.

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 10:
PHP no permite borrar ficheros a menos que su contenido est vaco.

Verdadero
Falso

Respuesta correcta: Falso

Plataforma de Teleformacin de IFES

Pgina 117 de 240

Programacin en PHP

Prctica intermedia
Este recurso es de tipo Prctica.
Tiene que conectarse a la plataforma para acceder a este recurso.

Pgina 118 de 240

Programacin en PHP

Programacin en PHP

Evaluacin primera
Este recurso es de tipo Evaluacin.
Debe conectarse a la plataforma para realizar la evaluacin. Recuerde que las
evaluaciones son obligatorias ya que determinan la nota final.

Plataforma de Teleformacin de IFES

Pgina 119 de 240

Programacin en PHP

Mdulo IV. PHP y las bases de datos


U.D.1. Estructura de una aplicacin web con bases de datos
Segn una definicin muy acertada de Niklaus Wirth, un programa est compuesto por
algoritmos y estructuras de datos.

En lo que llevamos de curso hemos estudiado a fondo la primera parte, los algoritmos
para resolver problemas. Pero conocemos poco sobre la segunda parte, los datos.
Internet se basa principalmente en el trfico de datos, no en vano se le llama la
autopista de la informacin. Por lo tanto, cualquier lenguaje de programacin web que
se precie estar orientado a recibir, procesar y enviar informacin.
Pero para hacerlo necesita un respaldo potente como almacen de informacin. Hasta
ahora el nico mecanismo que hemos visto para guardar datos de forma permanente
es escribir y leer en ficheros alojados en el servidor. Esto, para grandes cantidades de
informacin es inviable. Es preferible delegar esta funcin a software especializado, los
sistemas de gestin de bases de datos (o sencillamente, bases de datos).
Al aadir bases de datos a una aplicacin web se ampla el esquema que interviene en
la generacin de una pgina web con un nuevo elemento.

Pgina 120 de 240

Programacin en PHP

A esta disposicin se la denomina arquitectura web de tres capas:

Capa primera: cliente web (navegador).


Capa segunda: servidor web con interprete de PHP.
Capa tercera: sistema gestor de bases de datos.

El sistema gestor de bases de datos puede estar instalado en el mismo equipo que
el servidor web o en uno diferente. En nuestro entorno (suponiendo que estemos
usando XAMPP), tenemos el servidor Apache y la base de datos MySQL en el mismo
ordenador.
PHP es el encargado de la comunicacin entre la segunda y la tercera capa. Esto lo
puede hacer de dos formas.

Plataforma de Teleformacin de IFES

Pgina 121 de 240

Mediante el API especfico de la base de datos.


Mediante ODBC, el estndar de comunicacin con bases de datos.

Nosotros usaremos la primera forma ya que es ms sencilla y eficiente.

U.D.2. Qu es MySQL?

Bases de datos relacionales


El tipo de bases de datos ms generalizado es el de las bases de datos relacionales.
Es el modelo ms adecuado para modelar problemas reales y resulta sencillo de usar
y administrar. El usuario se puede desentender de dnde y cmo se almacenan los
datos. La informacin puede ser recuperada o almacenada mediante "consultas" que
ofrecen una amplia flexibilidad y poder para administrar la informacin.
Las bases de datos relacionales guardan la informacin en tablas formadas por
registros (las filas de la tabla) que estn formados por campos (las columnas de un
tabla).

MySQL
MySQL es un producto desarrollado por la compaa MySQL AB. Es el sistema
gestor de bases de datos ms utilizado en las aplicaciones web de Internet. En sus
comienzos careca de muchas funcionalidades habituales en este tipo de bases de
datos, como integridad referencial o soporte para transacciones. Pero incluso con
estos inconvenientes se volvi muy popular. La versin actual ha evolucionado
notablemente y es mucho ms completa.
MySQL es una base de datos relacional y destaca por las siguientes caractersticas.

Es sencilla de usar y administrar.


Es segura.
Es eficiente.
Es sofware libre y por lo tanto gratuita.
Soporta el lenguaje de consultas SQL.
Est disponible para casi todos los sitemas operativos.
Ofrece posibilidades avanzadas de administracin
Su sencillez no es un inconveniente, la versin actual incluye muchas de las
caractersticas avanzadas que ofrecen otras bases de datos de pago.

Pgina 122 de 240

Programacin en PHP

MySQL es la pareja perfecta para las aplicaciones programadas en PHP.

U.D.3. El lenguaje SQL

Qu es SQL?
SQL es el acrnimo del trmino ingls Structured Query Language , lenguaje de
consultas estructurado. Es un lenguaje que se usa para comunicarnos con el sistema
gestor de bases de datos. A la hora de recuperar informacin es potente y sencillo, y lo
hace de forma estructurada.

Trabajar con MySQL


El lenguaje de consultas SQL se va a explicar a travs de ejemplos sobre MySQL. Para
ello haremos uso de phpMyAdmin, una interfaz grfica que nos facilitar el manejo del
Gestor de Bases de Datos MySql.
Para poder acceder a phpMyAdmin, en nuestro navegador escribiremos lo siguiente:
http://localhost/phpmyadmin
1. XAMPP debe estar iniciado. De no ser as, iremos a la carpeta C:\xampp y
ejecutaremos xampp_control.exe. Nos aparecer la siguiente pantalla.

Plataforma de Teleformacin de IFES

Pgina 123 de 240

2. Una vez arrancado XAMPP, hacemos clic en el botn Start que est a la derecha
de Apache y en el botn Start que est a la derecha de MySql. Ambos servicios se
pondrn en marcha y la pantalla anterior deber mostrarse con los textos running, tal y
como muestra la imagen que puede ver seguidamente.

Pgina 124 de 240

Programacin en PHP

3. Ya puede ejecutar phpMyAdmin, para ello teclee en su navegador:


http://localhost/phpmyadmin
Tambin puede acceder haciendo clic en el botn admin que hay a la derecha, en la
misma fila, que MySql. Esto har que se le abra el navegador con la siguiente pantalla:

Plataforma de Teleformacin de IFES

Pgina 125 de 240

Gracias a esta herramienta, podremos crear nuestras Bases de Datos sin necesidad de
escribir las instrucciones en SQL, aunque nosotros aqu explicaremos los dos mtodos,
esto nos ayudar a entender qu es lo que estamos haciendo.
Para practicar, puedes realizar los dos mtodos, pero recuerda que debes utilizar
nombres distintos, ya que no pueden existir dos Bases de Datos con el mismo nombre.

Sintaxis de SQL
A diferencia de PHP, MySQL no distingue entre maysculas y minsculas y las
instrucciones se pueden escribir tanto en una como en la otra forma. Pero para hacer
ms legible lo que leemos, lo habitual es escribir las palabras clave del lenguaje en
maysculas y el resto del cdigo en minsculas. sta es la convencin que se sigue en
este texto.

Pgina 126 de 240

Programacin en PHP

Otra caracterstica de MySQL es que las sentencias se terminan siempre en punto y


coma, como en PHP.
Para escribir las sentencias, debemos hacer clic en la pestaa SQL, lo que har que se
nos muestre la siguiente opcin:

Crear la estructura de la base de datos


Antes de poder almacenar datos hemos de crear una estructura que los pueda
contener.

Creacin de una base de datos


MySQL es un sistema gestor de bases de datos, que puede gestionar ms de una
base de datos independiente. Por lo tanto lo primero que debemos hacer es crear
nuestra base de datos personal que utilizaremos durante las pruebas. Para ello se usa
la sentencia SQL CREATE DATABASE.
CREATE DATABASE nombre_base_datos;
Ejemplo 4.3.1. Creamos nuestra base de datos que llamaremos curso_php.

Plataforma de Teleformacin de IFES

Pgina 127 de 240

Una vez escrita la sentencia, haremos clic en el botn continuar. Podremos comprobar
como a la izquierda aparece el nombre de la base de datos. La siguiente imagen nos
muestra el resultado.

Se puede ver que a la derecha del nombre no hay ningn nmero entre parntesis,
como ocurre con los otros nombres. Esto quiere decir que nuestra Base de Datos
todava no tiene ninguna tabla. Segn vayamos creando tablas, este nmero ir
aumentando.
Las otras Bases de Datos que aparecen, y que nosotros no hemos creado, estn ah
porque las cre phpMyAdmin cuando se instal. No se deben tocar, ya que cualquier
modificacin podra provocar que el sistema no funcione correctamente.

Pgina 128 de 240

Programacin en PHP

Seleccin de una base de datos


Antes de poder trabajar con la base de datos hemos de seleccionarla. Para ello
usaremos el comando USE.
USE nombre_base_datos ;
Ejemplo 4.3.2. A partir de ahora todas las sentencias SQL se harn sobre la base de
datos curso_php .

Como estamos trabajando con phpmyadmin, para seleccionar una tabla, hacemos clic
sobre su nombre en el men de la izquierda. Se nos mostrar la siguiente imagen:

Plataforma de Teleformacin de IFES

Pgina 129 de 240

Y, como podemos ver, todava no tiene ninguna tabla. El cero entre parntesis as nos
lo indica.

Creacin de tablas
Las bases de datos almacenan la informacin en tablas, que son el pilar fundamental
de las bases de datos relacionales. La instruccin SQL que se utiliza para crear una
tabla es CREATE TABLE.
CREATE TABLE nombre_tabla ( definicion_tabla );
La defincin de la tabla est compuesta por una lista de sus campos (columnas). Los
campos
CREATE TABLE nombre_tabla (
nombre_campo1 tipo_campo1 atributos_campo1, nombre_campo2
tipo_campo2 atributos_campo2 ,
...
);
La definicin de cada campo, salvo del ltimo, debe termninar en coma. Cada campo
solo puede almacenar un tipo de datos, de momento nos bastar con conocer los
siguientes:
Pgina 130 de 240

Programacin en PHP

INT - Almacena nmeros enteros.


CHAR(longitud ) - Almacena cadenas de texto de un mximo de longitud
caracteres.
DATE - Almacena fechas
DATETIME - Almacena fechas con la hora

Los atributos de un campo estarn vacos en la mayora de los casos. Aunque hay
una excepcin. en casi todas las tablas se suele poner un campo id que contenga un
identificador nico de cada registro. A este campo se le dan los atributos:

PRIMARY KEY - Indica que el campo identifica de forma nica el registro


(fila).
AUTO_ INCREMENT - El campo se rellena automticamente
incrementndose su valor en 1 cada vez que se aade un registro.

Ejemplo 4.3.3. En este ejemplo se ve la creacin de una tabla con datos sobre los
empleados de una empresa.
CREATE TABLE empleados (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre CHAR(50),
puesto CHAR(20),
fecha_nacimiento DATE,
salario INT);
Para ejecutar esta sentencia SQL podemos copiarla y pegarla en la consola de MySQL.

Plataforma de Teleformacin de IFES

Pgina 131 de 240

Hacemos clic en el botn continuar para que se ejecute la sentencia. Nos aparecer la
siguiente pantalla, indicndonos que se ha creado la tabla. Observe como ahora hay un
uno entre parntesis.

Los campos que se han definido en la tabla tiene las siguientes caractersticas:

id - Campo de tipo entero que identifica de forma nica un registro. Cada vez
que se aade un registro se incrementa automticamente.
nombre - Campo que puede almacenar una cadena de hasta 50 caracteres,
destinado a guardar el nombre. No tiene atributos.
puesto - Campo que puede almacenar una cadena de hasta 20 caracteres,
destinado a guardar el puesto que desempea. No tiene atributos.
fecha_nacimiento - Almacena la fecha de nacimiento en formato YYYY-MMDD (4 cifras para el ao, guin, 2 cifras para el mes, guin, 2 cifras apra el
da). No tiene atributos.
salario - Campo de tipo entero que guarda el sueldo en euros del empleado.
No tiene atributos.

Listar tablas
Para ver todas las tablas que hay disponibles en una base de datos se usa la
instruccin SHOW TABLES.

Pgina 132 de 240

Programacin en PHP

SHOW TABLES;
Ejemplo 4.3.4. Al listar las tablas de la base de datos comprobamos que solo hay una,
la que acabamos de crear.

Mostrar la definicin de una tabla


Esto se hace mediante la sentencia SQL DESCRIBE.
DESCRIBE nombre_tabla ;
Ejemplo 4.3.5. Al mostrar la descripcin de la tabla empleados se puede
comporbar que coincide con la definicin que hemos puesto al crearla.

Plataforma de Teleformacin de IFES

Pgina 133 de 240

Borrar tablas
Para borrar una tabla se usa la sentencia SQL DROP TABLE. Hay que tener mucho
cuidado ya que al borrar una tabla borramos de forma irrecuperable todos los datos que
hubieramos introducido.
DROP TABLE nombre_tabla ;
Ejemplo 4.3.6. Vamos a eliminar la tabla empleados . Todos los datos que contenga se
borrarn. Una vez ejecutada la sentencia, se mostrar la siguiente imagen:

Pgina 134 de 240

Programacin en PHP

Si ha eliminado la tabla, vuelva a crearla tal y como


hizo anteriormente. Necesitamos la tabla empleados
para poder ejecutar los siguientes ejemplos.

Operaciones con datos


Ya tenemos la estructura que va a dar soporte a los datos, ahora nos falta saber cmo
podemos aadirlos, consultarlos, modificarlos y eliminarlos.

Introducir datos en una tabla


Las tablas que hemos creado estn vacas, y as sirven de poco. Son como un
armazn, pero para que la base de datos sea til hemos de introducir datos.
Para insertar un registro en una tabla se usa la sentencia SQL INSERT.
INSERT INTO tabla (campo1, campo2, ...)
VALUES (dato1, dato2, ...);
Ejemplo 4.3.8. Vamos a insertar datos en la tabla empleados. Al igual que en PHP, los
datos que son cadenas de texto los ponemos entre comillas, al igual que la fecha. El
campo id no hace falta insertarlo ya que lo hemos definido como autoincremental.
INSERT INTO empleados (nombre, puesto, fecha_nacimiento,salario)
VALUES ("Silvia","Administrativo","30-09-1967",1200);

Plataforma de Teleformacin de IFES

Pgina 135 de 240

Ejemplo 4.3.9. Se pueden insertar varios registros (filas) en una tabla con una
sentencia insert, separando los conjuntos de valores entre parntesis por comas.
INSERT INTO empleados (nombre, puesto, fecha_nacimiento,salario)
VALUES ("Ana","Programadora","1967-04-06", 1500),
("Juan","Abogado","1971-08-30"1300),
("Berta","Comercial","1980-11-12",2000);

Pgina 136 de 240

Programacin en PHP

La fecha debe tener el formato ao/mes/da

Leyendo datos de una tabla


Aqu es donde se despliega la potencia de SQL, que adems tiene una sintaxis muy
fcil de comprender. Los datos se leen de la tabla a travs de consultas, que son como
preguntas que le hacemos a la base de datos.
La sentencia bsica para hacer consultas es SELECT.
SELECT campo1, campo2, ... FROM tabla ;
Ejemplo 4.3.10. Una consulta sobre la tabla empleados.

Plataforma de Teleformacin de IFES

Pgina 137 de 240

SELECT id, nombre, puesto, fecha_nacimiento, salario FROM


empleados;

Ejemplo 4.3.11. En muchos casos querremos seleccionar todos los campos de la tabla.
Para ello se usa el comodn astersco " * ", de tal forma que esta consulta muestra
exctamente el mismo resultado que la anterior.
SELECT * FROM tabla ;

Pgina 138 de 240

Programacin en PHP

Ejemplo 4.3.12. En este caso restringimos el rango de la consulta al campo nombre.


SELECT nombre FROM empleados;

Plataforma de Teleformacin de IFES

Pgina 139 de 240

Filtrando datos de una tabla


La clausula WHERE en una consulta SELECT permite poner condiciones de manera
que se nos muestren solo los registros que la cumplen. Esta es la sintaxis de la
sentencia SELECT ampliada con esta clusula.
SELECT campos FROM tabla WHERE condiciones ;
Ejemplo 4.3.13. Esta consulta devuelve todos los datos de los empleados cuyo salario
es mayor de 1400 euros.
SELECT * FROM empleados WHERE salario>1400;

Pgina 140 de 240

Programacin en PHP

Se pueden unir varias condiciones mediante los operadores lgicos AND, OR y NOT
(cuyo funcionamiento es muy similar a PHP). Se pueden usar parntesis si se tienen
dudas sobre las reglas de precedencia.
Ejemplo 4.3.14. Empleados que cobran ms de 1400 euros y que nacieron antes de
1975.
SELECT * FROM empleados WHERE salario>1400 AND
fecha_nacimiento<"1975-01-01";

Plataforma de Teleformacin de IFES

Pgina 141 de 240

Ejemplo 4.3.15. Empleados que tabajan de comerciales o programadores.


SELECT * FROM empleados WHERE puesto="Comercial" OR
puesto="Programador" OR puesto="Programadora";

Pgina 142 de 240

Programacin en PHP

Ejemplo 4.3.16. Bsqueda textual. En ocasiones se quiere buscar los registros cuyo
texto contiene otro. Para ello, en lugar de comparar con el operador igual " = " se usa
el operdor LIKE y la cadena son la que se compara se pone entre comillas y signos de
porcentaje "%cadena %". Esta consulta muestra los registros cuyo nombre contiene la
cadena "an".
SELECT * FROM empleados WHERE nombre LIKE "%an%";

Plataforma de Teleformacin de IFES

Pgina 143 de 240

Ordenar datos de una consulta


En muchas ocasiones querremos que los datos devueltos nos lleguen ordenados. Para
ello usaremos con el SELECT la clusula ORDER BY a la que le acompaa el campo
por el que queremos ordenar. En el caso de que haya una clusula WHERE, ORDER
BY ha de ir detrs necesariamente. La sintaxis nueva queda de la siguiente forma.
SELECT campos FROM tabla WHERE condiciones ORDER BY
campo;
Ejemplo 4.3.17. Aqu se muestran todos los registros de la tabla ordenados por el
nombre del empleado en orden alfabtico.
SELECT * FROM empleados ORDER BY nombre;

Pgina 144 de 240

Programacin en PHP

Ejemplo 4.3.18. Mediante el modificador DESC se pueden devolver los resultados en


orden inverso.
SELECT * FROM empleados ORDER BY salario DESC;

Plataforma de Teleformacin de IFES

Pgina 145 de 240

Actualizar datos
Adems de aadir datos, necesitaremos saber cmo modificar los existentes. La
sentencia UPDATE se encarga de esto. Se suele usar en combinacin con una
condicin (similar a las que se usan en los SELECT) que filtra los registros a cambiar.
UPDATE tabla SET campo = valor WHERE condiciones;
Ejemplo 4.3.19. Vamos a usar la sentencia UPDATE para subir el sueldo a la
empleada Ana. Como la tabla tiene un campo id, es por ste por el que filtraremos.
Despus hacemos un SELECT para comprobar que la tabla se ha actualizado.
UPDATE empleados SET salario = 1800 WHERE id = 2;

Pgina 146 de 240

Programacin en PHP

Y al realizar la consulta, vemos que el salario de Ana ha cambiado a 1800.


SELECT * FROM empleados;

Plataforma de Teleformacin de IFES

Pgina 147 de 240

Ejemplo 4.3.20. Si no filtramos la actuallizacin se vern afectados todos los registros


de la tabla.
UPDATE empleados SET salario = 2500;
Al ejecutar esta sentencia, el campos salario ser 2500 para todos los registros.
En una sentencia UPDATE se pueden sustituir varios campos a la vez separandolos
por comas.
UPDATE tabla SET campo1 = valor1, campo2 = valor2, ...

Borrado de registros de una tabla


Para el borrado de datos de una tabla se usa la sentencia DELETE. Se suele usar en
combinacin con una condicin que filtra los datos a borrar. Si se usara sola, borrara
todos los datos de la tabla. Su uso tiene cierta similitud con SELECT, con la diferencia
de que no hay que indicar campos ya que se borra toda la fila.

Pgina 148 de 240

Programacin en PHP

DELETE FROM tabla WHERE condiciones;


Ejemplo 4.3.21. Borrado del empleado Juan. Una vez ms se selecciona por el id .
DELETE FROM empleados WHERE id = 3;
Si ahora hacemos una consulta de toda la tabla, veremos que la fila de Juan ya no
est.
Ejemplo 4.3.22. Al usar la sentencia DELETE sin filtrar se estn borrando todos los
datos de la tabla (pero no su definicin). Luego al hacer el SELECT el mensaje Empty
set nos indica que la tabla est vaca.
DELETE FROM empleados;

Crear la estructura de la base de datos mediante


phpMyAdmin
Ahora vamos a crear la base de datos y las tablas haciendo uso de la herramienta
grfica. No ser necesario escribir sentencias de SQL, lo que haremos ser seleccionar
las opciones que nos interesen para definir la estructura de nuestra base de datos.
Anteriormente se hizo uso de SQL para conocer dichas sentencias, ya que s las
utilizaremos embebindolas en nuestro cdigo PHP.

Crear la base de datos


Tenemos que situarnos en la siguiente seccin de la ventana general e indicar los
siguientes valores. Una vez indicados, hacemos clic en el botn Crear.

Si todo ha ido bien, nos aparecer un mensaje diciendo que la base de datos se ha
creado.

Plataforma de Teleformacin de IFES

Pgina 149 de 240

No puede haber dos bases de datos con el mismo


nombre. Si en los pasos anteriores se le puso el
nombre curso_php, ahora ser necesario indicarle
otro nombre. O borrar la base de datos y volver a
crearla.

Crear tablas en la base de datos


Al hacer clic en el men de la izquierda sobre el nombre de la base de datos que
hemos creado, nos aparece la siguiente pantalla, donde indico el nombre de la tabla y
el nmero de campos que tendr. En la siguiente imagen vemos como quedara.

Como hicimos anteriormente, el nombre de la tabla es empleados, y el nmero de


campos es 5. Pulsamos sobre el botn continuar y, en la nueva pantalla, indicamos los
nombres de los campos as como los tipos.

Pgina 150 de 240

Programacin en PHP

como no podemos ver toda la pantalla, nos movemos hacia la derecha para poder
definir el resto de valores, como se indica en la siguiente imagen.

Plataforma de Teleformacin de IFES

Pgina 151 de 240

Y finalmente hacemos clic en el bot grabar. Si todo ha ido bien se muestra la siguiente
pantalla:

Pgina 152 de 240

Programacin en PHP

Plataforma de Teleformacin de IFES

Pgina 153 de 240

Esta operacin deberemos hacerla para cada una de las tablas que constituyan nuestra
base de datos.
Una vez creadas las tablas de nuestra base de datos, para introducir, borrar, modificar,
consultar tablas, lo haremos a travs de PHP haciendo uso de las sentencias que
vimos anteriormente.

U.D.4. Funciones de PHP con MySQL


Una vez que conocemos las caractersticas bsicas de MySQL y las sentencias SQL
que se pueden ejecuar vamos a ver cmo se integra MySQL con PHP.
Las definiciones de bases de datos y tablas las hacemos desde phpMyAdmin. La
manipulacin de datos en cambio se har desde PHP. Las operaciones que nos
interesan son, por lo tanto:

Leer datos.
Aadir datos.
Modificar datos.
Eliminar datos.

PHP accede a MySQL a travs del API. Dispone de una extensin (biblioteca de
funciones) con muchas funciones para acceder a la base de datos.

Conectar con la base de datos


Antes de empezar a consultar informacin tenemos que conectar con el sistema gestor
de bases de datos y declarar la base de datos que vamos a usar. Esto se deber hacer
en cualquier script que posteriormente quiera leer, aadir, modificar o eliminar datos.

mysql_connect()
Esta funcin conecta el script a un sistema gestor de bases de datos.
mysql_connect(servidor, usuario, contrasea )
Los parmetros que recibe son:

Pgina 154 de 240

Programacin en PHP

servidor - Nombre o direccin IP del servidor donde est alojada la base de


datos. Si est instalado en la misma mquina que el servidor web lo normal
es que sea localhost . Se puede elegir un nmero de puerto diferente del que
se usa por defecto poniendo detras del servidor dos puntos " : " y el nmero
del puerto. P.ej.: localhost:3340 .
usuario - Nombre de usuario con privilegios para acceder a la base de datos.
contrasea - Contrasea del usuario.

Esta funcin devuelve una referencia a la base de datos que guardaremos en una
variable para usarla en posteriores funciones de PHP con MySQL.

mysql_select_db()
Usa como parmetros la base de datos que queremos seleccionar y la variable en
la que tengamos la referencia a la base de datos. Es equivalente en MySQL a la
sentencia USE.
mysql_select_db(nombre_base_datos , referencia_bd )
Ejemplo 4.4.1. Los ejemplos de esta unidad didctica usarn la base de datos creada
en la unidad didctica anterior llamada curso_php con la tabla empleados y con los
cuatro registros creados.
<?php
//Conecta a la BD, guarda en la variable $con la referencia a la BD
$con = mysql_connect("localhost", "root", "");
//Selecciona la BD que se va a usar a partir de este momento.
mysql_select_db("curso_php");
?>
Ejemplo 4.4.2. Una buena idea es guardar el proceso de conexin a la base de datos y
luego utilizarlo en nuestros scripts mediante un include() . Aqu se ha creado el fichero
conectar_bd.php.
<?php
DEFINE(DB_HOST, "localhost");DEFINE(DB_USER, "root");
DEFINE(DB_PASSWORD, "");DEFINE(DB_NAME, "curso_php");

Plataforma de Teleformacin de IFES

Pgina 155 de 240

$con = @mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);


if (!$con || !mysql_select_db("curso_php")) {
die("Error conectando a la BD: " . mysql_error());
}
?>
La funcin mysql_error() devuelve un texto con el error que se produjo en nuestra
ltima operacin sobre la base de datos. Se ha utilizado la funcin de PHP die() que
termina la ejecucin del script sacando un mensaje por pantalla. Tambin se ha usado
el operador de supresin de errores "@ ".
Al incluir este fichero de configuracin en el siguiente script, se comporta igual que en
ejemplo 4.4.1., solo que mejorado para emitir mensajes de error.
<?php
include("conectar_bd.php");
echo "Establecida la conexin a la base de datos";
?>

Leer datos
Aqu nos encontramos con la funcin clave de este captulo. Se trata de la funcin
mysql_query(). Su potencia es enorme ya que permite enviar una instruccin SQL,
como las vistas en el captulo anterior, a la base de datos. Para leer datos la sentencia
que usaremos ser obviamente un SELECT.

mysql_query()
La sintaxis de esta funcin es muy sencilla. La sentencia SQL es la misma que
pondramos en la consola de MySQL, aunque no es necesario poner el punto y coma
final de la sentencia SQL (que s al final de la instruccin PHP).
mysql_query(sentencia_SQL , referencia_bd )
Hay que tener en cuenta que esta funcin solo ejecuta la sentencia, no muestra ningn
dato. Por ello devuelve un identificador del resultado que se usa en otras funciones
para visualizar los valores devueltos por la consulta.
Pgina 156 de 240

Programacin en PHP

Ejemplo 4.4.3. Aqu se muestra como se ejecuta una sentencia SQL.


<?php
include("conectar_bd.php");
$resultado = mysql_query("SELECT * FROM empleados");
?>
Ejemplo 4.4.4. Mejoraremos la claridad del cdigo si guardamos la sentencia SQL en
una variable.
<?php
include("conectar_bd.php");
$consulta = "SELECT * FROM empleados";
$resultado = mysql_query($consulta);
?>

mysql_num_rows()
Antes de acceder al resultado nos interesa saber cuntos registros se han obtenido.
Concretamente una consulta podra no devolver ningn resultado y esto podra causar
un error en nuestro cdigo.
Esta funcin nos dar el nmero de filas (registros) que tiene un resultado obtenido
de una consulta de tipo select (y solamente de este tipo, las consultas de insercin/
borrado/actualizacin tienen otra funcin, mysql_affected_rows).
mysql_num_rows(identificador_de_resultado )

mysql_result()
De acuerdo, ya hemos ejecutado la sentencia SQL, pero cmo accedemos al
resultado?. Para ello nos sirve la funcin mysql_result() .
mysql_result(identificador_de_resultado, fila, nombre_campo)

Plataforma de Teleformacin de IFES

Pgina 157 de 240

El campo se puede seleccionar tambin mediante un nmero, que es su posicin entre


los campos devueltos.
Ejemplo 4.4.5. mysql_result() se suele usar en conjuncin con la funcin
mysql_num_rows() para controlar las filas que se estn recuperando. La estructura
ideal es un bucle for . En este ejemplo se muestra una consulta limitada en el rango
(solo se recupera el campo nombre ).
<?php
include("conectar_bd.php");
$consulta = "SELECT nombre FROM empleados";
$resultado = mysql_query($consulta);
$filas = mysql_num_rows($resultado);
for ($i = 0; $i < $filas; $i++) {
$nombre = mysql_result($resultado, $i, "nombre");
echo "$nombre<br>";
}
?>
Ejemplo 4.4.6. Aqu se pone junto todo lo que hemos visto hasta ahora y se muestra
la tabla empleados dentro de una tabla HTML.
<?php
include("conectar_bd.php");
?>
<table border="1">
<tr>
<td>id</td>
<td>nombre</td>
<td>puesto</td>
<td>fecha_nacimiento</td>
<td>salario</td>
</tr>
<?php
$consulta = "SELECT * FROM empleados";
$resultado = mysql_query($consulta);
$filas = mysql_num_rows($resultado);

Pgina 158 de 240

Programacin en PHP

for ($i = 0; $i < $filas; $i++) {


echo "<tr>";
$id = mysql_result($resultado, $i, "id");
echo "<td>$id</td>";
$nombre = mysql_result($resultado, $i, "nombre");
echo "<td>$nombre</td>";
$puesto = mysql_result($resultado, $i, "puesto");
echo "<td>$puesto</td>";
$f_nacimiento = mysql_result($resultado, $i, "fecha_nacimiento");
echo "<td>$f_nacimiento</td>";
$salario = mysql_result($resultado, $i, "salario");
echo "<td>$salario</td>";
echo "</tr>";
}
?>
</table>
Ejemplo 4.4.7. Con un pequeo cambio en la sentencia SQL mostraremos las filas
ordenadas por el nombre.
$sql = "SELECT * FROM empleados ORDER BY nombre";
Ejemplo 4.4.8. Y con solo otro pequeo cambio obtenemos un resultado filtrado.
$sql = "SELECT * FROM empleados WHERE salario > 1400";
Ejemplo 4.4.9. Con el sistema que hemos seguido que consiste en separar la
sentencia SQL veamos lo fcil que resulta parametrizar un parmetro de bsqueda.
$salario = 1250;
$sql = "SELECT * FROM empleados WHERE salario > $salario";

mysql_fetch_array()
Es una alternativa a usar mysql_result() a la hora de recuperar los datos. La diferencia
es que en lugar de extraerse las celdas de la tabla de una en una se recupera un array
asociativo por cada fila que tiene como ndices los nombres de los campos.

Plataforma de Teleformacin de IFES

Pgina 159 de 240

Cada vez que se llama a esta funcin recupera una de las filas resultado de la consulta,
hasta que no queda ninguna. entonces devuelve FALSE.
mysql_fetch_array(identificador_de_resultado )
Ejemplo 4.4.10. Mediante esta funcin se puede conseguir un cdigo ms compacto, y
que para algunos ser ms legible. Como cada llamada a la funcin recupera una fila y
pasa a la siguiente no es necesario recuperar mediante mysql_num_rows() el nmero
de filas que contiene el resultado. Este cdigo es equivalente al del ejercicio 4.4.6.
<?php
include("conectar_bd.php");
?>
<table border="1">
<tr>
<td>id</td>
<td>nombre</td>
<td>puesto</td>
<td>fecha_nacimiento</td>
<td>salario</td>
</tr>
<?php
$consulta = "SELECT * FROM empleados";
$resultado = mysql_query($consulta);
$fila = mysql_fetch_array($resultado);
while($fila) {
echo "<tr>";
echo "<td>{$fila["id"]}</td>";
echo "<td>{$fila["nombre"]}</td>";
echo "<td>{$fila["puesto"]}</td>";
echo "<td>{$fila["fecha_nacimiento"]}</td>";
echo "<td>{$fila["salario"]}</td>";
echo "</tr>";
$fila = mysql_fetch_array($resultado);
}
?>
</table>

Pgina 160 de 240

Programacin en PHP

Aadir datos
Para aadir datos no necesitamos conocer nada nuevo. Se usa la funcin
mysql_query() pero en esta ocasin se encapsula una sentencia SQL INSERT, que
aada datos.
Ejemplo 4.4.11. Vamos a aadir un nuevo empleado. Para ello se usar la sentencia
SQL "parametrizada", como si se hubiesen recibido los datos de un formulario y se
quisieran guardar en la base de datos.
<?php
include("conectar_bd.php");
$nombre = "Paola";
$puesto = "Programadora";
$fecha_nacimiento = "1958-01-23";
$salario = 1800;
$consulta = "INSERT INTO empleados (nombre, puesto,
fecha_nacimiento, salario) VALUES ('$nombre', '$puesto',
'$fecha_nacimiento', '$salario')";
$resultado = mysql_query($consulta);
?>
Podemos comprobar que se ha realizado la insercin tecleando SELECT * FROM
empleados desde la consola de MySQL o ejecutando el cdigo del ejercicio 4.4.6. (o
del 4.4.10.)

Modificar datos
Una vez ms usamos la funcin mysql_query() , con una sentencia SQL del tipo
UPDATE.
Ejemplo 4.4.12. Vamoa a modificar los datos del empleado que adimos en la
consulta anterior.
<?php
include("conectar_bd.php");
$id = 5; //id del registro a modificar
Plataforma de Teleformacin de IFES

Pgina 161 de 240

$nuevo_salario = 2100;
$consulta = "UPDATE empleados SET salario = $nuevo_salario
WHERE id = $id";
$resultado = mysql_query($consulta);
?>
Para comprobar que la actualizacin se ha realizado correctamente, podemos ejecutar
el ejercicio 4.4.6 o tambin ejecutar phpMyAdmin, seleccionar la base de datos
curso_php, la tabla empleados y, finalmente, hacer clic en la opcin Examinar.
Recuerda que para acceder a phpMyAdmin debe estar el servicio en funcionamiento y
despus escribir en tu navegador la direccin http://localhost/phpmyadmin

Eliminar datos
En esta ocasin usamos la funcin mysql_query() , con una sentencia SQL del tipo
DELETE.
Ejemplo 4.4.13. Vamos a modificar los datos del empleado que aadimos en la
consulta anterior.
<?php
include("conectar_bd.php");
$id = 5; //id del registro a modificar
$consulta = "DELETE FROM empleados WHERE id = $id";
$resultado = mysql_query($consulta);
?>
Si accedemos nuevamente a la tabla empleados, tal y como hicimos en el ejercicio
anterior, podremos ver que ya no tenemos la fila del empleado Paula, cuyo id era 5.

Arquitectura de 3 capas
Este recurso es de tipo Multimedia.
Tiene que conectarse a la plataforma para acceder a este recurso.

Pgina 162 de 240

Programacin en PHP

Resumen mdulo IV
Este recurso es de tipo Multimedia.
Tiene que conectarse a la plataforma para acceder a este recurso.

Prctica: PHP y las bases de datos


Este recurso es de tipo Prctica.
Tiene que conectarse a la plataforma para acceder a este recurso.

Autoevaluacin mdulo IV
Pregunta 1:
En una arquitectura web en tres capas el servidor web y el sistema gestro de
bases de datos estn siempre en ordenadores diferentes.

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 2:
MySQL es muy popular en internet por su sencillez, a pesar de que incluso en la
version actual carece de funcionalidades consideradas imprescindibles en este
tipo de bases de datos.

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 3:
Un sistema gestor de bases de datos puede contener muchas bases de datos
independientes.

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 4:

Plataforma de Teleformacin de IFES

Pgina 163 de 240

En MySQL, antes de utilizar una base de datos es necesario seleccionarla


mediante la instruccin SELECT.

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 5:
Las siguientes sentencias SQL, sobre una tabla agenda con los campos id,
nombre telefono, email son equivalentes:
SELECT nombre, telefono, email FROM agenda;
SELECT * FROM agenda;

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 6:
Sobre la tabla agenda, la siguiente sentencia nos muestra los datos de aquellas
personas de las que no tenemos la direccin de email.
SELECT * FROM agenda WHERE email = "";

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 7:
Las dos instrucciones SQL a continuacin tienen exactamente el mismo efecto,
ya que ambas borran la tabla agenda .
DROP TABLE agenda;
DELETE FROM agenda;

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 8:

Pgina 164 de 240

Programacin en PHP

Despus de llamar a una funcin del API de MySQL podemos llamar a la funcin
mysql_error(). Si no se ha producido un error devuelve la cadena vaca "". Si se
ha producido un error nos da un mensaje con una descripcin del mismo.

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 9:
Antes de poder trabajar con una base de datos en un script PHP es necesario
establecer una conexin con el sistema gestor de bases de datos mediante la
funcin mysql_select_db().

Verdadero
Falso

Respuesta correcta: Falso


Pregunta 10:
La funcin mysql_query() permite ejecutar consultas del tipo SELECT, pero no
hacer INSERT, UPDATE o DELETE.

Verdadero

Falso
Respuesta correcta: Falso

Plataforma de Teleformacin de IFES

Pgina 165 de 240

Programacin en PHP / Mdulo IV. PHP y las bases de datos

Videotutoriales
Servidor local XAMPP
Este recurso es de tipo Multimedia.
Tiene que conectarse a la plataforma para acceder a este recurso.

Crear una base de datos


Este recurso es de tipo Multimedia.
Tiene que conectarse a la plataforma para acceder a este recurso.

Pgina 166 de 240

Programacin en PHP

Programacin en PHP

Evaluacin segunda
Este recurso es de tipo Evaluacin.
Debe conectarse a la plataforma para realizar la evaluacin. Recuerde que las
evaluaciones son obligatorias ya que determinan la nota final.

Plataforma de Teleformacin de IFES

Pgina 167 de 240

Programacin en PHP

Mdulo V. Aplicaciones comunes en


PHP
U.D.1. Fecha y hora

Timestamp
El concepto de timestamp procede del mundo Unix/Linux. A nivel interno, PHP guarda
las fechas como un nmero entero que corresponde con el nmero de segundos que
han pasado desde una fecha de referencia, concretamente el 1 de enero de 1970. A
este formato para almacenar una fecha se le llama timestamp .

Ejemplo 5.1.1. Las dos fechas que se muestran a continuacin son la misma, solo que
la segunda est en formato timestamp .

Ejemplo 5.1.2. El timestamp tiene la ventaja para PHP de que, al ser un nmero
entero, es fcil operar con l. Es sencillo sumar, restar o comparar dos fechas.
Siempre que queramos hacer este tipo de operaciones las hemos de hacer en formato
timestamp .
Con el siguiente ejemplo, podemos ver el timestamp. La funcin time() nos lo devuelve.
<?php

Pgina 168 de 240

Programacin en PHP

echo "El timestamp es ".time();


?>

La fecha en formato timestamp tiene la desventaja de que su significado no es obvio.


Afortunadamente PHP ofrece mltiples funciones que sirven para convertir fechas en
formatos timestamp en fechas reconocibles, similares a "12 de octubre de 2010" o
"12/02/2010".

Funciones de fecha y hora


Setlocale()
Si imprimimos con normalidad la fecha en nuestra pgina, seguramente aparecer en
ingls. tenemos que configurar las locales y PHP har el resto por nosotros. Las locales
nos permiten ajustar el sistema operativo a nuestra cultura y en este caso, nos permiten
ajustar las fechas a nuestro idioma.
setlocale(LC_ALL, idioma)
Veamos cmo configurar las locales para el idioma espaol. La cadena que identifica al
idioma castellano es "esp" en Windows.
setlocale(LC_ALL,"esp");
Hay otras, es_ES@euro y "es_ES", que deber utilizar si su sistema no es Windows.

Plataforma de Teleformacin de IFES

Pgina 169 de 240

time()
Como hemos visto, esta funcin permite crear una marca timestamp para una fecha y
hora dados.
time(hora, min, seg, mes, da, ao )
Es muy importante observar el orden de los argumentos, que no es al que estamos
acostumbrados. Concretamente el mes se encuentra antes del da.
Ejemplo 5.1.3. En este ejemplo se usa la funcin strftime() para ver la fecha en modo
texto. Su funcionamiento se explica ms adelante.
<?php
$fecha = time(14, 30, 0, 12, 25, 2005);
echo @strftime("%c", $fecha);
?>
Ejemplo 5.1.4. Nos encontraremos con multitud de ocasiones en las que
necesitaremos conocer la fecha actual. time() tambin se puede usar sin argumentos
para obtener el timestamp del momento actual.
<?php
$fecha = time();
echo @strftime("%d/%m/%Y %H:%M:%S", $fecha);
?>

getDate()
Esta funcin recibe una fecha en formato timestamp y devuelve un array asociativo con
todos los datos de esa fecha.
getDate(timestamp)

Pgina 170 de 240

Programacin en PHP

Ejemplo 5.1.5. Como es un array asociativo podemos ver su contenido usando la


funcin print_r().
<pre>
<?php
$fecha = time(); //timestamp del momento actual
$datos_fecha = @getDate($fecha);
print_r($datos_fecha);
?>
</pre>
Ejemplo 5.1.6. Podemos concatenar los campos de un array asociativo para dar
formato a una fecha.
<?php
$fecha = time(); //timestamp del momento actual
$datos_fecha = @getDate($fecha);
echo "Hoy es ";
echo $datos_fecha["mday"] . "/" . $datos_fecha["mon"] . "/" .
$datos_fecha["year"] . ".<br>";
echo "Son las ";
echo $datos_fecha["hours"] . ":" . $datos_fecha["minutes"] . ":".
$datos_fecha["seconds"] . ".<br>";
?>

strftime()
Esta funcin, que hemos estado utilizando en los ejemplos anteriores, se emplea para
dar formato a las fechas de forma sencilla. Formatea una fecha/hora local segn la
configuracin regional. Los nombres del mes y del da de la semana y otras cadenas
dependientes del lenguaje estn subordinados a la configuracin regional local
establecida con setlocale().
strftime(formato, timestamp )

Plataforma de Teleformacin de IFES

Pgina 171 de 240

La cadena de texto formato est formada por texto corriente mezclado con
especificadores de conversin. Cada especificador de conversin empieza con el
smbolo porcentaje "%". Esta es la lista de los especificadores de los que disponemos.

%a - nombre del da de la semana abreviado


%A - nombre del da de la semana completo
%b - nombre del mes abreviado
%B - nombre del mes completo
%c - representacin de fecha y hora preferidas en el idioma actual
%d - da del mes en nmero (de 00 a 31)
%H - hora como un nmero de 00 a 23
%I - hora como un nmero de 01 a 12
%j - da del ao como un nmero de 001 a 366
%m - mes como un nmero de 01 a 12
%M - minuto en nmero
%p - `am' o `pm', segn la hora dada, o las cadenas correspondientes en el
idioma actual
%S - segundos en nmero
%U - nmero de la semana en el ao, empezando con el primer domingo
como el primer da de la primera semana
%W - nmero de la semana en el ao, empezando con el primer lunes como
el primer da de la primera semana
%w - da de la semana en nmero (el domingo es el 0)
%x - representacin preferida de la fecha sin la hora
%X - representacin preferida de la hora sin la fecha
%y - ao en nmero de 00 a 99
%Y - ao en nmero de cuatro cifras
%Z - nombre o abreviatura de la zona horaria
%% - carcter "%"

Ejemplo 5.1.7. Este cdigo produce el mismo resultado que el del ejemplo 5.1.6. pero
es mucho ms conciso y legible.
<?php
$fecha = time(); //timestamp del momento actualecho
@strftime("Hoy es %d/%m/%Y", $fecha) .".<br>";
echo @strftime("Son las %H:%M:%S", $fecha) .".<br>";
?>
Ejemplo 5.1.8. Formateo de una fecha usando diferentes patrones.

Pgina 172 de 240

Programacin en PHP

<?php
$fecha = time(); //timestamp del momento actual
echo @strftime("%d/%m/%Y %H:%M:%S", $fecha) . ".<br>";
echo @strftime("%A %d de %B de %Y", $fecha) . ".<br>";
echo @strftime("%Hh, %Mm y %Ss", $fecha) . ".<br>";
echo @strftime("%I:%M %p", $fecha) . ".<br>";
?>
Esta funcin tiene la ventaja adicional de que nos puede dar la fecha en castellano
(lunes en lugar de monday). Si no fuera as, debemos informar al servidor de cul es el
idioma que deseamos, y para ello utilizamos la sentencia setlocale(LC_ALL,"esp");.
Ejemplo 5.1.9. Vamos a usar esta funcin para mostrar los resultados del ejemplo
anterior pero esta vez en espaol .La cadena que identifica al idioma espaol es "esp"
en Windows.
<?php
setlocale(LC_TIME ,"esp");
$fecha = time(); //timestamp del momento actual
echo @strftime("%d/%m/%Y %H:%M:%S", $fecha) . ".<br>";
echo @strftime("%A %d de %B de %Y", $fecha) . ".<br>";
echo @strftime("%Hh, %Mm y %Ss", $fecha) . ".<br>";
echo @strftime("%I:%M %p", $fecha) . ".<br>";
?>

Validacin de fechas
checkdate()
En ocasiones, por ejemplo, cuando recibamos datos de un formulario, nos interesar
comprobar que la fecha realmente existe. La funcin checkdate() comprueba que una
fecha es correcta, devolviendo TRUE o FALSE segn su validez. Las fechas anteriores
al ao 1 no son vlidas.
checkdate(mes, da, ao )

Plataforma de Teleformacin de IFES

Pgina 173 de 240

Una vez ms, el orden en el que se introducen los parmetros no es el tradicional. El


ms se pone antes que el da.
Ejemplo 5.1.10. No hay un 31 de abril. Y 29 de febrero solo en los aos que son
bisiestos.
<?php
$dia = 31;
$mes = 4;
$anyo = 2010;
if (checkdate($mes, $dia, $anyo)) {
echo "El $dia/$mes/$anyo es una fecha vlida.<br>";
}
else {
echo "El $dia/$mes/$anyo no existe.<br>";
}
$dia = 29;
$mes = 2;
$anyo = 2005;
if (checkdate($mes, $dia, $anyo)) {
echo "El $dia/$mes/$anyo es una fecha vlida.<br>";
}
else {
echo "El $dia/$mes/$anyo no existe.<br>";
}
$dia = 29;
$mes = 2;
$anyo = 2004;
if (checkdate($mes, $dia, $anyo)) {
echo "El $dia/$mes/$anyo es una fecha vlida.<br>";
}
else {
echo "El $dia/$mes/$anyo no existe.<br>";
}
?>
debemos evitar la utilizacin de tildes o en los
nombres de variables, ya que no seran nombres
correctos y, por tanto, PHP ignora dicha variable.

Pgina 174 de 240

Programacin en PHP

U.D.2. Envo de correo electrnico

Consideraciones preliminares
El envo de correo electrnico no se puede hacer directamente desde PHP. PHP
se limita a encargar a un servidor de correo SMTP que enve el correo y es ste
quien pone el correo en la red. Por lo tanto, para poder enviar correos electrnicos,
necesitaremos, adems del servidor web, un servidor SMTP al que tengamos acceso.
Esto puede resultar complicado ya que podemos no disponer de un servidor SMTP.
Tambin puede suceder que aunque dispongamos de un servidor de SMTP no poder
usarlo de forma remota por motivos de seguridad.
.

El paquete XAMPP, que hemos elegido para este curso, dispone de un servidor de
correo SMTP, llamado Mercury, pero no lo vamos a utilizar ya que su configuracin es
compleja. En su lugar, utilizaremos Postcast Server. Dispone de una edicin libre, que
nos podemos descargar, y cuya configuracin es muy sencilla.

Plataforma de Teleformacin de IFES

Pgina 175 de 240

1.- Para descargarlo, accedemos a la siguiente direccin: http://


www.postcastserver.com/Download/ y hacemos clic sobre PostCast Server Free Edition
v2.6.0 y a continuacin hacemos clic en Version 2.6, mirror location 1. La descarga se
iniciar automticamente. Guarden el archivo en su disco duro.
2.- Una vez descargado, descomprimimos el archivo. Para llevar a cabo la instalacin,
ejecutamos el archivo setup.exe
3.- La instalacin consiste en aceptar las condiciones de uso y hacer clic en los botones
Next, dejar los valores que aparezcan por defecto y cuando termine la instalacin, clic
en el botn Finish.

4.- Para poner en funcionamiento el programa, lo hacemos a travs del icono que ha
creado en el escritorio.

Pgina 176 de 240

Programacin en PHP

5.- Ahora entramos en la configuracin. Para ello, haz clic en el botn que hay a la
izquierda, llamado settings. Nos mostrar la siguiente pantalla:

Plataforma de Teleformacin de IFES

Pgina 177 de 240

En la casilla Host name, deber aparecer el nombre de vuestro ordenador. El valor


de DNS server address, tambin puede cambiar, pero no tienes que cambiarlo por
los valores que aqu aparecen, sino por los que te haya suministrato tu proveedor de
Internet. El resto de valores deben ser los mismos.
6.- Ahora tenemos que acceder al archivo php.ini, que para los sistemas windows
est en C:\xampp\php. Una vez estemos en la carpeta, hacemos doble clic sobre
l y se abrir con el Bloc de notas (suficiente para lo que tenemos que hacer). Nos
desplazamos hasta la seccin [mail function] y ponemos los valores como se indica en
la siguiente imagen:

Pgina 178 de 240

Programacin en PHP

Una vez modificados, guardamos el archivo. Para que estos cambios surtan efecto,
debes reiniciar Apache. Para ello, ve al panel de control de XAMPP, haz clic en Stop y
despus clic en Start.
Si todo ha ido bien, ya tenemos configurado nuestro servidor local para mandar correos
electrnicos desde PHP.
Si ests utilizando un servicio de hosting, tendrs
configurado SMTP, y no tendrs que hacer nada
de lo anteriormente mencionado. Si no fuera as,
debers contactar con tu proveedor de hosting.

Envo de correo electrnico desde PHP


La funcin que nos permite mandar correos electrnicos desde PHP es mail(). Veamos
su funcionamiento.

mail()
La funcin mail() tiene slo tres parmetros. La direccin de correo del destinatario, el
asunto del correo y el contenido del mismo.
mail(destinatario, asunto, mensaje);

Plataforma de Teleformacin de IFES

Pgina 179 de 240

Para crear saltos de lnea en el cuerpo del mensaje se utiliza la cadena "\n\r" que
simboliza un salto de lnea en Windows.
Ejemplo 5.2.1. Para probar este script se puede poner como direccin de destino la de
una cuenta a la que tengamos acceso. El mansaje, al ser muy largo, se ha escrito en
varias lneas usando el operador concatenar " . ".
<?php
$destinatario = "micorreo@direccion.es "; //poner aqu vuestra direccin
$asunto = "El sbado al cine.";
$mensaje = "Hemos quedado el sbado a las 9 en el cine Oden.\r\n"
. "Avisa si no puedes venir.\r\n"
. "\r\n"
. "Juan";
if (mail($destinatario, $asunto, $mensaje)) {
echo "El mensaje se ha enviado con xito.";
}
else {
echo "No se ha podido enviar el mensaje.";
}
?>
Antes de ejecutar nuestro script, debe estar en funcionamiento PostCast Server.
Para comprobarlo, miremos junto al reloj que hay abajo y a la derecha de la pantalla.
Debemos tener esta imagen:

Est el icono de XAMPP y el icono de PostCast Server. Si no est, vayamos al


escritorio y ejecutmoslo.
Cuando estemos seguros de que se est ejecutando PostCast Server, vayamos a
nuestro navegador para ejecutar el script. Debera aparecer El mensaje se ha enviado
con xito.
Pero para que el mensaje salga de nuestro servidor, debemos acceder a PostCast
Server haciendo clic en el icono que mostramos anteriormente, junto a la hora. Nos
aparecer la siguiente pantalla:

Pgina 180 de 240

Programacin en PHP

Para que se lleve a cabo el envo, hacemos clic en Start. Si todo va bien, desaparecer
la direccin que se est mostrando en pantalla.
Si como destino pusiste tu propia direccin, es cuestin de unos minutos comprobar
que lo has recibido.
Adems de mirar tu bandeja de entrada, mira la
bandeja de correo no deseado o Spam. Pudiera ser
que tu sistema de correo as lo detecte.

Ejemplo 5.2.2. En la forma anterior no nos resulta muy til. Sera mejor si aadieramos
un formulario para elegir el destinatario, el asunto y redactar el correo.

Plataforma de Teleformacin de IFES

Pgina 181 de 240

mail_form.html
<html>
<head>
<title>Enviar correo electrnico</title>
</head>
<body>
<form name="mail_form" method="post" action="enviar_mail.php">
Destinatario:<br>
<input type="text" name="destinatario" size="53"></br>
Asunto:<br>
<input type="text" name="asunto" size="53"></br>
Mensaje:<br>
<textarea name="mensaje" rows="5" cols="40"></textarea></br>
<input type="submit" value="Enviar correo"></br>
</form>
</body>
</html>

enviar_mail.php
<?php
$destinatario=$_POST[destinatario];
$asunto=$_POST[asunto];
$mensaje=$_POST[mensaje];
if (@mail($destinatario, $asunto, $mensaje)) {
echo "El mensaje se ha enviado con xito.";
}
else {
echo "No se ha podido enviar el mensaje.";
}
?>

El aspecto que tendr el formulario es el siguiente.

Pgina 182 de 240

Programacin en PHP

Recuerda que estamos en un servidor local. Para que el envo se realice accede a
PostCast Server y haz los mismos pasos que en el ejemplo anterior.

U.D.3. Sesiones
Las sesiones se usan siempre que haya que dar servicios personalizados o de
identificacin. El protocolo HTTP es un protocolo sin estado. Esto significa que no hay
manera de que un servidor web sepa qu estamos haciendo mientras navegamos por
un sitio web, a no ser que pueda identificar/marcar al cliente (el navegante) de algn
modo, para que, posteriores peticiones de ste nos digan quin es.
Por supuesto, con una pgina dinmica en PHP podemos guardar informacin en algn
sitio (un fichero, una base de datos), pero las aplicaciones web no se componen de una
sola pgina sino de varias, as que necesitaremos de algn mecanismo que nos facilite
el almacenaje de datos temporales relativos a una navegacin (llamada sesin).
PHP incorpora el manejo de las sesiones de serie, y de manera muy simple,
escondiendo la complejidad que tiene el proceso tras el protocolo HTTP. Para el
manejo de sesiones PHP incorpora una serie de funciones que permiten iniciar/terminar
una sesin as como funciones de escritura/lectura en la sesin.

Plataforma de Teleformacin de IFES

Pgina 183 de 240

Funciones para manejar sesiones


El uso de sesines en PHP se define en tres sencillos pasos:
1. Inicio de sesin. La primera pgina crea la sesin.
2. Uso de la sesin. Las pginas que forman parte de la aplicacin
hacen uso de la sesin. Durante este transcurso se pueden escribir y
leer datos en la sesin.
3. Finalizacin de la sesin. La pgina de salida destruye la sesin.

session_start()
Esta funcin se usa para iniciar una sesin. Basta con incluirla al principio
de cada pgina que vaya a usar sesiones. Eso s, debe ir antes de cualquier cdigo
HTML, si no es as dar error.
Ejemplo 5.3.1. El primer cdigo es correcto mientras que si probamos el segundo nos
dar un error. ste es un motivo adicional por el que es recomendable acostumbrarse a
poner el cdigo PHP al principio de la pgina web.
<?php
//Lo primero que se hace es crear la sesin
session_start();
?>
<html>
<head>
<title>Esta pgina es correcta</title>
</head>
<body>Este texto podr leerse.
</body>
</html>
<html>
<head>
<title>Esta pgina no es correcta</title>
</head>
<body>Despus de este texto aparecer un error.
</body>
</html>
Pgina 184 de 240

Programacin en PHP

<?php
session_start();
?>

session_id()
Todas las sesiones tienen un nmero que las identifica de forma nica. En ocasiones
puede ser til conocerlo y para eso se usa esta funcin.

session_destroy()
Mediante esta funcin se destruyen todos los datos que pudiera tener asociada la
sesin actual. En la pgina de salida es conveniente poner una llamada explcita a esta
funcin. Si se la llama se destruye la sesin y todos los datos asociada.
Ejemplo 5.3.2. Un caso bsico. En iniciar_sesion.php se crea la sesin, en
sesion_activa.php se hace uso de ella mostrando su id y en finalizar_sesion.php se
destruye la sesin.

iniciar_sesion.php
<?php
session_start();
?>
Sesin iniciada con id
<?php
echo session_id()
?>
<br>
<a href="sesion_activa.php">Seguir</a>

sesion_activa.php
<?php
session_start();

Plataforma de Teleformacin de IFES

Pgina 185 de 240

?>
Sesin activa con id
<?php
echo session_id()
?>
<br>
<a href="finalizar_sesion.php">Salir</a>

finalizar_sesion.php
<?php
session_start();
?>
Destruidos los datos asociados a la sesin
<?php
echo session_id();
?>
<?php
session_destroy();
?>

Aunque es conveniente llamarla para destruir la sesin cuando haya dejado de ser til,
lo habitual es que los usuarios de Internet abandonen nuestra pgina web cerrando el
navegador y, por lo tanto, no tendremos ocasin de saber que la sesin ha dejado de
ser necesaria.
Afortunadamente el servidor web dispone de mecanismos para eliminar una sesin sin
nuestra intervencin ponindoles un tiempo de caducidad.

Variables de sesin
Una de las caractersticas que nos aportan las sesiones es la posibilidad de dar
persistencia a ciertos datos a travs de diferentes pginas.

Pgina 186 de 240

Programacin en PHP

En las versiones actuales de PHP esto es muy sencillo ya que se usa el array global
$_SESSION. ste es un array asociativo (parejas de nombre -> valor), que est
disponible en todas las pginas a partir del momento que se haya iniciado la sesin con
session_start() . A este array le podemos aadir elementos o modificarlos de la forma
que ya conocemos.
Las variables que queremos que estn disponibles en todas las pginas las
guardaremos en este array.
Ejemplo 5.3.3. Aqu se modifica el ejemplo anterior para, al iniciar la sesin, aadirle
la fecha y hora de comienzo como parmetro. Tambin se guarda un contador con las
pginas visitadas. Esta informacin se muestra luego en las pginas intermedias y en la
final se muestra la duracin de la sesin junto con un mensaje de despedida.

iniciar_sesion.php
<?php
session_start();
setlocale(LC_ALL,"esp");
//Almaceno en la sesin el instante actual.
$comienzo = time();
$_SESSION["comienzo"] = $comienzo;
//Inicializo el contador de pginas vistas.
$_SESSION["contador"] = 1;
?>
Sesin iniciada el da
<?php
echo @strftime("%d/%m/%Y", $_SESSION["comienzo"])
?>
a las
<?php
echo @strftime("%H:%M:%S", $_SESSION["comienzo"])
?>
<br>
<a href="sesion_activa.php">Seguir</a>

Plataforma de Teleformacin de IFES

Pgina 187 de 240

sesion_activa.php
<?php
session_start();
setlocale(LC_ALL,"esp");
//Incremento el contador de pginas vistas
$_SESSION["contador"]++;
?>
Sesin activa desde el da
<?php
echo @strftime("%d/%m/%Y", $_SESSION["comienzo"])
?>
a las
<?php
echo @strftime("%H:%M:%S", $_SESSION["comienzo"])
?>
<br>Pginas visitadas
<?php
echo $_SESSION["contador"]
?>
<br>
<a href="sesion_activa.php">Seguir</a> - -<a
href="finalizar_sesion.php">Salir</a>

Pgina 188 de 240

Programacin en PHP

finalizar_sesion.php
<?php
session_start();
setlocale(LC_ALL,"esp");
//Incremento el contador de pginas vistas
$_SESSION["contador"]++;
//Calculo la duracin en segundos de la sesin.
$ahora = time();
$duracion = $ahora - $_SESSION["comienzo"];
?>
La sesin ha durado
<?php
echo floor($duracion / 3600)
?>
h
<?php
echo floor(($duracion % 3600) / 60)
?>
m
<?php
echo floor(($duracion % 60))
?>
s.
<br>
En ese tiempo ha visitado
<?php

Plataforma de Teleformacin de IFES

Pgina 189 de 240

echo $_SESSION["contador"]." ";


?>
pginas.
<br>
<?php
session_destroy();
?>

En finalizar_sesion.php se han usado operaciones matemticas bsicas para convertir


una duracin en segundos a un formato de horas, minutos y segundos.

Usos prcticos de las sesiones


La persistencia de datos hace posible programar en Internet aplicaciones complejas.
Algunas de las funciones populares que se programan haciendo uso de sesiones son
las siguientes.

Control de acceso: Es uno de los usos principales, se piden unas


credenciales al usuario (p.ej: correo electrnico y contrasea en un
formulario), stas se comprueban con los existentes en la base de datos y
si se autoriza el acceso, se inicia una sesin. En dicha sesin se almacena
un identificador del usuario, de manera que no hay que autenticar al usuario
en cada pgina. Esta sesin caducar automticamente por seguridad, o
permitiremos que el usuario salga de la aplicacin.
Personalizacin: Un usuario puede preferir ciertos colores/propiedades/
elementos en una aplicacin web, y stos se mantienen por todas las
pginas de la aplicacin.
Comercio electrnico: Manteniendo las compras del usuario en un carrito
virtual, hasta que decida pagar. El carrito se almacena en la sesin y se
puede mostrar en cada pgina de una tienda virtual. En dicho carrito se

Pgina 190 de 240

Programacin en PHP

aaden/quitan productos, el usuario se puede marchar a ver otra pgina y


volver a la tienda y ahi est su carrito (mientras dure la sesin).
Replicacin de aplicaciones web: Los sitios web con muchas visitas
pueden necesitar de ms de un servidor web o base de datos por si falla
algo. Las sesiones se replican entre todos los servidores, de manera que el
usuario no pierde su informacin (p.ej: su compra) en caso de falla.

U.D.4. Control de acceso


De los usos habituales de las sesiones vamos a desarrollar ms a fondo el control de
acceso ya que es seguro que habr alguna pgina que queramos que tenga acceso
restringido .
Para ello lo habitual es disponer de un formulario en el que se pida el nombre de
usuario y la contrasea y una zona privada de pginas a las que solo se puede acceder
si se ha autentificado. Esto mismo se puede decir de forma ms ortodoxa:

Ejemplo 5.4.1. Este sistema de control de acceso est compuesto por cuatro pginas.
acceso.html es un formulario web que solicita un nombre de usuario y contrasea.
Estos datos llegan a autenticar.php que comprueba si son vlidos. Si es as aade
a la sesin una variable autorizado con el valor "si" y redirecciona a la pgina
zona_privada.php. Si la contrasea introducida es errnea, redirecciona a la pgina
no_autorizado.php y muestra un error y ofrece un enlace para volver a identificarse.
No basta con redireccionar a la zona privada si la contrasea es correcta. Las pginas
de la zona privada han de tener un cdigo al principio que comprueba que el usuario
est autorizado (mediantte la variable autorizado). De no ser as se podra acceder a
ellas escribiendo la URL en la barra de direcciones del navegador.
Si se intenta acceder a una pgina protegida de la zona privada, y no se ha pasado por
el proceso de autenticarse, se redirecciona a la pgina de error.
Este sistema es similar al que se usa en un parque de atracciones. Al entrar te ponen
una pulsera (autenticacin ) y posteriormente, en cada atraccin a la que se desea
entrar comprueban que llevas la pulsera (autorizacin ).
Se incluye tambin una pgina salir.php para destruir la sesin cuando se sale de la
zona privada.

Plataforma de Teleformacin de IFES

Pgina 191 de 240

acceso.html
<html>
<head>
<title>Acceso a la zona privada</title>
</head>
<body>
Introduzca sus datos.
<table>
<form name="acceso" method="POST" action="autenticar.php">
<tr>
<td>Usuario: </td>
<td><input type="text" name="usuario" size="20"></td>
</tr>
<tr>
<td>Contrasea: </td>
<td><input type="password" name="contrasena" size="20"></td>
</tr>
<tr>
<td colspan="2" align="right"><input type="submit" value="Entrar"></td>
</tr>
</form>
</table>
</body>
</html>

autenticar.php
<?php
session_start();

Pgina 192 de 240

Programacin en PHP

$usuario=$_POST[usuario];
$contrasena=$_POST[contrasena];
if (($usuario == "alicia") && ($contrasena == "xanadu")) {
//Marco la sesin como autorizada
$_SESSION["autorizado"] = TRUE;
//Redirecciono a la zona privada
header("location:zona_privada.php");
}
else {
session_destroy();
//Redirecciono a la pgina de acceso denegado
header("location:no_autorizado.html");
}
?>

zona_privada.php
<?php
session_start();
if (!$_SESSION["autorizado"]) {
//Redirecciono a la pgina de acceso denegado
header("location:no_autorizado.html");
}
?>
<center>
<h1>Bienvenido a la zona privada.</h1>
<br>
<a href="salir.php">Salir</a>
</center>

no_autorizado.php
<html>
<head>
<title>Acceso denegado</title>
</head>
<body>
<b>Acceso denegado.</b><br>
La pgina a la que intenta acceder requiere autenticacin.<br>
<a href="acceso.html">Ir a la pgina de entrada.</a>

Plataforma de Teleformacin de IFES

Pgina 193 de 240

</body>
</html>

salir.php
<?php
session_start();
session_destroy();
?>
Gracias por utilizar nuestros servicios.<br>
<a href="acceso.html">Ir a la pgina de entrada.</a>

Ejemplo 5.4.2. Una primera mejora obvia es extraer el cdigo que comprueba si un
usuario est autorizado a una biblioteca (en este caso autorizar.php ) e incorporarlo a
cada pgina de la zona privada mediante un simple include() .

autorizar.php
<?php
session_start();
if (!$_SESSION["autorizado"]) {
//Redirecciono a la pgina de acceso denegado
header("location:no_autorizado.html");
}
?>

zona_privada.php
<?php
include("autorizar.php");
?>
<center>
<h1>Bienvenido a la zona privada.</h1>
<br>
<a href="salir.php">Salir</a>
</center>

Pgina 194 de 240

Programacin en PHP

Ejemplo 5.4.3. Una segunda mejora obvia es crear un array que contenga los datos de
los usuarios del sistema. Hay que modificar autenticar.php.

autenticar.php
<?php
session_start();
//Array asociativo que contiene los usuarios registrados
$contrasenas["alicia"] = "xanadu";
$contrasenas["alberto"] = "catai";
$contrasenas["marta"] = "bombay";
$usuario=$_POST[usuario];
$contrasena = $_POST[contrasena];
if (($contrasenas[$usuario] == $contrasena)) {
//Marco la sesin como autorizada
$_SESSION["autorizado"] = TRUE;
//Redirecciono a la zona privada
header("location:zona_privada.php");
}
else {
session_destroy();
//Redirecciono a la pgina de acceso denegado
header("location:no_autorizado.html");
}
?>

Ejemplo 5.4.4. Si se necesita una gestin un poco ms avanzada de los usuarios, se


puede hacer uso de la base de datos MySQL. Vamos a crear una tabla en la base de
datos que tenamos, curso_php. La tabla se llamar usuarios, y tendr tres campos.
Para crearla, primero pon en fucionamiento MySQL desde el panel de control de
XAMPP. Cuando est en funcionamiento, haz clic en admin. para que tengamos acceso
a phpMyAdmin. Selecciona la base de datos curso_php y rellena los campos como se
muestra en la siguiente imagen:

Plataforma de Teleformacin de IFES

Pgina 195 de 240

El nombre de la tabla es usuarios y el nmero de campos 3. Haz clic en el botn


Continuar. En la pantalla que te aparece, rellena los campos tal y como se muestra en
la siguiente imagen:

Pgina 196 de 240

Programacin en PHP

Una vez indicados los valores, haz clic en el botn Grabar. Te deber aparecer la
siguiente pantalla:

Plataforma de Teleformacin de IFES

Pgina 197 de 240

El siguiente paso es introducir valores en la tabla. stos son los valores que vamos a
introducir:
Idusuario Nombre usuario Contrasea
alicia
xanadu
alberto
catai
marta
bombay

Pgina 198 de 240

Programacin en PHP

Como se observa, no he indicado valores para idusuario. No es necesario ya que al ser


auto incrementado, el sistema automticamente le asignar un valor.
Para introducir los datos deberemos hacer clic en la opcin Insertar del men superior.
Nos aparecer la siguiente pantalla:

que ya aparece con los valores, pero que debes escribir. Una vez indicados, hacemos
clic en el botn continuar.
Nos mostrar una nueva ventana en la cual nos indica que se ha insertado una nueva
fila. Para insertar el resto de usuarios, procedemos de la misma manera. Hacemos clic
en Insertar e indicamos los nuevos valores.
Para comprobar que efectivamente los datos se han grabado, hacemos clic en la
opcin Examinar del men superior. Nos aparecer la siguiente pantalla:

Plataforma de Teleformacin de IFES

Pgina 199 de 240

En el cdigo PHP slo hay que modificar el archivo autenticar.php. Se realiza una
consulta a la tabla usuarios para comprobar que los datos que se han indicado en le
formulario estn en esta tabla.

autenticar.php
<?php
session_start();
//Busco en la base de datos el usuario
mysql_connect("localhost","root","");
mysql_select_db("curso_php");
$usuario=$_POST[usuario];
$contrasena=$_POST[contrasena];
$consulta = "SELECT * FROM usuarios WHERE nombreusuario =
'$usuario' AND contrasenausuario = '$contrasena'";

Pgina 200 de 240

Programacin en PHP

$resultado = mysql_query($consulta);
$fila = mysql_num_rows($resultado);
if ($fila != 0) {
//Marco la sesin como autorizada
$_SESSION["autorizado"] = TRUE;
//Redirecciono a la zona privada
header("location:zona_privada.php");
}
else {
session_destroy();
//Redirecciono a la pgina de acceso denegado
header("location:no_autorizado.html");
}
?>
Al confrontar con la bases de datos, no es ni siquiera necesario ver el resultado de la
consulta, nos basta con saber el nmero de lneas devueltas. Si la consulta devuelve 0
registros (filas) es porque no ha tenido xito al buscar al usuario cuyos datos han sido
introducidos en el formulario.

U.D.5. Registro de accesos


Apache tiene registros que miden el trfico en nuestra pgina web y que,
en combinacin con programas como AWStats, procesan esta informacin sobre
accesos a nuestro sitio y la muestran en pginas web con grficas explicativas.
Pero puede haber casos en los que queramos registrar determinados eventos y asociar
esta informacin a la persona que los est produciendo. El evento ms tpico en este
caso es un acceso a la zona privada de nuestra pgina web.

Registro de accesos en un fichero de texto


sta es la forma ms sencilla. Hay un fichero en el servidor que guarda en cada lnea
un intento de acceso. Se va a optar por un diseo modular que, como se ver ms
adelante, tiene muchas ventajas.
Ejemplo 5.5.1. Tomamos como base el ejemplo 5.4.4. de la unidad didctica anterior.
Se supone que ya existe la tabla usuarios . En este caso le vamos a aadir una funcin

Plataforma de Teleformacin de IFES

Pgina 201 de 240

registrar_acceso() que recibe un id de usuario y graba un registro de su entrada. Si se


le pasa el valor -1 graba un intento fallido de entrada.
Este es el programa completo autenticar.php (se han eliminado algunos comentarios
para darle mayor claridad).
<?php
// Funcin que registra la entrada de un usuario
// Si recibe una id de usuario -1 es que el acceso ha sido fallido
function registrar_acceso($id_usuario) {
$ahora = time();
$mensaje = @strftime("%d-%m-%Y %H:%M:%S ", $ahora);
if ($id_usuario != -1) {
$mensaje .= "El usuario con id $id_usuario "."ha entrado a la zona
privada.";
}
else {
$mensaje .= "Intento fallido de acceso a la zona privada.";
}
$archivo = fopen("accesos.txt", "a");
fwrite($archivo, "$mensaje\r\n");
fclose($archivo);
}
session_start();
//Conecto a la base de datos
mysql_connect("localhost","root","");
mysql_select_db("curso_php");
//Asigno a las variables los valores del formulario
$usuario=$_POST[usuario];
$contrasena=$_POST[contrasena];
//Busco en la base de datos el usuario
$consulta = "SELECT * FROM usuarios WHERE nombreusuario =
'$usuario' AND contrasenausuario = '$contrasena'";
$respuesta = mysql_query($consulta);
if (mysql_num_rows($respuesta) != 0) {
$_SESSION["autorizado"] = TRUE;
$id = mysql_result($respuesta, 0, "idusuario");
registrar_acceso($id);
header("location:zona_privada.php");
}
Pgina 202 de 240

Programacin en PHP

else {
session_destroy();
registrar_acceso(-1);
header("location:no_autorizado.html");
}
?>
Tras varios accesos a esta pgina podemos ver el siguiente registro.

Registro de accesos en la base de datos


En lugar de guardar el acceso en un fichero de texto, tambin se puede guardar en
la base de datos. Para ello necesitaremos una tabla que llamaremos accesos y que
tendr tres campos. Esta tabla la crearemos a travs de phpMyAdmin, tal y como
hicimos con la tabla usuarios. Por tanto, una vez que lleguemos a la imagen siguiente
(donde puedes ver la definicin de los campos), hacemos clic en Grabar.

Plataforma de Teleformacin de IFES

Pgina 203 de 240

En este caso, no introduciremos datos, ya que lo haremos a travs del script que
vamos a crear.
Ejemplo 5.5.2. Para guardar en la base de datos solo ha sido necesario modificar la
funcin registrar_acceso.
function registrar_acceso($id_usuario) {
$ahora = time();
$fecha_mysql = @strftime("%d-%m-%Y %H:%M:%S ", $ahora);
$consulta = "INSERT INTO accesos (idusuario, hora_acceso)
VALUES ('$id_usuario', '$fecha_mysql')";
mysql_query($consulta);
}

Pgina 204 de 240

Programacin en PHP

Para ver los acceso, entraremos en phpMyAdmin, seleccionamos la base de datos


curso_php, despus seleccionamos la tabla accesos y ,finalmente, hacemos clic en
Examinar del men superior. Tras la realizacin de varios accesos, nos aparecer algo
parecido a lo mostrado en la siguiente imagen.

Registro de eventos asociados a un usuario


Para poder registrar otros eventos de un usuario, aparte del acceso, la aplicacin web
tiene que conocer en todo momento qu usuario es el activo. Para ello, al autenticar a
un usuario, hay que guardar su identidad en una variable de sesin.
Ejemplo 5.5.3. Hemos modificado el cdigo de autenticar.php para almacenar una
nueva variable de sesin con el id del usuario. Este id se puede usar ms adelante para
personalizar los contenidos de las pginas que vea el usaurio, adems de para crear
un registro de sus acciones.
<?php
// Funcin que registra la entrada de un usuario
// Si recibe una id de usuario -1 es que el acceso ha sido fallido

Plataforma de Teleformacin de IFES

Pgina 205 de 240

function registrar_acceso($id_usuario) {
$ahora = time();
$fe cha_mysql = @strftime("%d-%m-%Y %H:%M:%S ", $ahora);
$consulta = "INSERT INTO accesos (idusuario, hora_acceso)
VALUES ('$id_usuario', '$fecha_mysql')";
mysql_query($consulta);
}
session_start();
setlocale("LC_ALL","esp");
//Conecto a la base de datos
mysql_connect("localhost","root","");
mysql_select_db("curso_php");
//Asigno a las variables los valores del formulario
$usuario=$_POST[usuario];
$contrasena=$_POST[contrasena];
//Busco en la base de datos el usuario
$consulta = "SELECT * FROM usuarios WHERE nombreusuario =
'$usuario' AND contrasenausuario = '$contrasena'";
$respuesta = mysql_query($consulta);
if (mysql_num_rows($respuesta) != 0) {
$_SESSION["autorizado"] = TRUE;
$id = mysql_result($respuesta, 0, "idusuario");
$_SESSION["id_usuario"] = $id;
registrar_acceso($id);
header("location:zona_privada.php");
}
else {
session_destroy();
registrar_acceso(-1);
header("location:no_autorizado.html");
}
?>

U.D.6. Plantillas
Uno de los objetivos que hemos ido persiguiendo a lo largo del curso es la separacin
del cdigo HTML del PHP. Los sistemas de plantillas suponen una contribucin en este
Pgina 206 de 240

Programacin en PHP

sentido ya que separan en diferentes archivos la presentacin (el cdigo HTML con el
diseo) de la lgica (el cdigo PHP que realiza operaciones con los datos).

DTemplate
PHP no incorpora ningn sistema de plantilas en la librera de funciones del ncleo por
lo que tendremos que hacer uso de una librera desarrollada por un tercero. En
este caso hemos elegido la librera DTemplate desarrollada por Peter Mallet por los
siguientes ventajas.

Es muy fcil de instalar.


Es fcil aprender su funcionamiento.

Otros sistemas de plantillas ms avanzados y completos usan una sintaxis similar


a DTemplate, por lo que podremos aplicar lo que aprendamos a esos sistemas si
preferimos una versin ms potente.
DTemplate se puede descargar desde este enlace.
http://prdownloads.sourceforge.net/dtemplate/dtemplate-120.zip
Como es un archivo comprimido, lo primero que haremos es descomprimirlo. El archivo
que utilizaremos es class.DTemplate.php.

Instalacin
DTemplate no requiere ninguna instalacin especial. Lo nico necesario es que el
archivo class.DTemplate.php se encuentre en el mismo directorio que las pginas PHP
que usan plantillas.

Esquema de funcionamiento
Para usar plantillas hay que seguir los siguientes pasos.

Definir la plantilla y sus variables.


Usar la plantilla dentro de la pgina PHP. Esto consta de:

Crear una instancia de la librera y asociarla a la plantilla que


queremos usar.

Plataforma de Teleformacin de IFES

Pgina 207 de 240

Asignar valores a las variables.

Interpretar la plantilla y mostrarla.

Definicin de la plantilla
Una plantilla es un documento que contiene exclusivamente cdigo HTML y variables.
Hay que crearla independientemente del cdigo PHP. Algunas aplicaciones de diseo
web se pueden configurar para trabajar con plantillas.
Las plantillas las guardaremos con la extensin .tpl (del ingls template).
Es importante tener en cuenta que por lo general no se pondr cdigo PHP en las
plantillas (aunque existen algunas excepciones).

Variables de plantilla
Las variables en las plantilas las reconoceremos porque se escriben entre llaves
" { ... } " y contienen un identificador de la variable que normalmente escribiremos en
maysculas y sin espacios en blanco. No hay que confundir las variables de plantilla
con las variables de PHP.
{VARIABLE }
Ejemplo 5.6.1. La siguiente es una plantilla muy sencilla que tiene como variables el
ttulo de la pgina y el mensaje dentro del cuerpo de la misma. La guardaremos con el
nombre plantilla_mensaje.tpl.
<html>
<head>
<title>{TITULO}</title>
</head>
<body>
{MENSAJE}
</body>
</html>

Pgina 208 de 240

Programacin en PHP

Uso de la plantilla dentro de la pgina PHP


Antes de hacer uso de la librera hay que importarla mediante la sentencia include() .
<?php
include("class.DTemplate.php");
//...
En primer lugar hay que crear una instancia de la librera y asignarla a una variable.
Esto se hace con la instruccin new de la siguiente forma.
$tpl = new DTemplate();
Una vez creada una instancia de la librera, para hacer uso de las funciones de la
librera lo haremos con la siguiente sintaxis.
$tpl -> funcion_de_DTemplate ();

define_template()
La primera funcin que usaremos nos servira para indicarle a la librera dnde se
encuentran los archivos .tpl con definiciones de plantillas. Esta funcin asocia un
identificador a una plantilla.
$tpl -> define_template("identificador ", "plantilla.tpl ");
Si son varias las plantillas, podemos definirlas sucesivamente llamando una vez a esta
funcin por cada plantilla.

assign()
Esta funcin asigna un valor a una variable que est presente en una definicin de
plantilla. Hay que asignar valores a todas las variables que aparezcan en la plantilla.
$tpl -> assign("VARIABLE ", valor );

Plataforma de Teleformacin de IFES

Pgina 209 de 240

process()
En este paso se interpretan las variables de la plantilla sustituyndolas por los valores
que se les dieron al asignarlas.
$tpl -> process(identificador_plantilla );

DPrint()
Al final del script PHP hay que llamar a esta funcin para que pinte el resultado por
pantalla.
$tpl -> DPrint(identificador_plantilla );
Ejemplo 5.6.2. Parecen muchas funciones y su uso un tanto enrevesado. Pero
su aplicacin es inmediata, solo hay que estar pendiente de cuales son las variables
de plantilla. Afortunadamente como las escribimos en maysculas resulta fcil
distinguirlas. Haremos uso de la definicin de plantilla plantilla_mensaje.tpl que se cre
en el ejemplo anterior.
<?php
include("class.DTemplate.php");
$titulo = "Prueba de plantillas";
$mensaje = "Hola Mundo!";
$tpl = new DTemplate();
$tpl -> define_template("plantilla", "plantilla_mensaje.tpl");
$tpl -> assign("TITULO", "$titulo");
$tpl -> assign("MENSAJE", "$mensaje");
$tpl -> process("plantilla");
$tpl -> DPrint("plantilla");
?>

Pgina 210 de 240

Programacin en PHP

Plantillas anidadas
Al igual que se le puede asignar a una variable de plantilla un valor, se le puede asignar
tambin el resultado de procesar una plantilla. De esta forma se pueden componer
pginas con muchos elementos a partir de trozos de cdigo sencillos.

fetch()
La funcin fetch() nos resultar til para conocer el resultado de la plantilla ya
procesada. Este resultado se usar luego como contenido de otra plantilla.
$tpl -> fetch(identificador_plantilla );
Ejemplo 5.6.3. Aqu se usa una plantilla principal cuyas dos variables
{DATOS_COMERCIO} y {LISTA_PRECIOS} se rellenan haciendo uso de otras dos
plantillas, una con los datos de una frutera y otra con una lista de precios.

Plantilla ficha.tpl
<html>
<head>
<title>Ficha del establecimiento</title>
</head>
<body>
{DATOS}<br>
<hr>
{LISTA_PRECIOS}
</body>
</html>

Plantilla datos.tpl
<b>{NOMBRE}</b><br>
{DIRECCION}<br>
{TELEFONO}<br>
<a href="mailto:{EMAIL}">{EMAIL}</a>

Plantilla lista_precios.tpl

Plataforma de Teleformacin de IFES

Pgina 211 de 240

{PRECIOS}
El cdigo PHP modificado que procesa las plantillas es el siguiente.

ficha_comercio.php
<?php
include("class.DTemplate.php");
$nombre_comercio = "Frutera Pernambuco";
$direccion_comercio = "c/ Don Juan Tenorio 17";
$tfno_comercio = "866 713 137";
$email_comercio = "maurodosantos@pernambuco.com ";
$productos = array("Limones", "Naranjas", "Peras", "Tomates");
$precioskg = array("Limones" => 3.50,
"Naranjas" => 1.80,
"Peras" => 1.20,
"Tomates" => 2.40);
$tpl = new DTemplate();
$tpl -> define_template("ficha", "ficha.tpl");
$tpl -> define_template("datos", "datos.tpl");
$tpl -> define_template("lista_precios", "lista_precios.tpl");
//Asignamos primero valores a la plantilla datos
$tpl -> assign("NOMBRE", $nombre_comercio);
$tpl -> assign("DIRECCION", $direccion_comercio);
$tpl -> assign("TELEFONO", $tfno_comercio);
$tpl -> assign("EMAIL", $email_comercio);
$tpl -> process("datos");
//Asignamos los valores a la plantilla con la lista de precios
$precios = "";
for ($i = 0; $i < count($productos); $i++) {
$precios .= "$productos[$i] {$precioskg[$productos[$i]]} " . "euros/
kg<br>";
}
$tpl -> assign("PRECIOS", $precios);
$tpl -> process("lista_precios");
//Juntamos las dos plantillas procesadas dentro de la ficha
$tpl -> assign("DATOS", $tpl -> fetch("datos"));
$tpl -> assign("LISTA_PRECIOS", $tpl -> fetch("lista_precios"));

Pgina 212 de 240

Programacin en PHP

$tpl -> process("ficha");


$tpl -> DPrint("ficha");
?>

Plantillas anidadas en bucles


Esta estrategia se sigue en plantillas en las que hay un tipo de elemento que se repite
muchas veces, como pueden ser las filas de un listado.
Ejemplo 5.6.4. Sera mucho ms prctico poner la lista de precios en una tabla. El
problema es que con los mecanismos que conocemos hasta ahora esto nos requerira
guardar en una variable tambin las etiquetas de comienzo y final de fila y de comienzo
y final de celda <tr><td>...</td></tr> .
En lugar de esto vamos a hacer una nueva plantilla para cada fila.

Plantilla producto.tpl
<tr>
<td>{NOMBRE_PRODUCTO}</td>
<td align="right">{PRECIO} euros el kg.</td>
</tr>

Tambin hay que adaptar la plantilla lista_precios.tpl para que use una tabla.

Plantilla lista_precios.tpl
<table border="1" width="300">
{PRODUCTO}
</table>

El cdigo PHP modificado que procesa las plantillas es el siguiente.

ficha_comercio.php
<?php
include("class.DTemplate.php");
$titulo = "Ficha";
$nombre_comercio = "Frutera Pernambuco";
$direccion_comercio = "c/ Don Juan Tenorio 17";

Plataforma de Teleformacin de IFES

Pgina 213 de 240

$tfno_comercio = "866 713 137";


$email_comercio = "maurodosantos@pernambuco.com ";
$productos = array("Limones", "Naranjas", "Peras", "Tomates");
$precioskg = array("Limones" => 3.50,
"Naranjas" => 1.80,
"Peras" => 1.20,
"Tomates" => 2.40);
$tpl = new DTemplate();
$tpl -> define_template("ficha", "ficha.tpl");
$tpl -> define_template("datos", "datos.tpl");
$tpl -> define_template("lista_precios", "lista_precios.tpl");
$tpl -> define_template("producto", "producto.tpl");
//Asignamos primero valores a la plantilla datos
$tpl -> assign("NOMBRE", $nombre_comercio);
$tpl -> assign("DIRECCION", $direccion_comercio);
$tpl -> assign("TELEFONO", $tfno_comercio);
$tpl -> assign("EMAIL", $email_comercio);
$tpl -> process("datos");
//Aadimos una a una las filas
for ($i = 0; $i < count($productos); $i++) {
$tpl -> assign("NOMBRE_PRODUCTO", $productos[$i]);
$tpl -> assign("PRECIO", $precioskg[$productos[$i]]);
//Es necesario procesar una vez por cada fila
$tpl -> process("producto");
}
//Asignamos este resultado a la plantilla lista_precios
$tpl -> assign("PRODUCTO", $tpl -> fetch("producto"));
$tpl -> process("lista_precios");
//Juntamos las dos plantillas procesadas dentro de la ficha
$tpl -> assign("TITULO", $titulo);
$tpl -> assign("DATOS", $tpl -> fetch("datos"));
$tpl -> assign("LISTA_PRECIOS", $tpl -> fetch("lista_precios"));
$tpl -> process("ficha");
$tpl -> DPrint("ficha");
?>

Pgina 214 de 240

Programacin en PHP

El resultado final es el siguiente.

La librera DTemplate tiene muchas otras funciones y otros modos de acceder a las
mismas que pueden servir para mltiples situaciones. Quien est interesado puede
ampliar conocimientos con la documentacin del producto.

Resumen mdulo V
Este recurso es de tipo Multimedia.
Tiene que conectarse a la plataforma para acceder a este recurso.

Prctica: Aplicaciones comunes en PHP


Este recurso es de tipo Prctica.
Tiene que conectarse a la plataforma para acceder a este recurso.

Autoevaluacin mdulo V
Pregunta 1:
En PHP se puede operar directamente con fechas en formato DD/MM/YYYY.
Un ejemplo de esto es la siguiente lnea de cdigo, que produce la fecha que
corresponde a una semana despus del 7 de julio del 2005.
Plataforma de Teleformacin de IFES

Pgina 215 de 240

<?php
$fecha = "07/07/2005" + "00/07/0000";
?>

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 2:
La siguiente lnea de cdigo almacena en la variable $fecha la fecha
correspondiente al instante actual en formato timestamp .
<?php
$fecha = time();
?>

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 3:
En PHP se pueden enviar emails sin la colaboracin de un servidor de correo
externo gracias a la funcin mail() .

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 4:
Las sesiones se pueden utilizar para hacer una aplicacin de comercio
electrnico con un carrito de la compra.

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 5:
El siguiente cdigo almacena como variable de sesin la fecha actual en formato
timestamp .

Pgina 216 de 240

Programacin en PHP

<?php
$_SESSION["ahora"] = time();
session_start();
?>

Verdadero

Falso
Respuesta correcta: Falso
Pregunta 6:
En todas las pginas de la zona privada de una aplicacin web hay que incluir, al
principio, la verificacin de que la sesin est autorizada.

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 7: El registro de accesos se puede programar para que guarde las
entradas tanto en un fichero de texto como en la base de datos.

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 8:
Usar sistemas de plantillas nos ayuda a separar completamente el cdigo PHP
del cdigo HTML.

Verdadero

Falso
Respuesta correcta: Verdadero
Pregunta 9:
Las plantillas del sistema DTemplate usan la extension .pla

Verdadero
Falso

Respuesta correcta: Falso

Plataforma de Teleformacin de IFES

Pgina 217 de 240

Pregunta 10:
Las variables de plantilla son iguales que las variables de PHP, y como tales se
pueden reconocer porque comienzan con el smbolo del dolar " $ ".

Verdadero

Falso
Respuesta correcta: Falso

Pgina 218 de 240

Programacin en PHP

Programacin en PHP

Evaluacin tercera
Este recurso es de tipo Evaluacin.
Debe conectarse a la plataforma para realizar la evaluacin. Recuerde que las
evaluaciones son obligatorias ya que determinan la nota final.

Plataforma de Teleformacin de IFES

Pgina 219 de 240

Programacin en PHP

Prctica final
Este recurso es de tipo Prctica.
Tiene que conectarse a la plataforma para acceder a este recurso.

Pgina 220 de 240

Programacin en PHP

Programacin en PHP

Evaluacin final
Este recurso es de tipo Evaluacin.
Debe conectarse a la plataforma para realizar la evaluacin. Recuerde que las
evaluaciones son obligatorias ya que determinan la nota final.

Plataforma de Teleformacin de IFES

Pgina 221 de 240

Programacin en PHP

Glosario
Alcance de una variable
Bloques de cdigo en los cuales se puede acceder a la variable. Suele ser a partir de
su primer uso hasta el final del script a menos que sea ocultada por una variable de
nombre similar dentro de una funcin.
Algoritmo
Secuencia de instrucciones sobre unos datos que sirven para resolver un problema.
Apache
Servidor web (servidor HTTP) de cdigo abierto desarrollado por la fundacin de
carcter no lucrativo Apache Software Foundation (ASF).
API
Siglas inglesas de Aplication Programming Interface. Es el conjunto de las
especificaciones necesarias para hacer uso de un software sin que sea necesario
conocer cmo est construido. De esta forma se puede hacer uso de las funciones de
una biblioteca sin necesidad de saber cmo est programada, solo la definincin de
sus funciones y la descripcin de su funcionamiento.
Aplicacin web
Programa al que se accede de forma remota desde un navegador web.
Argumento
Cada uno de los datos que necesita recibir una funcin. Tambin se les llama
parmetros.
Arquitectura web de tres capas
Esquema de funcionamiento de una pgina web dinmica que consiste en tres capas:
el cliente, el servidor de aplicaciones con el interprete de PHP y el sistema gestor de
bases de datos.
Array

Pgina 222 de 240

Programacin en PHP

Tipo de datos compuesto formado por una sucesin de elementos a los que se accede
mediante un ndice o clave.
Array asociativo
Array cuyas claves son cadenas de texto. De esta forma se asocian parejas de
cadenas de texto con alguna relacin.
Array indexado numricamente
Array cuyos elementos estn referenciados por un ndice de tipo entero y que suelen
estar en posiciones consecutivas empezando por el 0 (0, 1, 2, ...).
Array multidimensional
Array que a su vez contiene arrays. Un ejemplo tpico es la estructura matemtica de
una matriz de 2 dimensiones.
ASP
Active Server Pages. Tecnologa para la creacin de pginas web dinmicas impulsada
por Microsoft.
Autenticacin
Parte del control de acceso que consiste en la comprobacin de la identidad del
usuario, generalmente mediante un nombre de usuario y contrasea.
Autorizacin
Parte del proceso de control de acceso que consiste en permitir o denegar el acceso
dependiendo de si se autentifico con anterioridad.
Base de datos
Conjunto de datos almacenados sistemticamente. Habitualmente se designa por
este trmino tambin al sistema gestor de bases de datos (SGBD) que almacena y
administra los datos.
Biblioteca
Conjunto de funciones, generalmente agrupadas por su finalidad, que se encapsulan
en un mismo archivo. Para hacer uso de ellas es necesario importar el archivo que las
contiene.

Plataforma de Teleformacin de IFES

Pgina 223 de 240

Bucle
Estructura basada en una sentencia de control que permite que un bloque de cdigo se
ejecute repetidas veces. Tambin se la denomina estructura iterativa.
Cadena
Tipo de datos que contiene texto. Vease tipo de datos cadena.
Campo o columna
Categora que se usa para clasificar la informacin de una tabla de una base de datos y
que est asiociada a un nombre y a un tipo de datos.
Celda
Contenedor mnimo de informacin en una tabla. Un registro o fila la forman tantas
celdas como campos tiene la tabla.
Clave
Campo o conjunto de campos de una base de datos que identifican de forma unica un
registro. En otras palabras, no puede haber dos registros que contengan el mismo valor
en un campo clave.
Clave
Apuntador, generalmente una cadena de texto, de la posicin de un elemento en un
array. Cuando es numrico se le suele llamar ndice.
Cliente
En el mbito de Internet, es el ordenador que est conectado a la red. Su funcin se
limita a realizar peticiones de pginas web y mostrar los resultados.
Comentario
Lnea o lneas de cdigo que ignora el interprete de PHP y que se usan para aadir
anotaciones aclaratorias al programa.
Consola de MySQL
Pantalla en modo texto en la que se ejecutan sentencias de MySQL.
Consola del sistema operativo

Pgina 224 de 240

Programacin en PHP

Pantalla en modo texto sobre la que se ejecutan comandos del sistema operativo.
Constante
Dato definido cuyo valor no puede cambiar a lo largo de la ejecucin del programa.
Consulta
Es una operacin bsica para recuperar informacin de una base de datos. Por
extensin se llama tambin consultas a otras operaciones sobre la base de datos.
Control de acceso
Sistema que permite regular el acceso de los usuarios a un conjunto de pginas
restringidas, tambin llamadas zona privada. Consta de dos pasos: autenticacin y
autorizacin.
Elemento
Dato indivisible de un tipo de datos compuesto.
Entorno de desarrollo
Conjunto de herramientas usadas por un programador. Suelen consistir en un editor
de textos con caractersticas avanzadas y los medios para poder probar la aplicacin.
Si estn integrados en un solo paquete informtico se les llama con las siglas inglesas
IDE (Integrated Development Environment).
Estructura condicional
Sentencia de control que permite elegir una vez entre una o varias alternativas
dependiendo de una condicin.
Estructura de datos
Forma de organizar un conjunto de datos elementales con el objetivo de que sean
fciles de manipular.
Estructura iterativa
Estructura basada en una sentencia de control que permite que un bloque de cdigo se
ejecute repetidas veces. Tambin se la denomina bucle.
Expresin

Plataforma de Teleformacin de IFES

Pgina 225 de 240

Conjunto de uno o varios operandos enlazados mediante uno o varios operadores que
es evaluado y produce un resultado.
Extensin de PHP
Biblioteca de funciones que se instala para que pueda disponer de ella el intrprete de
PHP.
Filtrar una consulta
Restringir mediante condiciones los resultados que se deben mostrar al recuperar datos
de una base de datos.
Formulario HTML
Pgina web con campos de entrada para introducir datos desde el cliente (navegador
web).
Funcin
Subprograma que realiza una tarea especfica y puede devolver un valor.
Funcin definida por el usuario
Funcin que no est disponible dentro de las predefinidas de PHP y que el
programador ha implementado para su uso dentro de sus programas.
Funcin del ncleo de PHP
Funcin que est disponible dentro de la especificacin del lenguaje. Puede ser usada
por el programador sin definirla ni importarla.
HTML
HyperText Markup Language. Lenguaje para escribir pginas web que permite la
incorporacin a las mismas de texto, imgenes y enlaces a otras pginas.
HTTP
HyperText Transfer Protocol. Sistema que se encarga de regular como se hacen las
peticiones de pginas web por parte del cliente y cmo son transferidas de vuelta al
cliente por parte del servidor web.
Identificador

Pgina 226 de 240

Programacin en PHP

Cadena de texto que se asocia a una estructura de PHP para manejarla. Algunos casos
son los identificadores (nombres) de las variables, los identificadores de las funciones...
Identificador de sesin
Nmero nico que se asocia a una sesin de navegacin. Las pginas web dinmicas
lo pueden usar para identificar al usuario que est navegando y ofrecerle servicios
personalizados.
ndice
Apuntador, generalmente numrico, de la posicin de un elemento en un array. Cuando
es una cadena de texto se le suele llamar clave.
Internet
Red formada por multitud de redes a nivel mundial y a la que se puede tener acceso
pblico. Los principales servicios que ofrece son la nevegacin de pginas web, el
correo electrnico y la transferencia de archivos.
Internet Information Server (IIS)
Servidor web (servidor HTTP) desarrollado por la empresa Microsoft.
Interprete de PHP
Mdulo del servidor web encargado de procesar el cdigo PHP para componer pginas
que se puedan enviar a travs de Internet.
Javascript
Lenguaje de programacin web que se ejecuta en el cliente (el navegador de internet).
JSP
Java Server Pages. Lenguaje de programacin de pginas web impulsado por la
empresa Sun Microsystems.
LAMP
LAMP es una solucin integral para alojar pginas web dinmicas. Consiste en la
combinacin de Linux (sistema operativo), Apache (servidro web), MySQL (sistema
gestor de bases de datos) y PHP (lenguaje de programacin web).
Lenguaje compilado

Plataforma de Teleformacin de IFES

Pgina 227 de 240

Los lenguajes de programacin compilados no se pueden ejecutar directamente.


El cdigo fuente ha de ser convertido a archivos binarios ejecutables que sean
comprensibles por el ordenador.
Lenguaje interpretado
Los lenguajes de programacin interpretados necesitan para ser ejecutados un
interprete de instrucciones que analiza y ejecuta el cdigo fuente.
Lenguajes de programacin web
Lenguajes que se emplean para dotar de interactividad a las pginas web. Pueden
funcionar en el cliente (Javascript) o en el servidor (PHP, JSP, ASP...).
Llamada a una funcin
Uso de una funcin mediante su identificador y argumentos. Si la funcin devuelve un
valor su resultado se puede asignar a una variable o usar directamente.
Modo de acceso a un archivo
Parmetro que indica lo que se puede hacer con un archivo al abrirlo. Leer, esrcibir o
ejecutar.
MySQL
Sistema Gestor de Bases de Datos de cdigo abierto. Es una base de datos de
respaldo muy popular en las aplicaciones web.
ODBC
Siglas inglesas de Open DataBase Connectivity, un estndar de acceso a bases
de datos. Mediante este sistema se puede acceder a cualquier base de datos sin
necesidad de usar instrucciones especficas de la misma.
Operador
Smbolo que afecta (enlaza) a uno o varios operandos y que define cmo se evala la
expresin en la que interviene.
Operando
Cada uno de los datos que intervienen en una expresin (operacin)
Pgina web

Pgina 228 de 240

Programacin en PHP

Documento con formato HTML que contiene, tpicamente, texto, imgenes y enlaces a
otras pginas web.
Pgina web dinmica
Pgina que es capaz de mostrar contenidos variables gracias a la programacin que
incorpora, disponiendo de mayor interactividad.
Pgina web esttica
Pgina que requiere de la intervencin de su autor para modificar sus contenidos.
Parmetro
Cada uno de los datos que necesita recibir una funcin. Tambin se les llama
argumentos.
Paso de argumentos por referencia
Paso de datos a una funcin mediante una referencia a la variable. No se hace una
copia de los mismos sino que se comparten las variables. Cualquier cambio en el
contenido de la variable dentro de la funcin se reflejar en la variable fuera.
Paso de argumentos por valor
Paso de datos a una funcin que consiste en hacer una copia de los mismos. De esta
forma las variables del programa que usa la funcin no se ven afectadas si cambian las
variables de dentro.
PHP
PHP Hypertext Prepocesor. Lenguaje de programacin web de gran difusin. Es
sencillo de aprender, potente y fiable. Es open-source.
Plantilla
Archivo con extensin .tpl que contiene exclusvamente cdigo HTML y variables de
plantilla. Estas sern sustituidas por su contenido al ser procesadas por una pgina
PHP.
Precedencia
Orden en el que se evalan las operaciones de una expresin en el caso de que
intervengan varios operandos. Un ejemplo tpico es la multiplicacin, que se evala
antes de la suma (2 + 5 * 4 da como resultado 22).

Plataforma de Teleformacin de IFES

Pgina 229 de 240

Programa
Segn una definicin tradicionalmente aceptada, un programa es un conjunto de
acciones que se realizan sobre unos datos, es decir, es el resultado de aplicar
algoritmos a unas determinadas estructuras de datos.
Programacin estructurada
Metodologa de diseo de software basada en la utilizacin como elementos bsicos de
variables para almacenar la informacin y sentencias de control para dirigir el flujo del
programa.
Programacin orientada a objetos
Metodologa de diseo de software que define los programas a partir de objetos. Los
objetos son entidades que pueden almacenar informacin y a su vez interactuar con
otros objetos a travs de sus mtodos.
Redireccin
Accin que consiste en que una pgina solicita la carga de otra, pasando a mostrarse el
contenido de la segunda.
Registro o fila
Un registro (tambin llamado fila o tupla) representa un objeto nico de datos
implcitamente estructurados en una tabla. Cada fila de una tabla representa un
conjunto de datos relacionados, y todas las filas de la misma tabla tienen la misma
estructura.
Ruta absoluta
Sealan la ubicacin de un archivo o directorio desde el directorio raz del sistema
de archivos. Por ejemplo es una ruta absoluta /home/direct1/archiv1.fil que seala la
ubicacin de arcchiv1.fil desde la raz del sistema de archivos.
Ruta relativa
Seala la ubicacin de un archivo o directorio a partir de la posicin actual del sistema
operativo en el sistema de archivos. Por ejemplo, es una ruta relativa direct1/archiv1.fil
que seala al archivo archiv1.fil dentro del directorio direct1 en la ubicacin actual.
Sangrado

Pgina 230 de 240

Programacin en PHP

Estrategia que se sigue para diferenciar los diferentes bloques de cdigo anidados,
poniendo espacios en blanco a la izquierda.
Sentencia
Es el fragmento ms pequeo en el que se puede dividir un programa. En ocasiones se
denomina lnea de cdigo.
Sentencia de control
Son sentencias que permiten alterar el flujo secuencial del programa. Lo comn es que
permitan elegir la siguiente instruccin a ejecutar segn la evaluacin de una condicin.
Servidor de aplicacin
Programa que trabaja en colaboracin con el servidor web para generar y transferir
pginas web dinmicas (programadas).
Servidor de correo SMTP
Programa que se encarga del envo de correos electrnicos utilizando el protocolo
SMTP (Simple Mail Transfer Protocol)
Servidor web (hardware)
Es el ordenador que aloja pginas web. Este trmino se utiliza indistintamente para
designar tanto el equipo fsico como el software.
Servidor web (software)
Programa que est preparado para transferir pginas web a los clientes, mediante el
protocolo HTTP
Sesin de navegacin
Secuencia de pginas que visita un cliente dentro de un sitio web. Mediante el control
de las sesiones se puede ofrecer servicios personalizados al usuario.
Sistema de plantillas
Mdulo de PHP, generalmente en la forma de una librera, que permite separar la
presentacin (el cdigo HTML) de la lgica (cdigo PHP) de una pgina web dinmica.
Sistema gestor de bases de datos (SGBD)

Plataforma de Teleformacin de IFES

Pgina 231 de 240

Aplicacin informtica que permite almacenar y despus acceder a los datos de forma
rpida y estructurada. A veces se les denomina simplemente base de datos.
SQL
El Lenguaje de Consulta Estructurado (Structured Query Language) es un lenguaje
declarativo que se usa para comunicarnos con el sistema gestor de bases de datos.
Bsicamente permite definir bases de datos y almacenar y recuperar datos en tablas.
Tabla
Estructura bsica de almacenamiento de datos en las bases de datos relacionales. Esta
definida por sus campos (columnas) y contiene registros(filas de datos). Cada dato de
la tabla se denomina celda.
Timestamp
Formato de fecha en un solo nmero entero que equivale a los segundos transcurridos
desde el 1 de enero de 1970 hasta el momento actual.
Tipo de dato entero (integer)
Tipo de datos compuesto por los nmeros enteros, es decir, aqullos sin parte decimal,
tanto positivos como negativos, incluyendo el 0.
Tipo de datos
Es un atributo de los datos que indica al ordenador (y/o al programador) algo sobre la
clase de datos sobre los que se va a procesar. Esto incluye imponer restricciones en
los datos, como qu valores pueden tomar y qu operaciones se pueden realizar.
Tipo de datos cadena
Tipo de datos que se usa para almacenar texto, es decir, una sucesin de letras,
nmeros y smbolos.
Tipo de datos compuesto
Los datos que puede contener se pueden descomponer en datos ms pequeos. Cada
uno de los datos elementales que lo componen se llama elemento.
Tipo de datos decimal (double)

Pgina 232 de 240

Programacin en PHP

Tipo de datos que puede representar cualquier nmero real, incluyendo los nmeros
con decimales. Se pueden representar valores muy grandes o pequeos usando la
notacin "mantisa-exponente" (p.ej. 1.345e-23)
Tipo de datos simple
Los datos que pueden contener son indivisibles o perderan su significado. En PHP hay
tres: entero (integer), decimal (double) y cadena (string).
URL
Uniform Resource Locator. Cadena de caracteres que identifica de forma nica un
recurso de internet. Es la direccin de Internet que permite que el navegador la localice.
URL absoluta
URL completamente definida partiendo del descriptor del protocolo (http://) el dominio, y
la ruta hasta el recurso deseado.
URL relativa
URL que toma como punto de origen el recurso activo.
Variable
contenedor de datos cuyo contenido puede variar a lo largo de la ejecucin del
programa. En PHP todas las variables se distinguen por comenzar con el smbolo del
dolar, "$".
Variable de plantilla
Identificador que marca la parte de una pgina web que ser sustituido por su
contenido al procesar la plantilla por parte del cdigo PHP.
Variable global
Variable externa a una funcin que se declara global para poder acceder a su
contenido desde dentro de la funcin.
Variables de sesin
Datos que se asocian a una sesin de navegacin. En PHP se suelen usar para
compartir informacin entre pginas web independientes.
W3C

Plataforma de Teleformacin de IFES

Pgina 233 de 240

World Wide Web Consortium. Organizacin que produce estndares para la WWW.
Word Wide Web
Conjunto de pginas enlazadas entre s que forman los contenidos navegables de
Internet.
XAMPP
Paquete de software "todo en uno" que contiene un servidor web (Apache), un
interprete de PHP y un gestor de bases de datos (MySQL).
Zona privada
Conjunto de pginas de un sitio web que tienen el acceso restringido. Antes de entrar
en ellas hay que pasar por un proceso de autenticacin.
Zona pblica
Conjunto de pginas de un sitio web a las que se puede acceder sin necesidad de
autenticarse.

Pgina 234 de 240

Programacin en PHP

Programacin en PHP

FAQ
Que es PHP?
PHP es un lenguaje interpretado que dota de comportamiento dinmico a las pginas
web HTML.
Qu significa PHP?
PHP significa PHP: Hypertext Preprocessor (PHP: Pre-procesador de Hipertexto). Esto
confunde a muchas personas ya que la primera palabra del acrnimo es el acrnimo
mismo. Este tipo de acrnimo es llamado recursivo.
Cmo puedo instalar PHP?
La mayora de los servidores web como Apache llevan ya incorporado un interprete de
PHP. Si no se dispone de PHP ni del servidor web apache es recomendable instalar un
paquete todo en uno como Xampp (ver seccin Links)
Qu es un servidor web?
Es el software que est dedicado a recibir solicitudes de pginas web y transferirlas a
los clientes, mediante el protocolo HTTP. Tambin se llama as al ordenador que tiene
instalado este software.
Qu es Apache?
Apache es uno de los servidores web ms populares, se usa para alojar el 70% de las
pginas web de Internet.
Que es MySQL?
MySQL es un sistema gestor de bases de datos gratuito muy popular para dar soporte
a aplicaciones web.
Qu significa LAMP?
LAMP es una solucin integral para alojar pginas web dinmicas. Consiste en la
combinacin de Linux (sistema operativo), Apache (servidro web), MySQL (sistema
gestor de bases de datos) y PHP (lenguaje de programacin web).
Qu son las constantes predefinidas?

Plataforma de Teleformacin de IFES

Pgina 235 de 240

PHP proporciona una gran cantidad de constantes a cualquier script que se ejecute.
Algunas, como la constante M_PI son parte del ncleo de PHP. Otras dependen de
las extensiones que tengamos instaladas en nuestro servidor. Podemos obtener
informacin de ellas mediante la funcin phpinfo().
Qu son las variables predefinidas?
PHP proporciona una gran cantidad de variables predefinidas a cualquier script que
se ejecute. Algunas, como la variable $_SESSION son parte del ncleo de PHP. Otras
dependen de las extensiones que tengamos instaladas en nuestro servidor. Podemos
obtener informacin de ellas mediante la funcin phpinfo().
Puede conocer una pgina PHP su nombre de archivo?
S, haciendo uso de la variable predefinida $_SERVER['PHP_SELF']
Cmo se pueden ocultar los errores que produce una instruccin?
Es muy sencillo, basta con anteponer el smbolo arroba '@' a la lnea en la que se
produce el error.
Cmo puedo cambiar la configuracin de PHP?
Hay un archivo de configuracin, php.ini, con todos los parmetros del interprete. De
todas formas no es recomendable alterarlo sin saber a ciencia cierta lo que se hace y
siempre habiendo hecho antes una copia de seguridad.
Puedo usar hojas de estilo CSS con PHP?
Por supuesto, cualquier tecnologa que se integra con HTML se integra tambin con
PHP. Adems es muy recomendable.
Puedo incrustar pelculas en Flash en mi pgina en PHP?
Por supuesto, sin ninguna dificultad adicional.
Puedo combinar el uso de PHP con Flash?
PHP puede interactuar con Flash para generar pginas dinmicas. Para ello es
necesario tener tambin conocimientos de Actionscript. En el fondo no tiene ningn
misterio. La pelcula Flash hace solicitudes de informacin, la pgina PHP genera
dinmicamente la informacin y la enva de vuelta a la pelcula en Flash, que se
encarga de mostrarla.
Qu otras tecnologas se integran bien con PHP?
Pgina 236 de 240

Programacin en PHP

Para el intercambio de datos es interesante el estndar XML.


Admite PHP programacin orientada a objetos?
En la versin 4 se dio un soporte bsico a objetos, que ha sido notablemente mejorado
en la versin 5.
Hay alguna estructura recomendable a la hora de distribuir los archivos de un
sitio web dinmico?
Poner todos los archivos mezclados en el directorio raz no es lo mejor. Suponiendo
que se usan todas las tecnologas disponibles es recomendable tener una carpeta para
cada tipo de archivos que no son html o php, es decir: - Una carpeta lib/ que contenga
las bibliotecas de funciones. - Una carpeta css/ que contenga las hojas de estilo. - Una
carpeta tpl/ que contenga las plantillas. - Una carpeta upload/ en la que se guarden los
archivos que se suben. - Una carpeta img/ con las imgenes comunes. - Una carpeta
swf/ con las pelculas en Flash. - Una carpeta doc/ con los archivos binarios para
descargar (Word, PDF, ZIP...)

Plataforma de Teleformacin de IFES

Pgina 237 de 240

Programacin en PHP

Bibliografa
PHP a travs de ejemplos. ABRAHAM GUTIRREZ, G. BRAVO.
Editorial RAMA, Madrid 2005.
PHP. CHRISTOPHER COSENTINNO.
Editorial Prentice Hall, Madrid 2005.
PHP 5. DAVE MERCER, ALLAN KENT, STEVEN NOWICKI.
Editorial Anaya Multimedia, Madrid 2005.
PHP 5. FRANCISCO CHARTE OJEDA.
Editorial Anaya Multimedia, Madrid 2005.
La biblia de PHP 5. JOHN COGGESHALL.
Editorial Anaya Multimedia, Madrid 2005.
Desarrollo web con PHP 5 y MySQL. JUAN DIEGO GUTIRREZ GALLARDO.
Editorial Anaya Multimedia, Madrid 2005.
PHP 5. LUIS MIGUEL CABEZAS GRANADO.
Editorial Anaya Multimedia, Madrid 2005.

Pgina 238 de 240

Programacin en PHP

Programacin en PHP

Enlaces
Pgina oficial de PHP (en ingls)
PHP, pginas oficiales.
http://www.php.net
Tutorial en castellano de la pgina oficial
Tutoriales de PHP.
http://es.php.net/manual/es/index.php
Tutorial en castellano
Tutoriales de PHP.
http://www.phpbuilder.com/manual2/manual/es/
Referencia de funciones en castellano
Referencia PHP.
http://www.php.net/manual/es/funcref.php
Extensiones (en ingls)
Recursos PHP.
http://pear.php.net/
PHPLib, popular conjunto de libreras (en ingls)
Recursos PHP.
http://phplib.sourceforge.net
Sistema de plantilas DTemplate (en ingls)
Recursos PHP.
http://desolatewaste.com/
Pgina oficial de Apache (en ingls)
Apache.
http://www.apache.org
Paquete de instalacin Xampp
Apache.
http://www.apachefriends.org/en/xampp.html
Pgina oficial (en ingls)
MySQL.
http://dev.mysql.com/

Plataforma de Teleformacin de IFES

Pgina 239 de 240

Manual de referencia de la versin 4.1.(en ingls)


MySQL.
http://dev.mysql.com/doc/refman/4.1/en/index.html
World Wide Web Consortium, organismo estandarizador de Internet
Programacin web en general.
http://www.w3c.es/

Pgina 240 de 240

Programacin en PHP

S-ar putea să vă placă și