Académique Documents
Professionnel Documents
Culture Documents
de Educación, Cultura
y Deporte
CamSi SGALV
PHP
Informática e Internet
Catálogo de publicaciones del Ministerio: www.educacion.gob.es
Catálogo general de publicaciones oficiales: www.publicacionesoficiales.boe.es
Autor
Clodoaldo Robledo Sacristán
David Robledo Fernández
NIPO: Pendiente
ISBN: Pendiente
Introducción
1. Qué es PHP
Qué es PHP
Su historia
El lenguaje PHP fue creado a finales de 1994 por Rasmus Lerdorf, que
inicialmente utilizó las páginas web elaboradas con este lenguaje para
comprobar quién consultaba su currículum. Por entonces no puso a disposición
de los usuarios esta sencilla herramienta.
1
Curso Iniciación a PHP
‐ Introducción ‐
La siguiente versión prevista, que se debería haber publicado era PHP 6, cuyo
objetivo era dar a PHP soporte completo de Unicode el juego de caracteres
universal). Sin embargo, su desarrollo se estancó y en 2010 prácticamente se
tiró la toalla y sigue sin estar claro si se alcanzará el objetivo.
Mientras tanto, se han ido publicando versiones 5.X que han ido introduciendo
bastantes novedades en el lenguaje (5.3 publicada en junio de 2009, 5.4
publicada en marzo de 2012 y 5.5 publicada en junio de 2013).
Por otra parte, en el uso de aplicaciones elaboradas con PHP el usuario utiliza
un interfaz ya familiar como el navegador web, el mismo que viene empleando
para acceder a cualquier otra página, sin que necesite aprender ninguna
combinación especial de teclas, ni instalar otro software adicional diferente de
su navegador habitual, ni disponer de un sistema operativo concreto, Unix o
Windows.
2
Curso Iniciación a PHP
‐ Introducción ‐
3
Curso Iniciación a PHP
‐ Introducción ‐
4
Curso Iniciación a PHP
‐ Introducción ‐
Servidor XAMPP
XAMPP
5
Curso Iniciación a PHP
‐ Introducción ‐
6
Curso Iniciación a PHP
‐ Introducción ‐
Nota: Como PHP 5.5 no está disponible para Windows XP, no existe XAMPP
1.8.3 para Windows XP. Si se quiere instalar XAMPP en Windows XP (sistema
operativo ya obsoleto en 2014), se puede instalar XAMPP 1.8.0.
Comprobación previa
Indica que no hay ningún servidor de páginas web, en caso contrario, debemos
desactivarlo para continuar la instalación.
7
Curso Iniciación a PHP
‐ Introducción ‐
8
Curso Iniciación a PHP
‐ Introducción ‐
9
Curso Iniciación a PHP
‐ Introducción ‐
10
Curso Iniciación a PHP
‐ Introducción ‐
Una vez terminada la instalación aparece la pantalla que confirma que XAMPP
ha sido instalado correctamente:
11
Curso Iniciación a PHP
‐ Introducción ‐
12
Curso Iniciación a PHP
‐ Introducción ‐
Para iniciar el srvidor Apache, hay que hacer clic en el botón “Start”
correspondiente a Apache:
13
Curso Iniciación a PHP
‐ Introducción ‐
Para cerrar el panel de control de XAMPP hay que hacer clic en el botón Quit:
14
Curso Iniciación a PHP
‐ Introducción ‐
Los dos archivos principales de configuración del servidor web son los archivos
httpd.conf (Apache) y php.ini (PHP). Se puede utilizar el panel de control de
XAMPP para editarlos en el bloc de notas haciendo clic en el botón "Config"
correspondiente a Apache y, a continuación, en el archivo que se desea editar:
15
Curso Iniciación a PHP
‐ Introducción ‐
16
Curso Iniciación a PHP
‐ Introducción ‐
17
Curso Iniciación a PHP
‐ Introducción ‐
uname -m
18
Curso Iniciación a PHP
‐ Introducción ‐
[parámetro] Descripción
start Inicia XAMPP.
stop Para XAMPP.
restart Para y reinicia XAMPP.
startapache Inicia solo Apache.
Inicia el soporte SSL para Apache (servidor acceso seguro). Este
startssl comando activa el soporte SSL permanentemente, es decir, si
reinicias XAMPP en el futuro SSL ya estará activado por defecto.
startmysql Inicia únicamente la base de datos MySQL.
Arranca el servidor ProFTPD. Mediante un servidor FTP puedes
descargar y subir archivos a tu servidor (usuario: "nobody",
startftp contraseña "lampp"). De nuevo, este comando activa ProFTPD
permanentemente, es decir, si reinicias XAMPP, el servidor FTP ya
estará activado por defecto.
stopapache Parar servidor Apache.
Para el soporte SSL de Apache. Este comando desactiva SSL
stopssl permanentemente, es decir, si reinicias XAMPP estará
desactivado.
19
Curso Iniciación a PHP
‐ Introducción ‐
Para ejecutar esta interfaz gráfica que nos permite de forma sencilla Iniciar /
Detener los servicios más importantes (Apache, MySQL y ProFTPD) debemos
ejecutar el siguiente comando:
sudo /opt/lampp/share/xampp-control-panel/xampp-control-panel
Para que esta aplicación aparezca en el Dash o tablero (botón Inicio de la barra
lateral en Ubuntu) debemos crear un archivo del tipo "nombre.desktop" en el
directorio /usr/share/applications/ ejecutando en un terminal de comandos:
[Desktop Entry]
Comment=Start/Stop XAMPP
Name=XAMPP Control Panel
Exec=gksudo python /opt/lampp/share/xampp-control-panel/xampp-
control-panel.py
Icon[en_CA]=/opt/lampp/xampp.png
Encoding=UTF-8
Terminal=false
Name[en_CA]=XAMPP Control Panel
Comment[en_CA]=Start/Stop XAMPP
20
Curso Iniciación a PHP
‐ Introducción ‐
Type=Application
Icon=/opt/lampp/xampp.png
21
Curso Iniciación a PHP
‐ Introducción ‐
22
Curso Iniciación a PHP
‐ Introducción ‐
este directorio no tiene los permisos correctos para poder modificar sus
contenidos. Por lo tanto, para cambiar los permisos, debemos abrir “Finder” y
elegir la opción “Fichero->”Obtener información:
23
Curso Iniciación a PHP
‐ Introducción ‐
Comprobaciones XAMPP
Para verificar que hemos instalado correctamente XAMPP, hay que abrir un
navegador y escribir la dirección http://localhost. Al abrir la página por primera
vez, XAMPP pedirá seleccionar el idioma:
24
Curso Iniciación a PHP
‐ Introducción ‐
25
Curso Iniciación a PHP
‐ Introducción ‐
26
Curso Iniciación a PHP
‐ Introducción ‐
error_reporting = E_ALL
...
display_errors = On
27
Curso Iniciación a PHP
‐ Introducción ‐
¿Qué es Eclipse?
Esta lista de lenguajes aumenta con los años, ya que este IDE se está
convirtiendo en el entorno de desarrollo de muchos programadores por su
simplicidad y facilidad de uso.
El Consorcio Eclipse
28
Curso Iniciación a PHP
‐ Introducción ‐
Eclipse PDT
29
Curso Iniciación a PHP
‐ Introducción ‐
30
Curso Iniciación a PHP
‐ Introducción ‐
31
Curso Iniciación a PHP
‐ Introducción ‐
Windows
Linux
/opt/zend-eclipse-php/zend-eclipse-php
32
Curso Iniciación a PHP
‐ Introducción ‐
Mac OS
/Applications/zend-eclipse-php/zend-eclipse-php
33
Curso Iniciación a PHP
‐ Introducción ‐
34
Curso Iniciación a PHP
‐ Introducción ‐
35
Curso Iniciación a PHP
‐ Introducción ‐
Una vez lo hemos hecho, hacemos clic en la opción del menú Windows ->
Preferences” y seleccionamos la opción “PHP -> PHP Manual”. En la ventana
que aparece, pulsamos en el botón “New” para seleccionar el archivo de ayuda
que te acabas de descargar:
36
Curso Iniciación a PHP
‐ Introducción ‐
Una vez hemos pulsado el botón “OK”, debemos marcar el nuevo manual local
y hacer clic en el botón “Default” para establecer por defecto este documento
de ayuda:
37
Curso Iniciación a PHP
‐ Introducción ‐
A partir de ahora. Cuando estés trabajando con Eclipse – PDT, podrás con el
botón derecho del ratón y pulsando en la opción “Open PHP Manual” (atajo del
teclado [MAY + F2]) abrir la ayuda oficial de PHP:
38
MÓDULO 1
UNIDADES DIDÁCTICAS:
Unidad 1
Índice de la unidad:
1. Introducción
HTML
8. Resumen
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Introducción
En esta Unidad vamos a realizar una Introducción al lenguaje PHP. Además,
describiremos el entorno de desarrollo Eclipse PDT y crearemos nuestro
primer proyecto PHP.
Un poco de historia
La World Wide Web (WWW), conocida comúnmente como “la web”, es un
sistema de distribución de documentos de hipertexto o hipermedios
interconectados y accesibles mediante Internet. Con un navegador web, un
usuario visualiza sitios web compuestos de páginas web que pueden contener
texto, imágenes, vídeos u otros contenidos multimedia, y navega a través de
esas páginas usando hiperenlaces.
Inicialmente, la web fue desarrollada por Tim Berners Lee en 1989 para el
CERN de Ginebra en 1991 y se extendió rápidamente por las Universidades
del mundo (en aquel entonces, Internet era una red a la que sólo tenían acceso
entidades gubernamentales, sobre todo, entidades educativas). En 1992,
algunos proveedores de Internet comerciales empezaron a dar acceso a
particulares y empresas, lo que popularizó más la web.
En esos años, las páginas web eran documentos de texto guardados en algún
directorio de un servidor y a los que accedía mediante los primeros
navegadores web. Cada página web que se visualizaba en el navegador
correspondía a un fichero en el servidor.
- 41 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 42 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
En ningún momento se envía código PHP al navegador del usuario cliente, por
lo que todas las operaciones realizadas son transparentes para éste, al que le
parecerá que está visitando unas páginas HTML que cualquier navegador
puede interpretar. PHP se diferencia de JavaScript precisamente en que el
programa PHP se ejecuta en el servidor, no en la máquina del cliente, como
ocurre en JavaScript.
A la vista del esquema anterior, conviene recordar que el curso está diseñado
de forma que el servidor Apache está instalado en el mismo ordenador local
donde trabaja el alumno. Por ello, al hacer el curso, el alumno no necesita
conectarse a Internet para hacer peticiones de páginas web a un servidor
remoto. No obstante, el efecto real es el mismo que si estuviera accediendo a
un servidor ubicado en el otro extremo del mundo.
- 43 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 44 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 45 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
La primera vez que se ejecuta Eclipse PDT se puede ver una pantalla muy
similar a la que se muestra a continuación.
Editores
Es posible tener varios ficheros de código fuente abiertos a la vez, apilados uno
encima de otro. En la parte superior de la ventana del Editor se muestran las
pestañas que permiten acceder a cada uno de los ficheros abiertos (o bien
cerrarlos directamente).
- 46 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Editor
Vistas
Las Vistas son ventanas auxiliares para mostrar información, introducir datos,
etcétera. Las Vistas se usan con múltiples propósitos, desde navegar por un
árbol de directorios, hasta mostrar el contenido de una consulta SQL.
Vistas
- 47 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 48 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Perspectivas
Por ejemplo, existe una Perspectiva "PHP Perspective" que facilita el desarrollo
de aplicaciones PHP y que incluye, además del Editor, Vistas para navegar por
los scripts PHP, las bibliotecas, etcétera.
- 49 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Además, es posible usar el menú "Help" o la tecla [F1] para solicitar ayuda.
Desgraciadamente, a día de hoy, esta ayuda sólo se encuentra en inglés.
- 50 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 51 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 52 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Se trata del primer proyecto que el alumno va a crear, por lo que es muy
importante prestar atención a los pasos seguidos, ya que los proyectos
siguientes se generan de manera similar.
En el menú de Eclipse hacemos clic en File -> New -> Project -> Local PHP
Project:
- 53 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Nota: aunque la versión del curso de PHP es la 5.5 utilizada durante el curso,
Eclipse PDT sólo permite elegir la 5.4 como versión máxima del proyecto.
Notamos al alumno que esto no supone ninguna limitación técnica en el
desarrollo de sus trabajos y puede continuar tal y como aparece en la captura
de pantalla anterior.
- 54 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
En esta pantalla debemos modificar el campo “Base Path” de tal forma que se
incluya el subdirectorio “curso” dentro del raíz del curso que vamos a utilizar.
Tecleamos, por lo tanto, la palabra “curso”. Así, Eclipse ADT sabrá ejecutar
correctamente el proyecto en el navegador.
- 55 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Sin modificar nada, pulsamos el botón “Finish” para crear los ficheros del
proyecto.
- 56 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 57 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 58 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
o en la opción "Run" de menú “Run”. También disponemos del atajo del teclado
[Ctrl+F11]
- 59 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Si el código está bien escrito, aparecerá la página web que hemos diseñado. Si
no lo está, se mostrará el error encontrado y sólo aparecerá parte de la página
o nada. Para arreglar el problema, nos pasamos al editor, arreglamos el código
donde proceda y guardamos otra vez el fichero. Cuando lo hayamos hecho,
- 60 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
MUY IMPORTANTE:
- 61 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 62 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Una página PHP es un archivo de texto que contiene uno o varios fragmentos
de código PHP y que también puede contener fragmentos de código HTML.
Ya hemos visto que al ejecutar una aplicación elaborada con PHP no hay que
pensar en un programa compilado binario de tipo exe que funciona en el
ordenador del cliente, sino en un programa cuyo código está sólo en el servidor
web y es interpretado en el mismo a requerimiento del usuario cliente, que en
respuesta a su solicitud recibe en la pantalla el resultado de esa interpretación
en forma de página web, en formato HTML, generada por PHP.
En todo caso, damos por supuesto que quien hace el curso conoce lo más
rudimentario de HTML y, por lo tanto, centramos las explicaciones más
detalladas en la parte del código que corresponde a PHP.
<HTML>
<HEAD>
<TITLE>
Curso PHP 5 ‐ Unidad 1 ‐ Ejemplo 1
</TITLE>
</HEAD>
- 63 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
<BODY>
<!‐‐ Las líneas anteriores contienen sólo código HTML.
Si lo necesitas, mira el Apéndice 2. ‐‐>
<?PHP
// Aquí se inicia el código PHP.
// Obtenemos el valor de la variable global HTTP_USER_AGENT
// de PHP que indica los datos del navegador del usuario.
$navegador = $_SERVER['HTTP_USER_AGENT'];
?> <!‐‐ Aquí se cierra el código PHP. ‐‐>
<P>Estás usando el navegador<B>
<?PHP // Aquí se inicia de nuevo el código PHP.
echo($navegador);
?> <!‐‐ Aquí se cierra el código PHP. ‐‐>
<!‐‐ A partir de esta línea sigue el código HTML. ‐‐>
</B>.</P>
</BODY>
</HTML>
Como el objetivo de PHP es generar páginas HTML, hay una estrecha relación
entre el código de PHP y de HTML. Ambos conviven dentro del mismo script.
En este caso, el código PHP está envuelto por el código HTML, es decir, en la
parte externa inicial y final del código se usa lenguaje HTML y en su interior se
insertan dos fragmentos del lenguaje PHP.
El servidor Apache, que alberga este código, distingue entre las líneas que
pertenecen a cada lenguaje para enviar al intérprete PHP las que pertenecen a
PHP e interpreta él mismo el código HTML puro, generando la página web que
remite al cliente en formato HTML.
- 64 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Así, podemos ver el código HTML que recibe el navegador del servidor web y
que el usuario visualizará:
- 65 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Esta cuarta manera sólo está disponible si se han habilitado las etiquetas tipo
ASP usando la opción de configuración asp_tags. El soporte para las etiquetas
tipo ASP se añadió en la versión 3.0.4.
Como regla general, en los programas del curso usaremos el primero de los
cuatro delimitadores, ya que nos parece más sencillo, estándar y
suficientemente claro.
Conviene observar que los fragmentos del código PHP se pueden incluir dentro
del código HTML en cualquier posición. Pero no se pueden anidar, es decir,
dentro de un trozo de PHP no se puede incluir otro fragmento PHP. En el
ejemplo anterior se ve que hemos incluido dos trozos PHP independientes en
dos posiciones diferentes del código envolvente HTML.
Así estaría organizado el código del ejemplo anterior siguiendo esta filosofía:
<?PHP // Aquí se inicia el código PHP.
- 66 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
echo "<HTML>
<HEAD>
<TITLE>
Curso PHP 5 ‐ Unidad 1 ‐ Ejemplo 2
</TITLE>
</HEAD>
<BODY>
<P>Estás usando el navegador
<B>";
$navegador = $_SERVER['HTTP_USER_AGENT'];
echo($navegador);
echo "</B>.</P>
</BODY>
</HTML>";
?><!‐‐ Aquí se cierra el código PHP. ‐‐>
Cuando un navegador solicita una página PHP a un servidor, este servidor lee
el archivo o script PHP secuencialmente y va generando el resultado de la
siguiente manera:
- 67 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 68 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
1. Una sentencia puede estar integrada por una asignación, una llamada a una
función o una estructura de control de flujo, como una condición o un bucle.
Todas las sentencias acaban necesariamente en punto y coma (;). Por
ejemplo, es una sentencia o instrucción de asignación la siguiente:
$navegador = $_SERVER['HTTP_USER_AGENT'];
La etiqueta de cierre (?>) también implica el fin de una sentencia, por lo que
equivale al punto y coma (;). Igualmente sería correcto escribir así las
sentencias anteriores:
<?php
$navegador = $_SERVER['HTTP_USER_AGENT'];
echo($navegador);
?>
$x=0;
while ($x<15)
{
$z=0;
while ($z<10)
{
$d=$x*$z;
echo "$x x &z = $d";
- 69 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
$z++;
}
$x++;
}
En el lenguaje PHP todas las variables deben iniciarse con el signo dólar ($).
Además, el intérprete distingue entre letras mayúsculas y minúsculas, por lo
cual $CAsa y $casa son dos nombres de variable diferentes.
La persona que escribe el código pone los nombres de los elementos que se
utilizan en los programas, como variables, tipos de datos, constantes,
funciones, clases, etcétera. Este nombre se denomina identificador.
El nombre del identificador debe estar integrado por una sola palabra (no una
frase con espacios en su interior) y, como hemos dicho, si es una variable,
debe iniciarse por el signo $. Ningún identificador puede comenzar con un
número, incluso aunque pongamos delante el signo $. En el nombre de los
identificadores pueden utilizarse el signo de subrayado, otras letras y números
(excepto en la primera posición). No se pueden usar determinados signos,
como los dos puntos (:), ni el punto y coma (;), ni las barras inclinadas / y \, ni
los operadores aritméticos (+, -, *, /, %), etcétera. Con la práctica se irá
sabiendo qué nombres no acepta PHP por ser incorrectos, pues se indica con
un error al interpretar el código. Por ejemplo, son nombres de identificador
válidos $casa, $suma_todo y $forma_1_2_adaptador. En cambio, no lo son
function 10Casos, $unidad/B, $ma:ana, $jam\s y $suma-todo, $uno*dos,
$mio+tuyo.
- 70 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
tipos de datos, como Int, double, string, array, o las palabras reservadas, como
while, function, for, etcétera.
En PHP no hay que declarar previamente el tipo de variable, sino que el hecho
de asignar un tipo de dato a una variable ya es suficiente para que esa variable
sea del tipo de datos que contienen. Además, si a una misma variable primero
se le asigna un tipo de datos, como una cadena de caracteres, será de ese
tipo, pero si después se le asigna otro tipo de datos diferente, como un número
entero, desde ese momento será de este tipo. Esto facilita mucho las cosas,
pero exige tener un mayor control sobre los valores que va teniendo una
variable a lo largo de su vida dentro de un script.
Aunque hay varias formas de indentar, en los ejercicios del curso hemos
seleccionado la forma más común. El alumno puede observar en los mismos
cómo lo hemos hecho y aprender a indentar él también sus scripts.
<?php
$navegador = $_SERVER['HTTP_USER_AGENT'];
echo($navegador);//Muestra contenido de $navegador.
?>
Si el comentario es más largo y ocupa varias líneas, hay que incluir su texto
entre la combinación de signos /*...*/.
<?php
$navegador = $_SERVER['HTTP_USER_AGENT'];
echo($navegador);
- 71 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
El alumno debe poner comentarios en los scripts que elabore, tanto para
acostumbrarse a hacerlo, como para aclarar las instrucciones que lo precisen.
<?php
<p>Hola</p>
?>
El ejemplo siguiente muestra el código HTML de una página web válida con las
líneas numeradas.
- 72 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Estrictamente hablando, toda página PHP debe incluir o generar todo el código
HTML estándar necesario.
De igual forma que ocurre con una página HTML, una página PHP puede
enlazar a una hoja de estilo CSS mediante la etiqueta <link>.
- 73 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
1. echo
- 74 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Si nos fijamos en esta última sintaxis, podemos observar que hemos utilizado la
barra hacia la izquierda (\) delante de la variable, para que no expanda su
contenido. Además, hemos sacado la función de las comillas y la hemos
concatenado con el texto anterior y posterior usando el operador de
concatenación (.).
2. print
Esta orden es prácticamente igual que echo, hasta el punto de que se pueden
intercambiar sin problemas.
<HTML>
<HEAD><TITLE>Curso PHP 5 ‐ Unidad 1 ‐ Ejemplo 3</TITLE></HEAD>
<BODY>
<?php // Aquí se inicia el código PHP.
print "<H1><CENTER>Uso de la orden print. Funciona como echo.</H1>
</CENTER><H2>";
/* Mostramos el texto anterior con un tamaño de letra grande
y centrado.*/
$pares=0;
/* Abrimos un bucle para repetir la operación 20 veces.
En la Unidad 2 se estudia esta estructura de control.*/
for (;$pares<40;)
{
print " ‐‐ $pares "; // Observa que la variable se expande.
if ($pares==40) // Si la variable $pares vale 40...
break; // Salimos del bucle.
$pares+=2; // Sumamos 2 al valor actual de la variable.
}
print "</H2><P><H3> Relación de los 20
primeros números pares.</H3>";
/* Mostramos el texto anterior con un tamaño de letra pequeño.
Como HTML sólo respeta un espacio en blanco, con el comando
hacemos que la frase deje 5 espacios a la izquierda. */
- 75 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
/* Aquí acaba el código PHP. No podemos poner este comentario a
continuación del signo ?>, pues estaría fuera del código PHP.*/
?>
</BODY>
</HTML>
3. printf
Es una función que permite mostrar información formateada según los valores
que aparezcan en una cadena de formato integrada por caracteres fijos y por
una directiva %.
Su sintaxis es:
<HTML>
<HEAD></HEAD>
<BODY>
<?php
$i=15;
printf ("Valor de la variable \$i= %d \n", $i);
echo "<P>Nueva línea ";
?>
</BODY>
</HTML>
- 76 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Si vemos el código HTML que ha recibido el usuario (con el botón derecho del
ratón sobre el navegador, opción “Ver código fuente”), vemos cómo es:
En este sencillo ejemplo podemos apreciar varias cosas que debemos conocer.
Son las siguientes:
En este ejemplo hay que observar también varias cosas que debemos tener en
cuenta:
- 77 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
1. Conviene recordar que en el texto literal hemos tenido que utilizar el signo \
delante de $i para que la variable no se expandiera. No confundirlo con el
comando \n que sirve para que se produzca un salto de línea.
2. La directiva %d lleva detrás el comando del código PHP \n. Puede llevar
también otro literal. El comando \n sirve para que, una vez mostrado el
resultado de la variable $i, se produzca un salto de línea dentro del código
HTML, como ya hemos dicho.
printf("La variable \$i con la directiva %%d aparece como %d \n", $i);
- 78 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
printf("La variable \$i con la directiva %%05d aparece como %05d \n",
$i);
Fíjate que hemos escrito %011.5f para que el número total de caracteres sea
11 incluyendo el punto decimal y 5 caracteres en la parte decimal.
Puede ser una sola de las letras que aparecen en la tabla siguiente:
- 79 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
<HTML>
<HEAD><TITLE>Curso PHP 5 ‐ Unidad 1 ‐ Ejemplo 4</TITLE></HEAD>
<BODY>
<DIV style="text‐align: center;">
- 80 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
<H3>TABLA DE LOS 20 PRIMEROS NÚMEROS EN DIFERENTES
BASES</H3>
<TABLE BORDER="2">
<TR>
<TH> Decimal </TH>
<TH> Binario </TH>
<TH> Octal </TH>
<TH> Hexadecimal </TH>
</TR>
<?php // Aquí se inicia el código PHP.
echo "<BR>"; // Salto de línea para dejar un espacio entre
// el título y la tabla.
/* Abrimos un bucle para repetir la operación 20 veces.
En la Unidad 2 se estudia esta estructura de control.*/
for ($a=0;$a<21;$a++)
{
echo "<TR>"; // Nueva fila de tabla.
printf("<TD> %02d</TD><TD> %06b</TD>
<TD> %02o</TD><TD> %02X</TD>"
,$a,$a,$a,$a);
/* Observa que en la cadena de formato, entre paréntesis,
hemos incluido los códigos HTML (<TD> ...</TD>)
y la directiva (%02d, %06b, %02o y %02X) de cada una
de las formas de presentar el valor de la varible $a. */
print "</TR>";
}
/* Aquí acaba el código PHP. No podemos poner este comentario a
continuación del signo ?>, pues estaría fuera del código PHP.*/
?>
</TABLE>
</DIV>
</BODY>
</HTML>
- 81 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
4. sprintf
- 82 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Esta función nos permite dar formato a una cadena de texto exactamente igual
que con printf, y guardar, además el resultado en una variable, para utilizarlo
posteriormente.
Su sintaxis es la siguiente:
<HTML>
<HEAD></HEAD>
<BODY>
<?php
$i=15;
$cadena=sprintf("\$i con %%04X aparece como %04X", $i);
echo $cadena;
echo "<P>Nueva línea";
?>
</BODY>
</HTML>
5. print_r
Su sintaxis es la siguiente:
- 83 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
<HTML>
<HEAD></HEAD>
<BODY>
<?php
$matriz = array ('a' => 'casa',
'b' => 'calle mayor',
'c' => array ('primero', 'segundo','tercero'));
echo "<PRE>";
print_r ($matriz);
echo "</PRE>";
?>
</BODY>
</HTML>
Observa que hemos usado las etiquetas <PRE> y </PRE> para que se muestren
los espacios e intros en HTML. En el apartado siguiente trataremos las
matrices y se entenderá mejor esta función que sirve de mucha utilidad cuando
se necesita conocer lo que contiene una matriz.
- 84 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
$nombre = 'Pedro';
// Esto imprime: ¿Hola Pedro como estás?
echo "¿Hola $nombre como estás?";
Como se aprecia en el último ejemplo, al usar comillas dobles hace que las
variables en el texto sean reemplazadas por sus valores correspondientes, no
así con las comillas simples.
- 85 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
El lenguaje PHP, igual que la mayoría, puede tratar los siguientes tipos de
datos:
Por ejemplo, podemos crear una matriz (array), sin necesidad de haberla
declarado antes, de la forma siguiente:
- 86 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
$persona["nombre"]="Josefa";
$persona["apellido1"]="Pérez";
$persona["apellido2"]="Rubio";
$persona["edad"]=60;
$persona=array("nombre"=> "Josefa",
"apellido1"=> "Pérez",
"apellido2"=> "Rubio",
"edad"=>60);
$notas["Mat"]["Pri"] = "Suficiente";
$notas["Mat"]["Seg"] = "Bien";
$notas["Mat"]["Ter"] = "Notable";
$notas["Len"]["Pri"] = "Sobresaliente";
$notas["Len"]["Seg"] = "Sobresaliente";
$notas["Len"]["Ter"] = "Notable";
$notas["Dib"]["Pri"] = "Notable";
$notas["Dib"]["Seg"] = "Bien";
$notas["Dib"]["Ter"] = "Suficiente";
$notas = array("Mat"=>array("Pri"=>"Suficiente",
"Seg"=>"Bien",
"Ter"=>"Notable"),
"Len"=>array("Pri"=>"Sobresaliente",
"Seg"=>" Sobresaliente",
"Ter"=>"Notable"),
"Dib"=>array("Pri"=>"Notable",
"Seg"=>"Bien",
"Ter"=>"Suficiente"));
$notas[0][0] = 5;
$notas[0][1] = 6;
$notas[0][2] = 7;
$notas[1][0] = 9;
$notas[1][1] = 9;
$notas[1][2] = 7;
$notas[2][0] = 7;
$notas[2][1] = 6;
$notas[2][2] = 5;
Es más breve, si bien hay que saber a qué asignatura y evaluación pertenece
cada índice. En la otra sintaxis quedaría así:
- 87 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
$notas = array(0=>array(0=>5,1=>6,2=>7),
1=>array(0=>9,1=>9,2=>7),
2=>array(0=>7,1=>6,2=>5));
class identificador_de_la_clase
{
public $nombre_de_las variables;
function nombre_de_la_funcion_de_la_clase($argumentos)
{Declaración de la función }
}
Por ejemplo, supongamos que necesitamos crear una clase que contenga los
siguientes datos de nuestros contactos, a modo de agenda: nombre, apellidos,
profesión, edad e importe de sus servicios por mes. Podemos declarar así la
clase:
class Contactos
{
public $nombre;
public $apellido;
public $profesion;
public $edad;
public $importe;
function completa($nom,$ape,$pro,$eda,$impor)
{
$this->nombre=$nom;
- 88 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
$this->apellido=$ape;
$this->profesion=$pro;
$this->edad=$eda;
$this->importe=$impor;
}
}
$contacto->completa("María","Pérez Mas","médico",35,"350.000");
echo "$contacto->nombre<P>";
echo "$contacto->apellido<P>";
echo "$contacto->profesion<P>";
echo "$contacto->edad<P>";
echo "$contacto->importe<P>";
- 89 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
<?PHP
$i = 7;
echo 'La variable \$i vale $i';
?> <!‐‐ Aquí se cierra el código PHP. ‐‐>
<?PHP
$i = 7;
echo "La variable \$i vale $i";
?> <!‐‐ Aquí se cierra el código PHP. ‐‐>
aparece:
- 90 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
<?PHP
$i = 7;
echo "La variable \$i vale "$i";
?> <!‐‐ Aquí se cierra el código PHP. ‐‐>
<?PHP
$i = 7;
echo "La variable \$i vale \"$i";
?> <!‐‐ Aquí se cierra el código PHP. ‐‐>
aparece el texto con las comillas protegidas por la barra \, de esta forma:
En este caso, cuando dentro de una cadena no hay variables que deban
expandirse, lo mejor es poner comillas simples enmarcando la cadena y dentro
las comillas dobles que necesitemos.
En PHP, para referirse a alguno de estos caracteres en una cadena, existen los
caracteres especiales que empiezan por el carácter barra (\). Los caracteres
especiales más utilizados son los siguientes:
Carácter Significado
- 91 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
\\ Carácter barra
\$ Carácter dólar
\" Carácter comilla doble (en una cadena delimitada por comillas
dobles)
\' Carácter comilla simple (en una cadena delimitada por comillas
simples)
\n Salto de línea
\t Tabulador horizontal
\XXX Carácter de código XXX en octal
\xXX Carácter de código XX en hexadecimal
\r Retorno de carro
\v Tabulador vertical
\e Escape
\f Salto de página (en impresoras antiguas)
$nombre = 'Pedro';
// Esto imprime: ¿Hola Pedro como estás?
echo "¿Hola $nombre cómo estás?";
- 92 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Como se aprecia en el último ejemplo, al usar comillas dobles hace que las
variables en el texto sean reemplazadas por sus valores correspondientes, no
así con las comillas simples.
- 93 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Aritméticos
Operador Operación
Suma los dos números entre los que está.
+
Adición
Ejemplo: $num = 4+3; a $num se le asigna el valor 7.
Resta del número anterior el valor del posterior.
-
Substracción
Ejemplo: $num = 4-3; a $num se le asigna el valor 1.
Multiplica los dos números entre los que está.
*
Multiplicación
Ejemplo: $num = 4*3; a $num se le asigna el valor 12.
Halla el cociente del primer número entre el segundo.
/
División
Ejemplo: $num = 12/3; a $num se le asigna el valor 4.
Halla el resto de la división del primer número entre
% el segundo.
Módulo
Ejemplo: $num = 5%3; a $num se le asigna el valor 2.
Asignación
Operador Operación
Asigna a la variable de su izquierda el valor que haya o
resulte de la operación que aparece a la derecha.
=
Ejemplo: $texto = “casa”; a $texto se le asigna la cadena
Asignación
“casa”.
simple
¡Ojo! No confundirlo con el operador de comparación ==
(igual que).
Igual que el anterior ejecutando el operador que haya a
la izquierda del signo = sobre el valor o cadena que haya
a su derecha y asignándolo a la variable de la izquierda.
Op=
Asignación
Ejemplos: $num += 4; al valor de $num se suman 4.
combinada
$texto .= “ además”; a la cadena de $texto se concatena
la cadena “ además”.
- 94 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
1. Por valor. Esta asignación realiza una nueva copia de la variable original,
es decir, el valor de una variable se pasa a otra haciendo una copia del valor de
la primera. Por ejemplo, si a la variable $a le asignamos el valor 5 ($a=5;) y a la
variable $b le pasamos el valor de $a ($b=$a;), en esta última tendremos una
copia de la primera, sin que el valor de $b se vea después afectado por los
cambios de $a. Es el tipo de asignación usado más frecuentemente en los
programas.
<?
?>
Comparación
- 95 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Operador Operación
Devuelve True si los dos valores que separa son iguales y
False si no lo son.
==
Ejemplo: (4==3); devuelve False.
Devuelve True si el valor que está a la izquierda es menor
que el de la derecha y False si no lo es.
<
Ejemplo: (4<5); devuelve True.
Devuelve True si el valor que está a la izquierda es menor
o igual que el de la derecha y False si no lo es.
<=
Ejemplo: (5<=5); devuelve True.
Devuelve True si el valor que está a la izquierda es mayor
que el de la derecha y False si no lo es.
>
Ejemplo: (4>5); devuelve False.
Devuelve True si el valor que está a la izquierda es mayor
o igual que el de la derecha y False si no lo es.
>=
Ejemplo: (5>=4); devuelve True.
Devuelve True si los dos valores que separa son diferentes
y False si no lo son.
!=
Ejemplo: (5!=4); devuelve True.
Devuelve True si los dos valores que separa son idénticos
en contenido y tipo y False si no lo son.
===
Ejemplo: (5===5); devuelve True.
1. Pueden compararse entre sí casi todos los datos, aunque sean de diferente
tipo, pero si queremos estar seguros del resultado, lo mejor es comparar datos
del mismo tipo.
3. Cuando los datos comparados son del mismo tipo, la comparación se lleva
a cabo de la forma siguiente:
- 96 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Si los datos son de tipo lógico, el valor Falso (False) es igual al valor Falso
(False) y el Verdadero (True) es igual a Verdadero (True). Por ejemplo, True
== True obtiene Verdadero; en cambio, de la expresión compleja (5 > 10) == (6
< 12) se deduce un valor Falso, pues la primera expresión (cinco es mayor que
diez) es Falsa (False); sin embargo, la segunda expresión (seis es menor que
doce) es Verdadera (True). Por tanto, la expresión False == True devuelve un
valor Falso.
Condicional
Operador Operación
Si la expresión que está a la izquierda del operador
devuelve True, asigna a la variable el valor de la primera
expresión que queda a su derecha; de lo contrario, le
asigna el valor de la segunda expresión.
?:
Ternario Ejemplos:$a = (8>7) ? (6*8) : (4+7);a $a se
Ejecución
Operador Operación
PHP soporta un operador de ejecución: el apóstrofe
invertido (``). No son apóstrofes normales. PHP intentará
ejecutar la instrucción contenida dentro de los apóstrofes
invertidos como si fuera un comando del Shell; su salida
`orden` es devuelta como el valor de esta expresión. También puede
Ejecución asignarse a una variable.
- 97 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
orden ls –al.
Cadena
Operador Operación
Devuelve el resultado de unir el contenido de las dos
cadenas que hay a su izquierda y a su derecha.
Incremento / decremento
Operador Operación
Incrementa $var en uno y después devuelve el su valor.
++$var
Preincremento Ejemplo:<? $a=4; echo ++$a; ?>. En la página web
aparecerá 5.
Decrementa $var en uno y después devuelve su valor.
--$var
Predecremento Ejemplo:<? $a=4; echo --$a; ?>. En la página web
aparecerá 3.
Devuelve el valor de $var y después lo incrementa en
uno.
$var++
Posincremento
Ejemplo:<? $a=4; echo $a++; echo $a; ?>. En la página
web aparecerá primero 4 y luego 5.
Devuelve el valor de $var y después lo decrementa en
uno.
$var--
Posdecremento
Ejemplo:<? $a=4; echo $a--; echo $a; ?>. En la página
web aparecerá primero 4 y luego 3.
Lógicos
Los operadores lógicos reciben este nombre porque nos permiten obtener
resultados lógicos o booleanos. Los valores lógicos son aquellos que sólo
pueden contener uno de estos dos valores: Verdadero (True en inglés) o Falso
(False en inglés). Este tipo de datos se usa principalmente para establecer
condiciones que nos permitan ejecutar unas operaciones u otras dentro de las
sentencias de bifurcación condicional y para controlar los bucles. Por este
motivo los operadores lógicos son muy importantes en la programación y se
emplean constantemente.
- 98 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Operador Operación
Niega el valor lógico de una expresión.
!
Ejemplos:
No
Si $casado == True; luego !$casado será igual a False.
Devuelve True si las dos expresiones que une son verdaderas
(True) y False si al menos una es falsa.
And o &&
Y
Ejemplos: La expresión (3<5 && 10<15) devuelve True. En
cambio, la expresión (3<1 && 10<15) devuelve False.
Devuelve True si al menos una de las dos expresiones que
une es verdaderas (True) y False si las dos son falsas.
OR o ||
Ejemplos: La expresión (3<5 or 10<8) devuelve True. En
O
cambio, la expresión
Bit a bit
¿Cómo podemos alterar esta jerarquía en las operaciones? Para hacer que los
operadores se ejecuten en un orden distinto del establecido, debemos utilizar
los paréntesis. Por ejemplo, si necesitamos sumar 6 y 2, y dividir el resultado
entre 2, no podemos escribir la expresión 6 + 2 / 2, pues resultaría 7 según las
reglas de precedencia establecidas; en cambio, si escribimos (6 + 2) / 2,
primero se ejecuta la operación que está entre paréntesis y después, la
operación de dividir obteniéndose 4 como resultado.
- 99 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 100 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
Resumen
- 101 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 102 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 103 -
Curso de Iniciación a PHP: Unidad 1
- Introducción al lenguaje PHP -
- 104 -
MÓDULO 1
Unidad 2
Índice de la unidad:
5. Control de excepciones
6. Resumen
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
Introducción
En esta Unidad vamos a conocer y saber usar las variables en toda su
extensión como elementos fundamentales del lenguaje PHP. Además,
aprenderemos a utiliza formularios.
¿Cómo podemos hacer que una variable tenga un valor global, es decir, que se
conserve tanto en una función como en una página o entre páginas diferentes?
En este ejemplo usamos la variable $texto como local tanto en la página como
en la función.
<HTML>
- 107 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
<HEAD><TITLE>Curso PHP 5 ‐ Unidad 2 ‐ Ejemplo 1</TITLE></HEAD>
<BODY>
<?php
// Esta variable solo existe en el ámbito principal del script
$texto="Volverán las oscuras golondrinas...";
function ver_texto()
{
echo "<BR>";
echo "No se ve el contenido de la variable \$texto,
pues sólo tiene un ámbito local. Por eso se
muestra el mensaje de error siguiente:";
echo "<BR>";
// Aparece un error en la ejecución de la siguiente sentencia ya que
// esta variable está definida en el ámbito global, no en el ámbito de
// esta función.
echo $texto;
}
// Invocamos la función local anterior
ver_texto();
?>
</BODY>
</HTML>
<HTML>
<HEAD><TITLE>Curso PHP 5 ‐ Unidad 2 ‐ Ejemplo 2</TITLE></HEAD>
<BODY>
- 108 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
<?php
// Esta variable solo existe en el ámbito principal del script
$texto="Volverán las oscuras golondrinas...";
function ver_texto()
{
global $texto;
echo "<BR>";
// Fíjate cómo mostramos escapamos el carácter "$"
echo "Ahora se ve el contenido de la variable
\$texto, pues tiene un ámbito global.";
echo "<BR>";
// Aparece un error en la ejecución de la siguiente sentencia ya que
// esta variable está definida en el ámbito global, no en el ámbito de
// esta función.
echo $texto;
}
// Invocamos la función local anterior
ver_texto();
?>
</BODY>
</HTML>
- 109 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
<HTML>
<HEAD><TITLE>Curso PHP 5 ‐ Unidad 2 ‐ Ejemplo 3</TITLE></HEAD>
<BODY>
<?php
function ver_valor_estatico()
{
echo "<BR>";
// Definimos una variable estática, es decir, no pierde su valor cuando
// acaba la ejecución de la función
static $valor=0;
echo $valor;
$valor++;
}
echo "La variable \$valor dentro de la función ver_valor_estatico() aumenta cada
vez que invocamos la función.";
ver_valor_estatico();
ver_valor_estatico();
ver_valor_estatico();
function ver_valor()
{
echo "<BR>";
// Definimos una variable sin modificador, es decir, pierde su valor cuando
// acaba la ejecución de la función
$valor=0;
echo $valor;
$valor++;
}
echo "<BR><BR>La variable \$valor dentro de la función ver_valor() no aumenta
cada vez que invocamos la función.";
ver_valor();
ver_valor();
ver_valor();
?>
</BODY>
</HTML>
- 110 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
<HTML>
<HEAD><TITLE>Curso PHP 5 ‐ Unidad 2 ‐ Ejemplo 4</TITLE></HEAD>
<BODY>
<?php
// Asignamos a las variables $v y $x los valores 3 y 6 respectivamente.
// Observa que no las declaramos como globales, luego son locales.
$x = 3;
$y = 6;
Function Sumar()
{
/* Observa que las variables $v, $x y $z no son declaradas
como globales pero accedemos a ellas globalmente mediante
la matriz $GLOBALS.*/
$GLOBALS["z"] = $GLOBALS["x"] * $GLOBALS["y"];
}
Sumar();
echo "La variable \$x=3 multiplicada por la variable \$y=6
produce el resultado 18, que asignamos a la variable \$z.";
echo "<BR>";
echo "<BR>";
echo "Luego \$z vale $z.";
?>
</BODY>
</HTML>
- 111 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
Variables de variables
<HTML>
<HEAD><TITLE>Curso PHP 5 ‐ Unidad 2 ‐ Ejemplo 5</TITLE></HEAD>
<BODY>
<?php
// Definimos 2 variables de tipo cadena
$nombre = "María";
$n = "nombre";
// Mostramos información al usuario
echo "La variable \$nombre contiene \"María\".";
echo "<BR>";
echo "La variable \$n contiene \"nombre\".";
echo "<BR>";
// Observa la sintaxis para citar una variable variable: ${$n}.
// Es como si hubiéramos escrito: ${'nombre'}
echo "La variable variable $\{\$n} contiene también ". ${$n} . ".";
?>
</BODY>
</HTML>
- 112 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
if (!empty($num))
echo "La variable \$num contiene $num.";
else
echo "La variable \$num no está definida.";
genera la página
if (isset($num))
echo "La variable \$num ha sido inicializada y contiene $num.";
else
echo "La variable \$num no ha sido inicializada o definida.";
generan la página
A veces, también necesitamos saber de qué tipo son las variables. PHP
dispone con este fin de un conjunto de funciones que empiezan por is_ y que
- 113 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
11. gettype(). Esta última función, más directa que las anteriores, devuelve
directamente el tipo de la variable que se le pasa como argumento. Los tipos
posibles son boolean, integer, double, string, array, object y unknown
(desconocido).
Si sólo se necesita saber de qué tipo es una variable, esta última función es
la más directa y recomendable. En cambio, si se necesita que una variable
sea de un determinado tipo para operar con ella, es más directo y
recomendable utilizar la correspondiente anterior.
- 114 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
En este caso, podemos utilizar la función unset(), que elimina una variable
definida previamente. El nombre de la variable que debe eliminarse se pasa a
la función como parámetro. Por ejemplo, si queremos que $casa ya no esté
definida, podemos escribir unset($casa). Si la operación se ha llevado a cabo
con éxito, la función devuelve el valor verdadero; de lo contrario, devuelve
falso.
Por ejemplo, si queremos que la variable $cosa sea de tipo cadena, debemos
escribir: settype($cosa, "string");. Como puede observarse, el primer
argumento es el nombre de la variable y el segundo (entre comillas dobles) es
el tipo de dato que debe tener: boolean, integer, double, string, array y object.
- 115 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
Constantes
Variables predefinidas
$_POST: matriz asociativa que contiene los datos enviados por los
formularios mediante el método HTTP POST.
$_GET: matriz asociativa que contiene los datos enviados por los
formularios mediante el método HTTP GET.
$_COOKIE: matriz asociativa que contiene las cookies del usuario
visitante. En la Unidad 5 veremos cómo se utiliza.
$_REQUEST: matriz asociativa que contiene los datos enviados por los
formularios y las cookies guardadas en el ordenador del cliente, es decir,
incluye la información de las matrices $_POST, $_GET y $_COOKIE. Los
estudiaremos un poco más adelante en esta Unidad.
$_SERVER: matriz asociativa que contiene información sobre cabeceras,
rutas y ubicaciones de scripts suministrada por el servidor (hay que tener
en cuenta que no todos los servidores suministran todos los datos).
En el Ejemplo 1 de la Unidad 1, hemos visto que usábamos la variable
$_SERVER['HTTP_USER_AGENT'] para obtener la información del
navegador del usuario visitante.
- 116 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
- 117 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
<FORM ACTION=/curso/unidad2.eje07.formulario/index.php METHOD=GET>
<input type='hidden' name='oculto' value='Dato oculto' />
<TABLE border=0 cellpadding=10><TR><TD>
<input type='image' name='imagen' alt='imagen' src='colegio.png' />
</TD><TD>
<TABLE border=0><TR><TD align=right>Nombre: </TD>
<TD><INPUT NAME=nom VALUE=''></TD>
</TR><TR><TD align=right>Apellidos: </TD>
<TD><INPUT NAME=apel VALUE=''></TD>
</TR><TR><TD align=right>Repetidor: </TD>
<TD><input type='checkbox' name='repe'/></TD>
</TR><TR><TD align=right>Sexo: </TD>
<TD>
Hombre <input type='radio' name='Hombre' value='H'/>
Mujer <input type='radio' name='Mujer' value='M'/></TD>
</TR><TR><TD align=right>Curso: </TD>
<TD>
<select name='curso'>
<option>1D</option>
<option selected='selected'>2A</option>
<option>3B</option>
</select></TD>
</TR><TR><TD align=right>Notas: </TD>
<TD><TEXTAREA NAME=des COLS=20 ROWS=5></TEXTAREA>
- 118 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
</TD>
</TR>
</TABLE></TD></TR></TABLE><P>
<INPUT TYPE=submit name='boton' VALUE='Aceptar'><P><P>
</FORM>
</CENTER>
</BODY>
</HTML>
<HTML>
<HEAD><TITLE>Curso PHP 5 ‐ Unidad 2 ‐ Ejemplo 7a</TITLE></HEAD>
<BODY>
<CENTER>
<H1>Introduzca sus datos</H1>
<?php
echo "<FORM ACTION=$_SERVER[PHP_SELF] METHOD=GET>
<input type='hidden' name='oculto' value='Dato oculto' />
<TABLE border=0 cellpadding=10><TR><TD>
<input type='image' name='imagen' alt='imagen' src='colegio.png'
/> </TD><TD>
<TABLE border=0>";
echo "<TR><TD align=right>Nombre: </TD>
<TD><INPUT NAME=nom VALUE=''></TD>
</TR>";
echo "<TR><TD align=right>Apellidos: </TD>
<TD><INPUT NAME=apel VALUE=''></TD>
</TR>";
echo "<TR><TD align=right>Repetidor: </TD>
<TD><input type='checkbox' name='repe'/></TD>
</TR>";
echo "<TR><TD align=right>Sexo: </TD>
<TD>
Hombre <input type='radio' name='Hombre' value='H'/>
Mujer <input type='radio' name='Mujer' value='M'/></TD>
</TR>";
echo "<TR><TD align=right>Curso: </TD>
<TD>
<select name='curso'>
<option>1D</option>
<option selected='selected'>2A</option>
<option>3B</option>
</select></TD>
</TR>";
echo "<TR><TD align=right>Notas: </TD>
<TD><TEXTAREA NAME=notas COLS=20 ROWS=5></TEXTAREA>
</TD>
</TR>
</TABLE></TD></TR></TABLE>";
echo "<P><INPUT TYPE=submit name='boton' VALUE='Aceptar'><P><P>";
- 119 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
if (isset($_REQUEST['boton'])) {
echo "<BR>Contenido de la variable \$_REQUEST: <PRE>";
print_r($_REQUEST);
echo "</PRE><BR><BR><INPUT type='button' value='Volver a la página
anterior'onClick='history.back()'>";
}
?>
</FORM>
</CENTER>
</BODY>
</HTML>
Cuando se ejecuta el código por primera vez, sólo se preguntan los datos del
formulario y no aparecen los mismos en la parte inferior. Es lógico, pues las
variables aún no tienen contenido. Cuando las tres variables tengan algún
contenido, introducido en la página mediante el formulario, se muestra esta
información en la página llamada de nuevo al pulsarse el botón Aceptar y
ejecutarse la orden <FORM ACTION=index.php METHOD=POST>.
- 120 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
Como puedes ver, el servidor que recibe los datos del navegador, los guarda
automáticamente en la matriz $_REQUEST. Por lo tanto, podemos acceder al
contenido de un campo escribiendo, por ejemplo, $_REQUEST[‘nom’].
if (isset($_REQUEST['boton']))
Esta forma de proceder es muy útil para verificar si los datos introducidos son
correctos. Si ponemos las condiciones de corrección dentro del código PHP, la
comprobación se realiza en el servidor, lo cual impide que cualquier usuario
pueda cambiar dichas condiciones, como ocurre en JavaScript.
Ya que podemos cambiar el nombre del fichero PHP que se llama a sí mismo,
en lugar de citar dentro del código expresamente su nombre, podemos usar la
variable de entorno $_SERVER[PHP_SELF] que contiene la dirección de la página
- 121 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
(relativo a la raíz, es decir, sin el nombre del servidor), como hemos hecho, que
guarda el nombre del fichero al ejecutarse.
Esta variable se puede utilizar en las páginas que enlazan consigo mismas. Por
ejemplo, una página puede contener un formulario que envíe los datos a esa
misma página. Para ello, el atributo action del formulario debe contener el
nombre de la página. En vez de poner el nombre de la página, se puede utilizar
$_SERVER[PHP_SELF]. La ventaja es que aunque se cambie el nombre del
fichero, el enlace seguirá funcionando.
- 122 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
etiqueta <FORM>. PHP también define las variables $_POST y de $_GET que
son matrices que contienen únicamente incluyen la información de un método
en concreto.
Hasta ahora hemos pasado valores dentro del mismo script llamándolo dos o
más veces (recursividad). También hemos visto que es infrecuente que una
aplicación hecha en PHP esté integrada por un solo fichero que genere una
única página. Generalmente, las aplicaciones tienen múltiples páginas web que
corresponden a múltiples scripts. Por lo tanto, necesitamos saber pasar
información de unos a otros. ¿Cómo se consigue esto?
<HTML>
<HEAD><TITLE>Curso PHP 5 ‐ Unidad 2 ‐ Ejemplo 7b</TITLE></HEAD>
<BODY>
<CENTER>
<?php
// Leemos todas las variable $_REQUEST
if (!isset($_REQUEST["nom"])) $nom="";
else $nom=$_REQUEST["nom"];
if (!isset($_REQUEST["apel"])) $apel="";
- 123 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
else $apel=$_REQUEST["apel"];
if (!isset($_REQUEST["repe"])) $repe='No';
else $repe='Sí';
if (!isset($_REQUEST["hombre"])) $sexo='Hombre';
else if (!isset($_REQUEST["mujer"])) $sexo='Mujer';
else $sexo='No indicado';
if (!isset($_REQUEST["curso"])) $curso='';
else $curso=$_REQUEST["curso"];
if (!isset($_REQUEST["notas"])) $notas="";
else $notas=$_REQUEST["notas"];
echo "<H2>Los datos introducidos son:</H2><P>";
echo "Nombre: '$nom' <P>";
echo "Apellidos: '$apel' <P>";
echo "Repetidor: '$repe' <P>";
echo "Sexo: '$sexo' <P>";
echo "Curso: '$curso' <P>";
echo "Notas: '$notas' <P>";
echo "<BR><BR><INPUT type='button' value='Volver a la página
anterior'onClick='history.back()'>";
?>
</CENTER>
</BODY>
</HTML>
- 124 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
<A HREF="resultado.php?nom=Pedro&apel=García&des=Alto">
Pulse aquí para enlazar con la otra página </A>
Conviene advertir que detrás de la orden HREF= hay que poner el nombre del
fichero donde está el código de la página a la que hay que pasar los valores,
seguido del signo ?. Detrás de éste, se pone el nombre de la variable cuyo
contenido se debe pasar sin usar el signo $. Si hay más de una variable, se
ponen todas separadas por el signo &, como en el ejemplo anterior.
<A HREF="index.php?nom=Pedro&apel=García¬a=Alto">
Pulse aquí para enlazar con la otra página </A>
<?php
echo "A la variable \$nom le asignamos el valor \"Pedro José.\"<P>";
echo "A la variable \$apel le asignamos el valor \"García de Dios.\"<P>";
echo "A la variable \$nota le asignamos el valor \"Alto y moreno.\"<P>";
$variables_pasadas="nom=".urlencode("Pedro José.").
"&apel=".urlencode("García de Dios.").
"¬a=".urlencode("Alto y moreno.");
?>
<A HREF=resultado.php?<?php echo $variables_pasadas; ?> >Pulse aquí para
enlazar con la otra página </A>
Si ejecutas en Eclipse PDT el nuevo código, verás que los datos se pasan al
página destino respetando los espacios introducidos.
- 125 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
1. La primera forma consiste en llamar a los botones igual (mismo name), y cuya
etiqueta value fuera diferente. Leyendo en el script el contenido de
$_REQUEST['name'], sabrías qué botón se ha pulsado. Fíjate en este ejemplo:
if ($_REQUEST['boton']=="Listado")
{Código;}
elseif ($_REQUEST['boton']=="Buscar")
{Código2;}
else {Código3;}
if (isset($_REQUEST['boton1']))
{Código;}
elseif (isset($_REQUEST['boton2']))
{Código2;}
else
{Código3;}
- 126 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
4. Por último, también se podrían usar otras opciones HTML como un enlace
(puedes poner una imagen de un botón y enlazarlo con el programa pasándole
parámetros) o también puedes usar Javascript. Fíjate en este ejemplo:
<A HREF="visitar.php?operacion=alta">
<img src="image_boton.gif">
</A>
- 127 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
En este curso suponemos que el alumno ya sabe usar esta estructura y nos
vamos a limitar a explicar la sintaxis de las órdenes con las que se aplica en el
código PHP. Por otra parte, en los ejemplos y ejercicios anteriores ya hemos
utilizado estructuras de este tipo esperando que el alumno o alumna las haya
entendido y aplicado correctamente.
Estructura simple
if (expresión)
{sentencia simple o compuesta;}
if ($numero<10)
{$numero*=2;}
En este caso, como 5 es menor que 10, se ejecuta la instrucción, de forma que
$numero pasa a valer 10.
if ($a*$b=25)
{
$a*=4;
$b*=2;
}
- 128 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
En este caso, como 3 ($a) por 5 ($b) resulta 15, que es distinto de 25, no se
ejecuta la instrucción compleja y, por tanto, ninguna de las dos variables
cambiará de valor.
Estructura completa
if (expresión)
{sentencia simple o compuesta;}
else
{sentencia simple o compuesta;}
if ($numero<10)
{$numero*=2;}
else
{$numero*=4;}
if (expresión1)
{sentencia simple o compuesta;}
elseif (expresión2)
{sentencia simple o compuesta;}
elseif (expresión3)
{sentencia simple o compuesta;}
......
else
{sentencia simple o compuesta;}
- 129 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
if ($edad<4)
{$etapa="Infancia";}
elseif ($edad<10)
{$etapa="Niñez";}
elseif ($edad<14)
{$etapa="Pubertad";}
elseif ($edad<21)
{$etapa="Adolescencia";}
elseif ($edad<55)
{$etapa="Adultez";}
elseif ($edad<70)
{$etapa="Vejez";}
else
{$etapa="Ancianidad";}
switch (variable)
{
case valor:
sentencia simple o compuesta;
break;
case valor:
sentencia simple o compuesta;
break;
case valor:
sentencia simple o compuesta;
break;
......
default
sentencia simple o compuesta;
}
- 130 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
switch ($ciudad)
{
case "Lugo":
$comunidad="Galicia";
break;
case "Huesca":
$comunidad="Aragón";
break;
case "Soria":
$comunidad="Castilla León";
break;
case "Almería":
$comunidad="Andalucía";
break;
default:
$comunidad="Otra";
}
El lenguaje PHP ofrece una sintaxis alternativa para alguna de sus estructuras
de control condicionales: permite cambiar la llave de apertura { por dos puntos
(:) y la de cierre } por endif; o endswitch;. Incluso es posible mezclar código
HTML dentro de una estructura condicional del lenguaje PHP. Observa el
ejemplo siguiente:
if ($ciudad == "Soria"):
print "Castilla León";
print "...";
elseif ($ciudad =="Badajoz"):
print "Extremadura";
- 131 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
print "!!!";
else:
print "Sin determinar;
endif;
$var=3;
switch ($var):
case 0:
print "var vale 0";
break;
case 1:
print "var vale 1";
break;
case 2:
print "var vale 2";
break;
default:
print "var es distinta de 0, 1 o 2";
endswitch;
- 132 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
- 133 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
En este caso, hemos cambiado el control donde el usuario indica la edad por
un selector de opciones. En este caso, hemos incluido en la etiqueta option de
cada opción el atributo value que establece el valor que tomará la variable
$_REQUEST['edad'] cuando el usuario pulse el botón “Ver mi etapa”. Así,
evitamos que se pase como valor el literal que aparece como opción en el
selector. Fíjate en esta parte del código fuente:
echo "Selecciona tu edad: <select name='edad'>
<option value=1>Menor de 4 años</option>
<option value=2>Entre 4 y 10 años</option>
<option value=3>Entre 10 y 14 años</option>
<option value=4>Entre 14 y 21 años</option>
<option value=5>Entre 21 y 55 años</option>
<option value=6>Entre 55 y 70 años</option>
<option value=7>Mayor de 70 años</option>
</select>";
Una vez se recibe en la página la variable con la opción seleccionada, usamos
este valor para, con la orden switch, encontrar el texto que corresponda:
switch ($edad) {
case 1:
echo "<P>Infancia";
break;
case 2:
echo "<P>Niñez";
break;
case 3:
echo "<P>Pubertad";
break;
case 4:
echo "<P>Adolescencia";
break;
case 5:
echo "<P>Adultez";
break;
case 6:
echo "<P>Vejez";
break;
case 7:
echo "<P>Ancianidad";
break;
default:
echo "Error al introducir la edad.";
}
- 134 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
Estructuras de bucle
Como ya debe saber la persona que haga este curso, en informática el término
bucle es sinónimo de iteración o repetición, es decir, se refiere al hecho de
repetir o iterar una operación cuantas veces necesitemos o queramos. Así
pues, podemos definir un bucle como la estructura de control que permite que
una instrucción o varias se ejecuten más de una vez mientras se cumpla una
condición dada.
Imaginemos que necesitamos hallar los múltiplos de 5 que hay entre 5 y 1000.
Para hacerlo, utilizamos la variable $multiplos_5, que inicialmente tiene el
valor 1 y se va incrementando de uno en uno. Cuando el número resultante es
múltiplo de 5, se muestra en la página. Es un problema muy sencillo de suma y
división, pero si no se emplease un bucle, exigiría muchas líneas de
instrucciones, como puede verse a continuación.
if ($multiplos_5 mod 5 = 0)
{ echo $multiplos_5;}
$multiplos_5+=1;
- 135 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
Ésta es su sintaxis:
while (expresión)
{sentencia simple o compleja;}
<HTML>
<HEAD><TITLE>Curso PHP 5 ‐ Unidad 2 ‐ Ejemplo 9</TITLE></HEAD>
<BODY>
<H1> <CENTER>Números de 1 a 1.000 múltiplos de 4 </CENTER></H1><P>
<?php
$i=1;
$z=0;
$suma=0;
while ($i<1001)
// Se abre un bucle que repite las operaciones 1000 veces.
{
/* Con esta estructura se salta al principio del bucle
sin ejecutar las intrucciones siguientes cuando
el valor de $i contenga de 500 a 699.*/
/* if ($i > 499 and $i < 700)
{
$i++;
continue;
}
*/
// Si el resto de dividir el número entre 4 es cero...
if ($i % 4 == 0)
{
printf("%04d ‐",$i);
$z++;
$suma+=$i;
} // Aquí acaba la estructura condicional.
/* Si la suma de los múltiplos de 4 es mayor de 100.000
Se sale del bucle. Este código está comentado.*/
/* if ($suma>100000)
{break;}
*/
$i++;
} /* Aquí se cierra el bucle. Se abandona cuando
la variable $i valga 1.001.*/
?>
<CENTER>
<H2>Suma de estos números :
<?php printf("%06d",$suma); ?>
- 136 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
<P>
En total hay
<?php echo $z; ?>
números </CENTER></H2>
</BODY>
</HTML>
if ($suma>100000)
{break;}
Si se quiere ver cómo funciona, basta descomentar estas dos líneas del código
anterior y actualizar la página web.
Como ocurre con las estructuras condicionales, con las estructuras de bucle
también puede utilizarse una sintaxis alternativa, que consiste en sustituir la
primera de las llaves { por dos puntos (:) y la última por la palabra endwhile;.
En este caso la sintaxis es la siguiente:
- 137 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
Dentro de las estructuras de bucle se puede usar la orden continue para que el
flujo del programa salte al principio del bucle sin ejecutar las sentencias que
hubiera entre la orden continue y el cierre del bucle. Por ejemplo, si en el caso
anterior queremos saltar desde el número 500 hasta el 700, debemos insertar
al principio del bucle la estructura condicional siguiente:
Si se quiere ver cómo funciona, basta descomentar estas líneas del código del
ejemplo anterior y actualizar la página web.
Esta orden funciona prácticamente igual que la anterior, con una sola
diferencia: en la estructura while, si la expresión devuelve False la primera vez
que se evalúa, no se entra en el bucle y, por tanto, las sentencias que haya en
su interior no se ejecutan ni una vez. En cambio, en la estructura do...while la
sentencia se ejecuta al menos una vez y, luego, se sigue ejecutando mientras
sea verdadera la expresión.
Ésta es su sintaxis:
Esta orden de bucle permite, al igual que las anteriores, repetir una o varias
instrucciones un determinado número de veces según el resultado de una
expresión.
donde:
- 138 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
for ($i=1;$i<1001;$i++)
for (;$i<1001;)
<HTML>
<HEAD><TITLE>Curso PHP 5 ‐ Unidad 2 ‐ Ejemplo 10</TITLE></HEAD>
<BODY>
<CENTER>
<H2>Relación de los números pares de 0 a 20</H2>
<P>
<H3>
<?php
for ($i = 0; $i <= 20; print " ‐ $i", $i+=2);
?>
</H3></CENTER>
</BODY>
</HTML>
- 139 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
$impares=array(1,3,5,7,9);
foreach($impares as $numimp)
print "Valor del elemento de \$impares: $numimp<P>";
Esta sintaxis hace lo mismo que la anterior, pero aquí disponemos de un dato
más, que es el índice del elemento por el que se va pasando en cada vuelta del
bucle. Veamos cómo funciona en el mismo ejemplo anterior:
- 140 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
$impares=array("uno"=>1,"dos"=>3,"tres"=>5,
"cuatro"=>7,"cinco"=>9);
foreach($impares as $indice=>$numimp)
print "Valor del elemento $indice de \$impares: $numimp<P>";
- 141 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
$ficheros=array("cabecera.php","configura.php","colores.php");
for ($a=0;$a<count($ficheros);$a++)
{
include($ficheros[$a]);
}
- 142 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
Por lo tanto, es mejor utilizar require() para asegurarnos que el fichero existe y
la ejecución del programa no continua. No obstante, se puede utilizar include()
cuando el código no incluido no afecta a otras partes de la aplicación y que no
dañará al resto del programa.
<?
define ("nota1","Insuficiente");
define ("nota2","Suficiente");
define ("nota3","Notable");
define ("nota4","Sobresaliente");
?>
<?
require ("notas.php");
print nota1."<P>";
print nota2."<P>";
print nota3."<P>";
print nota4;
?>
- 143 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
Insuficiente
Suficiente
Notable
Sobresaliente
Los ficheros que pueden citarse como parámetros de las funciones include() y
require() pueden ser otra página web u otros ficheros no interpretados cuyo
formato pueda ser leído por PHP, como los de tipo HTML, CSS, TXT, etcétera.
- 144 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
- 145 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
try
{
// Código que puede lanzar excepciones
}
catch (Exception $excepcion)
{
// Código para controlar la excepción
}
Hacemos notar que puede existir más de un bloque catch asociado al mismo
bloque try siempre y cuando que cada bloque catch espere capturar un tipo
- 146 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
if (!isset($variable))
throw new Exception('no existe la variable $variable');
else
echo " <P><P>Si intentamos imprimir la \$variable: $variable";
} catch (Exception $e) {
echo "<BR><FONT color=red>ERROR - se ha producido el error: " .
$e->getMessage() . "</FONT>";
}
- 147 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
- 148 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
Resumen
- 149 -
Curso de Iniciación a PHP: Unidad 2
- El lenguaje de programación PHP 5 -
- 150 -
MÓDULO 2
UNIDADES DIDÁCTICAS:
Unidad 3
Índice de la unidad:
2. Tratamiento de fechas
3. Tratamiento de matriculas
6. Resumen
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Introducción
En esta Unidad vamos a conocer y saber aplicar correctamente las
principales funciones para tratar cadenas de caracteres.
- 155 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
En la Unidad 2, dentro del apartado Lectura de datos desde una página web,
ya nos hemos referido a la función urlencode(), que preserva los espacios de
un texto para que HTML los respete como tales. Veamos ahora con mayor
detalle esta función y su contraria.
- 156 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Conviene observar que los espacios se representan con el signo +, las letras,
excepto la ñ, y los números se dejan igual, y los demás signos, como <, =, ),
etcétera, son sustituidos por el signo % seguido de dos dígitos en base
hexadecimal.
$c='SELECT+ALL+FROM+tabla+WHERE+nombre%3D%22JUANA%22';
$d=urldecode($c);
echo $d."<P>";
La función nl2br() se utiliza también para dar formato a las salidas en HTML.
Esta función transforma los códigos de salto de línea de los ficheros de texto en
códigos de salto de línea propios de HTML conservando los anteriores. Se
utiliza principalmente para organizar el texto introducido en TEXTAREA de un
formulario. Cambia, pues, la orden \n (salto de línea en un fichero de texto) en
<br> (salto de línea en código HTML) produciendo un salto de línea real, tanto
en el código HTML devuelto al interpretarse el código PHP como en la página
web que se muestra.
<HTML>
<HEAD></HEAD>
<BODY>
<br>
- 157 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Segundo
Tercero"<br>
Segundo <br>
Tercero"
</BODY>
</HTML>
Se puede observar que los saltos de línea del fichero de texto \n mediante la
función nl2br() han sido sustituidos en el código HTML por saltos de línea
<br>.
La función chop() elimina los espacios en blanco que haya al final de una
cadena de caracteres, incluyendo los códigos de fin de línea si los hubiere.
- 158 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
La función ltrim() elimina los espacios en blanco que haya al principio de una
cadena de caracteres.
$i=ltrim($i);
Por ejemplo, si $limpia contiene " casa ", la instrucción echo trim($limpia)
devuelve "casa".
Texto grande
Negrita
- 159 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
- 160 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Ejemplo: si $frase contiene " Deberías comer pizza, refrescos, y helado todos
los días." y necesitamos sustituir la comida no saludable por saludable,
podemos escribir las sentencias siguientes:
La función devolverá la cadena " Deberías comer fruta, vegetales, y fibra todos
los días.".
- 161 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Hay funciones que permiten buscar dentro de una cadena. No se usan con
frecuencia, por lo cual quien lo necesite puede obtener información en el
Manual sobre las mismas. Nos limitamos a enumerar las principales y a indicar
para qué sirven:
- 162 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Por ejemplo,
$variables="nom=Nacho&ape1=Roa&ape2=Bastos",
parse_str($variables);
define las variables $nom, $ape1 y $ape2, y les asigna los valores "Nacho", "Roa"
y "Bastos", respectivamente. Así puede pasarlas a otra página.
Comparar cadenas
- 163 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
- 164 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
En este programa se incluye la mayoría de los ejemplos cuyo código hemos ido
escribiendo junto a las funciones explicadas y otros nuevos que no aparecen
en el texto anterior. Es importante que lo estudies en detalle.
- 165 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Tratamiento de fechas
Se considera como válida una fecha cuando su año está comprendido entre los
años 0 y el 32767, su mes entre 1 y 12, y su día entre 1 y 28 para febrero no
bisiesto, 29 para febrero bisiesto, 30 para abril, junio, septiembre y noviembre,
y 31 para el resto de los meses. Así pues, esta función controla los años
bisiestos al comprobar la validez de una fecha.
La función date() devuelve una cadena de texto que refleja una fecha y una
hora formateadas como se indique en el primer parámetro. En el segundo
argumento puede indicarse la fecha que se quiere mostrar utilizando un valor
de tipo timestamp (instante calculado como número de segundos transcurridos
desde el 1/1/1970, época UNIX). Si no se especifica este segundo parámetro,
se muestra la hora actual.
- 166 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Conviene observar que esta cadena no utiliza categorías locales, por lo cual los
nombres de los días y los meses aparecen en inglés. Para formatear una fecha
y mostrar su resultado, es mejor utilizar la función strftime(), que se explica
después.
- 167 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
6. “year”: año
mktime(horas,minutos,segundos,mes,día,año);
La función strftime() se usa para formatear una fecha teniendo en cuenta las
especificaciones y categorías locales. Así soslayamos los problemas de este
tipo que plantean las funciones date() y getdate().
strftime(cadena de formato,instante);
- 168 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
La función idate() se usa para obtener el número entero de una fecha según el
formato escrito en el primer parámetro.
- 169 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
En este programa se incluye la mayoría de los ejemplos cuyo código hemos ido
escribiendo junto a las funciones explicadas y otros nuevos que no aparecen
en el texto anterior. Te invitamos a que lo estudies en profundidad.
- 170 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Tratamiento de matrices
Hemos visto que una variable tiene un nombre que debe iniciarse por el signo
dólar ($) y un valor de uno de los tipos que soporta PHP. Pero en una variable
sólo podemos introducir un valor. ¿Hay alguna forma de asignar más de un
valor a un identificador? Sí, pero hay que usar matrices (arrays), que son
conjuntos de datos de diferentes tipos que se asignan a un solo nombre.
• Tiene un índice (key o index) para referirse a cada uno de sus elementos.
Este índice, también llamado subíndice, puede ser de tipo numérico entero o de
tipo cadena. En PHP el índice del primer elemento tiene el valor 0, si es de tipo
numérico entero.
• Cada elemento tiene un contenido (value), que puede ser de diferente tipo
que el resto de los elementos.
Suponemos que el alumno o alumna que hace este curso ya está familiarizado
con las matrices, por lo cual damos por explicados los principales conceptos
sobre los arrays. Aquí nos vamos a limitar a resumir brevemente las principales
funciones con las que PHP trata este tipo de datos.
$persona["nombre"] = "Josefa";
$persona["apellido1"] = "Pérez";
$persona["apellido2"] = "Rubio";
$persona["edad"] = 60;
$persona[] = "Josefa";
$persona[] = "Pérez";
$persona[] = "Rubio";
$persona[] = 60;
- 171 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
$persona[0] = "Josefa";
$persona[1] = "Pérez";
$persona[2] = "Rubio";
$persona[3] = 60;
Como puede verse, esta sintaxis utiliza la palabra reservada array, pone entre
comillas los índices de cadena y usa el signo => para asignar el valor a los
elementos.
Para crear una matriz bidimensional con las calificaciones obtenidas por una
alumna en las tres evaluaciones de Matemáticas, Lengua y Dibujo usando
índices alfanuméricos, podemos escribir lo siguiente:
$notas["Mat"]["Pri"] = "Suficiente";
$notas["Mat"]["Seg"] = "Bien";
$notas["Mat"]["Ter"] = "Notable";
$notas["Len"]["Pri"] = "Sobresaliente";
$notas["Len"]["Seg"] = "Sobresaliente2;
$notas["Len"]["Ter"] = "Notable";
$notas["Dib"]["Pri"] = "Notable";
$notas["Dib"]["Seg"] = "Bien";
$notas["Dib"]["Ter"] = "Suficiente";
$notas = array("Mat"=>array("Pri"=>"Suficiente",
"Seg"=>"Bien",
"Ter"=>"Notable"),
"Len"=>array("Pri"=>"Sobresaliente",
"Seg"=>"Sobresaliente",
"Ter"=>"Notable"),
"Dib"=>array("Pri"=>"Notable",
"Seg"=>"Bien",
"Ter"=>"Suficiente"));
- 172 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
$notas[0][0] = 1;
$notas[0][1] = 2;
$notas[0][2] = 3;
$notas[1][0] = 4;
$notas[1][1] = 5;
$notas[1][2] = 6;
$notas[2][0] = 7;
$notas[2][1] = 8;
$notas[2][2] = 9;
Es más breve, si bien hay que saber a qué asignatura y evaluación pertenece
cada índice. En la sintaxis precedente quedaría así:
$notas = array(0=>array(0=>1,1=>2,2=>3),
1=>array(0=>4,1=>5,2=>6),
2=>array(0=>7,1=>8,2=>9));
Como hemos visto, pues, la función array() permite crear e inicializar matrices,
si bien no es la única forma de hacerlo.
Su sintaxis es
La función range() devuelve una matriz que sólo contiene los elementos
indicados entre dos números, ambos incluidos.
Su sintaxis es
Las matrices tienen un puntero que apunta a uno de sus elementos. Cuando se
accede o usa por primera vez una matriz, el puntero está posicionado sobre el
primer elemento. Pero no siempre está sobre este elemento, ya que el puntero
puede haberse movido para leer o modificar el contenido de la matriz.
- 173 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Pero podemos crear una matriz asignándole un índice numérico que no esté
ordenado o incluso un índice de tipo cadena desordenado. Por ejemplo,
podíamos haber creado e inicializado así la matriz $persona:
$persona[10] = "Josefa";
$persona[2] = "Pérez";
$persona[5] = "Rubio";
$persona[1] = 60;
$numero_elementos=count($persona);
for ($i=0; $i < $numero_elementos; $i++)
echo $persona[$i]."<P>";
1. Evitar que se ejecute la función cada vez que se pase por el bucle con la
consiguiente pérdida de tiempo al contar siempre lo mismo.
- 174 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
$datos=array("nombre"=>"Josefa","apellido1"=>"Pérez",
"apellido2"=>"Rubio","edad"=>60);
- 175 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
$numero_elementos=count($persona);
for ($i=0; $i < $numero_elementos; $i++)
{
$indice=key($datos);
echo "Indice:<B> $indice. </B>Contenido: <B>$persona[$i]</B><P>";
next($datos);
}
Su sintaxis es
Su sintaxis es
Ordenar matrices
Su sintaxis es
arsort(matriz);
- 176 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
$palabras=array("1"=>"amazona","2"=>"león","3"=>"zozobra",
"4"=>"sabueso", "5"=>"bondad","6"=>"obús");
$palabras=array("3"=>"zozobra","4"=>"sabueso","6"=>"obús",
"2"=> "león", "5"=>"bondad","1"=>"amazona");
Su sintaxis es
asort(matriz);
$palabras=array("1"=>"amazona","2"=>"león","3"=>"zozobra",
"4"=>"sabueso", "5"=>"bondad","6"=>"obús");
Su sintaxis es
krsort(matriz);
$palabras=array("1"=>"amazona","2"=>"león","3"=>"zozobra",
"4"=>"sabueso","5"=>"bondad","6"=>"obús");
$palabras=array("6"=>"obús","5"=>"bondad","4"=>"sabueso",
"3"=>"zozobra","2"=>"león","1"=>"amazona");
- 177 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Su sintaxis es
ksort(matriz);
$palabras=array("1"=>"amazona","2"=>"león","3"=>"zozobra",
"4"=>"sabueso","5"=>"bondad","6"=>"obús");
Su sintaxis es
shuffle(matriz);
Su sintaxis es
uasort(matriz,función de usuario);
function compara($a,$b)
{
return (substr($a,3,1)>substr($b,3,1))
}
$colores=array("a"=>"blanco","b"=>"azul","c"=>"rojo",
"d"=>"amarillo","e"=>"verde");
uasort($colores,"compara");
for (reset($colores);$indice=key($colores);next($colores))
echo "Indice: <B>$indice</B> Contenido:<B>$colores[$indice]
</B><P>";
- 178 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
$colores=array("e"=>"verde","b"=>"azul","a"=>"blanco",
"c"=>"rojo","d"=>"amarillo");
Su sintaxis es
uksort(matriz,función de usuario);
function compara($a,$b)
{
return (substr($a,3,1)>substr($b,3,1));
}
$colores=array("primero"=>"blanco","segundo"=>"azul",
"tercero"=>"rojo","cuarto"=>"amarillo",
"quinto"=>"verde");
uasort($colores,"compara");
for (reset($colores);$indice=key($colores);next($colores))
echo "Indice: <B>$indice</B> Contenido:<B>$colores[$indice]
</B><P>";
$colores=array("segundo"=>"azul","cuarto"=>"amarillo",
"quinto"=>"verde","primero"=>"blanco",
"tercero"=>"rojo");
Modificar matrices
- 179 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Su sintaxis es
array_merge(matriz1,matriz2...);
Su sintaxis es
$sabores=array("dulce","amargo","salado","soso","menta");
la instrucción
$completa=array_pad($sabores,8,"indeterminado");
genera la matriz
$completa=array("dulce","amargo","salado","soso","menta",
"indeterminado","indeterminado", "indeterminado");
- 180 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
forma que el primero pasa a ser el último y el último pasa a ser el primero.
Hace, pues, lo mismo que la función rsort().
Su sintaxis es
array_reverse(matriz);
Su sintaxis es
donde:
$matriz1=array("muy alto","alto","medio",
"bajo","muy bajo");
$matriz2=array("óptimo","bueno","malo");
array_splice($matriz1,2,2);
genera la matriz
array_splice($matriz1,2);
genera la matriz
- 181 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
$matriz1=array("muy alto","alto");
array_splice($matriz1,-2);
genera la matriz
$matriz1=array(("muy alto","alto","medio");
array_splice($matriz1,2,1);
genera la matriz
array_splice($matriz1,3,3,$matriz2);
genera la matriz
array_splice($matriz1,count($matriz1),3,$matriz2);
genera la matriz
$matriz1=array("muy alto","alto","medio","bajo",
"muy bajo","óptimo","bueno","malo");
$nueva=array_splice($matriz1,3,3,$matriz2);
genera la matriz
$nueva=("bajo","muy bajo");
- 182 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Su sintaxis es
Su sintaxis es
Su sintaxis es
array_count_values(matriz);
Su sintaxis es
array_keys(matriz,valor);
Su sintaxis es
- 183 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
donde
genera la matriz
$nueva=array("medio","bajo");
Su sintaxis es
array_values(matriz original);
Lógicamente, como no puede haber una matriz sin índices, a cada elemento se
le asignan índices numéricos desde 0 en adelante y se eliminan los que tuviera
antes, sean cadenas u otros valores numéricos.
Su sintaxis es
each(matriz original);
- 184 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
$con_indices=array("uno"=>"muy alto","dos"=>"alto",
"tres"=>"medio","cuatro"=>"bajo",
"cinco"=>"muy bajo");
$nueva=array(0=>"tres","key"=>"tres", 1=>"medio","value"=>"medio")
Como puede verse, los dos últimos elementos de la matriz resultante hacen
referencia al contenido del elemento actual de la matriz original. De esta forma
podemos referirnos a su contenido de dos formas: como $nueva[1] o como
$nueva("value").
Su sintaxis es
- 185 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Su sintaxis es
Su sintaxis es
list(lista de variables);
$comunidad=array("CA1"=>"Aragón","CA2"=>"Andalucía",
"CA3"=>"Galicia","CA4"=>"Murcia",
"CA5"=>"Valencia","CA6"=>"Canarias");
while (list($indice,$valor)=each($comunidad))
{
print ("El elemento <B>$indice</B> contiene el valor <B>$valor
</B><P>");
}
PHP permite tratar las matrices como si fueran pilas de tipo LIFO (Last In First
Out, Último en Entrar Primero en Salir) mediante cuatro funciones. El concepto
de pila ya es clásico en Informática y se refiere a la forma de almacenar
información en forma de montón o pila, Si tenemos muchos platos, podemos
almacenarlos apilándolos unos encima de otros. En este caso lo más usual
será que el último plato colocado en la pila sea el primero que se retira. Las
matrices también pueden considerarse como pilas de datos, que son sus
elementos.
Veamos las funciones que nos permiten realizar operaciones de tipo pila con
las matrices.
- 186 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Su sintaxis es
array_pop(matriz);
Su sintaxis es
Su sintaxis es
array_shift(matriz);
Su sintaxis es
La función array_combine() crea una matriz usando una matriz para las claves
y otra para sus valores.
En este programa se incluye la mayoría de los ejemplos cuyo código hemos ido
escribiendo junto a las funciones explicadas y otros nuevos que no aparecen
en el texto anterior. Te invitamos a que lo estudies en profundidad.
- 187 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Las funciones de usuario son bloques de código que pueden ser utilizados en
cualquier momento dentro del código PHP.
function ver_cuadrado_y_doble($num=2)
{
$cuadrado=($num*$num);
$doble=($num*2);
- 188 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
$num1=4;
ver_cuadrado_y_doble($num1);
$num2=5;
ver_cuadrado_y_doble($num2);
$num3=6;
ver_cuadrado_y_doble($num3);
$num4=7;
ver_cuadrado_y_doble($num4);
ver_cuadrado_y_doble();
- 189 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
function hacer_matriz($pal1,$pal2,$pal3)
{
$todas="$pal1,$pal2,$pal3";
$matriz=explode(",",$todas);
reset($matriz);
return $matriz;
}
$texto1="perro";
$texto2="rinoceronte";
$texto3="jirafa";
array_walk(hacer_matriz($texto1,$texto2,$texto3),'ver');
Hay varias cosas que debemos tener en cuenta al crear y utilizar funciones de
usuario. Son éstas:
array_walk(hacer_matriz($texto1,$texto2,$texto3),'ver');.
En el siguiente ejemplo vamos a usar el mismo código, casi, para pasar datos
por referencia.
function cambiar(&$pal1,&$pal2,&$pal3)
{
$pal1=strtr($pal1,'aeiou','.....');
$pal2=strtr($pal2,'aeiou','.....');
- 190 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
$pal3=strtr($pal3,'aeiou','.....');
$pal1=strrev($pal1);
$pal2=strrev($pal2);
$pal3=strrev($pal3);
}
$texto1="perro";
$texto2="rinoceronte";
$texto3="jirafa";
echo "<H3><CENTER>Inicialmente las variables \$texto1,
\$texto2 y \$texto3 contienen:</H3></CENTER>";
echo "<B>$texto1</B><P>";
echo "<B>$texto2</B><P>";
echo "<B>$texto3</B><P>";
echo "<H3><CENTER>Después de la transformación las variables
\$texto1,\$texto2 y \$texto3 contienen:</H3></CENTER>";
cambiar($texto1,$texto2,$texto3);
echo "<B>$texto1</B><P>";
echo "<B>$texto2</B><P>";
echo "<B>$texto3</B><P>";
En este código hemos pasado los datos por referencia, es decir, las variables
que se escriben como parámetros en la función también pueden ser
modificadas en el código PHP de la citada función. Para conseguir esto, hay
que utilizar el signo andpersand (&) delante de los parámetros de la función.
Cuando, después de haber ejecutado la función cambiar(), mostramos los
mismos datos en la página, podemos observar que sí han cambiado como
necesitamos.
- 191 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
- 192 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Sobre este asunto conviene recordar que hay una gran similitud entre lo que
llamamos en informática objetos y los objetos de la vida real. Las clases son un
conjunto o colección de variables que describen algo y de funciones que
acceden a esas variables para actuar sobre ellas. Aplicando este concepto a la
vida real, podemos decir que una clase informática es como un diseño, modelo
o proyecto de algo, que describe ese algo y determina las operaciones o
funcionalidades que pueden llevarse a cabo con eso.
- 193 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Para declarar una clase hay que usar la palabra reservada class seguida del
nombre de la clase que se quiere crear. Todas las instrucciones que integran la
nueva clase deben ir entre los signos {…}. Además, para definir las
propiedades de la clase, las variables tienen que ir precedidas de las palabras
reservadas public, protected o private. Observa el ejemplo siguiente:
class carro_compra
{
public $productos = array();
function __construct($clase="zumo",$numero=5)
{
$this->incluir_productos($clase,$numero);
}
function __destruct()
{
unset($this->productos);
}
function incluir_productos($clase,$numero)
{
$this->productos[$clase]+=$numero;
}
function retirar_productos($clase,$numero)
{
if($this->productos[$clase] > $numero)
{
$this->productos[$clase]-=$numero;
return true;
} else
{
return false;
}
}
}
- 194 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
En este ejemplo definimos una clase llamada carro_compra. Está integrada por
una matriz ($productos), en cuyos elementos se guardan los productos, y dos
funciones para meter (incluir_productos) estos productos en el carro y
sacarlos (retirar_productos) del mismo. Observa que usamos también el
prefijo $this->, que es un puntero especial que nos permite citar cada
elemento de la matriz. Es una forma breve de sustituir el nombre de la clase.
En lugar de codificar la instrucción escribiendo carro_compra->productos
podemos escribir, de forma más breve, $this->productos.
function __construct($clase="zumo",$numero=5)
{
$this->incluir_productos($clase,$numero);
}
donde hacemos que, cada vez que se instancie la clase en un nuevo objeto,
nuestra compra del carro incluya 5 unidades del producto "zumo".
Sin embargo, a partir de PHP 5.3.3, los métodos con el mismo nombre que el
último elemento de una clase en un nombre de espacios no serán más tratados
como un constructor y serán una función más.
function carro_compra($clase,$numero)
{
$this->incluir_productos($clase,$numero);
}
Además, también opcionalmente, las clases pueden incluir una función especial
denominada destructor. Esta función se ejecuta automáticamente cada vez
que se destruye un objeto. Generalmente, se usa para llevar a cabo las
operaciones para liberar los recursos y las variables del objeto. Para que una
función de las creadas dentro de una clase se convierta en destructor, es
preciso que llame __destruct. En el ejemplo anterior el destructor es la función
- 195 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
function __destruct()
{
unset($this->productos);
}
Hemos dicho que las clases son como plantillas o diseños o proyectos,
colecciones de variables, propiedades y funciones que forman un conjunto.
Pero aún no existen como objetos reales. Para ello, hay que instanciar la clase,
es decir, concretarla en un objeto. Los objetos son, pues, instancias a una
clase, es decir, tipos de datos que asumen las variables, propiedades, atributos
y métodos de la clase a la que pertenecen. Cada objeto es único e
independiente de otro que pueda crearse como instancia de la misma clase.
En PHP se crea un objeto usando la palabra reservada new. Con esta sentencia
se asigna a una variable o clave las características de la clase que se instancia.
Por ejemplo, para crear un objeto de la carro_clase debemos escribir
- 196 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
En PHP todas las propiedades y métodos de la clase pueden ser vistos desde
fuera de la misma, siempre y cuando sean son públicos (ver apartado más
abajo sobre Ámbito de variables y funciones). Esto significa que podemos
acceder a ellos desde fuera de la clase citando directamente la propiedad o el
método precedidos del nombre del objeto y del signo apuntador ->. Por
ejemplo, podemos escribir lo siguiente:
// Creamos el objeto.
$mi_compra = new carro_compra;
Observa que los métodos de un objeto son llamados de la misma forma que las
funciones normales pasándoles, cuando los haya, los parámetros que
necesiten. Los métodos son funciones que pertenecen al objeto, por lo que es
preciso indicar el nombre del objeto al que pertenecen. Así pues, la forma de
llamar a un método es igual que la de llamar a una propiedad de un objeto.
Si los métodos devuelven algún valor, podemos asignarlo a una variable. Por
ejemplo, en lugar de mostrar el número de productos del objeto $mi_compra,
podíamos haberlo asignado a la variable $producto_cafe de esta forma:
$producto_cafe = $mi_compra->productos["café"];
Las variables definidas e incluso inicializadas con algún valor dentro de la clase
pueden usarse directamente dentro de la propia clase por las funciones
internas de la misma, sin necesidad de usar el signo ->. En este caso, tendrán
un ámbito exclusivamente local, no serán públicas.
Ejemplos
Ejemplo 1
<?
class suma
{
public $numero1=15;
public $numero2=23;
- 197 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
function opera()
{
echo $this->numero1+$this->numero2;
}
?>
Ejemplo 2
Veamos otro ejemplo parecido, pero algo más complejo, en el que se crean dos
objetos a partir de la misma clase y se amplía el número de métodos.
<?
class resta
{
public $diferencia;
function calcula($x,$y)
{
$this->diferencia=$x-$y;
}
function muestra()
{
- 198 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
echo $this->diferencia,"<br>";
}
$dife->muestra();
$dife1->muestra();
?>
En la segunda parte del código, fuera ya del código donde se crea la clase, se
crean dos objetos de la clase anterior: $dife y $dife1. Además, se usan los
métodos de la misma, enviando en el primero de éstos los operandos con los
que deben realizarse las operaciones de la resta.
Ejemplo 3
<?
class producto
{
public $resul=array();
public $i=0;
function opera($v,$s)
{
$this->resul[$this->i]=$v*$s;
$this->i++;
}
function muestra()
{
foreach($this->resul as $numero)
{
echo $numero,"<br>";
}
- 199 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
}
}
?>
Ten en cuenta que, si llamamos varias veces a una función del mismo objeto,
los resultados de la última llamada se sobrescriben sobre los de la llamada
anterior. Si queremos, pues, conservar la información anterior, será preciso
crear varios objetos o bien usar una matriz, como hemos hecho en el ejemplo
último.
Ejemplo 4
<?
class varios
{
public $valor_inicial=20;
public $numero_1=array();
public $numero_2=array();
public $suma=array();
public $resta=array();
public $producto=array();
public $division=array();
public $control=0;
- 200 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
$this->producto[$a]=$valor_1*$valor_2;
$this->division[$a]=$this->valor_inicial*$valor_1/$valor_2;
function muestra()
{
echo "<table align=center border=1>";
echo "<td>Número 1</td><td>Número 2</td><td>Suma</td>";
echo "<td>Resta</td><td>Multiplicación</td>
<td>División</td><tr>";
foreach($this->numero_1 as $indice=>$valor)
{
$n2=$this->numero_2[$indice];
$s=$this->suma[$indice];
$r=$this->resta[$indice];
$p=$this->producto[$indice];
$d=$this->division[$indice];
echo "<td align=center>$valor</td>";
echo "<td align=center>$n2</td>";
echo "<td align=center>$s</td>";
echo "<td align=center>$r</td>";
echo "<td align=center>$p</td>";
echo "<td align=center>$d</td><tr>";
}
echo "</table>";
}
}
$calculos->muestra($i,$j);
?>
Otros ejemplos
<?
- 201 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
class vehiculo
{
// Propiedades.
public $velocidad, $color, $gama;
// Constructor: asignación de velocidad inicial,
// color y gama.
function __construct()
{
$this->velocidad = 0;
$this->color = "blanco";
$this->gama = "alta";
}
?>
La herencia
PHP puede crear clases extendidas, es decir, clases que pueden heredar las
propiedades (variables) y métodos (funciones) de la clase original, a la vez que
pueden tener otras propiedades y métodos propios. Esta posibilidad recibe en
la POO el nombre de herencia. Así pues, se pueden crear nuevas clases
basadas en otra anterior, cuyas propiedades y métodos son recogidos en la
nueva sin necesidad de repetir todo el código.
- 202 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
A partir de ahora la clase camion tendrá las mismas propiedades y métodos que
vehiculo, además de los propios.
Ejemplo
<?
class vehiculo
{
// Propiedades.
public $velocidad, $color, $gama;
// Constructor: asignación de velocidad inicial,
// color y gama.
function __construct()
{
$this->velocidad = 0;
$this->color = "blanco";
$this->gama = "alta";
}
- 203 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
function __construct()
{
// Es necesario invocar el constructor de la clase padre ya
// que PHP no lo hace automáticamente
parent::__construct()
$this->peso_max=1000;
}
function ver_datos()
{
echo "Los datos del camión son: <BR>".
"velocidad: <b>". $this->velocidad . "</b><BR>"
"color: <b>". $this->color . "</b><BR>"
"gama: <b>". $this->gama . "</b><BR>"
"peso máx: <b>". $this->peso_max . "</b><BR>";
}
?>
Como puedes ver, la clase camion recibe de la clase original vehiculo las
propiedades que tiene ($velocidad, $color y $gama). Por su parte incorpora al
diseño de la clase original otra propiedad (variable $peso_max) y una nueva
función, que es su constructor, llamado en esta caso ver_datos().
Algunos lenguajes POO permiten la herencia múltiple, esto significa que una
subclase puede heredar de varias clases padres. PHP no permite esto y una
subclase solo puede heredar de una clase padre, sin embargo en PHP no hay
ningún tipo de restricción en cuanto al número de subclases que pueden
heredar de una misma clase padre o superclase.
- 204 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Polimorfismo en PHP 5
class coche {
function avanza() {
}
function para() {
}
function girar_derecha() {
}
}
class ciclomotor {
function avanza() {
}
function para() {
}
function girar_derecha() {
}
}
class movimiento {
function mover_adelante($obj) {
$obj->avanza();
}
}
- 205 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Como podemos ver el mismo método del objeto movimiento actúa de dos
formas diferentes dependiendo del objeto que le pasamos como parámetro.
<?
function imprimir_variables()
{
echo $this->variable_publica;
echo $this->variable_protegida;
echo $this->variable_privada;
}
}
- 206 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
function imprimir_variables()
{
echo $this->variable_publica;
echo $this->variable_protegida;
echo $this->variable_privada;
}
}
?>
<?
- 207 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
?>
PHP tiene ya diseñadas algunas funciones útiles para trabajar con clases y
objetos. Son las siguientes:
- 208 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
En PHP también es posible llamar a una función definida dentro de una clase
sin que sea necesario crear previamente un objeto. Para ello, hay que usar el
símbolo :: de la forma siguiente:
clase :: funcion
<?
class X
{
public static function mensaje()
{
echo "Esta función muestra un texto<br>";
}
}
?>
Fíjate que hemos usado la palabra reservada static antes de function dentro
de la clase. Declarar variables o funciones de clases como estáticos, los hace
accesibles desde afuera del contexto del objeto sin necesidad de crear el
objeto previamente. Debido a que los métodos estáticos son accesibles sin que
se haya creado una instancia del objeto, la pseudo variable $this no está
disponible dentro de los métodos declarados como estáticos.
- 209 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
- 210 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
Resumen
- 211 -
Curso de Iniciación a PHP: Unidad 3
- Más funciones del lenguaje PHP -
- 212 -
MÓDULO 2
Unidad 4
Índice de la unidad:
7. Resumen
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Introducción
En esta Unidad vamos a aprender a abrir y a cerrar ficheros, así como
saber mostrar su contenido.
- 215 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Su sintaxis es la siguiente:
if (chdir($directorio_trabajo))
echo "El directorio \"$directorio_trabajo\" existe y ha quedado
fijado como actual.</TD></TR>";
else
die ("El directorio \"$directorio_trabajo\" no existe y no se
ha podido fijar como actual. NO SE CONTINUA LA
EJECUCUION.</TD></TR>");
Abrir un fichero
1. Abrir el fichero.
3. Cerrar el fichero.
- 216 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
En el primer caso esta función devuelve True; en el segundo, False. Por ello,
conviene incluir también esta función dentro de una estructura condicional que
nos informe de la apertura o no del fichero especificado.
Ésta es su sintaxis:
donde
'r' - Abre el fichero para sólo lectura; sitúa el puntero del fichero al
comienzo del mismo.
'r+' - Abre el fichero para lectura y escritura; sitúa el puntero del fichero
al comienzo del fichero.
'w' - Abre el fichero para sólo escritura; sitúa el puntero del fichero al
comienzo del fichero y trunca el fichero con longitud cero. Si el fichero no
existe, trata de crearlo.
'w+' - Abre el fichero para lectura y escritura; sitúa el puntero del fichero
al comienzo del mismo y trunca el fichero con longitud cero. Si el fichero
no existe, trata de crearlo.
'a' - Abre el fichero sólo para escribir (añadir); sitúa el puntero del fichero
al final del mismo. Si el fichero no existe, trata de crearlo.
'a+' - Abre el fichero para lectura y escritura (añadiendo); sitúa el puntero
del fichero al final del mismo. Si el fichero no existe, trata de crearlo.
Veamos un ejemplo:
if (fopen("Ficheros_1.php","r"))
echo "<B>El fichero \"Ficheros_1.php\" existe
- 217 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
y ha quedado abierto.</B>";
else
echo "<B>El fichero \"Ficheros_1.php\" no existe.</B>";
Conviene observar que, al igual que ocurre con las matrices, en los ficheros
también hay un puntero o apuntador que señala una de las posiciones del
fichero.
@fopen("Fichero_1.php","r") or
die("<B>El fichero \"Fichero_1.php\" no se ha podido abrir.</B><P>");
$fichero1="Ficheros_1.php";
$id_fichero1=@fopen($fichero1,"r")
or die("<B>El fichero \"Fichero_1.php\" no se
ha podido abrir.</B><P>");
echo "<B>El fichero \"Ficheros_1.php\" existe y ha quedado
abierto en modo lectura.</B><P>";
- 218 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
$fichero2="Ficheros_2.txt";
$id_fichero2=@fopen($fichero2,"w");
$fichero3="Ficheros_3.txt";
$id_fichero3=@fopen($fichero3,"a");
Cerrar un fichero
Todo fichero que ha sido abierto debe ser cerrado una vez que se ha acabado
de realizar con él las operaciones previstas.
fclose(nombre de identificador);
- 219 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
En este programa se incluyen los ejemplos cuyo código hemos ido escribiendo
junto a las funciones explicadas.
- 220 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Recorrer un fichero
Su sintaxis es la siguiente:
La función ftell() se utiliza para conocer en qué posición del fichero está el
puntero. Tiene esta sintaxis:
- 221 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
fseek("Ficheros_1.php",ftell("Ficheros_1.php")+10);
Esta función es muy útil para leer uno a uno o línea a línea todos los
caracteres de un fichero usando un bucle while (!feof()), como estudiaremos
más adelante.
Hasta ahora sólo hemos accedido a un fichero y nos hemos movido por sus
caracteres, posiciones o bytes, pero en ningún momento hemos visto o
modificado su contenido. Veamos ahora cómo podemos leer un fichero.
La función fread() se utiliza para leer una cadena de un fichero abierto. Tiene
esta sintaxis:
- 222 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Con esta función incluida dentro de un bucle podemos leer línea a línea un
fichero de esta forma:
rewind("Ficheros_3.txt");
while (!feof("Ficheros_3.txt"))
{
$linea=fgets("Ficheros_3.txt",256);
echo "<B>$linea </B><P>";
}
Usando esta función dentro de un bucle que recorra desde la primera posición
hasta la marca de final de fichero puede mostrarse el contenido completo de
éste.
- 223 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
$matriz=file("Ficheros_3.txt");
for ($i=0;$i<count($matriz);$i++)
{
print ("<B> Elemento $i:</B> $matriz[$i]<P>");
}
En este programa se incluyen los ejemplos cuyo código hemos ido escribiendo
junto a las funciones explicadas.
- 224 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Su sintaxis es la siguiente:
En este programa se incluyen los ejemplos cuyo código hemos ido escribiendo
junto a las funciones explicadas y otros nuevos.
- 225 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Copiar un fichero
La función copy() sirve para hacer una copia física de un fichero en otro. Para
poder realizar esta operación, el fichero original no debe estar abierto. Esta
función devuelve el valor lógico True si se ha podido realizar la operación sin
problemas o False si no se ha podido.
Su sintaxis es la siguiente:
Su sintaxis es la siguiente:
- 226 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Su sintaxis es la siguiente:
Las tres operaciones que hemos explicado antes sólo pueden ejecutarse si el
fichero, caso de que exista, tiene el atributo de sólo lectura en estado de False.
Además, es preciso saber otras cosas para poder tratar un fichero, como si
existe o no, si el nombre indicado es un de un fichero o de un directorio y el tipo
de fichero que es. Todo esto lo vamos a ver en este apartado.
- 227 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
En este programa se incluyen los ejemplos cuyo código hemos ido escribiendo
junto a las funciones explicadas y otros nuevos.
- 228 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Abrir un directorio
Su sintaxis es la siguiente:
$id_dircurso=opendir("cursoPHP5");
$id_dircurso= @opendir($_SERVER['DOCUMENT_ROOT']."/curso/")
or die("<B>El directorio \"/curso/\" no se ha podido
abrir.</B><P>");
- 229 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
PHP dispone también de una clase que nos permite acceder y tratar los
directorios. Es la clase dir(). Para abrir un directorio funciona igual que
opendir(). Además, tiene dos propiedades, que son handle (puntero) y path
(camino), y tres métodos, que son read() (leer el nombre de un fichero o
subdirectorio), rewind() (llevar el puntero al principio de directorio) y close()
(cerrar el directorio). Dentro de esta clase pueden usarse, además, las
funciones estándar de manejo de directorios. En la Unidad anterior se explican
las clases, donde el alumno puede repasar estos contenidos, si lo necesita.
Cerrar un directorio
Su sintaxis es la siguiente:
Leer un directorio
Su sintaxis es la siguiente:
Esta función lee el nombre del fichero o directorio sobre el que esté el puntero
y avanza éste al siguiente. Lo normal es usar esta función dentro de un bucle
que vaya leyendo uno a uno los elementos (ficheros o subdirectorios) del
directorio.
$id_dircurso= @opendir($_SERVER['DOCUMENT_ROOT']."/curso/")
or die("<B>El directorio \"/curso/\" no se ha podido
abrir.</B><P>");
$directorio = dir($directorio_trabajo);
// Aquí creamos un objeto de la clase dir().
echo "Puntero: <B>".$directorio->handle."</B><P>";echo "Camino:
<B>".$directorio->path."</B><P>";
while($fichero=$directorio->read())
{
echo "$fichero<P>";
}
$directorio->close();
- 230 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Crear un directorio
En UNIX hay que poner un segundo parámetro (número entero en base octal),
que indica el modo o permisos de creación. No es el caso de este curso. En
Windows debemos poner 0 en este parámetro.
$nuevo_dir="Pruebas";
mkdir($nuevo_dir,0);
crean el directorio “Pruebas” dentro del directorio del proyecto PHP. Desde
Eclipse PDT, con la tecla F5 para actualizar el proyecto, puede comprobarse
que realmente se ha creado.
Si el directorio ya existe, se produce un error. Por eso, al igual que ocurre con
los ficheros, conviene comprobar con la función file_exists() si ya existe,
para no intentar crearlo en este caso.
Borrar un directorio
- 231 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
$directorio="Pruebas";
rmdir($nuevo_dir);
$directorio="Pruebas";
if (file_exists($directorio)) @rmdir($directorio)
or die("<B>El directorio \"Pruebas\" no se ha podido borrar
al no estar vacío.</B><P>");
Si el problema consiste en que no está vacío, hay que eliminar todos los
ficheros con la función unlink() antes de intentar borrar el directorio.
Con PHP el cliente de una página web también puede subir ficheros al servidor
desde su ordenador, es decir, se puede convertir en emisor de información.
- 232 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Vamos a estudiar los pasos que se dan cuando se sube un fichero al servidor:
<?
include "uni4_eje6_configura.php";
echo "<FORM ENCTYPE=multipart/form-data METHOD=post ACTION=$destino>
Nombre del fichero: <INPUT TYPE=File NAME=fichero SIZE=35>
<INPUT TYPE='hidden' name='MAX_FILE_SIZE' VALUE='51200'>
<INPUT TYPE=submit NAME=submit VALUE=Subir_al_Servidor>";
?>
En primer lugar, se usa la orden include para acceder a los datos de un fichero
de configuración (uni4_eje6_configura.php) donde hemos definido e
inicializado algunas variables que usaremos luego en este script, como
$destino, en la que se guarda el nombre del script que debe ejecutarse para
subir el fichero elegido al servidor ("uni4_eje6_sube.php") y otras que se usan
también en este último fichero, como $directorio, que es el destino del fichero
que se sube o $fr_repetida, donde se guarda la frase que se muestra al
usuario si el fichero no se ha podido subir por haber uno ya en el servidor con
el mismo nombre.
2. Recepción de
fichero en el servidor. Al ejecutarse el script
uni4_eje6_sube.php, el servidor recibe este fichero en un directorio temporal,
especificado en la variable de entorno upload_tmp_dir. En nuestro caso, este
directorio es C:\xampp\tmp. Al fichero se le pone un nombre que se inicia por
- 233 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
$fichero_destino="$directorio".$_FILES['fichero']['name'];
move_uploaded_file($_FILES['fichero']['tmp_name'], $fichero_destino);
if ($_FILES['fichero']['size']>51200 or $_FILES['fichero']['size']<1)
{
die ("<B>El fichero ocupa más de 51.200 bytes o no ha indicado
su nombre en el formulario. No puede copiarse.</B>");
}
if ($subir_cualquiera=="SI")
{
$fichero_destino="$directorio".$_FILES['fichero']['name'];
move_uploaded_file($_FILES['fichero']['tmp_name'],
$fichero_destino);
}
- 234 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
unlink($_FILES['fichero']['tmp_name']);
- 235 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Resulta muy cómo seleccionar uno entre varios ficheros si en una etiqueta
SELECT de HTML pueden incluirse todos los ficheros del directorio o sólo
algunos, según su tipo. En el código siguiente puede verse cómo se hace:
while ($fichero)
{
$fichero=readdir($puntero);
if (ereg("$",$fichero))
$origen_html=fopen("uni4_eje7_fichero.html","r");
$destino_txt=fopen("uni4_eje7_fichero.txt","w")
or die ("No se puede crear el fichero destino.");
while (!feof($origen_html))
{
$linea=fgetss($origen_html,256,"");
echo "$linea <P>";
fputs($destino_txt,trim($linea)."\n");
}
- 236 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
En este programa se incluyen los ejemplos cuyo código hemos ido escribiendo
junto a las funciones explicadas en este apartado.
Permisos y propietarios
- 237 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
Resumen
- 238 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
file_exists().
- 239 -
Curso de Iniciación a PHP: Unidad 4
- Operaciones con ficheros y directorios -
- 240 -
MÓDULO 2
Unidad 5
Índice de la unidad:
1. Cookies
2. Cabeceras
4. Gestión de sesiones
5. Control de conexiones
6. Resumen
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Introducción
En esta Unidad vamos a conocer qué son las cookies, para qué se usan y
sus limitaciones. Además, distinguiremos los elementos que integran las
cookies, las crearemos, modificaremos y las borraremos.
Aprenderemos qué son las sesiones de usuario, para qué se usan y cómo se
gestionan.
Las cookies
El sistema de trabajo basado en la comunicación entre cliente y servidor web a
través de Internet puede realizarse sin que sea necesario que el primero, que
hace una solicitud al segundo y recibe de él información, necesite identificarse.
Así lo hemos hecho hasta ahora en los ejercicios de las Unidades anteriores,
más por motivos didácticos que técnicos.
Concepto de cookie
- 243 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Las cookies son usadas con bastante frecuencia por las web que necesitan
llevar un control de los usuarios que las visitan y las consultas que hacen,
sobre todo las que se dedican al comercio electrónico, que almacenan en ellas
los códigos de los productos que consultan, para poder recuperarlos
directamente de este fichero si el cliente vuelve a visitarlas.
Casi todos los navegadores, como Firefox, Chrome o Internet Explorer, sólo
admiten un número máximo de cookies en total (unas 300 dependiendo del tipo
de navegador y sin cumple la directiva de estándar RFC 2109). Además, el
tamaño máximo por cookie es de 4 Kb (4.096 bytes), por lo cual no hay que
tener miedo de que saturen la capacidad del disco duro.
1. Nombre de la cookie.
5. Ruta: por defecto es “/”, es decir, el directorio raíz de las páginas a las que
se devuelve la cookie.
- 244 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Hay que tener en cuenta que, cuando se crea una cookie, es enviada al
cliente, por lo cual no se puede ver hasta que se carga de nuevo la
página. Si se han incluido en el mismo script las dos operaciones (crear cookie
y ver su contenido), debe ejecutarse la página dos veces para que se muestre
el valor que tenga en la segunda carga.
- 245 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
<?php
// La sentencia siguiente es incorrecta
print "<p>Hola mundo</p>\n";
setcookie("frase", "Adios");
?>
<p>Hola mundo</p>
Warning: Cannot modify header information – headers already sent by
(output started at index.php on line 2) in index.php on line 3
Hay que tener en cuenta que unas líneas en blanco al principio del fichero PHP
(antes de la etiqueta <?PHP) también se considera contenido de la página web
y aparecerá el error anteriormente mostrado.
$usuario="Jorge";
setcookie("Nombre", $usuario);
crea una cookie denominada nombre que contiene el valor “Jorge”. También
podíamos haber escrito más directamente
setcookie("Nombre","Jorge");
$pieza="Tornillo";
- 246 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Al crearse la cookie anterior se crea a la vez una variable, que tiene como
nombre el nombre de la cookie ($_COOKIE["Nombre"]) y como contenido su
valor ("Jorge"). Esta variable permanece con un ámbito global hasta que
caduque la cookie.
Las variables que contienen cookies son almacenadas por PHP en un array
denominado $_COOKIE["nombre de la variable"]. De esta forma podemos
leer y mostrar cada cookie si conocemos su nombre:
<?
if ( (isset($_POST["accion"])) && ($_POST["accion"]=="crearcookie") )
{
setcookie("usuario",$_POST["tu_nombre"],time()+60);
echo "Hola, ".$_POST["tu_nombre"].". Bienvenido a nuestra
página web. ¡Actualiza la página para ver
los datos de la cookie almacenada!<P>";
if (isset($_COOKIE["usuario"]) and $_COOKIE["usuario"]!="")
print ("La cookie <B>usuario</B> tiene el valor
<B>".$_COOKIE["usuario"]."</B><P>");
}
else
?>
- 247 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Como hemos visto, a las cookies se les puede poner limitaciones de tiempo
(parámetro expire de caducidad), de camino dentro del cual pueden ser vistas
- 248 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
También podemos asignar varios valores a una misma cookie. Esto es útil y
necesario para no alcanzar el límite de cookies permitido por el navegador del
usuario. Para hacerlo, usamos una matriz que tenga tantos elementos como
valores queramos que contenga la misma cookie. Podemos crearla así:
setcookie("Libro[0]","El médico",time()+300);
setcookie("Libro[1]","Noah Gordon",time()+300);
setcookie("Libro[2]","1992",time()+300);
Si ejecutas este programa puedes ver una página que, mediante una cookie de
tipo matriz, muestra las últimas visitas que ha realizado el visitante a la página
en orden cronológico y permite eliminar las cookies almacenadas en el
navegador:
- 249 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Las cabeceras contienen diversos datos, unos para ofrecer información y otros
para que la página se muestre con determinadas características. Por ejemplo,
pueden incluir textos que deben aparecer, claves para que los buscadores
puedan encontrarlas, información sobre los créditos de la aplicación, control de
la memoria caché de navegador, especificación del tiempo de refresco de la
página, etcétera. En la Cabecera reside información acerca del documento y,
generalmente, el usuario no aprecia su contenido cuando navega en Internet.
Es importante recordar que estos elementos son opcionales, es decir, no son
obligatorios o necesarios para la realización de una página web.
PHP dispone de la función header() para enviar cabeceras HTTP desde este
lenguaje. Su sintaxis es sencilla:
Al igual que pasa con setcookie(), para que funcione correctamente, hay
que poner esta instrucción al principio del script, antes de que se envíe
ninguna salida al navegador del cliente.
- 250 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
La instrucción
header("Content-Type: text/html");
- 251 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
- 252 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Como puede ocurrir que ninguna de las dos variables de entorno citadas
($_SERVER['PHP_AUTH_USER'] y $_SERVER['PHP_AUTH_PW']) esté definida porque
el usuario todavía no se ha validado, conviene utilizar el control condicional if
(!isset( $_SERVER['PHP_AUTH_USER'])) para prevenir posibles errores.
- 253 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
- 254 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Para configurar el servidor Apache para que sea capaz de autenticar a los
usuarios y verificar la autorización del mismo al recurso solicitado, es necesario
realizar las siguientes operaciones:
C:\xampp\apache\bin>htpasswd -c C:\xampp\apache\conf\usuarios
admin
New password: *****
Re-type new password: *****
Adding password for user admin
- 255 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
El parámetro -c se indica que se debe crear un fichero nuevo, por lo que sólo
se deberá poner la primera vez que se crea el fichero. En este caso hemos
almacenado el nuevo usuario “admin” en el directorio “conf” del servidor Web.
Para acceder al nuevo fichero de usuarios creado, abrimos el Panel de control
de XAMPP y pulsamos en la opción mostrada en la siguiente captura de
pantalla:
- 256 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
admin:$apr1$IvxgJjXC$TLlxWN/GZhyGJ7Q2odIcd/
- 257 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
AuthType Basic
AuthName "Curso PHP 5"
AuthBasicProvider file
AuthUserFile C:\xampp\apache\conf\usuarios
Require valid-user
- 258 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Gestión de sesiones
La gestión de las sesiones de usuario facilita considerablemente el trabajo del
desarrollador de una aplicación web para controlar la navegación del usuario
por las páginas del servidor.
session.save_path = "C:\xampp\tmp"
Hay dos maneras de propagar el id del usuario entre las diferentes páginas :
Mediante Cookies.
A través de Parámetros URL.
- 259 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Utilización de la sesión
Una vez está establecida la sesión, las páginas solicitadas por el mismo
navegador pueden guardar y recuperar información del servidor usando
el identificador de usuario. Esta información se guarda hasta que el
usuario o el servidor destruyen la sesión.
session_start();
IMPORTANTE: de igual forma que ocurre con las cookies, hay que tener la
precaución de utilizar la función session_start() antes de empezar a escribir
el contenido de la página, ya que si no PHP mostrará un mensaje de aviso y no
se creará la sesión. Como hemos comentado, el identificador de la sesión se
utiliza en las cabeceras de respuesta HTTP (como Cookie o como parámetro
GET) y las cabeceras se envían antes del texto de la página.
Todas las páginas que quieran gestionar sesiones de usuario deben incorporar
esta función o bien se puede establecer en el fichero php.ini dentro de la
variable session.autostart=1 para no tener que incluir esta sentencia en los
scripts php.
Una vez ejecutada esta función, se crea una cookie en el ordenador del usuario
o se lee la almacenada. Además, se guarda la información de la sesión en un
- 260 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
print(session_name());
y las instrucciones
session_name("Mi_sesión");
print(session_name());
devuelve Mi_sesión.
session_save_path("C:/XAMPP/htdocs/curso/tmp/");
print(session_save_path());
print(session_id());
- 261 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
y las instrucciones
print(session_id());
Todos los datos devueltos por las funciones anteriores sólo permiten crear
sesiones, destruirlas e identificarlas. Pero lo verdaderamente importante es
poder asociar información sobre las operaciones y desplazamientos de un
cliente por una aplicación web. En este apartado vamos a estudiar las
funciones que permiten guardar esta información y acceder a ella
posteriormente.
<?php
session_start();
$_SESSION["usuario"]="Ana";
$_SESSION["hora"]=time();
$_SESSION["pagina"]="$_SERVER["PHP_SELF"];
if (empty($_SESSION["contador"])) {$_SESSION["contador"]=0;}
$_SESSION["contador"]++;
?>
- 262 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
<?php
session_start();
$_SESSION["nombre"] = "Pedro Pablo";
if (isset($_SESSION["nombre"])) {
print "<p>Su nombre es $_SESSION[nombre].</p>\n";
} else {
print "<p>Nombre desconocido.</p>\n";
}
unset($_SESSION["nombre"]);
if (isset($_SESSION["nombre"])) {
print "<p>Su nombre es $_SESSION[nombre].</p>\n";
} else {
print "<p>Nombre desconocido.</p>\n";
}
?>
<p>Nombre desconocido.</p>
- 263 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
session_destroy();
También produce los mismos efectos la sintaxis que incluye como argumento el
identificador de la sesión session_destroy($session_id); e incluso
session_destroy("La sesión del curso");
En este programa se incluyen los ejemplos cuyo código hemos ido escribiendo
junto a las funciones explicadas. Es muy importante que lo estudies en
detenimiento para completar el aprendizaje de este apartado.
- 264 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
- 265 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Control de conexiones
Mientras un usuario está conectado al servidor nos puede interesar conocer las
acciones que realiza e incluso manejar sus decisiones, como la orden de
cancelar la carga de la página. PHP dispone de funciones para conocer y
controlar, hasta cierto punto, las conexiones de los clientes al servidor. En este
apartado vamos a tratar brevemente de este asunto.
Puede ocurrir que sea necesario también hacer que termine la conexión de un
usuario, por ejemplo, cuando no se ha validado correctamente o su consulta
persistente no obtiene resultados.
connection_aborted();
- 266 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
La página solicitada se creó utilizando la información que envió en un formulario. Esta página
no está ya disponible. Como medida de precaución, Internet Explorer no volverá a enviarle la
información.
Para volver a enviar la información y ver esta página Web haga clic en el botón Actualizar.
- 267 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
La función die() hace lo mismo que exit(), pero permite mostrar un mensaje
de texto entre comillas dentro de los paréntesis. La interpretación del código
PHP se interrumpe cuando se encuentra esta orden y se muestra la cadena de
texto que se pone como argumento. Ya la hemos usado también en diferentes
script.
En este programa se incluyen los ejemplos cuyo código hemos ido escribiendo
junto a las funciones explicadas.
- 268 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Sin embargo, si dejamos que se ejecute la página hasta que termine su carga
en el navegador veremos que aparece al final de esta página aparece la
palabra “FIN”:
- 269 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
- 270 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
- 271 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
Resumen
Revalidar usuarios.
- 272 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
- 273 -
Curso de Iniciación a PHP: Unidad 5
- Gestión Usuarios y sesiones -
- 274 -
MÓDULO 3
UNIDADES DIDÁCTICAS:
6. Utilización de MySQL
8. Utilidades prácticas
MÓDULO 3
Utilización de MySQL
Unidad 6
Índice de la unidad:
3. Servidor MySQL
4. Sentencias MySQL
5. Resumen
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Introducción
En esta Unidad vamos conocer a la arquitectura de una aplicación web que
utiliza bases de datos.
- 279 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
En este gráfico aparecen sólo dos de las tres capas (tiers) que integran el
proceso completo de interpretación de una página web.
Pero ahora, llegado el momento, debemos añadir una tercera capa o nivel, que
está integrada por la base o bases de datos con las que conecta el servidor y
de las que extrae la información solicitada por el cliente. Es decir, el servidor,
cuando encuentra en el programa órdenes y funciones de creación,
modificación y consulta de una base de datos, acceda a ella y extrae, elimina o
actualiza esa información, según las operaciones que deban ejecutarse en el
script.
Este tipo de enlace es más rápido y eficaz cuando se trabaja sólo con un
tipo de base de datos, pero exige cambiar el código si se utiliza otro tipo
de base de datos (los nombres de cada función son diferentes, el orden
de los argumentos distinto, las funcionalidades disponibles son distintas,
etcétera). Por ejemplo, Oracle y MySQL tienen APIs (bibliotecas de
funciones que en PHP se denominan extensiones) completamente
diferentes.
- 280 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 281 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 282 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Columnas
Título Autor Editorial
Antonio Muñoz
El invierno en Lisboa Seix Barral
Molina
Fondo de Cultura
¿Tener o ser? Erich Fromm
Económica
Filas
Crónica de una muerte Gabriel García
Bruguera
anunciada Márquez
El lobo estepario Hermann Hesse Anaya Editores
La vida está en otra
Milan Kundera Seix Barral
parte
- 283 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
El tipo o extensión de estos ficheros de base de datos puede ser muy variado,
según el tipo de base de datos utilizado: en dBase es dbf (Data Base File,
Fichero de Base de Datos), en Access mdb, en Interbase db o dbf, en MySQL
myd, etcétera.
Así pues, un fichero de base de datos está integrado por registros, que son
cada uno de sus elementos o componentes (flor, río, libro, coche, amigo,
artículo, cliente, venta o factura). Todos los registros contienen un conjunto de
campos en los que se almacena su información; este conjunto define la
estructura del fichero que integra una base de datos.
Campos
- 284 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
10
11
En las filas aparecen hasta once registros cada uno de los cuales, en este
caso, contiene los cinco campos siguientes: Nombre, Sueldo, Fecha_nac,
Observacion y Foto.
En el ejemplo anterior sólo se han incluido once registros y cinco campos, pero
de hecho en las bases de datos que vamos a usar el número de registros es
ilimitado (depende de la capacidad del soporte) y el de campos es muy amplio,
según el tipo de base de datos usada. Todos los registros tienen los mismos
campos.
NOTA: este apartado no pretende ser una descripción exhaustiva del uso de la
base de datos MySQL y del lenguaje SQL. Tiene como objetivo recordar los
conceptos básicos de la programación con Bases de datos.
El nombre de cada campo puede ser muy largo, si bien recomendamos que en
el orden práctico sea lo más breve posible y tenga algún significado. Debe
atenerse a las reglas de todos los identificadores ya comentadas
anteriormente.
- 285 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
5. Campo de tipo serie. Es un campo donde se puede poner uno de los valores
incluidos en una lista o serie de valores. MySQL admite aquí los valores
siguientes: ENUM y SET.
Hemos dicho que los archivadores de una biblioteca o de una agenda pueden
considerarse, en cierta forma, bases de datos, pues en ellos se almacena
información en un determinado orden y es posible buscar esta información,
consultarla, modificarla o eliminarla con facilidad.
Supongamos ahora que necesitamos seleccionar todas las fichas en las que
aparece la misma editorial. De nuevo la tarea puede parecernos pesada y
- 286 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Hemos puesto este ejemplo para explicar los graves problemas que se derivan
de la gestión manual de la información. Las dificultades aumentan a medida
que crece el volumen de información que debe manejarse y según sean los
criterios de ordenación y selección.
En segundo lugar, el espacio que ocupa una base de datos es mucho menor
que el de cualquier otra forma de archivo manual. En un disco flexible de 3,5
pulgadas puede almacenarse casi un millón y medio de caracteres. En los
discos duros de los actuales servidores el volumen de información puede ser
prácticamente ilimitado.
- 287 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Por ejemplo, en el gráfico siguiente puede observarse una tabla que contiene
diversos datos de personas:
|___________|________|___|_____|
Columnas (Campos)
Generalmente, una base de datos no consta de una sola tabla, sino de varias.
- 288 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Estas tablas no son independientes unas de otras, sino que tienen al menos un
campo común con las otras a través del cual se puede acceder a la información
que contienen todas en conjunto.
Por ejemplo, la base de datos de una biblioteca puede estar integrada por una
tabla de libros, otra de lectores, otra de préstamos y otra de editoriales. El
fichero de libros puede contener la información completa de cada volumen:
título, autor, editorial, año de edición, precio, número de páginas, código de
materia, número de registro, etcétera.
Como puede verse, la información no debe repetirse en todos los ficheros, pero
sí debe poder relacionarse. Por ejemplo, los ficheros de libros y editoriales,
tienen en común el campo EDITORIAL. Los ficheros de libros y préstamos
tienen en común, al menos, el NÚMERO DE REGISTRO del libro prestado,
gracias a lo cual desde uno se puede acceder a los datos del otro. Los ficheros
de lectores y préstamos tienen en común el campo CARNÉ, etcétera.
Hay otro tipo de base de datos que está orientado a los objetos (ODBMS,
Object Oriented DBMS) en las que cada dato es tratado como si fuera un
- 289 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
objeto con sus atributos y métodos. Son de este tipo ObjectStore, Versand,
GemStore, etcétera.
También hay otro tipo que reúne características propias de los dos tipos
anteriores, como PostgreSQL, que son conocidas como ERDBMS (Extended
Relacional DBMS) y como ORDBMS (Object Relational DBMS). PHP puede
tratar prácticamente todas las bases de datos mencionadas.
Diseñar una base de datos consiste en determinar los datos que van a
introducirse en ella, la forma como se van a organizar y el tipo de esos datos.
Además, se debe precisar la forma como se van a solicitar y las clases de
operaciones que hay que realizar con los mismos: aritméticas, lógicas, de
fechas, de carácter, etcétera. También conviene conocer los resultados
concretos que se espera obtener: consultas, informes, actualizaciones,
documentos, etcétera.
- 290 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 291 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
parecido, etcétera.
- 292 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Con el fin de asimilar bien los contenidos sobre las bases de datos, en esta
Unidad sólo se van a explicar de forma sencilla y práctica dos asuntos
importantes:
Con los conocimientos anteriores bien asimilados, será más fácil comprender
con detalle y aplicar correctamente las funciones de PHP que permiten
conectarse a una base de datos, realizar consultas, acceder a los resultados de
las consultas y realizar otras operaciones auxiliares e informativas sobre
cualquiera de las bases de datos que usamos en el curso. También será
posible utilizar el lenguaje de consulta SQL para obtener informes. Esto es
precisamente lo que abordaremos en la Unidad siguiente.
Para tener acceso a las bases de datos, en primer lugar, hay que arrancar el
servidor de datos MySQL.
- 293 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 294 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
se muestra a continuación:
mysql> Si escribimos
mysql> \h
aparece la
- 295 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
MySQL Workbench
http://www.mysql.com/products/workbench/
- 296 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 297 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 298 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 299 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Haciendo clic sobre la nueva conexión “curso PHP 5” conectamos el gestor con
el servidor MySQL local:
- 300 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 301 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 302 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 303 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Así pues, para estudiar este tema, hay que activar el Servidor MySQL de
XAMPP y el Cliente MySQL Workbench para observar lo que pasa.
Para trabajar con una base de datos, en primer lugar hay que crearla. Se hace
con la orden create database seguida del nombre que queremos darle. Para
crear la base de datos “almacen”, escribimos
- 304 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Como puede ocurrir que ya exista un base de datos con el mismo nombre que
la se pretende crear, en cuyo caso aparecería un error de creación de la base
de datos, lo mejor es usar la sintaxis condicional create database if not
exists almacen;. De esta forma, si la base de datos existe, no se crea una
nueva destruyendo la anterior.
La sentencia show databases; se usa para mostrar todas las bases de datos
que haya en el servidor MySQL. Podemos observarlo en la ventana siguiente:
Para poder usar una base de datos, por ejemplo para acceder a sus tablas, es
preciso abrirla antes, operación que se realiza con la sentencia use <nombre de
la base de datos>. Por ejemplo, si queremos abrir la base de datos “almacen”,
escribiremos use almacen y, si se ha podido abrir, el sistema muestra el
mensaje de confirmación Database changed . A partir de aquí, ya podemos
crear tablas en su interior o acceder a los registros y campos de las mismas. Si
usamos la aplicación Cliente MySQL Workbench basta con hacer doble clic
- 305 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
sobre el nombre de la base de datos que queremos usar; veremos que su texto
cambia a negrita indicándonos que está activa.
Una vez que hemos abierto la base de datos “almacen”, vamos a crear tres
tablas sencillas dentro de la misma: “productos”, “compras” y “clientes”. Para
crear la tabla “productos”, damos la orden siguiente:
Con esta orden hemos creado, dentro de la base de datos “almacen”, la tabla
“productos”, que tiene esta estructura:
- 306 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 307 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Por eso, lo más cómodo y productivo es crear ficheros de texto, es decir, script
MySQL, que se guardan donde nos convenga con la extensión sql. En ellos se
escriben las sentencias MySQL que deseamos se ejecuten cuando sea
necesario.
Una vez escrito y guardado el fichero con la extensión sql, se puede ejecutar
de dos formas:
Si las sentencias del fichero sql son muchas y se ejecutan seguidas de forma
que el resultado ocupa más de una pantalla, puede utilizarse el comando More
de la ventana de comandos para detener la ejecución en cada pantalla.
Escribir, entonces,
- 308 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Puede verse el fichero script MySQL con el que hemos creado la base de datos
“almacen” y sus tres tablas “productos”, “compras” y “clientes”. Como no es un
fichero de PHP, no puede interpretarse ni generar una página web, sino sólo
sirve para crear esta base de datos. En la Unidad siguiente aprenderemos a
hacerlo con funciones de PHP.
Con los ejemplos de esta Unidad, referidos todos a MySQL, sólo pretendemos
que el alumno asimile bien los principales contenidos sobre las bases de datos
y sus tablas.
- 309 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
concreto, dentro del propio Cliente MySQL Workbench puede obtenerse ayuda
en inglés sobre los diferentes comandos que admite MySQL. Siempre que lo
necesite, el alumno puede consultarlo si no dispone de otro material que le
resulte más asequible:
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr ...]
[FROM table_references
[PARTITION partition_list]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
- 310 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 311 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
5. Otras funciones, como max() para hallar el valor máximo numérico y min()
para buscar el mínimo.
La cláusula from (desde) indica el origen de las tablas en las que está archivada
la información. Detrás de ella debe escribirse el nombre de la tabla o tablas,
separadas por comas, de las que se quiere obtener la información. Dentro de
ésta puede asignarse un alias o nombre más sencillo, breve y manejable con el
que deseamos referirnos en adelante a cada tabla. Por ejemplo, en las tablas
“productos” y “clientes” hay un campo denominado “nombre”. Para poder
identificar cada uno dentro de una misma cláusula select, debemos escribir:
select productos.nombre,clientes.nombre
from productos,clientes;
De una forma más breve, podíamos haber usado un alias para cada tabla así:
La cláusula where (donde) se usa para seleccionar sólo los registros de una
tabla que cumplan una determinada condición. Por ejemplo, la instrucción
mostrará todos los campos de la tabla “productos” que lleven como contenido
“Pala” en el campo nombre.
select nombre,tipo
from clientes where year(alta)>2013;
- 312 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
select descuento,count(*)
from productos group by descuento;
La cláusula having (si hay) permite limitar el número de grupos poniendo una
condición a la integración de los grupos. Debe usarse sólo detrás de group by
para insertar la condición. Por ejemplo, la instrucción
select descuento,count(*)
from productos group by descuento
having count(*)>1;
Desde la versión 4.0 del servidor MySQL es posible también utilizar las
Subqueries (subconsultas). Es decir, utilizar el resultado de una consulta dentro
de otra. Por ejemplo, la instrucción
- 313 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
obtiene todos los registros de la tabla “clientes” que tengan dado de alta algún
registro en la tabla “compras”.
Además, desde la versión 4.0 del servidor MySQL también es posible también
utilizar las JOINS (uniones). Las joins son básicamente la combinación de dos
o más registros de diferentes tablas usando alguna sentencia de comparación.
Por ejemplo, la instrucción siguiente muestra el mismo resultado que la anterior
Como suele ser muy común confundirse con las distintas combinaciones que
se pueden realizar en las consultas entre varias tablas, vamos a aclarar las
diferencias entre cada una.
Por ejemplo, seleccionamos todos los registros de la tabla clientes que tengan
algún registro dado de alta en la tabla compras:
- 314 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 315 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Para modificar el contenido de los registros de una tabla, hay que utilizar la
sentencia update , que tiene esta sintaxis:
Por ejemplo, si queremos que en la tabla “productos” dentro del campo stock
se ponga el valor 120 en aquellos registros que contengan el valor 100,
podemos usar la instrucción
Error Code: 1175. You are using safe update mode and you tried to
update a table without a WHERE that uses a KEY column To disable safe
mode, toggle the option in Preferences -> SQL Queries and reconnect.
- 316 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Nota: este error aparecerá también para algunas consultas siguientes que no
usan un campo clave para filtrar los registros mostrados.
modifica el actual valor NULL del campo baja con la fecha y hora actuales, e
incrementa el campo deudas_euros en el 10 %, en todos los registros
- 317 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Borrar registros
deja la tabla sin registros, pero no la elimina. No es frecuente eliminar todos los
registros de golpe. Por eso, casi siempre se utiliza la cláusula where para
seleccionar los registros que se desea eliminar. Por ejemplo, la instrucción
Por ejemplo, para eliminar los registros cuyo código de cliente es 1 tanto en la
tabla clientes como en compras escribimos:
- 318 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Los índices están asociados al fichero de los datos y sirven para mantener en
orden los registros de una tabla.
Para cada tabla sólo puede haber un índice primario, que ordena los registros
por uno o más campos al ir introduciendo los registros en una tabla. Un índice
primario identifica los registros de una tabla de forma única. Si se observa las
tres tablas creadas por nosotros, “productos”, “compras” y “clientes”, puede
verse que hemos generado en todos los casos un índice primario por el campo
“codigo”, de forma que éste será el orden natural al ir introduciendo los
registros. Este campo se autoincrementa de forma que, según se van
añadiendo registros, cada uno va tomando un número consecutivo.
La opción unique debe usarse cuando queremos que sólo haya un registro con
la misma clave, de forma que, al introducir otro con la misma, no se permita
hacerlo. La opción fulltext sólo puede usarse con campos de tipo varchar y
text, e indica que se tome su texto completo como clave de ordenación. Si se
usan como claves campos de tipo char y varchar, se puede indicar una
longitud de la clave de ordenación, sin que sea necesario usar el campo
completo. Si se usan como claves campos de tipo blob y text, es
imprescindible indicar una longitud de la clave de ordenación.
- 319 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Para eliminar una tabla hay que usar la sentencia drop table, que tiene esta
sintaxis:
Para eliminar una base de datos hay que usar la sentencia drop database, que
tiene esta sintaxis:
Por ejemplo, si queremos eliminar la base de datos “almacen”, hay que usar la
instrucción
- 320 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Notas importantes
1. Los siete ejemplos de este apartado no son código php, por lo cual no
pueden interpretarse ni generar páginas web como hemos hecho hasta ahora.
3. Por otra parte, la utilidad Cliente MySQL Workbench puede ayudarnos a ver
los datos y a comprender más intuitivamente lo que pasa en cada proceso.
Para ejecutar scripts complejos con varios comandos SQL seguidos de ";"
debes usar la opción del Menú File/Open SQL Script.
- 321 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
Resumen
- 322 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 323 -
Curso de Iniciación a PHP: Unidad 6
- Servidor de Base de datos MySQL -
- 324 -
MÓDULO 3
Unidad 7
Índice de la unidad:
6. Resumen
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Introducción
En esta Unidad vamos a aprender a conectarse al servidor que contiene el
gestor de bases de datos MySQL. Además, crearemos una base de datos,
nos conectaremos a ella y borraremos sus tablas e información, sabiendo
utilizar, además, las funciones que controlan los posibles errores.
Veremos cómo consultar una base de datos utilizando queries en las que
intervengan las principales funciones de PHP para acceder a bases de
datos de tipo MySQL y tratar su información.
Si los alumnos y alumnas del curso han comprendido y asimilado bien los
conceptos fundamentales sobre las bases de datos relacionales, explicados en
- 327 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Para realizar una conexión con una base de datos hay que crear una instancia
de la clase PDO, que se utilizará en todas las consultas posteriores. En todas las
páginas PHP en las que usen consultas a bases de datos es necesario
conectar primero con dicha base de datos.
Para poder acceder a MySQL mediante PDO, debe estar activada la extensión
php_pdo_mysql en el archivo de configuración php.ini. El servidor XAMPP ya
trae por defecto activada esta extensión.
Como hemos visto, para establecer una conexión con el servidor MySQL,
pueden utilizarse hasta cinco datos:
3. Usuario: nombre del usuario que accede a la base de datos. Por defecto es
el que tenga el propietario del servidor. En el servidor XAMPP es “root”.
- 328 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
try {
$db = new PDO("mysql:host=mihost;dbname=
mi_base_de_datos;charset=utf8", joseja, garcia);
$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
$db->setAttribute(PDO::NULL_TO_STRING, true);
} catch (PDOException $e) {
die ("<p><H3>No se ha podido establecer la conexión.
<P>Compruebe si está activado el servidor de bases de
datos MySQL.</H3></p>\n <p>Error: " . $e->getMessage() .
"</p>\n");
}
Hay que tener en cuenta que, para que estos datos sean aceptados como
válidos, es necesario que el servidor se denomine así. Además, el nombre del
usuario, la clave y la base de datos deben haber sido dados de alta en el
servidor MySQL antes de pretender usarlos, ya que el servidor procede a
autentificar estos datos antes de permitir la conexión.
Entre los más importantes podemos encontrar los atributos que controlan el
formato del nombre de los campos de la base de datos (PDO::ATTR_CASE) y el
tipo de errores que mostrarán las consultas a la base de datos
(PDO::ATTR_ERRMODE).
- 329 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Ahora bien, como esta instrucción, si se consigue, devuelve un objeto que sirve
de conexión a la base de datos que después hemos de utilizar, lo mejor es
asignar a una variable el nombre de este identificador, de esta forma:
Por otra parte, puede ser que no se logre conectar, en cuyo caso se produciría
una excepción del tipo PDOException que contiene un mensaje en inglés. Para
optimizar un poco la salida en este caso, lo mejor es utilizar un bloque
try…catch y la función die(), para prescindir del mensaje del sistema, y
mostrar un mensaje personalizado, de esta forma:
try {
$db = new PDO("mysql:host=mihost;dbname=
mi_base_de_datos;charset=utf8", joseja, garcia);
...
} catch (PDOException $e) {
die ("<p><H3>No se ha podido establecer la conexión.
<P>Compruebe si está activado el servidor de bases de
datos MySQL.</H3></p>\n <p>Error: " . $e->getMessage() .
"</p>\n");
}
<?php
- 330 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
define("SERVIDOR", "localhost");
define("USUARIO", "root");
define("CLAVE", "");
<?php
require("uni7_utilidades.php");
$db = conectaBD();
?>
Aunque en este curso sólo se usa el gestor de base de datos MySQL, ponemos
a continuación ejemplos para mostrar cómo que se conectaría a otros tipos de
bases de datos de las que pudiera disponer particularmente el alumno. En todo
- 331 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 332 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Es importante saber que si se borra una base de datos, ésta no sólo pierde el
contenido, sino que, después, no se pueden recuperar sus datos.
Para crear una base de datos de tipo MySQL asociada a una conexión PDO,
hay que utilizar directamente una query, es decir, es necesario ejecutar una
consulta SQL.
- 333 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Array
(
[0] => HY000
[1] => 1007
[2] => Can't create database 'pruebas'; database exists
)
Para eliminar una base de datos de tipo MySQL asociada a una conexión, de
nuevo, hay que usar usando una query, es decir, ejecutar una consulta SQL.
Recordamos que para asimilar bien el método query(), hay que estudiarla
detenidamente en el apartado siguiente, donde se aborda.
Creación de tablas
Como hemos dicho, PHP no dispone de funciones para crear tablas dentro de
las bases de datos. Ésta es más bien una operación del administrador del
servidor que contiene la información. Por ello, quien necesite crear tablas
- 334 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
dentro de una base de datos ha de recurrir a scripts de tipo sql que puede
ejecutar mediante la utilidad MySQL Workbench. De todo ello hemos hablado y
realizado suficientes prácticas en la Unidad 6.
$db->query($consulta);
- 335 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
En este apartado vamos estudiar las funciones que permiten realizar consultas
y elaborar informes a partir de la información contenida en las tablas de una
base de datos. Concretamente, nos vamos a conectar a la base de datos
“biblioteca”, y a servirnos de su información para elaborar los informes y
realizar las queries (consultas) de este apartado.
Ahora necesitamos conocer y recordar las sentencias SQL que vamos a poner
como argumentos de las funciones de PHP. En la Unidad 6 se explicaron las
más importantes. Si el alumno tiene alguna duda sobre la interpretación de las
mismas, puede recurrir a los contenidos de la Unidad anterior o bien consultar
algún manual propio sobre SQL o buscar información en las direcciones de
Internet, indicadas en la Presentación del curso, que hacen referencia a este
lenguaje.
El método query() de la clase PDO envía una sentencia SQL al servidor para
que éste la interprete. Su sintaxis es ésta:
query(consulta)
$resultado = $db->query($consulta);
if (!$resultado) {
- 336 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
$error=$db->errorInfo();
print "<p>Error en la consulta. Error ". $error[2] ."</p>\n";
} else {
echo "<P>Resultado Consulta de la tabla 'libros':<P>
<TABLE border=1><TR><TD>Título</TD><TD>Autor</TD></TR>";
foreach ($resultado as $valor) {
print "<TR><TD>$valor[titulo]</TD>
<TD>$valor[autor]</TD></TR>\n";
}
echo "</TABLE>";
}
$datos_resultado = $resultado->fetchAll();
echo $datos_resultado[0][0].' de '. $datos_resultado[0][1];
echo $datos_resultado[1][0].' de '. $datos_resultado[1][1];
- 337 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
fetch()([tipo_resultado, [sentido_movimiento_puntero
[,cantidad_avance_puntero]]])
Si dos o más campos del resultado tienen el mismo nombre, el último tiene
prioridad. Para acceder a los otros campos con el mismo nombre, hay que
especificar el índice numérico o definir un alias para esos campos. Por ejemplo,
en nuestra base de datos “biblioteca” las tres tablas tiene el campo homónimo
“registro”. Para que en la matriz resultante de la consulta se distingan los tres,
deberíamos escribir así la sentencia SQL:
- 338 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 339 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Array
(
[titulo] => El túnel
[0] => El túnel
[editorial] => Alfaguara
[1] => Alfaguara
[anno_publica] => 2000
[2] => 2000
[paginas] => 128
[3] => 128
[precio_euros] => 5.650
[4] => 5.650
)
Array
(
[titulo] => Instinto de Inez
[0] => Instinto de Inez
[editorial] => Alfaguara
[1] => Alfaguara
[anno_publica] => 2001
[2] => 2001
[paginas] => 189
[3] => 189
[precio_euros] => 20.550
[4] => 20.550
)
...
$consulta="select titulo,editorial,anno_publica,paginas,
precio_euros from libros where editorial='Alfaguara'
order by titulo";
$resultado = $db->query($consulta);
if (!$resultado) {
print "<p>Error en la consulta.</p>\n";
} else {
echo "<P>Resultado Consulta de la tabla 'libros':<P>
<TABLE border=1><TR><TD>Título</TD>
<TD>Editorial</TD><TD>Año publicación</TD>
<TD>Páginas</TD><TD>Precio</TD></TR>";
foreach ($resultado as $valor) {
print "<TR><TD>$valor[titulo]</TD>
<TD>$valor[editorial]</TD>
<TD>$valor[anno_publica]</TD>
<TD>$valor[paginas]</TD>
<TD>$valor[precio_euros]</TD></TR>\n";
}
echo "</TABLE></P>";
echo "<CENTER><H4>En la consulta anterior se han visto
- 340 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Array
(
[native_type] => VAR_STRING
[pdo_type] => 2
[flags] => Array
(
[0] => not_null
)
[table] => usuarios
[name] => Nombre
[len] => 15
[precision] => 0
)
- 341 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
El método exec() de la clase PDO envía una sentencia SQL al servidor para
que éste la interprete y devuelva el número de filas que ha afectado la consulta.
Su sintaxis es ésta:
exec(consulta)
<?php
// Dibuja un botón sencillo mediante una tabla HTML
function boton_ficticio($caption,$url)
{
return "<TABLE border=1 CELLSPACING=0 CELLPADDING=3 bgcolor=black>
- 342 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
<TR><TD bgcolor=\"white\">
<FONT size =\"‐1\">
<a href = \"$url\">$caption</A>
</FONT>
</TD></TR></TABLE>";
}
/* Fijamos las constantes de la conexión al servidor MySQL.
El nombre del servidor es el que admite por defecto el servidor
local.*/
define("SERVIDOR", "localhost");
define("USUARIO", "root");
define("CLAVE", "");
class agenda {
protected $db;
function __construct($BD="") //Esto es el constructor
{
/* Intentamos establecer una conexión con el servidor.*/
try {
if ($BD!='')
$this‐>db = new PDO("mysql:host=" . SERVIDOR .
";dbname=" . $BD .";charset=utf8", USUARIO,
CLAVE, array(PDO::MYSQL_ATTR_INIT_COMMAND
=> "SET NAMES 'utf8'"));
else
$this‐>db = new PDO("mysql:host=" . SERVIDOR.
";charset=utf8", USUARIO, CLAVE,
array(PDO::MYSQL_ATTR_INIT_COMMAND
=> "SET NAMES 'utf8'"));
$this‐>db‐>setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,
true);
// Indicamos como atributo que se debe devolver una cadena
// vacía para los valores nulos
$this‐>db‐>setAttribute(PDO::NULL_TO_STRING, true);
// Si no indicamos la BD es que hay que crearla de nuevo
if ($BD=='') {
// Ejecutamos la SQL de Creación de BD directamente
// en el servidor MySQL.
/* Intentamos crear la base de datos "ejercicios".
* Si se consigue hacerlo, se informa de ello.
* Si no, también se informa y se indica cuál es el
* motivo del fallo con el mensaje de error.*/
$sql = file_get_contents('ejercicios.sql');
$this‐>ejecuta_SQL($sql);
}
} catch (PDOException $e) {
die ("<p><H3>No se ha podido establecer la conexión.
<P>Compruebe si está activado el servidor de
bases de datos MySQL.</H3></p>\n <p>Error: " .
$e‐>getMessage() . "</p>\n");
} // end try
}//end function constructor
function __destruct() //Esto es el destructor
- 343 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
{
if (isset($db)) // Desconectamos de la BD
$db=null;
}//end destructor agenda
// Añadir un contacto a la lista
function add_contacto ($registro, $Nombre, $Apellidos,
$Telefono_oficina, $Telefono_movil,$email,
$direccion, $localidad, $provincia, $codigo_postal,
$telefono, $notas)
{
if ($registro>0)
$sql_script = "UPDATE agenda SET
Nombre='$Nombre', Apellidos='$Apellidos',
Telefono_oficina='$Telefono_oficina',
Telefono_movil='$Telefono_movil',email='$email',
direccion='$direccion', localidad='$localidad',
provincia='$provincia',
codigo_postal='$codigo_postal',
telefono='$telefono', notas='$notas'
WHERE registro=$registro";
else
$sql_script = "INSERT INTO agenda (Nombre, Apellidos,
Telefono_oficina, Telefono_movil, email, direccion,
localidad, provincia, codigo_postal, telefono,
notas)
VALUES('$Nombre', '$Apellidos', '$Telefono_oficina',
'$Telefono_movil','$email', '$direccion',
'$localidad', '$provincia',
'$codigo_postal','$telefono', '$notas')";
$this‐>ejecuta_SQL($sql_script);
}//end add_contacto
// Nº total de contactos
function nume_contacto () {
$sql_script = "SELECT * FROM agenda";
$resultado=$this‐>ejecuta_SQL($sql_script);
// Devolvemos el nº de filas que devuelve la consulta
return $resultado‐>rowCount();
}
// Borrar contactos
function del_contacto($id_to_del) {
$sql_script = "delete FROM agenda where registro=$id_to_del";
$this‐>ejecuta_SQL($sql_script);
}
// Vaciar tabla contactos
function del_all_contacto() {
$sql_script = "delete FROM agenda";
$this‐>ejecuta_SQL($sql_script);
}
// Añadir o modificar contactos
function introduce($id_to_edit, $ver) {
- 344 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
$campos=array(
0=>array(0=>"Nombre",1=>"Nombre",2=>15, 3=>30, 4=>""),
1=>array(0=>"Apellidos",1=>"Apellidos",2=>30, 3=>100, 4=>""),
2=>array(0=>"Telefono_oficina",
1=>"Teléfono oficina",2=>15, 3=>30, 4=>""),
3=>array(0=>"Telefono_movil",
1=>"Teléfono móvil",2=>15, 3=>30, 4=>""),
4=>array(0=>"email",1=>"e‐Mail",2=>40, 3=>200, 4=>""),
5=>array(0=>"direccion",1=>"Dirección",2=>30, 3=>150, 4=>""),
6=>array(0=>"localidad",1=>"Localidad",2=>30, 3=>100, 4=>""),
7=>array(0=>"provincia",1=>"Provincia",2=>30, 3=>60, 4=>""),
8=>array(0=>"codigo_postal",1=>"Cód. Postal",2=>5, 3=>5, 4=>""),
9=>array(0=>"telefono",
1=>"Teléfono personal",2=>30, 3=>100, 4=>""),
10=>array(0=>"notas",1=>"Notas",2=>65, 3=>254, 4=>""));
if ($id_to_edit>0) {
$sql_script = "SELECT Nombre, Apellidos, Telefono_oficina,
Telefono_movil, email, direccion, localidad,
provincia, codigo_postal, telefono, notas
FROM agenda where registro='$id_to_edit'";
$resultado=$this‐>ejecuta_SQL($sql_script);
$filas = $resultado‐>rowCount();
if ($filas==0) { //resultado query vacío
echo "<CENTER>
<TABLE BORDER=1 WIDTH=600 bordercolorlight='#FFFFFF'
bordercolor='#FFFFFF' bgcolor='#C0C0C0'>
<TR><TD ALIGN=CENTER VALIGN=CENTER>
<H2>No se encuentra ningún registro</H2>
</TD></TR></TABLE></CENTER>";
}
else //la búsqueda no es vacía
{
$myrow = $resultado‐>fetchAll();;
for ($i=0; $i < count($campos); $i++)
$campos[$i][4]=$myrow[0][$i];
}
}//end if $id_to_edit>0
if ($ver==0)
echo "<FORM name='form9' method='post'
action=\"index_agenda.php?operacion=exec_alta\">";
echo "<TABLE BORDER='0' cellspacing='10' cellpadding='0'
align='center' width='600'>";
for ($i=0; $i < count($campos); $i++){
echo "<TR><TD bgcolor='teal' align=center width=140>
<FONT size=‐1 color='white'>".$campos[$i][1]."</FONT>
</TD><TD>";
if ($ver==1)
echo "<FONT size=‐1><B>". $campos[$i][4]."</B></FONT>";
else echo "<input type='text' name='".$campos[$i][0].
"' size='".$campos[$i][2]."' value =
\"".$campos[$i][4]. "\"
maxlength='".$campos[$i][3]."'>";
echo "</TD>
</TR>";
- 345 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
}//for
echo "</TABLE><CENTER>";
if ($ver==0) {
echo "<INPUT type='hidden' NAME='registro' value =
'$id_to_edit'>";
if ($id_to_edit>0) //estamos modificando
echo "<INPUT TYPE='SUBMIT' NAME='pulsa'
VALUE=\"Modificar contacto\">";
else echo "<INPUT TYPE='SUBMIT' NAME='pulsa'
VALUE=\"Alta contacto\">";
}
echo "</CENTER>";
if ($ver==0) echo "</FORM>";
}//end Añadir o modificar contactos
// Buscar contactos
function buscar($lo_q_busco) {
if ($lo_q_busco!="")
$sql_script="SELECT * FROM agenda
WHERE apellidos like '%".$lo_q_busco."%'
ORDER BY apellidos";
else $sql_script = "SELECT * FROM agenda order by apellidos";
$resultado=$this‐>ejecuta_SQL($sql_script);
$filas = $resultado‐>rowCount();
if ($filas==0) { //resultado query vacío
echo "<CENTER>
<TABLE BORDER=1 WIDTH=650 bordercolorlight='#FFFFFF'
bordercolor='#FFFFFF' bgcolor='#C0C0C0'>
<TR><TD ALIGN=CENTER VALIGN=CENTER>
<H2>No se encuentra ningún registro</H2>
</TD></TR></TABLE></CENTER>";
}else //la búsqueda no es vacía
echo "<TABLE BORDER='0' cellspacing='1' cellpadding='1'
align='center' width='650'>
<TR>
<TH bgcolor='teal'>
<FONT color='white'>Nombre</FONT>
</TH>
<TH bgcolor='teal'>
<FONT color='white'>Apellidos</FONT>
</TH>
<TH bgcolor='teal'>
<FONT color='white'>Teléfono</FONT>
</TH>
<TH bgcolor='teal' colspan='3'>
<FONT color='white'>Operaciones</FONT>
</TH>
</TR>";
foreach ($resultado as $valor)
{
echo "<TR>
<TD><FONT size='‐1'><B>$valor[Nombre]</B></FONT></TD>
<TD><FONT size='‐1'><B>$valor[Apellidos]</B></FONT></TD>
- 346 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
<TD><FONT size='‐1'>
<B>$valor[Telefono_oficina]</B></FONT></TD>
<TD>".boton_ficticio("Consulta","
index_agenda.php?operacion=
introduce&ver=1&nume=$valor[registro]#ancla")."</TD>
<TD>".boton_ficticio("Editar","index_agenda.php?operacion=
introduce&ver=0&nume=$valor[registro]#ancla")."</TD>
<TD>".boton_ficticio("Borrar","index_agenda.php?operacion=
borrar&nume=$valor[registro]")."</TD>
</TR>";
} // end bucle
echo "</TABLE>";
}//END function Buscar contactos
// Función que ejecuta una SQL
function ejecuta_SQL($sql) {
$resultado=$this‐>db‐>query($sql);
if (!$resultado)
{
echo"<H3>No se ha podido ejecutar la consulta:
<PRE>$sql</PRE><P><U> Errores</U>: </H3><PRE>";
print_r($this‐>db‐>errorInfo());
die ("</PRE>");
}
return $resultado;
} // end ejecuta_SQL
}//END clase agenda
?>
$sql = file_get_contents('ejercicios.sql');
$this->ejecuta_SQL($sql);
Si ejecutas este programa puedes ver una página que, mediante una clase
PDO se gestiona el contenido de una agenda almacenado en la base de datos
MySQL de XAMPP:
- 347 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 348 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Consultas preparadas
- 349 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Las consultas preparadas son tan útiles que la biblioteca PDO de PHP las
puede emular para los tipos de bases de datos que no las admitan. Así, el
código fuente es compatible en todas los tipos de base datos soportadas por
PDO.
<?php
// Insertar un usuario
$nombre = 'Nombre 1';
$apellidos = 'Apellidos 1';
$resultado->execute();
- 350 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
?>
$resultado = $db->prepare($consulta);
// Esta parte del código se puede ejecutar de forma separada
if ($resultado->execute(array(":nombre" => $_POST["nombre"],
":apellidos" => $_POST["apellidos"],
":dni"=>$_POST["dni"],
":fecha"=>"1962-09-10",
":domicilio"=>$_POST["domicilio"],
":localidad"=>$_POST["localidad"],
":provincia"=>$_POST["provincia"],
":sueldo"=>"2000",
":telefono"=>$_POST["telefono"])))
{
print "<p>Registro creado correctamente.</p>\n";
} else {
print "<p>Error al crear el registro.</p>\n";
}
- 351 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 352 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 353 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 354 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Una vez instalado el driver ODBC para MySQL, debemos ejecutar la utilidad
Configurar orígenes de Datos (ODBC) que se encuentra en el Panel de Control
de Windows:
- 355 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 356 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 357 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Veamos cómo podemos conectarnos a una base de datos MySQL que está en
un servidor remoto usando un cliente Windows a través de MS Access. Para
poder hacerlo, es preciso tener instalado en nuestro cliente Windows el driver
MyODBC, así como haber arrancado el servidor MySQL.
- 358 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 359 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Así, Microsoft Access creará una tabla que mantendrá un vínculo a los datos de
origen. Los cambios realizados en los datos en Microsoft Access se reflejarán
en el origen y viceversa.
- 360 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 361 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
6. Una vez vinculadas las tablas de MySQL Server, podremos usarlas como si
de tablas MS Access se tratara. Por ejemplo, si hacemos clic sobre la tabla
"libros", en la parte derecha aparecerán sus registros. Cualquier modificación
que hagamos en la tabla quedará reflejado en el servidor:
Queremos recordar que para poder modificar las tablas desde MS Access
hay que tener los permisos pertinentes como usuarios de MySQL.
Una vez hemos vinculado las tablas con MS Access, pulsamos en la pestaña
"Crear" y seleccionaremos "Asistente para informes". En esta ventana
seleccionamos los campos que deseamos incluir en el nuevo informe:
- 362 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Una vez creada la relación entre los campos de las diferentes tabla volvemos a
crear el informe y pulsamos el botón Finalizar:
- 363 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 364 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
Resumen
Objetivos
- 365 -
Curso de Iniciación a PHP: Unidad 7
- PHP y las bases de datos -
- 366 -
MÓDULO 3
Utilidades prácticas
Unidad 8
Índice de la unidad:
1. Funciones matemáticas
2. Tratamiento de errores
3. Compresión de ficheros
5. Resumen
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Introducción
En esta Unidad vamos a saber aplicar las principales funciones
matemáticas de PHP a las diferentes situaciones en que deban emplearse:
trigonométricas, para hallar redondeos, máximos y mínimos, para calcular
exponentes y logaritmos, así como para generar números aleatorios.
Funciones matemáticas
A lo largo del curso hemos estudiado muchas funciones, si bien no ha sido
nuestra intención abarcar exhaustivamente todas las funciones de PHP. En
este apartado vamos a estudiar las funciones matemáticas de que dispone
PHP, al menos de una forma breve, para que así se conozca que existen y se
puedan utilizar cuando sea necesario.
Funciones trigonométricas
Ejemplo de su
Función Devuelve
sintaxis
El arcocoseno del
acos(float) acos(120.678);
argumento en radianes
El arcoseno del
asin(float) asin(120.678);
argumento en radianes
El arcotangente del
atan(float) atan(120.678);
argumento en radianes
El coseno del argumento
cos(float) cos(120.678);
en radianes
El seno del argumento en
sin(float) sin(120.678);
radianes
- 369 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
El tangente del
tan(float) tan(120.678);
argumento en radianes
Ejemplo de su
Función Devuelve
sintaxis
El valor absoluto (sin
abs(número) abs(-120);
signo) de un número
El valor entero
ceil(float) superior de un número ceil(120.678);
decimal
El valor entero
floor(float) inferior de un número floor(120.678);
decimal
max(120,240); Para
El valor mayor de los
max(números) tipos y argumentos
números dados
ver Manual.
min(120,240); Para
El valor menor de los
min(números) tipos y argumentos
números dados
ver Manual.
El valor de un decimal
round(120.678);
redondeado en la parte
round(float)
entera según lo
round(120.478);
habitual
Exponentes y logaritmos
Ejemplo de su
Función Devuelve
sintaxis
El valor de elevar e
(base del logaritmo
exp(número) natural= exp(3);
2.71828182845904) al
argumento número
El logaritmo del
log(número) log(120.678);
argumento número
El logaritmo en base 10
log10(número) Log10(120.678);
del argumento número
El valor de elevar num1
pow(num1,num2) pow(5,3);
a num2
El valor de la raíz
sqrt(número) sqrt(25);
cuadrada de número
- 370 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Ejemplo de su
Función Devuelve
sintaxis
El mayor valor
getrandmax() getrandmax();
aleatorio generable
mt_rand();
Un valor aleatorio
mt_rand()
mejorado
mt_rand(100,500);
Introduce la
semilla del mt_srand((double)
mt_srand() generador de microtime()
números aleatorios *100000);
mejorado
El mayor valor
mt_getrandmax() aleatorio generable mt_getrandmax();
mejorado
rand();
rand() Un valor aleatorio
rand(500,1000);
Introduce la
srand((double)
semilla del
srand() microtime()
generador de
*1000000);
números aleatorios
Formatear números
- 371 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
- 372 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Tratamiento de errores
Al escribir el código de los programas es fácil cometer bastantes errores, sobre
todo cuando se está aprendiendo y no se conoce con exactitud la sintaxis de
los comandos. En este apartado vamos a enumerar los errores más frecuentes
para aprender a solucionar los problemas que se producen al ejecutar el código
de los scripts PHP. Además, estudiaremos algunas funciones de PHP que nos
ayudarán a detectar y a tratar los posibles errores de nuestros programas.
- 373 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
A continuación, citamos los errores que se repiten con mayor frecuencia, según
nuestra experiencia:
2. Comillas no protegidas.
- 374 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
se interpreta como Le llamó . Hay que proteger las comillas interiores así:
Este fallo es muy frecuente al incluir etiquetas HTML entre comillas dentro de
un literal PHP que va también entre comillas. No es correcto escribir
- 375 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Además de las comillas, hay otros componentes del lenguaje PHP que deben
abrirse y cerrarse, como las llaves {}, los paréntesis () y los corchetes []. Para
detectar esta posible omisión de uno de los dos elementos, generalmente el
segundo (cerrar), lo mejor es tabular (indentar) bien el código, de forma que
resulte fácil e intuitivo encontrar dónde se produce esta ausencia. El colorido
del texto en el Eclipse PDT también puede ayudarnos a detectar este error.
Este problema puede deberse a que Apache está mal configurado, que no es
nuestro caso, o a que la extensión del fichero en el que está archivado el
código no es php.
Si tenemos la instrucción
sólo aparece en el resultado la palabra nombre. Para que se vea nombre dado
es preciso escribir:
- 376 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Se produce este error cuando en la dirección que pasa a la URL aparece algún
espacio en blanco o una variable que lo contiene. Por ejemplo, la referencia
Así se comporta PHP. Para que las variables de una página puedan pasar a
otra nueva es necesario que las pasemos explícitamente, sea como campo
(incluso oculto) de un formulario, sea como asignación dentro de una URL.
- 377 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Puede ocurrir este error cuando estamos llamando a una función no declarada
o declarada en otro fichero que no se incluye en el script actual. También
puede deberse a las opciones incluidas al compilarse los módulos de PHP. En
este caso, lo mejor es mirar qué librerías se han incluido en la versión de PHP
que estamos usando y con qué opciones explícitas se ha compilado.
Ésta es su sintaxis:
Esta función envía un mensaje de error al fichero de tipo log de errores del
servidor web, a un puerto TCP o a un fichero diferente de log. El primer
parámetro (mensaje) contiene la cadena con el texto del mensaje de error. El
segundo parámetro (tipo de mensaje) indica el lugar al que debe dirigirse
mediante uno de estos cuatro valores:
La función () se usa para indicar el nivel de las incidencias que deben ser
registradas cuando se producen errores en la interpretación de un script.
Ésta es su sintaxis.
error_reporting([nivel])
El nivel se expresa mediante un número entero donde cada bit tiene su propio
significado. A continuación aparecen algunos de los valores posibles y su
significado:
- 378 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Notamos que en PHP 5 se ha aumentado esta lista para mostrar más tipos de
errores y poder encontrar los errores del código más fácilmente.
error_reporting(7);
en cuyo caso se mostrarán los mensajes de error de los tres primeros niveles
(1+2+4). Si escribimos
error_reporting(15);
Si ejecutas este programa puedes ver una página que usa estas dos funciones
para detectar y controlar los errores de un programa estableciendo diferentes
niveles y procedimientos para mostrar y escribir los mensajes de error en
ficheros.
- 379 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
- 380 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Compresión de ficheros
En este apartado vamos a estudiar la compresión y descompresión de ficheros
utilizando funciones de PHP.
Ésta es su sintaxis:
- 381 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Ésta es su sintaxis:
Ésta es su sintaxis:
Ésta es su sintaxis:
gzseek ($id_fichero,850 );
Ésta es su sintaxis:
- 382 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Ésta es su sintaxis:
Ésta es su sintaxis:
Ésta es su sintaxis:
- 383 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Ésta es su sintaxis:
Ésta es su sintaxis:
Ésta es su sintaxis:
Las función gzpassthru() lee desde la posición del puntero hasta el final de un
fichero de tipo gzip (el remanente) y escribe los resultados descomprimidos en
la salida estándar. Al acabar la lectura, el fichero leído queda cerrado.
Ésta es su sintaxis:
- 384 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Si ejecutas este programa puedes ver una página que, usado las funciones que
permiten crear ficheros comprimidos, así como descomprimirlos y leerlos. Fíjate
que, una vez ejecutado el proyecto, si lo actualizas con el atajo de teclas o [F5]
verás que aparece el fichero comprimido comprimido.txt.gz dentro de la
carpeta del proyecto que puedes abrir con cualquier programa de
descompresión de archivos:
- 385 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Así pues, para poder comprobar si el documento que hemos creado con las
funciones PDF de PHP está correctamente realizado, es preciso tener instalado
en nuestro ordenador alguna de las versiones del programa Acrobat Reader.
Hacemos notar que también existen otras aplicaciones gratuitas para abrir
documentos PDF en el mercado.
- 386 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
- 387 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
- 388 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
- 389 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
- 390 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
extension=php_xmlrpc.dll
extension=php_xsl.dll
extension=php_pdflib.dll
// En el caso de Linux y MAC sería esta línea en lugar de la
anterior
extension=php_pdflib.so
- 391 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
#binbuild LD_LIBRARY_PATH="/opt/lampp/lib/:$LD_LIBRARY_PATH"
#binbuild export LD_LIBRARY_PATH
Notamos que, si usas un sistema operativo Linux x64, XAMPP sólo está
disponible para 32 bits y, por lo tanto, debes instalar la versión de 32 bits de la
biblioteca PDFLib.
- 392 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
#DYLD_LIBRARY_PATH
Para utilizar ficheros PDF en php usando esta librería es necesario definir
primero un objeto que será el que, con sus propiedades y funciones, nos
permita crear y abrir este tipo de ficheros. La clase en cuestión se llama
pdf_new, y para usarla debemos escribir:
- 393 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
if ($pdf->begin_document($fichero_pdf, "") == 0) {
die("<b>No se puede crear el fichero pdf: '$fichero_pdf'.
<br>Compruebe que no lo tiene abierto con otra
aplicación.</b> Error: ".$pdf->get_errmsg());
}
end_document(lista opciones)
end_document("");
$pdf->set_parameter("textformat", "utf8");
Con esta orden indicamos que el formato del documento crear es UTF8. Hay
que tener en cuenta que el código fuente de los ejemplos del curso está
guardado con el juego de caracteres UTF8 para que sea compatible con los
diferentes sistemas operativos disponibles en el mercado. Por lo tanto, para
que los caracteres especiales como tildes y la letra “ñ” aparezcan
correctamente en el fichero final, es necesario configurarlo de esta manera.
- 394 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
- 395 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Hay que tener en cuenta que los valores ancho (width) y alto (height) de la
página determinan el tamaño de la misma, que tendrá una anchura desde 0
hasta x y una altura desde 0 hasta y. Cuando queramos escribir, colocar una
imagen o dibujar una figura en una posición determinada dentro de una página,
será necesario indicar las coordenadas x,y dentro de estos límites. Además,
hay que tener en cuenta que al situar algo (texto, imagen, gráfico, etcétera) en
una página se empieza a contar como en la pantalla del ordenador: de abajo
arriba y de izquierda a derecha.
tendrá la anchura y la altura de una hoja DINA4 (210 mm x 297 mm). Es este
caso hemos usado el parámetro “lista opciones” para incluir el tamaño de la
página.
- 396 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
end_page_ext(lista opciones)
Por ejemplo, con las dos instrucciones siguientes abrimos una página y la
cerramos:
- 397 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Así pues, esta función controla el color mediante combinación rgb (red=rojo,
green=verde y blue=azul). Si se pone 0.0 en los tres argumentos, se obtiene el
color negro. Si se pone 1.0 en uno solo de los tres argumentos, se consigue el
rojo, el verde o el azul, respectivamente. El valor de cada argumento, si no es
0, puede estar comprendido entre 0.000001 y 1.0. Además, se pueden
combinar los tres colores básicos para obtener los colores complementarios.
pdf_show(texto);
continue_text(texto);
set_value("leading", espaciado);
- 398 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
set_text_pos(coordenada x,coordenada y)
Una vez dada esta orden, ya podemos estar seguros de que la siguiente
escritura se producirá a partir de este punto.
Esta orden resulta más cómoda que las anteriores, pues permite a la vez
escribir un texto e indicar dónde debe aparecer. Ya hemos indicado que los
valores de las coordenadas deben estar dentro del rango asignado a la
anchura y a la altura de la página.
Si ejecutas este programa puedes ver una página que muestra un enlace al
documento creado:
- 399 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
En este Ejemplo puedes estudiar el código comentado para ver cómo hemos
usado las funciones que permiten crear este tipo de documentos.
- 400 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
La función setlinecap() especifica cómo deben ser los extremos de una línea.
Tiene esta sintaxis:
setlinecap(valor)
La función setlinejoin() especifica cómo deben ser las esquinas de una línea.
Tiene esta sintaxis:
setlinejoin(valor)
El parámetro valor puede tener los valores siguientes: 0=en forma de ingletes,
1=redondeadas, 2=en ángulo oblicuo.
setlinewidth(valor)
moveto(coordenada x, coordenada y)
La función curveto() dibuja una línea curva según los puntos indicados. Tiene
esta sintaxis:
La función lineto() dibuja una línea recta según los puntos indicados. Tiene
esta sintaxis:
- 401 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
lineto(coordenada x, coordenada y)
closepath()
La operación “cerrar el camino actual” significa que se dibuja una línea desde el
punto actual hasta el punto donde se inició la primera línea.
pdf_ stroke()
- 402 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Además, es interesante ver cómo hemos utilizado las cabeceras en PHP para
volcar al navegador del usuario con las siguientes sentencias:
- 403 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
<?
$imagen=$pdf->load_image("jpeg",$fic_imagen,"");
if (!$imagen) {
die("No existe el fichero de la imagen ".$fic_imagen);
}
...
$pdf->fit_image($imagen,0,0, "");
$pdf->close_image($imagen);
?>
- 404 -
Curso de Iniciación a PHP: Unidad 8
- Utilidades prácticas -
Resumen
- 405 -