Académique Documents
Professionnel Documents
Culture Documents
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
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
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
Pgina 5 de 240
Pgina esttica
Pgina 6 de 240
Programacin en PHP
Pgina dinmica
Pgina 7 de 240
Pgina 8 de 240
Programacin en PHP
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.
Pgina 9 de 240
Caractersticas de PHP
A nivel tcnico se pueden destacar los siguientes aspectos:
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:
Pgina 11 de 240
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:
Pgina 12 de 240
Programacin en PHP
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:
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).
Pgina 13 de 240
XAMPP en la versin elegida instala las siguientes versiones de Apache, Php y Mysql:
Requerimientos:
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
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:
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:
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.
Pgina 19 de 240
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.
Resumen mdulo I
Este recurso es de tipo Multimedia.
Tiene que conectarse a la plataforma para acceder a este recurso.
Pgina 21 de 240
Autoevaluacin mdulo I
Pregunta 1:
Javascript es un lenguaje de programacin que se ejecuta en la mquina cliente.
Verdadero
Falso
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
Pgina 22 de 240
Programacin en PHP
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
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:
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
http://localhost/practicasPHP/miprograma.php
Pgina 25 de 240
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.") ?>
Pgina 27 de 240
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
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.
Pgina 29 de 240
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
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
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@;
?>
Pgina 32 de 240
Programacin en PHP
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:
Pgina 33 de 240
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
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:
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
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
Pgina 41 de 240
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:
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):
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));
?>
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
}
Pgina 45 de 240
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
}
Pgina 47 de 240
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
Pgina 49 de 240
?>
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
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;
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.
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>";
Pgina 55 de 240
?>
</table>
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
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;
}
?>
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.
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
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
Verdadero
Falso
Pgina 59 de 240
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
Verdadero
Falso
Pgina 60 de 240
Programacin en PHP
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
Pgina 61 de 240
Programacin en PHP
Programacin en PHP
Pgina 63 de 240
</body>
</html>
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>
Pgina 65 de 240
?>
<?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
}
?>
Pgina 66 de 240
Programacin en PHP
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.
Pgina 68 de 240
Programacin en PHP
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 ";
Pgina 69 de 240
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.";
?>
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
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).
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
Pgina 73 de 240
Pgina 74 de 240
Programacin en PHP
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
Pgina 76 de 240
Programacin en PHP
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>";
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
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
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>";
}
Pgina 81 de 240
?>
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];
?>
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:
Pgina 84 de 240
Programacin en PHP
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
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>";
}
?>
Pgina 86 de 240
Programacin en PHP
Pgina 87 de 240
$argumento1 = $argumento2;
$argumento2 = $auxiliar;
$numero1 = 5;
$numero2 = 8;
echo "($numero1, $numero2)<br>";
intercambiar($numero1, $numero2);
echo "($numero1, $numero2)";
?>
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
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);
?>
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.
Pgina 91 de 240
<?php
phpinfo();
?>
Debe aparecernos una pantalla similar a la siguiente:
Pgina 92 de 240
Programacin en PHP
Pgina 93 de 240
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:
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
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:
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">
Pgina 95 de 240
rea de texto - Sirve para poder recibir textos largos compuestos por varias
lneas.
<textarea name="opinion"></textarea>
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
Pgina 97 de 240
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
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>"; //...
?>
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.
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
Programacin en PHP
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>
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>
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 >
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:
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.
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
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
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 )
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.
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
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)
Programacin en PHP
}
echo "El nmero de directorios es $num_dir <br> ";
echo "El nmero de ficheros es $num_fic";
?>
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:
guardar.php
<?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.
Programacin en PHP
Pregunta 1:
No se puede acceder a un carcter aislado de un dato de tipo cadena.
Verdadero
Falso
Verdadero
Falso
Respuesta correcta: Verdadero
Pregunta 3:
En un array los ndices han de ser siempre nmeros enteros.
Verdadero
Falso
Verdadero
Falso
$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
Verdadero
Falso
Programacin en PHP
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
Programacin en PHP
Prctica intermedia
Este recurso es de tipo Prctica.
Tiene que conectarse a la plataforma para acceder a este recurso.
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.
Programacin en PHP
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.
Programacin en PHP
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.
U.D.2. Qu es MySQL?
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.
Programacin en PHP
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.
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.
Programacin en PHP
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.
Programacin en PHP
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.
Programacin en 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:
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
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:
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.
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.
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.
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:
Programacin en PHP
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);
Programacin en PHP
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 ;
Programacin en PHP
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";
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%";
Programacin en PHP
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;
Programacin en PHP
Programacin en PHP
Si todo ha ido bien, nos aparecer un mensaje diciendo que la base de datos se ha
creado.
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.
Y finalmente hacemos clic en el bot grabar. Si todo ha ido bien se muestra la siguiente
pantalla:
Programacin en PHP
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.
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.
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:
Programacin en PHP
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");
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
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)
Programacin en PHP
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.
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>
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
$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.
Programacin en PHP
Resumen mdulo IV
Este recurso es de tipo Multimedia.
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:
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:
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
Verdadero
Falso
Respuesta correcta: Falso
Videotutoriales
Servidor local XAMPP
Este recurso es de tipo Multimedia.
Tiene que conectarse a la plataforma para acceder a este recurso.
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.
Programacin en PHP
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
Programacin en PHP
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)
Programacin en PHP
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 )
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.
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.
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 )
Programacin en PHP
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.
4.- Para poner en funcionamiento el programa, lo hacemos a travs del icono que ha
creado en el escritorio.
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:
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.
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);
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:
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.
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.";
}
?>
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.
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();
?>
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.
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>
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>
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
Programacin en PHP
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.
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();
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>
</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>
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");
}
?>
Programacin en PHP
Una vez indicados los valores, haz clic en el botn Grabar. Te deber aparecer la
siguiente pantalla:
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
Programacin en PHP
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:
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'";
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.
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.
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);
}
Programacin en PHP
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.
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.
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>
Programacin en PHP
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 );
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");
?>
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
{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"));
Programacin en PHP
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>
ficha_comercio.php
<?php
include("class.DTemplate.php");
$titulo = "Ficha";
$nombre_comercio = "Frutera Pernambuco";
$direccion_comercio = "c/ Don Juan Tenorio 17";
Programacin en PHP
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.
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
<?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 .
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
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
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.
Programacin en PHP
Prctica final
Este recurso es de tipo Prctica.
Tiene que conectarse a la plataforma para acceder a este recurso.
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.
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
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.
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
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
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
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
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).
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
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)
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)
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
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.
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?
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
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.
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/
Programacin en PHP