Está en la página 1de 331

© Edita: EDITORIAL CEP S.L.

© Ángel del Río Medina

C/ Dalia nº 20. Polígono El Lomo

28970 Humanes de Madrid (Madrid)

Tlf. 902 108 209


Edición: junio 2012

ISBN libro: 978-84-681-3066-8 / ISBN pdf: 978-84-681-4872-4


Depósito Legal: M-19830-2012
Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta
obra sólo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la
ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita
fotocopiar o escanear algún fragmento de esta obra

Imprime: PUBLICEP, S.L.

C/ Violeta nº 19. Polígono El Lomo

28970 Humanes de Madrid (Madrid). Tfl. 91 609 4176


Autor
Ángel del Río Medina
AGRADECIMIENTOS
Agradezco a mi esposa la paciencia que ha tenido con mi interminable libro.
Y a mi hermana la oportunidad de aprender y trabajar con este interesante lenguaje llamado php.
Por ultimo pero no por eso menos importante mi agradecimiento a mi editor por darme la oportunidad de publicarlo.
Índice
MODULO 1: INTRODUCCIÓN A LA PROGRAMACIÓN

TEMA 1. INSTALACIÓN DEL ENTORNO DE TRABAJO ..................................................................17

- Instalación del entorno de trabajo

LO QUE HEMOS APRENDIDO ................................................................................................................................25

TEMA 2. MI PRIMER PROGRAMA ..................................................................................................27

- Mi primer programa

LO QUE HEMOS APRENDIDO ................................................................................................................................31

TEMA 3. EDITORES E IDES PARA PHP ........................................................................................33

- Introducción

- Kate

- Kdevelop

- Editra

- Gphpedit

- Eclipse

LO QUE HEMOS APRENDIDO ................................................................................................................................39

MODULO 2: CONCEPTOS FUNDAMENTALES DE LA PROGRAMACIÓN EN PHP

TEMA 1. ESTRUCTURA DE UN PROGRAMA EN PHP ....................................................................43

- Estructura de un programa en PHP

- Estructuras de control en php y programación sin goto

- Procedimientos y funciones

LO QUE HEMOS APRENDIDO ................................................................................................................................53


MODULO 3: ESTRUCTURA DE LOS PROGRAMAS EN PHP

TEMA 1. ESTRUCTURA DE LOS PROGRAMAS EN PHP ................................................................57

- Estructura de los programas en PHP

LO QUE HEMOS APRENDIDO ................................................................................................................................67

MODULO 4: TIPOS DE DATOS EN PHP

TEMA 1. VARIABLES DE ENTORNO Y SÚPER GLOBALES............................................................71

- Introducción

- $HTTP_USER_AGENT

- $HTTP_ACCEPT_LANGUAGE

- $HTTP_REFERER

- $PHP_SELF

- $HTTP_GET_VARS

- $HTTP_POST_VARS

- $HTTP_COOKIE_VARS

- $PHP_AUTH_USER

- $PHP_AUTH_PW

- $REMOTE_ADDR

- $DOCUMENT_ROOT

- $PHPSESSID

- Variables súper globales

- Variables constantes

LO QUE HEMOS APRENDIDO ................................................................................................................................77


TEMA 2. VARIABLES EN EL ENTORNO DE PROGRAMACIÓN ......................................................79

- Definición

- Integer (Entero)

- decoct

- dechex

- decbin

- octdec

- hexdec

- bindec

- base_convertí

- Floating Point number (números en coma flotante)

- String (cadena de caracteres)

- Array

- Objeto

LO QUE HEMOS APRENDIDO ................................................................................................................................91

TEMA 3. FUNCIONES ....................................................................................................................93

- gettype

- Cambio de tipo o tipado

- Forzado

- Integer (entero)

- Formatos de base

LO QUE HEMOS APRENDIDO ..............................................................................................................................105


MODULO 5: ARITMÉTICA Y LÓGICA EN PHP

TEMA 1. LA ARITMÉTICA Y SUS OPERADORES EN PHP ............................................................109

- Suma

- Resta

- Multiplicación

- División

- Módulo

- Incremento

- Decremento

- Operadores de asignación

- Operadores de comparación

- Operador de ejecución

LO QUE HEMOS APRENDIDO ..............................................................................................................................121

TEMA 2. OPERADORES LÓGICOS ..............................................................................................123

- Y lógico

- O lógico

- Xor

- Not

LO QUE HEMOS APRENDIDO ..............................................................................................................................127

MODULO 6: ESTRUCTURAS DE CONTROL DE PROGRAMA

TEMA 1. ESTRUCTURAS DE CONTROL DE PROGRAMA ............................................................131

- Condición (IF)

- Switch

- Bucles

LO QUE HEMOS APRENDIDO ..............................................................................................................................139


MODULO 7: ARCHIVOS

TEMA 1. MANEJO DE ARCHIVOS DE TEXTO ..............................................................................143

- Introducción

- Archivos de texto

- Lectura de un archivo de texto

LO QUE HEMOS APRENDIDO ..............................................................................................................................153

TEMA 2. TRABAJANDO CON WORD............................................................................................155

- {\\rtf1 - inicio de cualquier documento RTF

- {\\fs20 texto} - Tamaño del texto, en el ejemplo 20

- \\par - retorno de carro, enter

- {\\b texto} ? poner negrita

- {\\qr} - Alineación a la derecha

- {\\ql} - Alineación a la izquierda

- {\\qc} - Alineación centrada

- {\\qj} - Alineación justificada

- {\\i texto} - Tipo de letra itálica

- {\\ul texto} - Subrayado

LO QUE HEMOS APRENDIDO ..............................................................................................................................161

TEMA 3. TRABAJANDO CON EXCEL ..........................................................................................163

- Trabajando con Excel

LO QUE HEMOS APRENDIDO ..............................................................................................................................167

TEMA 4. ARCHIVOS PDF ............................................................................................................169

- Archivos pdf

LO QUE HEMOS APRENDIDO ..............................................................................................................................175


TEMA 5. TRABAJANDO CON SQLITE, COMO BASE DE DATOS ..................................................177

- Trabajando con SQLite, como base de datos

LO QUE HEMOS APRENDIDO ..............................................................................................................................185

TEMA 6. TRABAJANDO CON MYSQL, COMO BASE DE DATOS ..................................................187

- Trabajando con MySQL, como base de datos

LO QUE HEMOS APRENDIDO ..............................................................................................................................197

TEMA 7. TRABAJANDO CON MSACCESS, COMO BASE DE DATOS ..........................................199

- Trabajando con MSAccess, como base de datos

LO QUE HEMOS APRENDIDO................................................................................................................................211

MODULO 8: INTRODUCCIÓN A LA PROGRAMACIÓN

TEMA 1. PLANIFICACIÓN DE UNA APLICACIÓN EN PHP ............................................................215

- Introducción

- Definición de los objetivos generales de la aplicación

- Plantear como conseguir dichos objetivos

- Analizar la creación de la base de datos y la relación entre las tablas

- Organizar adecuadamente los archivos

LO QUE HEMOS APRENDIDO ..............................................................................................................................225

TEMA 2. DESARROLLO DE LOS DIFERENTES MENUS ..............................................................227

- Desarrollo de los diferentes menus

LO QUE HEMOS APRENDIDO ..............................................................................................................................237

TEMA 3. PLANTILLAS ................................................................................................................239

- Plantillas

LO QUE HEMOS APRENDIDO ..............................................................................................................................243


MODULO 9: BIBLIOTECA DE PROCEDIMIENTOS Y FUNCIONES EN PHP

TEMA 1. AMPLIACIÓN DE PLANTILLAS ......................................................................................247

- Ampliación de plantillas

LO QUE HEMOS APRENDIDO ..............................................................................................................................257

TEMA 2. LIBRERIAS ....................................................................................................................259

- Conectar.PHP

- Cuestion.PHP

- Obtenerfila.PHP

- Selecionafamilia.PHP

- Seleccionasubfamilia.PHP

LO QUE HEMOS APRENDIDO ..............................................................................................................................265

TEMA 3. SCRIPTS EN PHP ..........................................................................................................267

- Introducción

- Familias

- Subfamilias

- Clientes

- Facturas a clientes

LO QUE HEMOS APRENDIDO ..............................................................................................................................285

MODULO 10: OPTIMIZACIÓN DE PROGRAMAS EN PHP

TEMA 1. OPTIMIZACIÓN DE PROGRAMAS EN PHP ....................................................................289

- HTML frente a PHP

- Optimizar las variables

- Liberar memoria

- Evitar bucles

- Organización del código


- El uso de la supresión de errores

- Uso de comillas dobles y simples

- Uso del if

- Uso de alias

- Imprimir textos

- Uso de expresiones regulares

- Gestión de la memoria

LO QUE HEMOS APRENDIDO ..............................................................................................................................295

MODULO 11: DEPURACIÓN

TEMA 1. MAGUMA ......................................................................................................................299

- Introducción

- Maguma

LO QUE HEMOS APRENDIDO ..............................................................................................................................303

MODULO 12: OBJETOS

TEMA 1. OBJETOS ......................................................................................................................307

- Objetos

LO QUE HEMOS APRENDIDO ..............................................................................................................................313

TEMA 2. CONSTRUCTORES Y DESTRUCTORES. VISIBILIDAD. HERENCIA DE OBJETOS ..........315

- Constructores y destructores. Visibilidad. Herencia de objetos

LO QUE HEMOS APRENDIDO ..............................................................................................................................329


MÓDULO I
Introducción a la programación

TEMA 1: Instalación del entorno de trabajo


TEMA 2: Mi primer programa
TEMA 3: Editores e IDES para PHP

OBJETIVOS GENERALES DEL MÓDULO

- Conocer el proceso de instalación del entorno necesario para trabajar con PHP
- Introducir al alumno en la programación con este lenguaje
- Completar el entorno de trabajo con diferentes editores y entorno de desarrollo para PHP
TEMA 1
Instalación del
Entorno de Trabajo

n INSTALACIÓN DEL ENTORNO DE TRABAJO


Tema 1. Instalación del entorno de trabajo

INSTALACIÓN DEL ENTORNO DE TRABAJO


La idea de programación va unida necesariamente a la idea de ordenador. Así que empezaremos con la definición de
este. Un ordenador es una maquina secuencial dedicada al tratamiento de la información, básicamente tenemos una
entrada, por la cual introducimos los datos, una unidad que procesa esta información (obviamente previa programación) y
una salida que nos muestra el resultado del procesamiento de los datos.

Podemos usar el símil de la oficina en la que la secretaria (procesamiento) realiza las operaciones que el jefe le solicita
(entrada) y le devuelve los resultados (salida).

Para la tarea de programar, que no es mas que indicarle al ordenador que debe hacer con los datos, existen multitud de
lenguajes de programación, este manual se centra en uno en concreto, PHP.

Actualmente, con el desarrollo de Internet y la telefonía móvil se hace indispensable el conocimiento de uno o varios
lenguajes de programación orientado al desarrollo de paginas Web dinámicas y aplicaciones orientadas a su ejecución
dentro de un servidor Web. PHP es un lenguaje parecido a C, pero con menos restricciones respecto a la definición de
datos, tiene una estructura fácil de comprender, y cumple con esta necesidad, es sencillo introducirse en la programación
con el.

PHP nació, como tantas otras cosas, de una necesidad en particular de su creador Rasmus Lerdorf, en el año 95,
necesito ejecutar una serie de operaciones en su servidor Web.

PHP es un lenguaje de programación orientado principalmente a la programación Web, y en consecuencia de lo mismo


se ejecuta como CGI (o modulo) dentro de un servidor web. Aunque durante la lectura de este libro se podrán ver otras
formas de uso.

Aunque existen extensiones para diferentes servidores Web, vamos a usar Apache, por varios motivos, rapidez,
versatilidad, es multiplataforma y además es libre. Con el fin de simplificar la instalación y no entrar en los entresijos de la
configuración de las diferentes características del servidor, vamos a usar un paquete ya configurado, como en este caso es
Xampp.

Xampp, además de contener Apache y php, incluye la base de datos Mysql, phpMyAdmin, FileZilla y Mercury Mail, entre
otras herramientas. Es de destacar que es un proyecto libre bajo licencia GNU.

Editorial CEP 19
Manual PHP 6.0. Módulo I

El objetivo de este manual es aprender a programar con PHP, por esta razón no se hace hincapié en el importante tema
de la seguridad. Existen otros textos orientados a tal fin.

Xampp, lo podemos descargar de la siguiente dirección web http://www.apachefriends.org/es/xampp.html. Actualmente


esta disponible para cuatro plataformas: Windows, Linux, Mac os X, Solaris.

Una vez descargado el archivo de instalación procedemos a la misma

Seleccionamos el idioma ingles

Pulsamos sobre el botón Next

20 Editorial CEP
Tema 1. Instalación del entorno de trabajo

Dejamos la carpeta por defecto

En este paso seleccionamos, únicamente, las dos primeras opciones de servicio, Apache y Mysql

Editorial CEP 21
Manual PHP 6.0. Módulo I

Con esto finalizamos la instalación, como se ha podido observar la instalación es muy sencilla.

Para confirmarla basta con abrir el navegador y escribir en la barra de direcciones localhost y pulsar intro

El resultado será similar al siguiente:

Desde el enlace español, se puede acceder a diferentes herramientas de gestión de la base de datos y algunos ejemplos

Tenemos nuestro entorno de trabajo ya preparado, los archivos php los tendremos que guardar en la carpeta
C:\xampp\htdocs\xampp.

En las páginas anteriores se ha visto la instalación del entorno con el que vamos a trabajar bajo el sistema operativo
Windows, esto se ha hecho por facilidad y comodidad para el alumno.

22 Editorial CEP
Tema 1. Instalación del entorno de trabajo

Si hubiese que desarrollar una aplicación real, se recomienda la instalación en un entorno de trabajo Linux. Veamos
brevemente como realizar esta instalación:

Primero descargamos el archivo:

http://www.apachefriends.org/download.php?xampp-linux-1.7.3a.tar.gz

Ahora procedemos a la descompresión e instalación de la siguiente manera (desde una consola de comandos y la
carpeta en la que se haya descargado):

sudo tar xvfz xampp-linux-1.7.3a.tar.gz -C /opt

Solo queda ponerlo en marcha:

/opt/lampp/lampp start

Como una alternativa a una instalación del sistema operativo Linux, podemos utilizar un live-cd, que se ejecuta en
memoria RAM, no deja ningún rastro en el disco duro y en definitiva, no modifica nada en nuestro equipo.

Hay que tener en cuenta que nuestro pc debe tener configurado en la bios el cd-rom como primera unidad de arranque.

La propuesta de lamppix ya que es una distribución de Linux que viene preparada con xampp configurado, además de
tener diferentes aplicaciones orientadas a la programación web. Se puede descargar desde su web oficial:

http://lamppix.tinowagner.com/

Editorial CEP 23
Manual PHP 6.0. Módulo I

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

24 Editorial CEP
Tema 1. Instalación del entorno de trabajo

< LO QUE HEMOS APRENDIDO TEMA 1

- Instalar el entorno de trabajo Xampp tanto en Windows como en Linux.

Editorial CEP 25
TEMA 2
Mi primer programa

n MI PRIMER PROGRAMA
Tema 2. Mi primer programa

MI PRIMER PROGRAMA
Una vez instalado el entorno de trabajo, pasemos a realizar un pequeño programa como introducción a la programación
en php.

Como los programas en php están hechos en texto plano se puede usar cualquier procesador de texto que trabaje sin
formato, por ejemplo el block de notas de Windows.

Es muy importante añadirle al archivo la extensión php, es decir, cuando guardemos el archivo con el block de notas
tenemos que seleccionar, en la pestaña tipo, todos los archivos, y en nombre añadirle la extensión php.

Los archivos deben de empezar siempre con el signo "menor que" seguido de una interrogación y acabar con el signo
"mayor que " seguido de una interrogación.

Ejemplo de programa:

Detalle en el bloc de notas

En este ejemplo vemos en primer lugar, de que partes se compone una página web con sus correspondientes etiquetas,
y en segundo el script insertado en php, pero podríamos obtener lo mismo solamente con:

<?php echo "hola mundo"; ?>

El pequeño programa solamente escribe en la ventana del navegador 'hola mundo'. Cabe destacar que echo imprime
en el navegador la cadena de caracteres que se encuentra entre las comillas dobles, por ultimo todas las sentencias de php
acaban en punto y coma.

Editorial CEP 29
Manual PHP 6.0. Módulo I

Para realizar esta operación no necesitaríamos php, compruébese que la siguiente pagina html haría lo mismo:

<HTML>

<HEAD>

<TITLE>

Hola Mundo

</TITLE>

</HEAD>

<BODY>

hola mundo

</BODY>

</HTML>

Para escribir el programa, teniendo en cuenta la sencillez del mismo y como alternativa al modo de edición descrito
anteriormente, abrimos una ventana de ms-dos y escribimos:

copy con c:\xampp\htdocs\xampp\hola.php[INTRO]

<?php echo "hola mundo"; ?>[ctrl.+Z]

Con esto conseguimos hacer una rápida introducción por consola del programa, la pulsación conjunta de las teclas
control y 'Z' indican la finalización de la introducción por consola.

También es posible abrir el block de notas de Windows e introducir el texto guardándolo a continuación en la carpeta
c:\xampp\htdocs\xampp, sin olvidar darle la extensión php y el nombre hola. Con esto hacemos un uso estándar del
procesador de textos, tal y como se ha explicado anteriormente.

Para comprobar el funcionamiento del programa debemos escribir en la barra de direcciones del navegador
http://localhost/xampp/hola.php

También es posible invocar el intérprete de php desde la consola de la siguiente forma:

c:\xampp\php\php c:\xampp\htdocs\xampp\hola.php

Esto puede tener alguna utilidad para hacer pequeños scripts en este lenguaje de programación.

30 Editorial CEP
Tema 2. Mi primer programa

< LO QUE HEMOS APRENDIDO TEMA 2

- Como realizar un pequeño programa en php

- Usar un procesador de textos para escribir un script

- Escribir un script desde la consola

Editorial CEP 31
TEMA 3
Editores e IDES para PHP

n INTRODUCCIÓN
n KATE
n KDEVELOP
n EDITRA
n GPHPEDIT
n ECLIPSE
Tema 3. Editores e IDES para PHP

INTRODUCCIÓN
Todos sabemos lo que es un editor de textos, pero quizás el termino IDE (Integrated Development Environment, entorno
de desarrollo integrado) sea algo mas confuso, se trata de un editor de textos con una serie de herramientas que nos
permite depurar y ejecutar un programa con mas facilidad que si solo contáramos con el editor. Existen infinidad de posibles
editores e IDES con los que puede trabajar PHP, unos mas específicos que otros, por esa razón solo nos vamos centrar en
unos pocos.

Los propuestos son: kate, kdevelop, editra, gphpedit y por último el más desarrollado de todos, eclipse. Todos están bajo
licencia GPL. Es decir no hay que pagar por su uso.

KATE
Empecemos con el editor de textos kate (KDE Advanced Text Editor), originalmente fue diseñado para Linux,
concretamente para el entorno de escritorio KDE. También puede ser ejecutado bajo Windows, ya que forma parte del
paquete "KDE on Windows" o bien usando "KDE installer for windows" se puede descargar y encontrar una amplia
información en la siguiente web: http://windows.kde.org/

Algunas de las características mas relevantes de kate son:

- Reemplazo y búsqueda de texto

- Coloreado de sintaxis

- Seguimiento de código para php, c, c++, etc

- Múltiples documentos abiertos

KDEVELOP
Originalmente se desarrollo para C y C++, pero actualmente soporta, entre otros lenguajes, php. Esta aplicación es un
entorno de desarrollo integrado que usa como editor de textos a kate. Además de las herramientas propias del procesador
de textos kate, incorpora, entre otras:

- Control de versiones

- Compatibilidad con Doxygen (generador de documentación para C, C++ y Java)

- Gestión de diferentes tipos de proyectos

- Navegación entre clases de aplicación

- etc.

Editorial CEP 35
Manual PHP 6.0. Módulo I

Detalle de kdevelop, bajo linux

EDITRA
Editor de textos que soporta infinidad de lenguajes de programación, entre ellos php. Cuenta con diferentes plug-ins que
permite ampliar sus posibilidades y trabaja con un sistema de pestañas que permite trabajar con varios documentos
simultáneamente.

GPHPEDIT
Pequeño procesador de textos compatible con el entorno libre Gnome. Tiene numeración de líneas y coloreado de
sintaxis. Además de otras útiles herramientas, como pueden ser navegador de clases y funciones. Su web es:
http://www.gphpedit.org/

Detalle del editor gphpedit, bajo linux

36 Editorial CEP
Tema 3. Editores e IDES para PHP

ECLIPSE
Entorno integrado de desarrollo que funciona con java, en consecuencia es multiplataforma. Originalmente fue
desarrollado por IBM, pero actualmente es desarrollado por una fundación sin animo de lucro llamada "fundación eclipse".
Funciona para infinidad de lenguajes, elementos web, etc. Es de código abierto y cuenta con una comunidad de usuarios
que fomenta el código abierto.

Es fácil y agradable de utilizar con una atractiva interfaz de usuario. El entorno de trabajo es general, pero se puede
ampliar y adaptar con plug-ins descargables desde su Web.

Detalle de eclipse, bajo linux

Se recomienda al alumno que visite los siguientes enlaces relacionados con el tema 3, con le fin de ampliar su visión de
los entornos de trabajo para php

Editor/Entorno Enlace
KDEVELOP http://www.kdevelop.org/mediawiki/index.php/KDevelop_4
http://es.wikipedia.org/wiki/KDevelop
http://es.wikipedia.org/wiki/KDevelop#Caracter.C3.ADsticas
KATE http://es.wikipedia.org/wiki/Kate
ECLIPSE http://es.wikipedia.org/wiki/Eclipse_%28software%29
http://www.eclipse.org/

Editorial CEP 37
Manual PHP 6.0. Módulo I

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

38 Editorial CEP
Tema 3. Editores e IDES para PHP

< LO QUE HEMOS APRENDIDO TEMA 3

- Utilizar diferentes entornos de trabajo para escribir nuestros scripts en php

- Instalar algunos de ellos, como por ejemplo Kate

Editorial CEP 39
MÓDULO II
Conceptos fundamentales de la
programación en PHP

TEMA 1: Estructura de un programa en php

OBJETIVOS GENERALES DEL MÓDULO

- Introducción al Análisis la estructura de un programa en php


- Conocer la programación con goto
- Conocer la programación estructurada
TEMA 1
Estructura de un
programa en PHP

n ESTRUCTURA DE UN PROGRAMA EN PHP


n ESTRUCTURAS DE CONTROL EN PHP Y PROGRAMACIÓN SIN GOTO
n PROCEDIMIENTOS Y FUNCIONES
Tema 1. Estructura de un programa en PHP

ESTRUCTURA DE UN PROGRAMA EN PHP


PHP como cualquier lenguaje de programación sigue una estructura secuencial, es decir, se ejecuta una instrucción
detrás de otra, no existen saltos condicionales, pero si funciones y procedimientos, los cuales pueden ser llamados desde
cualquiera punto del programa principal, estos retornan una vez acabada su ejecución.

Una de las características de php es que permite combinar el código html con su propio código, es decir, en un programa
podemos encontrar entremezclado código de un tipo y del otro.

Ejemplo:

<html>

<body>

<font color='red'>

// Esto es un comentario en este programa de prueba

<?php print "hola mundo"; ?>

</body>

</html>

En el ejemplo se puede ver la estructura clásica de cualquier pagina web, en la cual destaca, la etiqueta de inicio html,
seguida de la del cuerpo body, con una etiqueta de color rojo font y seguido del código en php que escribe hola mundo.

Este libro no versa sobre html, pero como en multitud de ejemplos aparecen sentencias en este lenguaje. Se hará
referencia al mismo y a sus instrucciones cuando se considere indispensable.

Como se puede observar en el ejemplo anterior el comentario va precedido de dos barras inclinadas hacia la derecha,
esta es la forma más habitual de introducir un comentario en los scripts de php. Aunque también podemos hacerlo con el
símbolo almohadilla o si el comentario esta comprendido en mas de una línea empezaría con el símbolo "/*" y acabaría con
el símbolo "*/"

<?php

echo 'Este programa es un ejemplo de comentarios';

# comentario de una sola linea

// otra prueba de comentario con una sola linea

/* este comentario tiene

dos lineas */

?>

Editorial CEP 45
Manual PHP 6.0. Módulo II

ESTRUCTURAS DE CONTROL EN PHP Y PROGRAMACIÓN SIN GOTO


La instrucción goto ha sido muy usada en los lenguajes de alto nivel durante mucho tiempo para saltar a diferentes
secciones del código, pero hacen casi ilegible el programa y difícil de mantener, en consecuencia de lo mismo al final ha
quedado en desuso. Aunque php la soporta a partir de la versión 5.3 apartándose así de la programación estructurada y
dando una total libertad al programador para que programe a su gusto. Hay que tener en cuenta que solo se puede saltar
dentro del mismo archivo y contexto, es decir, no se puede saltar fuera de un procedimiento o función, ni tampoco dentro.

Algunas de las razones para usar goto en php pueden ser:

- Facilita el tratamiento de errores

- Es mas rápido que otras estructuras de control

- Útil para escribir analizadores

La implementación en php, de una sentencia goto, es muy sencilla, se pone goto seguido de una etiqueta a la que saltar
seguido de un punto y coma. No hay que olvidar poner la etiqueta seguida de dos puntos en la sección a saltar.

Veamos un ejemplo:

<?php

echo 'esto es un ejemplo de la instrucción goto en php';

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

echo 'i vale: '.$i.'<br>';

if $i==5 goto salir;

salir:

echo 'hemos salido del bucle';

?>

Respecto a los analizadores se podría plantear el ejemplo de un pequeño compilador que fuese capaz de analizar y
ejecutar, al menos el siguiente programa:

10 PRINT "HOLA MUNDO"

<?php

$programa=@$_GET['programa'];

if (@strlen($programa)==0){

echo '<html>';

echo '<body>';

echo '<FORM ACTION="basic2.php" METHOD="GET">';

46 Editorial CEP
Tema 1. Estructura de un programa en PHP

echo '<BR>Pequeño interprete de Basic:<BR><BR>';

echo '<TEXTAREA NAME="programa" COLS=40 ROWS=6></TEXTAREA><BR>';

echo '<INPUT TYPE=SUBMIT VALUE="submit">';

echo '</FORM>';

echo '</body>';

echo '</html>';

}else{

$lineas=explode(" ",$programa);

if (!is_int((int)$lineas[0])) {goto error1;}// debe ser un valor entero

if (($lineas[1]!='PRINT')&&($lineas[1]!='print')){goto error2;}

if (($lineas[2][0]!='"')||($lineas[2][strlen($lineas[2])-1]!='"')) {goto error3;}

echo $lineas[2];

goto salir;

error1:

echo is_int($lineas[0]);

echo 'le falta el número de línea';goto salir;

error2:

echo 'instrucción no reconocida';goto salir;

error3:

echo 'la cadena debe ir entre comillas dobles';goto salir;

salir:

?>

Pasemos a analizar el programa, no sin antes adelantar para que sirven algunas instrucciones, aunque más adelante
nos extendamos mas en su descripción y uso. El poner una arroba delante de una instrucción se hace para evitar que salgan
mensajes de error. Por ejemplo, la primera vez que se llama al programa la variable $programa no tiene ningún valor y esta
sin definir, para evitar los mensajes de error que nos dispensaría php usamos @strlen y @$_GET. Una relación de las
instrucciones que vamos a usar y una breve explicación de para que sirve cada una es la siguiente:

If: Instrucción de control que nos permite decidir entre la ejecución de una o dos o mas bloques de instrucciones

$_GET: Devuelve una variable de entorno devuelta por el método get por el servidor.

Editorial CEP 47
Manual PHP 6.0. Módulo II

Strlen: Nos devuelve la longitud de una cadena de caracteres

Explode: Descompone una cadena de caracteres, usando un delimitador, y nos devuelve un vector con tantos
fragmentos como encuentre.

is_int: Devuelve true si es un entero en caso contrario devuelve false

echo: Imprime la información de una cadena de caracteres encerrada entre comillas dobles o simples.

Ahora recordemos como era la estructura de una pagina html. La información mínima es la siguiente:

<html>

<body>

</body>

</html>

Como se puede observar hay cuatro etiquetas (o tags) que son imprescindibles, el inicio del documento "<html>", el final
del mismo "</html>" y el cuerpo del documento "<body>" seguido del final del mismo "</body>". Las etiquetas están
encerradas entre los signos menor que "<" y mayor que ">" y cuando finalizan seguidamente del menor que, va una barra
inclinada hacia la derecha "</".

Ahora pasemos al concepto de formulario, que vamos a utilizar en reiteradas ocasiones durante el transcurso del libro.
Informalmente hablando es la forma de recoger datos de la parte del cliente (navegador web) por parte del usuario y al
enviarlo le pedimos al servidor (en los ejemplos del libro apache) que nos devuelva una respuesta habitualmente ejecutando
del modulo de php que lleva integrado.

Un formulario puede contener diferentes elementos informativos y/o de recolección de información. En el ejemplo
usamos un textarea, que es un recuadro en el cual podemos escribir la información que deseemos. En este caso nuestro
pequeño programa en basic.

En primer lugar analicemos la etiqueta FORM la cual nos indica el principio del formulario. El parámetro ACTION nos
indica a que script vamos a enviar la información que recojamos. Por ultimo METHOD nos indica el método a emplear, GET
o POST, el primero es mas cómodo, ya que la información que se envía la podemos ver en la barra de direcciones del
navegador. Ahora mismo que estamos aprendiendo este hecho nos facilita el aprendizaje, pero para cuestiones de
seguridad es recomendable usar el método POST.

La etiqueta textarea se compone, además de ella misma, de varios parámetros en los cuales se indican las dimensiones,
el numero de columnas visibles(COLS) y el numero de filas (ROWS). Opcionalmente puede llevar algún parámetro más,
como puede ser el nombre (NAME).

Por último es necesario un elemento para enviar el formulario, se ha elegido el clásico botón de envío.

Este se compone de INPUT, que nos indica que es un botón TYPE=SUBMIT, el tipo del mismo, es decir de envío. Y en
el VALUE introducimos el nombre con el que queremos que nos aparezca en el navegador.

Una vez analizadas las instrucciones desconocidas y la parte de introducción del html pasemos a ver cómo funciona el
programa.

48 Editorial CEP
Tema 1. Estructura de un programa en PHP

La primera vez que entramos la variable $programa no se le puede asignar la respuesta del formulario, ya que todavía
no hay ninguna, el aviso de error lo evitamos añadiendo la arroba a la instrucción. Acto seguido se pregunta por la longitud
de la variable, en la instrucción if. Esto también genera un mensaje de error, que evitamos de igual modo. Después de la
evaluación de la instrucción if, y cumpliendo con la primera parte de la misma, se ejecuta el primer bloque de instrucciones
(formulario), ignorando el segundo bloque.

Al enviar el formulario y entrar en el script. Se asigna el valor del textarea a la variable $programa. Ahora la longitud no
es cero y se ejecuta el segundo bloque de instrucciones.

Con la instrucción explode asignamos los diferentes ítems de la información del textarea. Es decir, el numero de línea,
la instrucción PRINT y por ultimo el valor entre comitas.

Esta parte del programa tiene una ejecución secuencial, fácil de seguir, para completar el script y para ejemplificar el
uso del goto se ha empleado una serie de mecanismos para detectar errores.

En primer lugar verificamos que el primer ítem es un valor entero (el numero de línea) en caso contrario saltamos a la
etiqueta error1, mostrando el correspondiente mensaje de error y saltando a su vez a la finalización de la ejecución del
script.

Acto seguido verificamos que el siguiente ítem corresponde a la instrucción PRINT, única instrucción que reconoce
nuestro pequeño intérprete. En caso de no ser así, saltamos a la etiqueta error2. Mostramos el mensaje de error y saltamos
al final de la ejecución del script.

Por último, chequeamos que el siguiente ítem sea una cadena de caracteres que empiece y termine con comillas dobles.
En caso contrario saltamos a la etiqueta error3, mostramos el mensaje y saltamos al final de la ejecución.

Si todo ha ido bien nuestro intérprete escribirá la cadena de caracteres en el navegador. En este caso el clásico "hola
mundo".

PROCEDIMIENTOS Y FUNCIONES
Es útil y recomendable dividir un programa grande en fragmentos mas pequeños, por dos razones, en primer lugar, se
hace un programa mas legible y en consecuencia mas fácil de mantener. Esto por si solo ya es razón suficiente, pero
además hay que sumarle la cualidad de evitar la repetición de código, con lo cual ayudamos al mantenimiento con la
prevención de los posibles errores. Para esto usamos procedimientos y funciones.

Son fragmentos de programa, encerrados entre llaves, que realizan una operación o varias. Si retorna algún valor se
llama función y en caso contrario procedimiento.

Un ejemplo de procedimiento es el siguiente:

<?php

function suma($n1,$n2)

$s=$n1+$n2;

echo 'El resultado del procedimiento suma es: '.$s;

Editorial CEP 49
Manual PHP 6.0. Módulo II

suma(2,3);

?>

Como se puede observar el nombre del procedimiento suma va precedida de la instrucción function y tiene entre
paréntesis dos variables que se le envían para realizar las operaciones pertinentes. En este sencillo caso, suma dos valores
que se le envía y muestra el resultado en el navegador. Pero no devuelve nada.

Un ejemplo de función, que si que devuelve un valor seria el siguiente:

<?php

function suma($n1,$n2)

$s=$n1+$n2;

return $s;

$resultado=suma(2,3);

echo 'El resultado de la función es: '.$resultado;

?>

Como se puede observar el código es similar al anterior, pero en lugar de mostrar un mensaje por pantalla, lo que hace
es retornar el valor del cálculo de la suma, haciendo uso de la instrucción return.

Se usa la variable resultado para almacenar el valor devuelto por la función suma y con el echo se muestra el resultado.

Si al procedimiento o función no se le tuviese que enviar parámetros, simplemente se escribirían los paréntesis, sin más,
es decir, sin escribir nada dentro de ellos.

<?php

function hola()

echo 'Hola, soy un procedimiento sin parámetros';

Hola();

?>

<?php

50 Editorial CEP
Tema 1. Estructura de un programa en PHP

function suma()

return 4+3;

$resultado=suma();

echo 'El resultado de esta función, que no usa parámetros, es: ';$resultado;

?>

Los parámetros que hemos estado enviando a las funciones y procedimientos en los ejemplos anteriores son por valor,
es decir, no se modifican sus valores originales.

Otra forma de enviar parámetros es por referencia, pudiéndose así, modificar su valor.

Veámoslo mas claramente con un ejemplo:

<?php

function sumaUno(&$c,&$d)

$c++; // sumo 1

$d=$d+1; // otra forma de sumar 1

$a=1;

$b=4;

echo 'La variable a vale: '.$a.' y la b vale: '.$b.'<br>';

sumaUno($a,$b);

echo 'La variable a vale: '.$a.' y la b vale: '.$b;

?>

El ejemplo únicamente suma uno a cada una de las variables, al llamar al procedimiento definiendo las variables c y d
como referencias a las variables que se les envía. Devuelven en ellas las modificaciones sufridas dentro del procedimiento.

Por último hacer plantear que sucede con las variables que definamos dentro del cuerpo de una función o procedimiento.
Estas tienen valor solo dentro del procedimiento o función. A esto se le llama en ámbito local de una variable. Las variables
definidas fuera de la función, y que no estén dentro de ninguna otra, son globales.

Editorial CEP 51
Manual PHP 6.0. Módulo II

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

52 Editorial CEP
Tema 1. Estructura de un programa en PHP

< LO QUE HEMOS APRENDIDO TEMA 1

- Estructurar un programa

- Programar con goto

Editorial CEP 53
MÓDULO III
Estructura de los programas en PHP

TEMA 1: Estructura de los programas en PHP

OBJETIVOS GENERALES DEL MÓDULO

- Conocer las posibles estructuras para un script php


- Elegir de estas estructuras la que consideremos mas adecuada
TEMA 1
Estructura de los
programas en PHP

n ESTRUCTURA DE LOS PROGRAMAS EN PHP


Tema 1. Estructura de los programas en PHP

ESTRUCTURA DE LOS PROGRAMAS EN PHP


La estructura formal de un programa cualquiera exige que se definan en primer lugar las diferentes variables que se van
a usar en el mismo y después se desarrolle el programa propiamente dicho.

En el caso de php no es necesario hacerlo así, las variables pueden definirse en cualquier punto del programa y usarse
sin más (sin tener una definición previa).

Como dato importante cabe destacar que todas ellas empiezan con el símbolo $ y que php hace diferencias entre
mayúsculas y minúsculas en el nombre de las variables.

Por el contrario las palabras reservadas no son sensibles a su escritura en mayúsculas o minúsculas.

Por ejemplo:

<?

$a=1;

Print $a;

?>

Devuelve como resultado el número 1.

Como se puede observar en el ejemplo la variable 'a' queda definida al darle el valor '1'.

Con esto concluimos que la única restricción que tenemos en php es comenzar con <?, o <?php (dependiendo de la
configuración del php.ini) es mas de hecho si el script solamente tiene código, es decir, no tiene html, ni siquiera seria
necesario que acabase con "?>".

Como complemento al análisis del ejemplo cabe destacar que el php.ini tiene configurado por defecto que los scripts
empiecen con <?php. En el caso de probar el ejemplo y que no funcionase solo hay que añadir php después de <?.

Antes de continuar, quiero hacer referencia a los dos modos de funcionamiento del interprete php. Cuando este detecta
los caracteres de inicio del scrit <?php el compilador interpreta los datos que le llegan, en caso contrario simplemente envía
al navegador los datos que encuentra. Veamos dos ejemplos que hacen lo mismo.

<?php

Echo '<html><body><font color="red">hola mundo</font></body></html>';

?>

En este caso todo esta dentro del script

En este segundo caso, no:

<html>

<body>

<font color='red'>

<?php echo 'hola mundo'; ?>


Editorial CEP 59
Manual PHP 6.0. Módulo III

</body>

</html>

Ambos ejemplos hacen exactamente lo mismo, con la salvedad de que en el primer caso se sobrecarga más al
compilador, ya que realiza mas operaciones.

En cualquier caso, se use un método o el otro, es interesante tener un orden a la hora de crear y mantener una
aplicación. No hay que hacer las cosas de cualquier manera.

Para un buen mantenimiento, lo primero es poner una breve explicación de que hace el script con el fin de, pasado un
tiempo, podamos recordar que hace y como lo hace.

Por ejemplo:

////////////////////////////////////////////////////////////////////////////////////////////

// Autor: Ángel del Río Medina //

// Fecha de creación: 10/01/2010 //

// Última modificación: 15/01/2010 //

// Últimos cambios: Se añadió las operaciones de multiplicar //

// y dividir //

// Este es un programa de ejemplo que simula una calculadora //

// después del comentario definimos las diferentes funciones y //

// procedimientos //

////////////////////////////////////////////////////////////////////////////////////////////

Como se puede observar, en este encabezado, se hace una breve recopilación de que hace el programa, que se le ha
añadido y quien y cuando lo ha creado.

En segundo lugar ponemos las funciones y los procedimientos:

Un archivo con el nombre "operaciones.php" y la siguiente información:

<?php

function suma($a,$b) // Esta es la parte de la calculadora que suma

return $a+$b;

60 Editorial CEP
Tema 1. Estructura de los programas en PHP

function resta($a,$b) // Esta funcion resta dos números

return $a-$b;

function multiplica($a,$b) // La parte de la multiplicación

return $a*$b;

function divide($a,$b){

// Esta función recibe como parámetros dos números

//y devuelve el resultado de la división de ambos

return $a/$b;

?>

Antes de continuar, hay que reparar en que si el programa es muy grande se puede dividir en programas más pequeños
o incluso tener unos archivos con funciones útiles y comunes a varios programas. Esto lo podemos conseguir con la
instrucción include. Esta instrucción nos permite, en tiempo de ejecución incluir un archivo. Es de destacar que nos permite
incluirlo de forma condicional, es decir:

<?php

If $a==5 {include('librería.php');}

¿>

Probablemente el ejemplo mas claro es la conexión a bases de datos, la escribimos una vez y reutilizamos para todas
las aplicaciones que usen esta base de datos. Con esto también conseguimos que si modificamos cualquier dato en esta
conexión a la base de datos se refleje esta modificación en todas las aplicaciones que lo usen. Evitando así la tediosa labor
de cambiar los datos en cada uno de los diferentes scripts. Esta labor también es susceptible de cometer algún error. Con
lo cual la utilidad es doble, no hay que revisar script por script y adema evitamos errores.

<?php

$host='localhost';

Editorial CEP 61
Manual PHP 6.0. Módulo III

$usuario='usuario';

$palabraPaso='';

$conexion=mysql_connect($host,$usuario,$palabraPaso)

?>

mysql_connect crea un vinculo con la base de datos, ya lo veremos en módulos posteriores. Esta instrucción necesita
como parámetros el host donde esta la base de datos, el usuario y la contraseña

Una instrucción similar es la instrucción require, con la principal diferencia que lee incondicionalmente el archivo aunque
esta línea no se ejecute nunca.

También es importante tener en cuenta que el programa se puede ejecutar en dos o mas archivos o en uno solo y que
dependiendo de que parámetros le mandemos se comporte de una forma u otra. Recordemos en el modulo anterior el
ejemplo del compilador, que dependiendo de los parámetros enviados nos mostraba un formulario o la ejecución del
programa en basic.

Otra forma de plantear el programa hubiese sido tener dos archivos uno con el formulario y otro con la ejecución del
mismo.

En este caso lo vamos a plantear así para ver otra forma de estructurar una aplicación.

En este caso crearemos un archivo con el nombre calculadora.html y que contenga la siguiente información:

<html>

<head>

Ejemplo de calculadora para estudiar la estructuración de un programa en php.

</head>

<body>

<form method='get' action='calcula.php'>

Numero 1: <INPUT TYPE="text" NAME="numero1" SIZE="20" MAXLENGTH="30"><br>

Numero 2: <INPUT TYPE="text" NAME="numero2" SIZE="20" MAXLENGTH="30"><br>

<INPUT TYPE="submit" NAME="suma" VALUE="+">

<INPUT TYPE="submit" NAME="resta" VALUE="-">

<INPUT TYPE="submit" NAME="multiplicar" VALUE="*">

62 Editorial CEP
Tema 1. Estructura de los programas en PHP

<INPUT TYPE="submit" NAME="division" VALUE="/">

</form>

</body>

</html>

En el formulario hay que comentar los dos campos de texto, <INPUT TYPE='text', que tienen como nombre numero1 y
numero2, por defecto tienen una longitud máxima de 20 dígitos visibles y 30 no visibles. El resto de componentes ya
sabemos como funcionan de módulos anteriores.

Por último el archivo de control:

<?php

/////////////////////////////////////////////////////////////////////////////////////////////

// Autor: Ángel del Río Medina //

// Fecha de creación: 10/01/2010 //

// Última modificación: 15/01/2010 //

// Últimos cambios: Se añadió las operaciones de multiplicar //

// y dividir //

// Este es un programa de ejemplo que simula una calculadora //

// después del comentario definimos las diferentes funciones y //

// procedimientos //

////////////////////////////////////////////////////////////////////////////////////////////

Include('operaciones.php');

$numero1=@$_GET['numero1'];

$numero2=@$_GET['numero2'];

$suma=@$_GET['suma'];

$resta=@$_GET['resta'];

$multiplicacion=@$_GET['multiplicacion'];

$division=@$_GET['division'];

Editorial CEP 63
Manual PHP 6.0. Módulo III

if ($suma=='+'){$resultado=suma($numero1,$numero2);}

if ($resta=='-'){$resultado=resta($numero1,$numero2);}

if ($multiplicacion=='*'){$multiplicacion=suma($numero1,$numero2);}

if ($division=='/'){$resultado=division($numero1,$numero2);}

echo 'El resultado de la operación es: '.$resultado.'<br><br>';

echo '<a href="calculadora.html">Volver a la calculadora</a>';

?>

En primer lugar ponemos el encabezado a modo de pequeña documentación, aunque ahora mismo recordamos todos
los detalles de nuestro script a la vuelta de unos meses seguro que no lo recordamos con tanta claridad. Es muy importante
la documentación de los scripts.

En segundo lugar incluimos el archivo con las operaciones, después leemos las variables numero1 y numero2. Después
recogemos la información de los cuatro botones, como solo se ha pulsado uno de ellos, solo una de las cuatro variables
tiene el valor correspondiente. Esto lo comprobamos con las cuatro instrucciones if que siguen a continuación. Dependiendo
de la variable con valor realizamos una operación u otra. Por ultimo escribimos el resultado previamente almacenado.

La última instrucción es una instrucción html. Le pedimos al navegador que nos muestre un enlace de nuevo al formulario
de la calculadora, la etiqueta <a href= nos indica que es un enlace a una pagina web. Seguido entre comillas va la dirección
al enlace. Después aparece el texto que queremos que acompañe aparezca, en nuestro caso "volver a la calculadora", la
etiqueta </a> cierra la llamada al enlace.

A modo didáctico, y con el fin de que se vea otro planteamiento de la misma calculadora, vamos a ver el mismo programa
pero no en dos archivos (tres si contamos el llamado con el include) sino con uno solo, sin contar el include.

Para realizar el ejercicio vamos a introducir toda la información que esta a continuación en un archivo al que vamos a
llamar, "calcula.php"

<?php

/////////////////////////////////////////////////////////////////////////////////////////////

// Autor: Ángel del Río Medina //

// Fecha de creación: 10/01/2010 //

// Última modificación: 15/01/2010 //

// Últimos cambios: Se añadió las operaciones de multiplicar //

// y dividir //

// Este es un programa de ejemplo que simula una calculadora //

// después del comentario definimos las diferentes funciones y //

// procedimientos //

64 Editorial CEP
Tema 1. Estructura de los programas en PHP

////////////////////////////////////////////////////////////////////////////////////////////

$suma=@$_GET['suma'];

$resta=@$_GET['resta'];

$multiplicacion=@$_GET['multiplicacion'];

$division=@$_GET['division'];

If (($suma!='+')&&($resta!='-')&&($multiplicacion!='*')&&($division!='/'))

{// es la primera vez que entramos y mostramos el formulario

Echo '<html>';

Echo '<head>';

Echo 'Ejemplo de calculadora para estudiar la estructuración de un programa en php. ';

Echo '</head>';

Echo '<body>';

Echo '<form method='get' action='calcula.php'>';

Echo 'Numero 1: <INPUT TYPE="text" NAME="numero1" SIZE="20" MAXLENGTH="30"><br>';

Echo 'Numero 2: <INPUT TYPE="text" NAME="numero2" SIZE="20" MAXLENGTH="30"><br>';

Echo '<INPUT TYPE="submit" NAME="suma" VALUE="+">';

Echo '<INPUT TYPE="submit" NAME="resta" VALUE="-">';

Echo '<INPUT TYPE="submit" NAME="multiplicar" VALUE="*">';

Echo '<INPUT TYPE="submit" NAME="division" VALUE="/">';

Echo '</form>';

Echo '</body>';

Echo '</html>';

Else

{ // estamos calculando

Include('operaciones.php');

Editorial CEP 65
Manual PHP 6.0. Módulo III

$numero1=@$_GET['numero1'];

$numero2=@$_GET['numero2'];

if ($suma=='+'){$resultado=suma($numero1,$numero2);}

if ($resta=='-'){$resultado=resta($numero1,$numero2);}

if ($multiplicacion=='*'){$multiplicacion=suma($numero1,$numero2);}

if ($division=='/'){$resultado=division($numero1,$numero2);}

echo 'El resultado de la operación es: '.$resultado.'<br><br>';

echo '<a href="calculadora.html">Volver a la calculadora</a>';

?>

Lo primero que hace el script es recoger la información de los botones del formulario, suma, resta, multiplicación y
división. Si no hay información en ninguno de ellos, la conclusión es clara, es la primera vez que entramos al script y hay
que mostrar el formulario. En caso contrario mostramos el resultado de la operación.

66 Editorial CEP
Tema 1. Estructura de los programas en PHP

< LO QUE HEMOS APRENDIDO TEMA 1

- Analizar un pequeño problema para escoger la estructuración mas adecuada

- Plantear un script de varias formas diferentes

Editorial CEP 67
MÓDULO IV
Tipos de datos en PHP

TEMA 1: Variables de entorno y súper globales


TEMA 2: Variables en el entorno de programación
TEMA 3: Funciones

OBJETIVOS GENERALES DEL MÓDULO

- Conocer los diferentes tipos de datos y variables de PHP


- Utilizar los datos y variables de PHP
- Cambiar de un tipo de dato a otro
- Conocer las diferentes funciones asociadas a los tipos de datos
TEMA 1
Variables de entorno
y súper globales

n INTRODUCCIÓN
n $HTTP_USER_AGENT
n $HTTP_ACCEPT_LANGUAGE
n $HTTP_REFERER
n $PHP_SELF
n $HTTP_GET_VARS
n $HTTP_POST_VARS
n $HTTP_COOKIE_VARS
n $PHP_AUTH_USER
n $PHP_AUTH_PW
n $REMOTE_ADDR
n $DOCUMENT_ROOT
n $PHPSESSID
n VARIABLES SÚPER GLOBALES
n VARIABLES CONSTANTES
Tema 1. Variables de entorno y súper globales

INTRODUCCIÓN
Dadas las características propias de php, como lenguaje que normalmente se ejecuta en la parte del servidor, es de
esperar que una serie de funciones que nos informe sobre el cliente y el servidor junto con aspectos relacionados con
ambos. Pasemos a ver algunas de las funciones mas interesantes:

$HTTP_USER_AGENT
Facilita información sobre el sistema operativo y el navegador usado para acceder al servidor. Un ejemplo de salida
podría ser el siguiente:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6.3; .NET CLR 1.1.4322)

<?php

echo $HTTP_USER_AGENT;

?>

Al obtener este tipo de información podemos redireccionar la página teniendo en cuenta el sistema operativo, su versión
y lo mismo para el navegador.

$HTTP_ACCEPT_LANGUAGE
Nos devuelve información sobre la legua o lenguas que el navegador considera como principal.

Un ejemplo de salida pude ser "es-us", en el cual se nos indica que las lenguas aceptadas son español e ingles
estadounidense

<?php

echo $HTTP_ACCEPT_LANGUAGE;

?>

Con esta función podríamos redireccionar la pagina a otra página con la lengua del cliente, si existe tal pagina.

$HTTP_REFERER
Nos indica desde que pagina provine nuestro visitante, muy útil para crear botones del tipo atrás.

$PHP_SELF
Nos devuelve una cadena de caracteres con la información sobre el script que se esta utilizando en este momento. Se
usa para crear botones de recarga.

<?php

echo $PHP_SELF;

?>

Si el script se llamase ejemplo la salida seria /ejemplo.php

Editorial CEP 73
Manual PHP 6.0. Módulo IV

$HTTP_GET_VARS
Se usa con el método Get, y nos devuelve una cadena de caracteres en la cual aparece toda la información referente al
nombre y contenido de las variables pasados por el método get.

<?php

echo $HTTP_GET_VARS;

?>

$HTTP_POST_VARS
Igual que el anterior pero con el método post

$HTTP_COOKIE_VARS
Muestra información de los nombres y contenidos de los cookies. En próximos capítulos veremos que son los cookies.

$PHP_AUTH_USER
Almacena la información referente a la variable usuario cuando entramos a un sitio web restringido. Es muy útil para
controlar el acceso al resto de páginas del sitio.

$PHP_AUTH_PW
Esta función complementa a la anterior. Esta almacena la información referente al password.

$REMOTE_ADDR
Devuelve la dirección ip del cliente.

$DOCUMENT_ROOT
Muestra la dirección física de la página que esta mostrando

$PHPSESSID
Conserva el identificador de sesión del usuario. En posteriores capítulos veremos que son las sesiones.

VARIABLES SÚPER GLOBALES


Son aquellas que facilitan información del sistema, que están definidas automáticamente en el ámbito global. Están
definidas en los siguientes arrays $_SERVER, $_ENV, $_SESSION, $_COOKIE, $_GET y $_POST.

74 Editorial CEP
Tema 1. Variables de entorno y súper globales

VARIABLES CONSTANTES
Son aquellas que no cambian su valor durante la ejecución del script

<?php

define ("EDITORIAL","CEP");

echo EDITORIAL;

?>

Editorial CEP 75
Manual PHP 6.0. Módulo IV

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

76 Editorial CEP
Tema 1. Variables de entorno y súper globales

< LO QUE HEMOS APRENDIDO TEMA 1

- Cuales son las variables de entorno.

- Para que sirven las variables de entorno en php.

Editorial CEP 77
TEMA 2
Variables en el entorno de
programación

n DEFINICIÓN
n INTEGER (ENTERO)
n DECOCT
n DECHEX
n DECBIN
n OCTDEC
n HEXDEC
n BINDEC
n BASE_CONVERTÍ
n FLOATING POINT NUMBER (NÚMEROS EN COMA FLOTANTE)
n STRING (CADENA DE CARACTERES)
n ARRAY
n OBJETO
Tema 2. Variables en el entorno de programación

DEFINICIÓN
Una variable es un espacio de memoria que puede tomar cualquier valor, tanto numérico, como de texto, hay que tener
en cuenta que nuestro lenguaje de programación asigna el tipo de variable en tiempo de ejecución, es decir, no se definen
las variables, no es necesario asignarles un tipo de variable previamente...

Los tipos de datos que tenemos en php son los siguientes:

- Integer;

- Floating Point number;

- String;

- Array;

- Object.

INTEGER (ENTERO)
De manera informal, podemos decir, que son el conjunto de números negativos, positivos, incluyendo el numero 0.

Php permite que se representen en decimal (base 10), octal (base 8, precedidos siempre de un 0) o hexadecimal (base
16, precedido de 0x)

<?php

$decimal=9;

$otroDecimal=-7;

$octal=031; // 25 en decimal

$hexadecimal=0x3F;// 63 en deciamal

echo $decimal;

echo $otroDecimal;

echo $octal;

echo $hexadecimal;

?>

Php nos permite cambiar a diferentes formatos de base, veamos las diferentes funciones:

Editorial CEP 81
Manual PHP 6.0. Módulo IV

DECOCT
Cambia de base decimal a base octal

<?php

$n=1020;

echo decoct($n); // 1774

?>

DECHEX
Cambia de decimal a hexadecimal

<?php

$n=1020;

echo dechex($n); // 3FC

?>

DECBIN
Cambia de decimal a binario

<?php

$n=1020;

echo decbin($n); // 1111111100

?>

OCTDEC
Pasa de Octal a binario

<?php

$n=01774;

echo octdec($n);//1020

?>

82 Editorial CEP
Tema 2. Variables en el entorno de programación

HEXDEC
De hexadecimal a decimal

<?php

$n=0x3FC;

echo hexdec($n); // 1020

?>

BINDEC
De binario a decimal

<?php

$n=1111111100;

echo bindec($n); // 1020

?>

BASE_CONVERT
Convierte de una base cualquiera a otra

<?php

$n = '0x3FC';

echo base_convert($n, 16, 2);

?>

FLOATING POINT NUMBER (NÚMEROS EN COMA FLOTANTE)


También denominados números reales o notación científica tienen diferentes sintaxis como se puede ver a continuación:

<?php

$a = 5.123;

$b = 3.4e2;

$c = 2E-10;

?>

Por las características propias de estos números, es posible perder precisión en la representación de estos. Por ejemplo
1/9 se representaría en coma flotante como 0,1111.... como es imposible representar infinitos decimales, los resultados, en
algunos casos pueden ser arbitrarios.

Editorial CEP 83
Manual PHP 6.0. Módulo IV

STRING (CADENA DE CARACTERES)


Cualquier cadena de caracteres encerrado entre comillas dobles, simples o sintaxis de string multilínea (usando heredoc)
es una cadena de texto.

Analicemos estos tres formatos. El primero (comillas dobles) nos permite expandir el contenido que hay entre las
mismas, con lo cual podemos introducir variables entre estas comillas. Veamos un ejemplo:

<?php

$numero=1;

echo "soy un ejemplo $numero";

?>

El script nos dará como resultado 'soy un ejemplo 1'. Como se ha podido observar las comillas dobles nos permite
introducir directamente variables entre las comillas dobles.

El siguiente formato (comillas simples) no nos permite esta opción de expandir, pero en contrapartida es mas rápida que
la primera.

<?php

$echo 'otro ejemplo con comillas simples';

?>

Por ultimo, pero no menos importante, tenemos la opción multilínea con heredoc (con características similares a las
comillas dobles, pero permitiendo varias líneas), empieza con un identificador de tres letras (en este caso ABC) precedido
de tres signos menor que (<<<) y acaba con una líneas que únicamente tiene el identificador y acaba con un punto y coma

<?php

$pi = "3.1416";

$texto = <<<ABC

El número pi,

tiene como valor

$pi.

Las variables aquí son interpretadas: $variable

ABC;

84 Editorial CEP
Tema 2. Variables en el entorno de programación

echo $texto;

?>

Una variante es NOWDOC, que no nos permite expansión, funciona como las comillas simples:

<?php

$pi = "3.1416";

$texto = <<<'ABC'

El número pi,

tiene como valor

$pi.

Las variables aquí son interpretadas: $variable

ABC;

echo $texto;

?>

La concatenación (unión) de dos o más cadenas se hace con el punto:

<?php

$cadena1='hola ';

$cadena2='soy una cadena';

echo $cadena1.$cadena2;

?>

Editorial CEP 85
Manual PHP 6.0. Módulo IV

ARRAY
En Php tenemos dos tipos de array, los asociativos y los escalares. Los primeros son parejas de datos y los segundos
son datos a los que les corresponde un índice.

Un ejemplo de array asociativo puede ser el siguiente:

<?php

$familia = array(

"padre" => "Ángel",

"madre" => "Angeles",

"hermana" => "Sonia"

);

print_r($familia);

?>

Para añadir un elemento lo podemos hacer simplemente añadiendo al array el valor correspondiente, teniendo en cuenta
que entre corchetes hay que poner el dato correspondiente al índice entre Comillas dobles.

<?php

$familia = array(

"padre" => "Ángel",

"madre" => "Angeles",

"hermana" => "Sonia"

);

print_r($familia);

$familia["esposa"]= "María Victoria";

echo '<br>';

print_r($familia);

?>

Los arrays escalares (a los cuales estamos mas acostumbrados) son mucho mas sencillos de comprender y usar.
Simplemente son una correlación de elementos cuyo índice es un número, empiezan siempre con el valor 0.

<?php

$alumnos=array("Pepe","Juan","Anselmo");

86 Editorial CEP
Tema 2. Variables en el entorno de programación

print_r($alumnos);

?>

Para añadir un elemento, únicamente tenemos que poner el nombre de la matriz (no es necesario indicarle el índice) e
igualarla al dato correspondiente

<?php

$alumnos=array("Pepe","Juan","Anselmo");

print_r($alumnos);

$alumnos[]="Jose";

echo '<br>';

print_r($alumnos);

?>

Operaciones con arrays

array_slice()

Nos permite reducir el tamaño de la matriz, conociendo los índices que queremos eliminar

<?php

$alumnos=array("Pepe","Juan","Anselmo");

print_r($alumnos);

$alumnos = array_slice ($alumnos, 0, 3); //modifico el tamaño

echo '<br>';

print_r($alumnos);

?>

array_shift()

Elimina el primer elemento de la tabla

<?php

$alumnos=array("Pepe","Juan","Anselmo");

print_r($alumnos);

$alumnos = array_shift ($alumnos); //elimno el primer elemento

echo '<br>';

Editorial CEP 87
Manual PHP 6.0. Módulo IV

print_r($alumnos);

?>

unset()

Destruye un elemento de un array asociativo

<?php

$familia = array(

"padre" => "Ángel",

"madre" => "Angeles",

"hermana" => "Sonia"

);

print_r($familia);

unset($familia["padre"]);

echo '<br>';

print_r($familia);

?>

array_push()

Permite introducir varios elementos simultáneamente en el array

<?php

$alumnos=array("Pepe","Juan","Anselmo");

print_r($alumnos);

array_push($alumnos,"Josefa","María");

echo '<br>';

print_r($alumnos);

?>

array_merge()

Nos permite unir dos o mas arrays en uno solo

<?php

$alumnos1=array("Pepe","Juan","Anselmo");

$alumnos2=array("Josefa","María");

88 Editorial CEP
Tema 2. Variables en el entorno de programación

$alumnos=array_merge($alumnos1,$alumnos2);

print_r($alumnos);

?>

OBJETO
Php al igual que la mayoría de los lenguajes modernos de programación soporta la programación orientada a objetos.
Aunque este tema lo trataremos con amplitud mas adelante, veamos un ejemplo ahora:

<?php

class persona {

var $nombre;

var $apellidos;

var $direccion;

var $telefono;

function persona($n,$a,$d,$t) {

$this->nombre=$n;

$this->apellidos=$a;

$this->direccion=$d;

$this->telefono=$t;

$p=new persona("Jose","Lopez Riquelme","C/ Los Pinos 23","965432134");

print_r($p1);

?>

El ejemplo define una clase llamada persona, que contiene los datos, nombre, apellidos, dirección y teléfono. Para crear
una instancia de esta clase solo hay que llamar al constructor persona y dar los datos correspondientes.

Editorial CEP 89
Manual PHP 6.0. Módulo IV

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

90 Editorial CEP
Tema 2. Variables en el entorno de programación

< LO QUE HEMOS APRENDIDO TEMA 2

- Cuales son los diferentes tipos de datos que podemos usar en php

- Realizar conversión de tipos de datos

- Diferentes operaciones con los diferentes tipos de datos

Editorial CEP 91
TEMA 3
Funciones

n GETTYPE
n CAMBIO DE TIPO O TIPADO
n FORZADO
n INTEGER (ENTERO)
n FORMATOS DE BASE
Tema 3. Funciones

GETTYPE
Podemos averiguar el tipo de variable con gettype

<?php

$variable = "562";

echo gettype($variable); // string

$variable = 823;

echo gettype($variable); // integer

?>

También es especialmente útil la función var_dump, que nos muestra información sobre la variable

<?php

$variable = 562;

var_dump($variable);

?>

CAMBIO DE TIPO O TIPADO


También es importante tener en cuenta que podemos obligar a que una variable tenga un tipo concreto y especifico. Por
una parte usando la función setType o forzando directamente el tipo

Veamos un ejemplo

<?php

$string = "45";

settype($string,"integer");

?>

Los nuevos tipos que admite php son:

- "integer"

- "double"

- "string"

- "array"

- "object"

Editorial CEP 95
Manual PHP 6.0. Módulo IV

FORZADO
El forzado es similar a otros lenguajes, como por ejemplo el C.

<?php

$string = "45";

$numero = (int) $numero;

?>

Los forzados que admite php son:

- (int), (integer) entero

- (real), (double), (float) doble

- (string) cadena de caracteres

- (array) vector

- (object) objeto

Cuando pasamos las variables por el método get post automáticamente se transforman en string (cadenas de variables),
en estas ocasiones puede ser interesante chequear el tipo de caracteres que componen la variable a fin de averiguar de
que tipo son. Para tal aplicación tenemos las siguientes funciones:

- is_array()

- is_bool()

- is_double()

- is_float()

- is_int()

- is_integer()

- is_long()

- is_null()

- is_numeric()

- is_object()

- is_real()

- is_scalar()

- is_string()

96 Editorial CEP
Tema 3. Funciones

Veamos un ejemplo con cada una de ellas:

is_array()

Verifica si la variable pasada es un vector o no.

<?php

$vector = array('1', '2', '3');

echo is_array($vector) ? 'vector' : 'no es un vector';

echo "\n";

$string = 'this is a string';

echo is_array($string) ? 'vector' : 'no es un vector';

?>

is_bool()

Retorno true si es booleano en caso contrario retorna false

<?php

$falso = false;

$numero = 0;

// retorna verdadero (true) si $falso es booleano

if (is_bool($falso) === true) {

echo "Booleano";

else

{echo "No es Booleano";}

// Si numero es booleano retorna verdadero (true) en caso contrario retorna false (falso)

if (is_bool($numero) === false) {

echo "No es booleano";

else

{echo "Booleano";}

?>

Editorial CEP 97
Manual PHP 6.0. Módulo IV

is_double()

Reconoce si el número es doble o no

<?php

if(is_double(3.5)) {

echo "es doble\n";

}else {

echo "no es doble\n";

?>

is_float()

Retorno verdadero si es un número en coma flotante

<?php

if(is_float(45.67)) {

echo "es un número en coma flotante\n";

}else {

echo "no es un número en com flotante\n";

?>

is_int()

Si es un número entero devuelve true (verdadero) en caso contrario devuelve falso (false)

<?php

if (is_int(56)) {

echo "es un número entero\n";

} else {

echo "no es un número entero\n";

?>

98 Editorial CEP
Tema 3. Funciones

is_integer()

Es un alias de is_int(), en consecuencia funciona de la misma forma

is_long()

Otro alias de is_int()

is_null()

Devuelve true si la variable esta vacía, en caso contrario devuelve false

<?php

$var=false;

if ($var==false) {echo "El valor de la variable es false<br>";}else{echo "El valor de la variable es true<br>";}

$var=true;

if ($var==false) {echo "El valor de la variable es false<br>";}else{echo "El valor de la variable es true<br>";}

?>

is_numeric()

Reconoce si es un número o un string numérico

<?php

$var=123;

if (is_numeric($var)==true) {echo "El valor de la variable es Numerico<br>";}else{echo "El valor de la variable no es


Numerico<br>";}

$var="123";

if (is_numeric($var)==true) {echo "El valor de la variable es Numerico<br>";}else{echo "El valor de la variable no es


Numerico<br>";}

$var="A123";

if (is_numeric($var)==true) {echo "El valor de la variable es Numerico<br>";}else{echo "El valor de la variable no es


Numerico<br>";}

?>

is_object()

Devuelve true si la variable es un objeto

<?php

class persona {

var $nombre;
Editorial CEP 99
Manual PHP 6.0. Módulo IV

var $apellidos;

var $direccion;

var $telefono;

function persona($n,$a,$d,$t) {

$this->nombre=$n;

$this->apellidos=$a;

$this->direccion=$d;

$this->telefono=$t;

$p1=new persona("Jose","Lopez Riquelme","C/ Los Pinos 23","965432134");

$p2=new persona("María","Roca Miralles","C/ Mirasol 34","965233445");

if ((is_object($p1))&&(is_object($p2))){

print_r($p1);

echo "<br>";

print_r($p2);

?>

is_real()

Es un alias de is_float()

is_scalar()

Un escalar es una variable que contiene un entero, un número en coma flotante, una cadena de caracteres o una
variable booleana. En otros casos, por ejemplo en el caso de un objeto no estaríamos hablando de un escalar.

<?php

$numero=3;

if (is_scalar($numero)){echo "es una variable escalar";}else{echo "no es una variable escalar";}

echo "<br>";

100 Editorial CEP


Tema 3. Funciones

$a=array(1,2,3);

if (is_scalar($a)){echo "es una variable escalar";}else{echo "no es una variable escalar";}

?>

is_string()

Nos indica si la variable es del tipo cadena de caracteres, en ingles, string.

<?php

$variable="cadena";

if (is_string($variable)){echo "es una cadena de caracteres";}else{echo "no es una cadena de caracteres";}

echo "<br>";

$variable=123;

if (is_string($variable)){echo "es una cadena de caracteres";}else{echo "no es una cadena de caracteres";}

?>

INTEGER (ENTERO)
Los números enteros, son positivos o negativos, y pueden ser especificados en diferentes bases de numeración, como
puedan ser decimal (la más habitual), octal o hexadecimal.

<?php

// Ejemplo de diferentes expresiones del mismo numero, 523, en diferentes bases

$numero = 523; // positivo

echo "Ejemplo de numero positivo $numero";

$numero = -523; // negativo

echo "Ejemplo de numero negativo $numero";

$numero = 1013; // octal

echo "Ejemplo de numero octal $numero";

$numero = 208; // hexadecimal

echo "Ejemplo de numero hexadecimal $numero";

?>

Existen diferentes formas de representar el formato de los números en php, como podemos ver a continuación:

Editorial CEP 101


Manual PHP 6.0. Módulo IV

number_format ($numero)

Nos da la parte entera del número, omitiendo los decimales, usa como separador de miles la coma.

<?php

$numero=50;

echo "Ejemplo de number_format".number_format ($numero);

?>

number_format ($numero , $decimales)

Ofrece en la salida el número de cifras decimales indicados, usa como separador decimal un punto y usa la coma como
separador de miles

<?php

$numero=50;

echo "Otro ejemplo de number_format".number_format ($numero,3);

?>

number_format ($numero , $decimales , $sepDecimal , $sepMiles)

Esta opción, mas completa que las demás, nos permite establecer el número de cifras decimales que queremos obtener,
además del carácter que queremos como separador de miles

<?php

$numero=1150,12345;

echo "Otro ejemplo, mas completo, de number_format".number_format ($numero,3,".",".");

?>

FORMATOS DE BASE
Php nos permite cambiar a diferentes formatos de base, veamos las diferentes funciones:

decoct

Cambia de base decimal a base octal

<?php

$n=1020;

echo decoct($n); // 1774

?>

102 Editorial CEP


Tema 3. Funciones

dechex

Cambia de decimal a hexadecimal

<?php

$n=1020;

echo dechex($n); // 3FC

?>

decbin

Cambia de decimal a binario

<?php

$n=1020;

echo decbin($n); // 1111111100

?>

octdec

Pasa de Octal a binario

<?php

$n=01774;

echo octdec($n);//1020

?>

hexdec

De hexadecimal a decimal

<?php

$n=0x3FC;

echo hexdec($n); // 1020

?>

Editorial CEP 103


Manual PHP 6.0. Módulo IV

bindec

De binario a decimal

<?php

$n=1111111100;

echo bindec($n); // 1020

?>

base_convert

Convierte de una base cualquiera a otra

<?php

$n = '0x3FC';

echo base_convert($n, 16, 2); // 1020

?>

104 Editorial CEP


Tema 3. Funciones

< LO QUE HEMOS APRENDIDO TEMA 3

- Averiguar los diferentes tipos de variables que existen en php

- Forzar el cambio de un tipo de variable a otro

Editorial CEP 105


MÓDULO V
Aritmética y lógica en PHP

TEMA 1: La aritmética y sus operadores en PHP


TEMA 2: Operadores lógicos

OBJETIVOS GENERALES DEL MÓDULO

- Conocer los diferentes operadores lógicos de PHP


- Introducir al alumno en el análisis de las expresiones aritméticas
TEMA 1
La aritmética y sus
operadores en PHP

n SUMA
n RESTA
n MULTIPLICACIÓN
n DIVISIÓN
n MÓDULO
n INCREMENTO
n DECREMENTO
n OPERADORES DE ASIGNACIÓN
n OPERADORES DE COMPARACIÓN
n OPERADOR DE EJECUCIÓN
Tema 1. La aritmética y sus operadores en PHP

El concepto de ecuación o expresión es la base de la aritmética en php. El valor numérico como resultado de una
combinación de identificadores, funciones, operadores y valores numéricos es lo que llamamos ecuación. Para clarificar
esta definición:

1-1

El ejemplo tiene todos los elementos de una expresión matemática, dos valores numéricos (ambos 1) y un operador, en
esta caso el signo menos. Pero no es una sentencia de php. Para esto necesitaría ser parte de una sentencia lógica o de
una sentencia de asignación. Una asignación realiza el calculo de la expresión y almacena el resultado en la variable que
debe haber a la izquierda de esta sentencia. Veamos un ejemplo:

<?php

$resta=1-1;

Echo 'El resultado de la asignación es: '.$resta;

?>

Si ejecutamos el script observaremos que da como resultado 0, es decir, php ha asignado el resultado de la expresión
a la variable resta.

Ahora vamos a ver los diferentes operadores aritméticos y un ejemplo de cada uno de ellos:

SUMA
Suma dos valores. Ejemplo:

<?php

Echo 'la suma de 4+2 es: ';

Echo 4+2;

?>

RESTA
Resta dos valores. Ejemplo:

<?php

Echo 'La resta de 4-2 es: ';

Echo 4-2;

?>

Editorial CEP 111


Manual PHP 6.0. Módulo V

MULTIPLICACIÓN
Multiplica dos valores. Ejemplo:

<?php

Echo 'La multiplicación de 4*2 es: ';

Echo 4*2;

?>

DIVISIÓN
Divide dos valores. Ejemplo:

<?php

Echo 'La división de 4 entre 2 es: ';

Echo 4/2;

?>

MÓDULO
Resto de dividir dos valores. Ejemplo:

<?php

Echo 'El resto de 4 entre 2 es: ';

Echo 4%2;

?>

INCREMENTO
Suma 1 a un determinado valor. Veamos un ejemplo:

<?php

Echo 'El incremento de 2 es: ';

Echo 2++;

?>

112 Editorial CEP


Tema 1. La aritmética y sus operadores en PHP

DECREMENTO
Resta 1 a un determinado valor. Ejemplo:

<?php

Echo 'El decremento de 2 es: ';

Echo 2--;

?>

OPERADORES DE ASIGNACIÓN
Son aquellos que se usan para dar un valor a una variable en php.

Asignación

Asigna el valor de la parte derecha a la variable que esta en el izquierdo. Veamos un ejemplo:

<?php

$a=5;

echo 'el resultado de la asignación es '.$a;

?>

Asignación con suma

Asigna la suma de la parte derecha e izquierda a la izquierda

<?php

$a=1;

$a+=2;

echo 'El valor de la asignación es: '.$a;

?>

Asignación con resta

Asigna la resta de la parte derecha a la izquierda y pone el resultado a la izquierda

<?php

$a=1;

$a-=2;

echo 'El valor de la asignación es: '.$a;

?>

Editorial CEP 113


Manual PHP 6.0. Módulo V

Asignación con multiplicación

Asigna la multiplicación de la parte derecha y la izquierda y pone el resultado a la izquierda

<?php

$a=3;

$a*=2;

echo 'El valor de la asignación es: '.$a;

?>

Asignación con división

Asigna la división de la parte izquierda entre la derecha y pone el resultado a la izquierda

<?php

$a=6;

$a/=2;

echo 'El valor de la asignación es: '.$a;

?>

Asignación con resto

Asigna la división de la parte izquierda entre la derecha y pone el resto de la división a la izquierda

<?php

$a=6;

$a%=2;

echo 'El valor de la asignación es: '.$a;

?>

Asignación con concatenación

Añade el valor de la parte derecha a la izquierda y almacena el resultado a la izquierda

<?php

$a='Editorial ';

$a.='CEP';

echo 'El valor de la asignación es: '.$a;

?>

114 Editorial CEP


Tema 1. La aritmética y sus operadores en PHP

OPERADORES DE COMPARACIÓN
Realizan comparaciones entre variables y números

Comparación de dos valores

Compara dos valores, sin tener en cuenta el tipo de variable, devuelve verdadero en caso de que sean iguales, en caso
contrario, devuelve falso.

<?php

$a=1;

$b=2;

if ($a==$b)

echo 'Son iguales';

else

echo 'Son diferentes';

?>

Comparación de dos valores

Compara dos valores, teniendo en cuenta el tipo de variable, devuelve verdadero en caso de que sean iguales, en caso
contrario, devuelve falso. Es parecido al anterior pero en lugar de ser dos signos de igualdad son tres. Veamos un ejemplo:

<?php

$a=1;

$b=2;

if ($a===$b)

echo 'Son iguales';

else

Editorial CEP 115


Manual PHP 6.0. Módulo V

echo 'Son diferentes';

?>

Compara si las variables son diferentes

Devuelve verdadero si son diferentes y falso en caso contrario, no tiene en cuenta el tipo de variable. Hay dos
operadores que hacen esta función '!=' y '<>'. Veamos un ejemplo:

<?php

$a=1;

$b=2;

if ($a!=$b)

echo 'Son diferentes';

else

echo 'Son iguales';

?>

Compara si las variables son diferentes

Devuelve verdadero si son diferentes y falsos en caso contrario, no tiene en cuenta el tipo de variable. Veamos un
ejemplo:

<?php

$a=1;

$b=2;

if ($a!==$b)

echo 'Son diferentes';

else

116 Editorial CEP


Tema 1. La aritmética y sus operadores en PHP

echo 'Son iguales';

?>

Menor que

Compara que un determinado valor sea menor que otro devolviendo verdadero y falso en caso contrario. Veamos un
ejemplo:

<?php

$a=1;

$b=2;

if ($a<$b)

echo 'a es menor que b';

else

echo 'b es menor que a';

?>

Mayor que

Compara que un determinado valor sea mayor que otro devolviendo verdadero y falso en caso contrario. Veamos un
ejemplo:

<?php

$a=1;

$b=2;

if ($a>$b)

echo 'a es mayor que b';

Editorial CEP 117


Manual PHP 6.0. Módulo V

else

echo 'b es mayor que a';

?>

Menor o igual que

Compara que un determinado valor sea menor o igual que otro devolviendo verdadero y falso en caso contrario. Veamos
un ejemplo:

<?php

$a=1;

$b=2;

if ($a<$b)

echo 'a es menor o igual que b';

else

echo 'b es menor o igual que a';

?>

Mayo o igual que

Compara que un determinado valor sea mayor o igual que otro devolviendo verdadero y falso en caso contrario. Veamos
un ejemplo:

<?php

$a=1;

$b=2;

if ($a>$b)

echo 'a es mayor que b';

118 Editorial CEP


Tema 1. La aritmética y sus operadores en PHP

else

echo 'b es mayor que a';

?>

Ternario

Operador que se usa principalmente para simplificar la escritura de un script.

Valor=condición ? acción_si_es_verdadera : acción_si_es_falso

Veamos como se escribiría el ejemplo anterior usando el operador ternario

<?php

$a=1;

$b=2;

$resultado=($a>$b) ? echo 'a es mayor que b'; : echo 'b es mayor que a';

echo $resultado;

?>

OPERADOR DE EJECUCIÓN
Además de usar la instrucción exec, passthru, etc, existe un operador en php que nos permite ejecutar comandos del
Shell cómodamente `. Veamos un ejemplo:

<?php

$a=`date`;

echo $a;

?>

Como se puede observar con solo introducir el comando entre los caracteres ``, es suficiente para obtener su ejecución
en el interior de la variable.

Editorial CEP 119


Manual PHP 6.0. Módulo V

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

120 Editorial CEP


Tema 1. La aritmética y sus operadores en PHP

< LO QUE HEMOS APRENDIDO TEMA 1

- Conocer los diferentes operadores aritméticos

- Usar los operadores aritméticos

Editorial CEP 121


TEMA 2
Operadores lógicos

n Y LÓGICO
n O LÓGICO
n XOR
n NOT
Tema 2. Operadores lógicos

Son aquellos que realizan operaciones lógicas

Y LÓGICO
Compara que dos variables sean verdaderas. Se puede usar, indistintamente, And ó &&. Veamos un ejemplo:

<?php <?php

$a=1; $a=1;

$b=1; $b=1;

if ($a and $b) {echo 'verdadero';}else {echo 'falso';} if ($a && $b) {echo 'verdadero';}else {echo 'falso';}

?> ?>

O LÓGICO
Compara que alguna de las variables sea verdadera. Se puede usar, indistintamente, Or ó ||. Veamos un ejemplo:

<?php <?php

$a=1; $a=1;

$b=0; $b=0;

if ($a or $b) {echo 'verdadero';}else {echo 'falso';} if ($a || $b) {echo 'verdadero';}else {echo 'falso';}

?> ?>

XOR
Compara que alguna de las dos variables sea cierta, pero no ambas. Veamos un ejemplo:

<?php

$a=1;

$b=0;

if ($a xor $b) {echo 'verdadero';}else {echo 'falso';}

?>

Editorial CEP 125


Manual PHP 6.0. Módulo V

NOT
Devuelve verdadero si la condición es falsa. Se usa el signo de admiración !. Veamos un ejemplo:

<?php

$a=1;

if (!$a) {echo 'verdadero';}else {echo 'falso';}

?>

126 Editorial CEP


Tema 2. Operadores lógicos

< LO QUE HEMOS APRENDIDO TEMA 2

- Conocer los diferentes operadores lógicos

- Usar los operadores lógicos

Editorial CEP 127


MÓDULO VI
Estructuras de control de programa

TEMA 1: Estructuras de control de programa

OBJETIVOS GENERALES DEL MÓDULO

- Conocer las diferentes estructuras de control de programa


- Conocer la importancia de las estructuras de control de programa
- Identificar los diferentes elementos que componen las estructuras de control de programa.
TEMA 1
Estructuras de control de
programa

n CONDICIÓN (IF)
n SWITCH
n BUCLES
Tema 1. Estructuras de control de programa

Durante este modulo vamos a ver cuales son y como usar las diferentes ordenes de control de flujo existentes en php.
Estas estructuras de control de flujo nos permitirá tomar diferentes decisiones durante la ejecución de cualquier programa
del tipo si la variable a vale 1 haz tal acción en caso contrario haz esta otra (instrucción if) o bien realiza este conjunto de
operaciones hasta que se cumpla tal condición (while). Lo mejor será empezar con la descripción de las diferentes
instrucciones que soporta php:

CONDICIÓN (IF)
Las condiciones nos permiten realizar una serie de acciones u otras dependiendo del valor que tome una variable, esta
variable se puede comparar con un número, una cadena de caracteres o bien con otra variable. El uso del if va acompañado
de la instrucción else, siempre y cuando se realicen otras operaciones si no se cumple la condición. Es importante recordar
que la condición del if va siempre entre paréntesis. Los operadores que están a nuestra disposición son las siguientes:

== igual que

!= distinto a

>= mayor o igual

> mayor que

<= menor o igual

< menor

<?php

$edad=19;

if ($edad>=18){

echo "eres mayor de edad";

?>

El ejemplo imprime "eres mayor de edad", solo si la variable $edad es igual o mayor que 18.

<?php

$edad=19;

if ($edad>=18){

echo "eres mayor de edad";

}else{

echo "eres menor de edad";

?>

Editorial CEP 133


Manual PHP 6.0. Módulo VI

Una alternativa a tener en cuenta es el operador ternario, consiste básicamente en abreviar la escritura de las
instrucciones. Veamos el ejemplo anterior de forma simplificada:

<?php

$edad=19;

($edad>=18) ? (echo "eres mayor de edad") : (echo "eres menor de edad")

?>

Como se puede observar, introducimos entre paréntesis la sentencia a evaluar, la interrogante es la instrucción a ejecutar
y los dos puntos sustituyen al else.

Las sentencias a ejecutar van entre paréntesis.

Con este sistema, se escribe menos, pero el resultado es menos legible y es más difícil el mantenimiento del programa
a medio y largo plazo. Por esa razón, es más recomendable el sistema anterior.

A continuación vamos a ver otro script, En este ejemplo (if..else), que es una ampliación del anterior, la instrucción if
evalúa la variable $edad, si esta es igual o mayor de 18 nos imprime el mensaje "eres mayor de edad", en caso contrario
nos imprime "eres menor de edad".

Es destacable la posibilidad de anidad instrucciones if tal y como nos muestra el ejemplo siguiente:

<?php

$dado=rand(1,6);

if ($dado == 1) {

echo "el valor del dado es 1";

} elseif ($dado == 2) {

echo "el valor del dado es 2";

} elseif ($dado == 3) {

echo "el valor del dado es 3";

} elseif ($dado == 4) {

echo "el valor del dado es 4";

} elseif ($dado == 5) {

echo "el valor del dado es 5";

} elseif ($dado == 6) {

echo "el valor del dado es 6";

134 Editorial CEP


Tema 1. Estructuras de control de programa

Es conveniente practicar los dos scripts anteriores antes de intentarlo con este, dada la complejidad, superior de este.
Este programa obtiene un valor aleatorio que guarda en la variable $dado, después evalúa si es igual a 1, en caso
afirmativo, muestra el mensaje "el valor del dado es 1", en caso contrario, vuelve a evaluar la variable, si es igual a 2, nos
muestra el mensaje "el valor del dado es 2" y así sucesivamente, hasta evaluar los 6 casos.

SWITCH
La sentencia switch se usa frecuentemente en lugar de un conjunto de instrucciones if, para clarificar y hacer mas
legibles la aglomeración de estas sentencias if y elseif que se pueden encontrar en un programa.

Veamos el ejemplo anterior del dado pero esta vez con la sentencia swith:

<?php

$dado=rand(1,6);

switch ($dado) {

case 1:

echo "el valor del dado es 1";

break;

case 2:

echo "el valor del dado es 2";

break;

case 3:

echo "el valor del dado es 3";

break;

case 4:

echo "el valor del dado es 4";

break;

case 5:

echo "el valor del dado es 5";

break;

case 6:

echo "el valor del dado es 6";

break;

?>

Editorial CEP 135


Manual PHP 6.0. Módulo VI

Como se puede observar el programa es mucho mas legible, y en consecuencia mas fácil de mantener y modificar. Es
de vital importancia añadir la instrucción break después de acabar la relación de instrucciones que van detrás de cada caso
(case). En caso de no añadirla se ejecutarían todas las instrucciones que hubiese después de hallar una coincidencia.

Por ejemplo:

<?php

$dado=rand(1,6);

switch ($dado) {

case 1:

echo "el valor del dado es 1";

case 2:

echo "el valor del dado es 2";

case 3:

echo "el valor del dado es 3";

case 4:

echo "el valor del dado es 4";

case 5:

echo "el valor del dado es 5";

case 6:

echo "el valor del dado es 6";

?>

En esta ejecución del programa, cuando se encuentre una coincidencia, se ejecutara la instrucción correspondiente y
todas las demás. Si la instrucción rand da como resultado 4,

aparare cera el mensaje "el valor del dado es 4", "el valor del dado es 5", "el valor del dado es 6". Que obviamente no
es un resultado deseado.

136 Editorial CEP


Tema 1. Estructuras de control de programa

BUCLES
Un bucle es la repetición de una o mas instrucciones de forma indefinida hasta que se cumple una condición concreta
y especifica.

Por ejemplo para escribir los números del 1 al 10, podemos usar una instrucción while (mientras en ingles), como se
pude ver en el ejemplo:

<?php

$numero=0;

while ($numero!=10){

$numero++;

echo "$numero<br>";

?>

El script le asigna el valor 0 a la variable $numero, y mientras que esta variable sea distinta de 10 se ejecuta las
instrucciones que hay dentro del bucle (delimitado por las llaves), la primera instrucción incrementa en 1 la variable $numero
y la segunda imprime por pantalla el valor actual de la variable. Es muy importante que no se nos olvide incluir el sumatorio
de la variable $numero, ya que en este caso nunca llegaría a valer 10 y tendríamos un bucle infinito.

Una alternativa al while es el do while (hacer mientras), cuya única diferencia es que la condición en lugar de estar al
principio esta el final. El mismo ejemplo con do while quedaría así:

<?php

$numero=0;

do{

$numero++;

echo "$numero<br>";

}while ($numero!=10)

?>

Como se puede observar los cambios que deben hacerse son ínfimos.

Una alternativa a estas dos sentencias es un bucle for (para), esta instrucción se caracteriza porque la variable que se
usa como contador queda definida dentro de ella.

Editorial CEP 137


Manual PHP 6.0. Módulo VI

El ejemplo anterior quedaría como sigue:

<?php

$numero=0;

for ($numero=1;$numero!=11;$numero++){

echo "$numero<br>";

?>

Literalmente lo podemos traducir como, para $numero=1 hasta que $numero sea distinto de 11 aumenta en 1 la variable
$numero y ejecuta las instrucciones encerradas entre llaves. la variable se define a 1 con el fin de que la primera impresión
por pantalla sea uno, esto se debe a que en esta instrucción se aumenta el contador después de imprimir y no antes (como
sucede con los bucles while), por esa razón la condición acaba cuando llega al número 11, el cual no imprime.

Es más compacta que las instrucciones anteriores y probablemente sea la mas usada.

138 Editorial CEP


Tema 1. Estructuras de control de programa

< LO QUE HEMOS APRENDIDO TEMA 1

- La importancia de las estructuras de control

- El manejo de las diferentes estructuras de control

- A diferenciar las estructuras de control

- A elegir la mas adecuada en cada caso

Editorial CEP 139


MÓDULO VII
Archivos

TEMA 1: Manejo de archivos de texto


TEMA 2: Trabajando con Word
TEMA 3: Trabajando con Excel
TEMA 4: Archivos pdf
TEMA 5: Trabajando con SQLite, como base de datos
TEMA 6: Trabajando con MySQL, como base de datos
TEMA 7: Trabajando con MSAccess, como base de datos

OBJETIVOS GENERALES DEL MÓDULO

- Aprender a manejar archivos de texto


- Manejar archivos del tipo word (rtf)
- Aprender a leer, escribir y modificar archivos de datos, con sqlite y mysql
- Aprender a crear archivos pdf
- Manejar diferentes bases de datos
TEMA 1
Manejo de archivos de texto

n INTRODUCCIÓN
n ARCHIVOS DE TEXTO
n LECTURA DE UN ARCHIVO DE TEXTO
Tema 1. Manejo de archivos de texto

INTRODUCCIÓN
En primer lugar, es necesario saber que es un archivo, es un conjunto de información a la cual se le ha asignado un
nombre. Básicamente podemos pensar que son arrays de bytes. Es el propio sistema operativo el encargado de saber
donde empieza y donde acaba este array.

Loas archivos pueden ser de diferentes tipos, normalmente podemos saber del tipo que son por su extensión. Esta
compuesta por un punto y tres caracteres que van al final del nombre del archivo. Algunas de ellas son:

php - script de php

exe - archivo ejecutable

bat - archivo por lotes

flv - archiv flash

mpg - video

avi - video

txt - texto

doc - documento

db - base de datos

dat - datos

xls - excel

Por nombrar algunas, hay mas y además podríamos inventar la nuestra propia, en Windows, estas extensiones se
asocian a las aplicaciones que crean o ejecutan los archivos, con el fin de que al pinchar dos veces con el ratón encima de
los iconos correspondientes se abran o se ejecuten.

Algunas de las operaciones básicas que puede realizar php sobre los archivos son:

chmod

Cambia los permisos de un archivo

Ejemplo:

<?php

chmod("/path/archivo.txt",777); // donde "archivo.txt" es el nombre del archivo

?>

Editorial CEP 145


Manual PHP 6.0. Módulo VII

copy

Copia un archivo en una nueva ubicación

Ejemplo:

<?php

copy("/path/archivo.txt","/nuevopath/archivo");

?>

file_exists

Chequea la existencia de un archivo

Ejemplo:

<?php

if file_exists("/path/archivo.txt"){

echo "El fichero existe";

}else

echo "No he encontrado el archivo";

?>

filesize

Averigua el tamaño de un archivo

Ejemplo:

<?php

echo filesize("/path/archivo.txt");

?>

146 Editorial CEP


Tema 1. Manejo de archivos de texto

mkdir

Crea un directorio

Ejemplo:

<?php

mkdir("/path/directorio");

?>

move_uploaded_file

Mueve un archivo subido a una nueva ubicación

Ejemplo:

<?php

move_upload_file("archivo.txt","/path/archivo.txt");

?>

rename

Renombra un archivo

Ejemplo:

<?php

rename("/path/archivo.txt","/path/nuevoarchivo.txt");

?>

rmdir

Borra un directorio

Ejemplo:

<?php

rmdir("/path/directorio");

?>

nota: el directorio debe estar vació para poder borrarlo

Editorial CEP 147


Manual PHP 6.0. Módulo VII

unlink

Borrar un archivo

Ejemplo:

<?php

unlink("/path/archivo.txt");

?>

ARCHIVOS DE TEXTO
Php trata este tipo de archivos como secuenciales, es decir, tiene que llegar a todos los registros (líneas) anteriores,
antes de poder leer la que nos interesa.

Obviamente estos ficheros son lentos, comúnmente se asocian al almacenamiento en cintas magnéticas, como los
antiguos juegos del spectrum, pero a pesar de los adelantos tecnológicos, continúan siendo útiles, por ejemplo como copias
de seguridad o incluso como un archivo de almacenamiento sencillo.

Lo que hace realmente php, que esta dotado de instrucciones especificas para tratamiento de cadenas, es leer todo el
archivo e introducirlo en una variable, por tanto, la longitud máxima del archivo viene dada por la capacidad que reverse el
sistema operativo para este tipo de operaciones, que a su vez viene delimitado por la capacidad física del ordenador.

Durante los ejemplos de este tema vamos a ver como leer, escribir, modificar un archivo de estas características, viendo
algún caso real de uso actual.

LECTURA DE UN ARCHIVO DE TEXTO


Este tipo de archivos se puede crear con cualquier procesador de textos plano, es decir, que no asigne ningún formato
al texto, un buen ejemplo puede ser el notepad de windows, el edit del DOS para los entorno de Microsoft o el vi, kate, joe
de linux.

En primer lugar debemos de abrir el archivo con la instrucción fopen y después lo leemos. Por ultimo es muy
recomendable cerrarlo. Es de destacar que cuando finaliza el script de php, este cierra todas las conexiones por defecto,
tanto archivos como bases de datos. Pero se puede dar el caso de que haya modificaciones simultáneas desde diferentes
clientes, con posible perdida o corrupción de datos. Por eso es importante hacer hincapié en que el mismo script cierre el
archivo o la conexión a la base de datos.

Veamos un ejemplo de como escribir en un archivo:

<?php

$archivo=fopen('ejemplo.txt','w');

fwrite($archivo, 'hola mundo\nesto es una prueba');

fclose($archivo);

?>

148 Editorial CEP


Tema 1. Manejo de archivos de texto

El ejemplo, abre el archivo con fopen, con el parámetro w le indicamos que lo cree o reescriba, con fwrite le indicamos
que es lo que tiene que escribir, y por ultimo lo cerramos, si ejecutáramos el ejemplo, el resultado obtenido seria "hola
mundo esto es una prueba". Esto lo podríamos comprobar con el block de notas o con la ejecución del siguiente ejemplo.

Veamos ahora como leer este archivo

<?php

$archivo=fopen('ejemplo.txt','r');

$lineas = fread($archivo, filesize('ejemplo.txt'));

echo $lineas;

fclose($archivo);

?>

El ejemplo realiza las siguientes operaciones:

Abre el archivo (fopen), indicando el nombre y el tipo de lectura (en este caso, solo lectura 'r'). Con fread leemos todo
el contenido del archivo y lo introducimos en la variable $lineas. El comando filesize nos sirve para indicarle a fread el
tamaño del archivo, en caso de no usar esta instrucción tendríamos que indicarle de forma manual el tamaño del archivo
en bytes. Después imprimimos el contenido con echo. Por ultimo realizamos la importante tarea de cerrar el archivo.

Las formas de abrir el archivo son las siguientes:


Modo Sintaxis
r Lectura
r+ Lectura y escritura
w Escritura, en caso de no existir el archivo lo crea, si existe lo reescribe desde el principio
w+ Lectura y escritura
a Añadir, escribir a partir del ultimo contenido, si no existe lo crea
a+ Igual que el anterior, pero permite leer
b Se puede añadir como complemento de cualquiera de los otros indicando que es un archivo
binario (de datos). Esto es aplicable al mundo Windows, ya que hay sistemas como Linux que no
hacen diferencia entre archivos de datos o de texto.
Una alternativa al programa que hemos hecho es la instrucción include. Pero con este comando no tenemos ningún
control sobre el archivo, únicamente lo volcamos sin mas. Veamos el ejemplo:

<?php

include('archivo.txt');

?>

Aunque el resultado es el mismo, seria imposible realizar operaciones de consulta o reemplazar alguna palabra como
vamos a ver a continuación.

Editorial CEP 149


Manual PHP 6.0. Módulo VII

Estos archivos se pueden emplear como pequeñas bases de datos e incluso tienen algún uso exclusivo como puede ser
el caso de un contador de visitas en cualquier página web:

<?

$contador = fopen("contador.txt","r");

$visitas = fread($contador, filesize('contador.txt'));

fclose($contador);

++$visitas;

$contador = fopen("contador.txt","w");

fwrite($contador, $visitas);

fclose($contador);

echo "Eres el visitante número $visitas";

?>

El ejemplo guarda en el archivo contador.txt, primero abre el archivo lee su contenido y lo incrementa en uno, lo guarda
y muestra el mensaje de las visitas realizadas.

Esta versión del programa presenta un problema, si en el intervalo de tiempo en que se abre el archivo y se guarda su
contenido incrementado, se abre con otro proceso (otro visitante)¿Que sucedería?, pues que nuestro contador se
corrompería. Para evitar esto, se puede bloquear el archivo y desbloquearlo cuando se haya grabado, con lo cual hasta que
no se haya realizado la operación no podrá ser solicitado por ningún otro proceso.

Esto lo conseguimos con la instrucción flock (lock es candado en ingles). Los parámetros que admite son:

1. Admite solo lectura

2. Bloquea el archivo de forma exclusiva, el resto de procesos debe esperar

3. Desbloquea el archivo

El ejemplo anterior queda, ahora, así:

<?

flock(2);

$contador = fopen("contador.txt","r");

$visitas = fread($contador, filesize('contador.txt'));

fclose($contador);
150 Editorial CEP
Tema 1. Manejo de archivos de texto

++$visitas;

$contador = fopen("contador.txt","w");

fwrite($contador, $visitas);

fclose($contador);

flock(3);

echo "Eres el visitante número $visitas";

?>

Funciona igual que el anterior, con la salvedad que este bloquea el archivo antes de obtener la información de el y lo
desbloquea cuando graba y cierra el archivo. Evitando con esto el problema de conflictos que teníamos anteriormente.

Para trabajar con este tipo de archivos hay una serie de operaciones que son interesantes, por mencionar algunas, la
trasformación de los saltos de línea en etiquetas br o fgetcsv.

Si intentamos visualizar en el navegador un texto con varias lineas escrito con un procesador de textos o enviado como
dato desde un textarea, se vera todo seguido, ya que el navegador no interpretara los saltos de línea como etiquetas br, la
solución es usar la instrucción nl2br, que realiza automáticamente esta conversión.

Ejemplo:

<?php

$archivo=fopen('ejemplo.txt','r');

$lineas = fread($archivo, filesize('ejemplo.txt'));

echo nl2br($lineas);

fclose($archivo);

?>

A partir de la versión 3 de php se incluyo la instrucción fgetcsv, que nos permite trabajar en formato cvs con archivos
de texto. Este comando lee línea a línea el archivo de texto extrayendo los campos que se encuentren separados por un
carácter en concreto, si no se especifica ninguno por defecto el carácter es la coma.

Para ver un ejemplo, primero creamos un archivo de texto llamada agenda.txt, que tiene el nombre de nuestros
contactos, los teléfonos y un comentario si procede, con los siguientes datos:

- José López Alcaraz, 965 87 34 12, compañero del trabajo

- Alfonso Guijarro Pérez, 934 5682 11

- Carmen Vidal González, 911 78 23 41, Prima Carmencita

Editorial CEP 151


Manual PHP 6.0. Módulo VII

- Anselmo Piñón Candela, 956 34 90 98, amigo del instituto

Veamos el ejemplo:

<?php

$archivo= fopen("agenda.txt", "r");

while (($linea = fgetcsv($archivo, 1000, ",")) !== FALSE) {

$n = count($linea);

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

echo $linea[$i] . "<br>";

fclose($archivo);

?>

Abrimos el archivo y lo leemos hasta el final, cada línea (que puede tener un máximo de 1000 caracteres) genera un
array llamado línea en el cual están todos los campos que están separados por comas.

La variable $n contiene el número de elementos del array, en el ejemplo hay casos que contendrá dos elementos y en
otros tres. Por ultimo, el bucle imprime los diferentes elementos.

152 Editorial CEP


Tema 1. Manejo de archivos de texto

< LO QUE HEMOS APRENDIDO TEMA 1

- Leer, Escribir, modificar archivos de texto

Editorial CEP 153


TEMA 2
Trabajando con Word

n {\\RTF1 - INICIO DE CUALQUIER DOCUMENTO RTF


n {\\FS20 TEXTO} - TAMAÑO DEL TEXTO, EN EL EJEMPLO 20
n \\PAR - RETORNO DE CARRO, ENTER
n {\\B TEXTO} - PONER NEGRITA
n {\\QR} - ALINEACIÓN A LA DERECHA
n {\\QL} - ALINEACIÓN A LA IZQUIERDA
n {\\QC} - ALINEACIÓN CENTRADA
n {\\QJ} - ALINEACIÓN JUSTIFICADA
n {\\I TEXTO} - TIPO DE LETRA ITÁLICA
n {\\UL TEXTO} - SUBRAYADO
Tema 2. Trabajando con Word

En muchas ocasiones puede ser necesario generar y abrir documentos compatibles con Microsoft Word. En este caso
vamos a ver como se genera un archivo rtf, es decir, de texto enriquecido (Rich Text Format) que es compatible con las
aplicaciones mas típicas de procesadores de texto, word, abiword, openoffice, etc.

Lo que vamos a hacer es aprovechar la particularidad de este tipo de archivo que internamente se guarda como un
archivo de texto plano. Teniendo esto en cuenta, solo hay que saber las etiquetas que corresponden a las diferentes
características a introducir en el texto, negrita, subrayado, etc.

Las etiquetas, que forman cualquier archivo de este tipo y con las que vamos a trabajar son las siguientes:

{\\RTF1 - INICIO DE CUALQUIER DOCUMENTO RTF


Veamos un ejemplo:

<?php

header('Content-type: application/msword'); // le indicamos al navegador que es un documento que debe abrir con word

header('Content-Disposition: inline; filename=documento.rtf'); // indicamos el nombre

$documento="{\\rtf1"; // inicio del documento

$documento=$documento."Esto es una prueba de ejemplo";

$documento=$documento."}"; // cierro el documento

echo $documento; // imprimimos el contenido del documento

?>

{\\FS20 TEXTO} - TAMAÑO DEL TEXTO, EN EL EJEMPLO 20


<?php

header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word

header('Content-Disposition: inline; filename=documento.rtf'); // indicamos el nombre

$documento="{\\rtf1"; // inicio del documento

$documento=$documento."{\\fs60 Esto es una prueba de ejemplo\\par}";

$documento=$documento."}"; // cierro el documento

echo $documento; // imprimimos el contenido del documento

?>

Editorial CEP 157


Manual PHP 6.0. Módulo VII

\\PAR - RETORNO DE CARRO, ENTER


<?php

header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word

header('Content-Disposition: inline; filename=documento.rtf'); // indicamos el nombre

$documento="{\\rtf1"; // inicio del documento

$documento=$documento."{Esto es\\par una prueba\\par de ejemplo}";

$documento=$documento."}"; // cierro el documento

echo $documento; // imprimimos el contenido del documento

?>

{\\B TEXTO} - PONER NEGRITA


<?php

header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word

header('Content-Disposition: inline; filename=documento.rtf'); // indicamos el nombre

$documento="{\\rtf1"; // inicio del documento

$documento=$documento."{\\b Esto es una prueba de ejemplo}";

$documento=$documento."}"; // cierro el documento

echo $documento; // imprimimos el contenido del documento

?>

{\\QR} - ALINEACIÓN A LA DERECHA


<?php

header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word

header('Content-Disposition: inline; filename=documento.rtf'); // indicamos el nombre

$documento="{\\rtf1"; // inicio del documento

$documento=$documento."{\\qr Esto es una prueba de ejemplo\\par}";

$documento=$documento."}"; // cierro el documento

echo $documento; // imprimimos el contenido del documento

?>

158 Editorial CEP


Tema 2. Trabajando con Word

{\\QL} - ALINEACIÓN A LA IZQUIERDA


<?php

header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word

header('Content-Disposition: inline; filename=documento.rtf'); // indicamos el nombre

$documento="{\\rtf1"; // inicio del documento

$documento=$documento."{\\ql Esto es una prueba de ejemplo\\par}";

$documento=$documento."}"; // cierro el documento

echo $documento; // imprimimos el contenido del documento

?>

{\\QC} - ALINEACIÓN CENTRADA


<?php

header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word

header('Content-Disposition: inline; filename=documento.rtf'); // indicamos el nombre

$documento="{\\rtf1"; // inicio del documento

$documento=$documento."{\\qc Esto es una prueba de ejemplo\\par}";

$documento=$documento."}"; // cierro el documento

echo $documento; // imprimimos el contenido del documento

?>

{\\QJ} - ALINEACIÓN JUSTIFICADA


<?php

header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word

header('Content-Disposition: inline; filename=documento.rtf'); // indicamos el nombre

$documento="{\\rtf1"; // inicio del documento

$documento=$documento."{\\qj Esto es una prueba de ejemplo\\par}";

$documento=$documento."}"; // cierro el documento

echo $documento; // imprimimos el contenido del documento

?>

Editorial CEP 159


Manual PHP 6.0. Módulo VII

{\\I TEXTO} - TIPO DE LETRA ITÁLICA


<?php

header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word

header('Content-Disposition: inline; filename=documento.rtf'); // indicamos el nombre

$documento="{\\rtf1"; // inicio del documento

$documento=$documento."{\\i Esto es una prueba de ejemplo\\par}";

$documento=$documento."}"; // cierro el documento

echo $documento; // imprimimos el contenido del documento

?>

{\\UL TEXTO} - SUBRAYADO


<?php

header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word

header('Content-Disposition: inline; filename=documento.rtf'); // indicamos el nombre

$documento="{\\rtf1"; // inicio del documento

$documento=$documento."{\\ul Esto es una prueba de ejemplo\\par}";

$documento=$documento."}"; // cierro el documento

echo $documento; // imprimimos el contenido del documento

?>

160 Editorial CEP


Tema 2. Trabajando con Word

< LO QUE HEMOS APRENDIDO TEMA 2

- Crear archivos rtf compatibles con Microsoft Word

- Enriquecer el texto de un archivo rtf

Editorial CEP 161


TEMA 3
Trabajando con Excel

n TRABAJANDO CON EXCEL


Tema 3. Trabajando con Excel

TRABAJANDO CON EXCEL


En algunas aplicaciones es interesante tener la posibilidad de poder mostrar los resultados en un archivo tipo hoja de
cálculo. La forma más sencilla de realizar esta operación es indicarle al navegador que el archivo que va a abrir es de un
tipo determinado en este caso de tipo Excel. Esto se hace con la instrucción header. Veamos un ejemplo muy sencillo, en
el que \t lo usamos para pasar a la siguiente celda y \n para saltar a la siguiente línea.

<?php

$archivo="ejemploExcel.xls";

$celdas = "6 \t 3 \t 18 \t \n";

header('Content-type: application/ms-excel');

header('Content-Disposition: attachment; filename='.$archivo);

echo $celdas;

?>

Es de destacar que se pueden añadir formulas en las celdas, como si de una hoja de calculo real se tratara, veamos el
ejemplo:

<?php

$archivo="ejemploExcel.xls";

$celdas = "6 \t 3 \t=A1*B1 \t \n";

header('Content-type: application/ms-excel');

header('Content-Disposition: attachment; filename='.$archivo);

echo $celdas;

?>

Editorial CEP 165


Manual PHP 6.0. Módulo VII

Un ejemplo mucho más útil es crearlo como archivo html y abrirlo con si de un archivo Excel se tratara. Aquí podemos
usar Ejemplo:

<?php

// Enviamos encabezados de excel

header("Content-type: application/vnd.ms-excel");

header("Content-Disposition: attachment; filename=ejemploExcel.xls");

// Creamos una tabla en html, con una formula

echo "<table>";

echo "<tr><td>6</td><td>3</td>=A1*B1</td></tr>";

echo "</table>";

?>

166 Editorial CEP


Tema 3. Trabajando con Excel

< LO QUE HEMOS APRENDIDO TEMA 3

- Crear archivos tipo hoja de calculo en php compatibles con Microsoft Excel

- Dar formato a las tablas de una hoja de calculo en php

Editorial CEP 167


TEMA 4
Archivos pdf

n ARCHIVOS PDF
Tema 4. Archivos pdf

ARCHIVOS PDF
Actualmente el formato pdf se ha convertido en un estándar a utilizar en el intercambio de archivos. Dada su utilidad no
es posible dejar este módulo sin al menos introducir en el uso y manejo de este importante formato. Aunque es posible usar
otros métodos, pienso que al igual que en los casos anteriores, es interesante hacer uso de lo aprendido en html y
profundizar si el caso lo requiere para crear documentos de este tipo. A tal efecto usaremos la librería dompdf, que es
gratuita y la podemos descargar de la dirección: http://code.google.com/p/dompdf/

Básicamente lo que hace esta librería es transformar un documento html a pdf. Para hacerla funcionar solamente hay
que bajar y descomprimir el archivo a la carpeta donde estamos haciendo las pruebas con php.

Vamos a ver un primer ejemplo sencillo:

<?php

require_once("dompdf/dompdf_config.inc.php");// Incluimos dompdf_config.inc.php, esto es imprescindible

$pagina = "

<html>

<body>

Esto es un primer ejemplo con DOMPDF

</body>

</html>

";

$pdf = new DOMPDF(); // hacemos referencia a dompdf creando un nuevo objeto

$pdf->load_html($pagina); //Con "load_html" cargamos nuestra pagina web

$pdf->render(); // creamos el pdf a partir del codigo html

$pdf->stream("ejemplo.pdf"); // lo descargamos con el nombre que aparece entre paréntesis en este caso "ejemplo.pdf"

?>

Es de destacar que esta librería admite estilos, es decir, archivos del tipo *.CSS que nos permite dar formato a las
paginas html, algunos ejemplos de estos archivos los podemos ver en la pagina
http://icant.co.uk/csstablegallery/tables/47.php.

Editorial CEP 171


Manual PHP 6.0. Módulo VII

Para poner un breve ejemplo de hoja de estilo, vamos a poner el fondo añil y las letras azul marino. Podemos ver todos
los colores aceptados (con sus códigos decimales y hexadecimales) por html en la siguiente web:
http://es.wikipedia.org/wiki/Colores_HTML

<html>

<head>

<title>Ejemplo de Estilo</title>

<style type="text/css">

body {

color: blue;

background-color: cyan }

</style>

</head>

<body>

Esto es una prueba con CSS

</body>

</html>

Como se puede observar la estructura es la misma que la de una pagina web, la diferencia esta en las etiquetas <style>
y </style> que se encuentran en la cabecera (head). Lo que hemos hecho ha sido añadir una regla al elemento body de la
pagina html, esta regla va entre llaves, es decir empieza con el símbolo "{" y acaba con el símbolo "}". Dentro de esta regla
hemos modificado dos propiedades color (que es el color por defecto del texto) y background-color (que es el color del
fondo).

172 Editorial CEP


Tema 4. Archivos pdf

El ejemplo completo para poder verlo como archivo pdf es el siguiente:

<?php

require_once("dompdf/dompdf_config.inc.php");// Incluimos dompdf_config.inc.php, esto es imprescindible

$pagina = "

<html>

<head>

<title>Ejemplo de Estilo</title>

<style type='text/css'>

body {

color: blue;

background-color: cyan }

</style>

</head>

<body>

Esto es una prueba con CSS

</body>

</html>

";

$pdf = new DOMPDF(); // hacemos referencia a dompdf creando un nuevo objeto

$pdf->load_html($pagina); //Con "load_html" cargamos nuestra pagina web

$pdf->render(); // creamos el pdf a partir del codigo html

$pdf->stream("ejemplo.pdf"); // lo descargamos con el nombre que aparece entre paréntesis en este caso "ejemplo.pdf"

?>

Editorial CEP 173


Manual PHP 6.0. Módulo VII

Algo importante a tener en cuenta es que los estilos los podemos poner en hojas aparte con el fin de no tener que repetir
estos en cada pagina que hagamos, con lo cual facilitamos el manteniendo.

En el ejemplo anterior tendríamos que hacer dos archivos, el primero podríamos llamarlo "estilo.css" y tendría el
siguiente código:

body {

color: blue;

background-color: cyan }

y el Segundo tendría el siguiente:

<html>

<head>

<title>Ejemplo de Estilo</title>

<link rel="stylesheet" type="text/css" href="estilo.css">

</head>

<body>

Esto es una prueba con CSS

</body>

</html>

Como se puede observar a simple vista la línea <link rel="stylesheet" type="text/css" href="estilo.css"> hace referencia
al nombre del archivo donde están las reglas del estilo.

174 Editorial CEP


Tema 4. Archivos pdf

< LO QUE HEMOS APRENDIDO TEMA 4

- Crear archivos pdf en php

Editorial CEP 175


TEMA 5
Trabajando con SQLite,
como base de datos

n TRABAJANDO CON SQLITE, COMO BASE DE DATOS


Tema 5. Trabajando con SQLite, como base de datos

TRABAJANDO CON SQLITE, COMO BASE DE DATOS


SQLite es un buen ejemplo de base de datos libre que, en su justa medida, compagina sencillez y eficacia y robustez.
Cualquier base de datos, y esta no es una excepción, tiene que ser liviana, rápida y para conseguir esto D. Richard Hipp
(creador de esta base de datos) creo una librería que se enlazaba con el lenguaje de programación en cuestión, en nuestro
caso php. Existe la posibilidad de usar esta base de datos desde diferentes lenguajes de programación entre ellos: C, Java,
Pitón, Gambas, etc. Sqlite almacena la información en un solo archivo, que puede llegar a ocupar hasta 2 terabytes, es
capaz de responder a varias peticiones de lectura simultáneas, pero bloquea por completo la base de datos a la hora de
escribir en ella. El hecho de que esta librería se inserte dentro del lenguaje de programación le confiere una gran velocidad
que la hace muy interesante para pequeñas y medianas aplicaciones. Es de destacar que viene incluido en php, a partir de
la versión 5.

Vamos a trabajar con un ejemplo de una pequeña base de datos encargada de gestionar la agenda de teléfonos. Para
seguir el desarrollo de la pequeña aplicación empezaremos viendo un pequeño menú. A este archivo lo vamos a llamar
indice.php

<html>

<head>

<title>

Agenda de telefonos

</title>

</head>

<body>

<left>

<menu>

<big><big>Menu</big></big>

<li><a href='modifica.php'>Nuevo</a>

<li><a href='listar.php'>ver todos los contactos</a>

</menu>

<?php

// Desde este indice, por defecto controlamos la creación de la base de datos y de la tabla

// además nos ofrece la opción de:

// Crear una nueva entrada

// Listar la información de todos los contactos que hayamos introducido

// Abrimos la base de datos, si no existe se crea

Editorial CEP 179


Manual PHP 6.0. Módulo VII

// Creamos la tabla, si existe no hace nada

$db = sqlite_open("datos.db") or die("No se puede abrir la base de datos ");

?>

</body>

</html>

El menú, tiene las opciones de ver todos los contactos o de crear uno nuevo. Mas adelante veremos que desde la
visualización estará permitida la modificación.

Si la base de datos no existe la crea, apareciendo en el directorio raíz un archivo con el nombre que hemos puesto en
la instrucción sqlite_open, en este caso datos.db. La instrucción va precedida de la etiqueta arroba para evitar la aparición
de errores si esta ya existe. El resultado de esta operación lo hemos igualado a la variable $db, que aunque en este ejemplo
no nos es útil, en los sucesivos se usara como identificador para realizar diferentes operaciones sobre la base de datos en
general y las tablas que las componen en particular.

En primer lugar vamos a ver como podemos ver la información contenida en nuestra base de datos, al archivo que nos
muestra esta información lo vamos a llamar listar.php:

<?php

// listado de toda la información de los contactos que hay

// esta opción nos da acceso a dar de baja la información que no necesitemos o modificarla con modifica.php

$db = sqlite_open("datos.db") or die("No se puede abrir la base de datos ");

@sqlite_query($db, "CREATE TABLE agenda(id INTEGER PRIMARY KEY, nombre, descripcion, direccion, cp, localidad,
provincia, email, telefono)");

$resultado = sqlite_query($db, "SELECT * FROM agenda");

print "<hr><center><a href='indice.php'>Volver al indice</a></center><hr>";

while($row = sqlite_fetch_array($resultado))

print("Id: {$row['id']} <br />");

print("Nombre: {$row['nombre']} <br />");

print("Descripción: {$row['descripcion']} <br />");

print("Dirección: {$row['direccion']} <br />");

180 Editorial CEP


Tema 5. Trabajando con SQLite, como base de datos

print("Codigo postal: {$row['cp']} <br />");

print("Localidad: {$row['localidad']} <br />");

print("Provincia: {$row['provincia']} <br />");

print("Email: {$row['email']} <br />");

print("Telefono: {$row['telefono']} <br />");

print "<a href='modifica.php?id={$row[0]}".

"&nombre={$row['nombre']}".

"&descripcion={$row['descripcion']}".

"&direccion={$row['direccion']}".

"&cp={$row['cp']}".

"&localidad={$row['localidad']}".

"&provincia={$row['provincia']}".

"&email={$row['email']}".

"&telefono={$row['telefono']}'>Modificar</a> ".

"<a href='baja.php?id={$row[0]}'>Baja</a><br><hr>";

print "<center><a href='indice.php'>Volver al indice</a></center><hr>";

?>

Como se puede ver a simple vista se hace referencia a dos scripts que todavía no hemos hecho "baja.php" y
modifica.php. Los cuales veremos a continuación.

En primer lugar abrimos la base de datos (con sqlite_open) tal y como hemos visto en el ejemplo anterior. Ahora
realizamos varias consultas con sqlite_query. La primera es para crear la tabla si esta no existe, si existe da un error, el cual
evitamos con la arroba, en segundo lugar seleccionamos todos los registros de nuestra tabla con "select * from agenda",
introduciendo el indicador en la variable resultado. Llegados aquí solo queda mostrar los resultados y darles algún tipo de
formato. Para realizar esto usamos un bucle while, el cual finaliza cuando no hay mas registros. Esto lo hacemos con $row
= sqlite_fetch_array($resultado). Como se puede observar los resultados de las columnas los introducimos en la variable
$row. Ahora queda mostrar los resultados con la instrucción print. Debajo de cada registro introducimos una referencia al
script baja, al cual le enviaremos el id para poder eliminar el registro.

Editorial CEP 181


Manual PHP 6.0. Módulo VII

Para continuar con nuestra pequeña agenda telefónica vamos a realizar un pequeño formulario desde donde poder
introducir o modificar los datos correspondientes. El archivo lo vamos a llamar modifica.php:

<?php

// este documento html nos sirve tanto para modificar o dar de alta un contacto nuevo

// dependiendo de si le enviamos un id (modificación) o no (alta)

// en caso de alta la acción es grabaA.php y en el caso de la modificación es grabaM.php

?>

<html>

<head>

<title>Agenda de telefonos</title>

</head>

<body>

<?php print "<hr><center><a href='indice.php'>Volver al indice</a></center><hr>"; ?>

<center><big><big>Alta/Modificación de los datos de un contacto</big></big></center><hr>

<form method="GET" action="<?php if ($_GET['id']!=0) {print 'grabaM.php';}else{print 'grabaA.php';} ?>">

Nombre: <INPUT type="text" name="nombre" value="<?php print $_GET['nombre'] ?>"><BR>

Descripcion: <INPUT type="text" name="descripcion" value="<?php print $_GET['descripcion'] ?>"><BR>

Direccion: <INPUT type="text" name="direccion" value="<?php print $_GET['direccion'] ?>"><BR>

Codigo Postal: <INPUT type="text" name="cp" value="<?php print $_GET['cp'] ?>"><BR>

Localidad: <INPUT type="text" name="localidad" value="<?php print $_GET['localidad'] ?>"><BR>

Provincia: <INPUT type="text" name="provincia" value="<?php print $_GET['provincia'] ?>"><BR>

Email: <INPUT type="text" name="email" value="<?php print $_GET['email'] ?>"><BR>

Telefono: <INPUT type="text" name="telefono" value="<?php print $_GET['telefono'] ?>"><BR>

<?php if ($_GET['id']!=0) {print '<input type="hidden" name="id" value="'.$_GET['id'].'">';} ?>

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

</form>

<?php print "<hr><center><a href='indice.php'>Volver al indice</a></center><hr>"; ?>

182 Editorial CEP


Tema 5. Trabajando con SQLite, como base de datos

</body>

</html>

El formulario presenta la característica de mostrar dentro de los campos input el contenido del datos si este ha sido
enviado por el método get. A continuación vamos a ver los scripts grabaA.php y grabaM.php.

En primer lugar veamos grabaA.php

<?php

// este documento html nos sirve tanto para modificar o dar de alta un contacto nuevo

// dependiendo de si le enviamos un id (modificación) o no (alta)

// en caso de alta la acción es grabaA.php y en el caso de la modificación es grabaM.php

?>

<html>

<head>

<title>Agenda de telefonos</title>

</head>

<body>

<?php print "<hr><center><a href='indice.php'>Volver al indice</a></center><hr>"; ?>

<center><big><big>Alta/Modificación de los datos de un contacto</big></big></center><hr>

<form method="GET" action="<?php if ($_GET['id']!=0) {print 'grabaM.php';}else{print 'grabaA.php';} ?>">

Nombre: <INPUT type="text" name="nombre" value="<?php print $_GET['nombre'] ?>"><BR>

Descripcion: <INPUT type="text" name="descripcion" value="<?php print $_GET['descripcion'] ?>"><BR>

Direccion: <INPUT type="text" name="direccion" value="<?php print $_GET['direccion'] ?>"><BR>

Codigo Postal: <INPUT type="text" name="cp" value="<?php print $_GET['cp'] ?>"><BR>

Localidad: <INPUT type="text" name="localidad" value="<?php print $_GET['localidad'] ?>"><BR>

Provincia: <INPUT type="text" name="provincia" value="<?php print $_GET['provincia'] ?>"><BR>

Email: <INPUT type="text" name="email" value="<?php print $_GET['email'] ?>"><BR>

Telefono: <INPUT type="text" name="telefono" value="<?php print $_GET['telefono'] ?>"><BR>

<?php if ($_GET['id']!=0) {print '<input type="hidden" name="id" value="'.$_GET['id'].'">';} ?>

Editorial CEP 183


Manual PHP 6.0. Módulo VII

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

</form>

<?php print "<hr><center><a href='indice.php'>Volver al indice</a></center><hr>"; ?>

</body>

</html>

Ahora veremos baja.php

<?php

$db = sqlite_open("datos.db") or die("No se puede abrir la base de datos ");

@sqlite_query($db, "CREATE TABLE agenda(id INTEGER PRIMARY KEY, nombre, descripcion, direccion, cp, localidad,
provincia, email, telefono)");

$id=$_GET['id'];

sqlite_query($db,"DELETE FROM agenda WHERE id='".$id."'");

header('Location: listar.php')

?>

184 Editorial CEP


Tema 5. Trabajando con SQLite, como base de datos

< LO QUE HEMOS APRENDIDO TEMA 5

- Conocer SQLite como ejemplo de base de datos libre

Editorial CEP 185


TEMA 6
Trabajando con MySQL,
como base de datos

n TRABAJANDO CON MYSQL, COMO BASE DE DATOS


Tema 6. Trabajando con MySQL, como base de datos

TRABAJANDO CON MYSQL, COMO BASE DE DATOS


Probablemente MySQL sea la base de datos mas difundida entre los diferentes usuarios, ya que es una base de datos
"seria", es decir, se puede usar para fines profesionales o semiprofesionales pudiendo sustituir, tranquilamente, a bases de
datos mas robustas como Postgree u Oracle (las cuales se usan exclusivamente para grandes soluciones). No es difícil
encontrarnos por Internet paginas web que hacen uso de esta flexible solución.

Para poder ver como funciona MySQL nada mejor que hacer referencia al ejemplo del modulo anterior. Básicamente
vamos a ver que cambiaríamos del ejemplo para que pudiésemos usar esta base de datos. Php nos facilita funciones
nativas para trabajar con las consultas

A diferencia de SQLite, existe un grado mayor de seguridad y en consecuencia tenemos que introducir donde esta la
base de datos, el nombre de usuario y la clave de acceso.

Un ejemplo puede ser:

<?php

$conectar = mysql_connect("localhost", "nombre_usuario", "clave_acceso");

mysql_select_db("ejemplo", $conectar);

?>

Para continuar con la línea del tema anterior, vamos a realizar el mismo ejemplo, pero esta vez con MySQL. Empecemos
con el script índice.php:

<html>

<head>

<title>

Agenda de telefonos

</title>

</head>

<body>

<left>

<menu>

<big><big>Menu</big></big>

<li><a href='modifica.php'>Nuevo</a>

<li><a href='listar.php'>ver todos los contactos</a>

</menu>

<?php

Editorial CEP 189


Manual PHP 6.0. Módulo VII

// Desde este indice, por defecto controlamos la creación de la base de datos y de la tabla

// ademas nos ofrece la opción de:

// Crear una nueva entrada

// Listar la información de todos los contactos que hayamos introducido

// Abrimos la base de datos, si no existe se crea

// Creamos la tabla, si existe no hace nada

$conectar = mysql_connect("localhost", "root", "");

mysql_query("CREATE DATABASE datos", $conectar);

?>

</body>

</html>

Como se puede observar es similar al ejemplo anterior.

Ahora veremos como quedaría listar.php:

<?php

// listado de toda la información de los contactos que hay

// esta opción nos da acceso a dar de baja la información que no necesitemos o modificarla con modifica.php

$conectar = mysql_connect("localhost", "root", "");

mysql_select_db("datos",$conectar);

mysql_query("CREATE TABLE agenda(id INTEGER PRIMARY KEY,

nombre varchar(50),

descripcion varchar(150),

direccion varchar(150),

cp int(11),

localidad varchar(50),

provincia varchar(50),

190 Editorial CEP


Tema 6. Trabajando con MySQL, como base de datos

email varchar(50),

telefono varchar(50)

)");

$resultado = mysql_query("SELECT * FROM agenda");

print "<hr><center><a href='indice.php'>Volver al indice</a></center><hr>";

while($row = mysql_fetch_row($resultado))

print("Id: {$row[0]} <br />");

print("Nombre: {$row[1]} <br />");

print("Descripción: {$row[2]} <br />");

print("Dirección: {$row[3]} <br />");

print("Codigo postal: {$row[4]} <br />");

print("Localidad: {$row[5]} <br />");

print("Provincia: {$row[6]} <br />");

print("Email: {$row[7]} <br />");

print("Telefono: {$row[8]} <br />");

print "<a href='modifica.php?id={$row[0]}".

"&nombre={$row[1]}".

"&descripcion={$row[2]}".

"&direccion={$row[3]}".

"&cp={$row[4]}".

"&localidad={$row[5]}".

"&provincia={$row[6]}".

"&email={$row[7]}".

"&telefono={$row[8]}'>Modificar</a> ".

"<a href='baja.php?id={$row[0]}'>Baja</a><br><hr>";

Editorial CEP 191


Manual PHP 6.0. Módulo VII

print "<center><a href='indice.php'>Volver al indice</a></center><hr>";

?>

Veamos ahora el archivo que contiene el formulario para modificar:

<?php

// este documento html nos sirve tanto para modificar o dar de alta un contacto nuevo

// dependiendo de si le enviamos un id (modificación) o no (alta)

// en caso de alta la acción es grabaA.php y en el caso de la modificación es grabaM.php

?>

<html>

<head>

<title>Agenda de telefonos</title>

</head>

<body>

<?php print "<hr><center><a href='indice.php'>Volver al indice</a></center><hr>"; ?>

<center><big><big>Alta/Modificación de los datos de un contacto</big></big></center><hr>

<form method="GET" action="<?php if ($_GET['id']!=0) {print 'grabaM.php';}else{print 'grabaA.php';} ?>">

Nombre: <INPUT type="text" name="nombre" value="<?php print $_GET['nombre'] ?>"><BR>

Descripcion: <INPUT type="text" name="descripcion" value="<?php print $_GET['descripcion'] ?>"><BR>

Direccion: <INPUT type="text" name="direccion" value="<?php print $_GET['direccion'] ?>"><BR>

Codigo Postal: <INPUT type="text" name="cp" value="<?php print $_GET['cp'] ?>"><BR>

Localidad: <INPUT type="text" name="localidad" value="<?php print $_GET['localidad'] ?>"><BR>

Provincia: <INPUT type="text" name="provincia" value="<?php print $_GET['provincia'] ?>"><BR>

Email: <INPUT type="text" name="email" value="<?php print $_GET['email'] ?>"><BR>

Telefono: <INPUT type="text" name="telefono" value="<?php print $_GET['telefono'] ?>"><BR>

192 Editorial CEP


Tema 6. Trabajando con MySQL, como base de datos

<?php if ($_GET['id']!=0) {print '<input type="hidden" name="id" value="'.$_GET['id'].'">';} ?>

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

</form>

<?php print "<hr><center><a href='indice.php'>Volver al indice</a></center><hr>"; ?>

</body>

</html>

Ahora graba A.php:

<?php

$conectar = mysql_connect("localhost", "root", "");

mysql_select_db("datos",$conectar);

mysql_query("CREATE TABLE agenda(id MEDIUMINT NOT NULL AUTO_INCREMENT,

nombre varchar(50),

descripcion varchar(150),

direccion varchar(150),

cp int(11),

localidad varchar(50),

provincia varchar(50),

email varchar(50),

telefono varchar(50),

PRIMARY KEY (id)

)");

$nombre=$_GET['nombre'];

$descripcion=$_GET['descripcion'];

$direccion=$_GET['direccion'];

Editorial CEP 193


Manual PHP 6.0. Módulo VII

$cp=$_GET['cp'];

$localidad=$_GET['localidad'];

$provincia=$_GET['provincia'];

$email=$_GET['email'];

$telefono=$_GET['telefono'];

mysql_query("INSERT INTO agenda (nombre,descripcion,direccion,cp,localidad,provincia,email,telefono) values (

'$nombre',

'$descripcion',

'$direccion',

$cp,

'$localidad',

'$provincia',

'$email',

'$telefono')");

header('Location: listar.php')

?>

y por ultimo baja.php:

<?php

$conectar = mysql_connect("localhost", "root", "");

mysql_select_db("datos",$conectar);

mysql_query("CREATE TABLE agenda(id INTEGER PRIMARY KEY,

nombre varchar(50),

descripcion varchar(150),

direccion varchar(150),

cp int(11),

194 Editorial CEP


Tema 6. Trabajando con MySQL, como base de datos

localidad varchar(50),

provincia varchar(50),

email varchar(50),

telefono varchar(50)

)");

$id=$_GET['id'];

$nombre=$_GET['nombre'];

$descripcion=$_GET['descripcion'];

$direccion=$_GET['direccion'];

$cp=$_GET['cp'];

$localidad=$_GET['localidad'];

$provincia=$_GET['provincia'];

$email=$_GET['email'];

$telefono=$_GET['telefono'];

mysql_query("UPDATE agenda SET nombre='".$nombre."' WHERE id='".$id."'");

mysql_query("UPDATE agenda SET descripcion='".$descripcion."' WHERE id='".$id."'");

mysql_query("UPDATE agenda SET direccion='".$direccion."' WHERE id='".$id."'");

mysql_query("UPDATE agenda SET cp='".$cp."' WHERE id='".$id."'");

mysql_query("UPDATE agenda SET localidad='".$localidad."' WHERE id='".$id."'");

mysql_query("UPDATE agenda SET provincia='".$provincia."' WHERE id='".$id."'");

Editorial CEP 195


Manual PHP 6.0. Módulo VII

mysql_query("UPDATE agenda SET email='".$email."' WHERE id='".$id."'");

mysql_query("UPDATE agenda SET telefono='".$telefono."' WHERE id='".$id."'");

header('Location: listar.php')

?>

196 Editorial CEP


Tema 6. Trabajando con MySQL, como base de datos

< LO QUE HEMOS APRENDIDO TEMA 6

- Conocer MySQL como ejemplo de base de datos

Editorial CEP 197


TEMA 7
Trabajando con MSAccess,
como base de datos

n TRABAJANDO CON MSACCESS, COMO BASE DE DATOS


Tema 7. Trabajando con MSAccess, como base de datos

TRABAJANDO CON MSACCESS, COMO BASE DE DATOS


Una base de datos con mucha difusión, fácil manejo y muy visual, aunque poco eficiente en grandes/medianos
proyectos, es MS-Access.

Probablemente la característica mas significativa de Access es su necesidad de usar el ODBC de Windows para poder
trabajar con php. Por eso vamos a ver los pasos a seguir para poder configurarlo en Windows-XP. En primer lugar tenemos
que ir al panel de control, una vez dentro cambiamos a vista clásica, Herramientas administrativas y por ultimo
seleccionamos orígenes de datos ODBC.

Editorial CEP 201


Manual PHP 6.0. Módulo VII

Una vez en el ODBC seleccionamos la opción DNS sistema,

Pulsamos agregar y seleccionamos el driver adecuado, en nuestro caso Driver de Microsoft Access (*.mdb)

202 Editorial CEP


Tema 7. Trabajando con MSAccess, como base de datos

Acto seguido le ponemos el nombre que queramos y seleccionamos el archivo de la base de datos

Ya podemos usar access con php

Al igual que en los temas anteriores, vamos a ver diferentes ejemplos:

Indice.php

<html>

<head>

<title>

Agenda de telefonos

</title>

</head>

<body>

<left>

<menu>

<big><big>Menu</big></big>

<li><a href='modifica.php'>Nuevo</a>

<li><a href='listar.php'>ver todos los contactos</a>

</menu>

<?php

// Desde este indice, por defecto controlamos la cración de la base de datos y de la tabla

// ademas nos ofrece la opción de:

// Crear una nueva entrada

// Listar la información de todos los contactos que hayamos introducido

// Abrimos la base de datos, si no existe se crea

// Creamos la tabla, si existe no hace nada

odbc_connect("datos",'','');//nos conectamos a la base de datos

?>

</body>

</html>

Editorial CEP 203


Manual PHP 6.0. Módulo VII

Básicamente la diferencia con los ejemplos de los temas anteriores es la instrucción odbc_connect, con la que nos
conectamos a la base de datos.

Listar.php

<?php

// Listado de toda la información de los contactos que hay

// Esta opción nos da acceso a dar de baja la información que no necesitemos o modificarla con modifica.php

$db = odbc_connect("datos",'','');

@odbc_exec($db,"CREATE TABLE agenda(id INTEGER PRIMARY KEY,

nombre varchar(50),

descripcion varchar(150),

direccion varchar(150),

cp int(11),

localidad varchar(50),

provincia varchar(50),

email varchar(50),

telefono varchar(50)

)");

$resultado = odbc_exec($db,"SELECT * FROM agenda");

print "<hr><center><a href='indice.php'>Volver al indice</a></center><hr>";

while($row = odbc_fetch_array($resultado))

print("Id: {$row['id']} <br />");

print("Nombre: {$row['nombre']} <br />");

204 Editorial CEP


Tema 7. Trabajando con MSAccess, como base de datos

print("Descripción: {$row['descripcion']} <br />");

print("Dirección: {$row['direccion']} <br />");

print("Codigo postal: {$row['cp']} <br />");

print("Localidad: {$row['localidad']} <br />");

print("Provincia: {$row['provincia']} <br />");

print("Email: {$row['email']} <br />");

print("Telefono: {$row['telefono']} <br />");

print "<a href='modifica.php?id={$row['id']}".

"&nombre={$row['nombre']}".

"&descripcion={$row['descripcion']}".

"&direccion={$row['direccion']}".

"&cp={$row['cp']}".

"&localidad={$row['localidad']}".

"&provincia={$row['provincia']}".

"&email={$row['email']}".

"&telefono={$row['telefono']}'>Modificar</a> ".

"<a href='baja.php?id={$row[id]}'>Baja</a><br><hr>";

print "<center><a href='indice.php'>Volver al indice</a></center><hr>";

?>

Es de destacar la instrucción odbc_exec, que nos sirve para realizar una consulta.

Modifica.php

<?php

// este documento html nos sirve tanto para modificar o dar de alta un contacto nuevo

// dependiendo de si le enviamos un id (modificación) o no (alta)

// en caso de alta la acción es grabaA.php y en el caso de la modificación es grabaM.php

?>

Editorial CEP 205


Manual PHP 6.0. Módulo VII

<html>

<head>

<title>Agenda de telefonos</title>

</head>

<body>

<?php print "<hr><center><a href='indice.php'>Volver al indice</a></center><hr>"; ?>

<center><big><big>Alta/Modificación de los datos de un contacto</big></big></center><hr>

<form method="GET" action="<?php if ($_GET['id']!=0) {print 'grabaM.php';}else{print 'grabaA.php';} ?>">

Nombre: <INPUT type="text" name="nombre" value="<?php print $_GET['nombre'] ?>"><BR>

Descripcion: <INPUT type="text" name="descripcion" value="<?php print $_GET['descripcion'] ?>"><BR>

Direccion: <INPUT type="text" name="direccion" value="<?php print $_GET['direccion'] ?>"><BR>

Codigo Postal: <INPUT type="text" name="cp" value="<?php print $_GET['cp'] ?>"><BR>

Localidad: <INPUT type="text" name="localidad" value="<?php print $_GET['localidad'] ?>"><BR>

Provincia: <INPUT type="text" name="provincia" value="<?php print $_GET['provincia'] ?>"><BR>

Email: <INPUT type="text" name="email" value="<?php print $_GET['email'] ?>"><BR>

Telefono: <INPUT type="text" name="telefono" value="<?php print $_GET['telefono'] ?>"><BR>

<?php if ($_GET['id']!=0) {print '<input type="hidden" name="id" value="'.$_GET['id'].'">';} ?>

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

</form>

<?php print "<hr><center><a href='indice.php'>Volver al indice</a></center><hr>"; ?>

</body>

</html>

Como se puede observar es similar a la programación con mysql o sqlite

206 Editorial CEP


Tema 7. Trabajando con MSAccess, como base de datos

grabaA.php

<?php

$db = odbc_connect("datos",'','');

@odbc_exec($db,"CREATE TABLE agenda(id AUTOINCREMENT,

nombre varchar(50),

descripcion varchar(150),

direccion varchar(150),

cp int,

localidad varchar(50),

provincia varchar(50),

email varchar(50),

telefono varchar(50),

PRIMARY KEY (id)

)");

$nombre=$_GET['nombre'];

$descripcion=$_GET['descripcion'];

$direccion=$_GET['direccion'];

$cp=$_GET['cp'];

$localidad=$_GET['localidad'];

$provincia=$_GET['provincia'];

$email=$_GET['email'];

$telefono=$_GET['telefono'];

odbc_exec($db,"INSERT INTO agenda (nombre,descripcion,direccion,cp,localidad,provincia,email,telefono) values (

'$nombre',

'$descripcion',

Editorial CEP 207


Manual PHP 6.0. Módulo VII

'$direccion',

$cp,

'$localidad',

'$provincia',

'$email',

'$telefono')");

header('Location: listar.php')

?>

Es de destacar la instrucción odbc_exec, que nos sirve para realizar una consulta.

Baja.php

<?php

$db = odbc_connect("datos",'','');

@odbc_exec($db,"CREATE TABLE agenda(id AUTOINCREMENT,

nombre varchar(50),

descripcion varchar(150),

direccion varchar(150),

cp int,

localidad varchar(50),

provincia varchar(50),

email varchar(50),

telefono varchar(50),

PRIMARY KEY (id)

)");

$id=$_GET['id'];

odbc_exec($db,"DELETE FROM agenda WHERE id=".$id);

208 Editorial CEP


Tema 7. Trabajando con MSAccess, como base de datos

header('Location: listar.php')

?>

Es de destacar la instrucción odbc_exec, que nos sirve para realizar una consulta.

Editorial CEP 209


Manual PHP 6.0. Módulo VII

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

210 Editorial CEP


Tema 7. Trabajando con MSAccess, como base de datos

< LO QUE HEMOS APRENDIDO TEMA 7

- Conocer MSAccess como base de datos

Editorial CEP 211


MÓDULO VIII
Introducción a la programación

TEMA 1: Planificación de una aplicación en PHP


TEMA 2: Desarrollo de los diferentes menus
TEMA 3: Plantillas

OBJETIVOS GENERALES DEL MÓDULO

- Planificar una aplicación en PHP, justificando las decisiones tomadas


- Diseñar diferentes menús en CSS
- Ser capaz de crear plantillas y trabajar con ellas
TEMA 1
Planificación de una
aplicación en PHP

n INTRODUCCIÓN
n DEFINICIÓN DE LOS OBJETIVOS GENERALES DE LA APLICACIÓN
n PLANTEAR COMO CONSEGUIR DICHOS OBJETIVOS
n ANALIZAR LA CREACIÓN DE LA BASE DE DATOS Y LA RELACIÓN ENTRE LAS
TABLAS
n ORGANIZAR ADECUADAMENTE LOS ARCHIVOS
Tema 1. Planificación de una aplicación en PHP

INTRODUCCIÓN
Usando todo lo aprendido hasta el momento, vamos a realizar la planificación de una pequeña aplicación de gestión de
almacén y facturación para una tienda de electrodomésticos.

Trabajaremos en Microsoft Access, dada la facilidad que tiene para la realización de consultas de forma visual su
posterior extracción de código SQL. Para la realización de las plantillas html vamos a realizarlas con Microsoft Word, aunque
serviría cualquier procesador de textos que admitiera el formato html, por ejemplo el Writer del OpenOffice.

Las razones para emplear este sistema, son puramente didácticas. El navegador usado ha sido el Chrome (aunque en
un principio se puede usar cualquiera) y el servidor usado para las pruebas ha sido una versión de evaluación de MoWes,
ya que es un sistema portátil que permite hacer pruebas con mucha facilidad y no necesita instalación. Todo lo expuesto en
lo sucesivo es portable, es decir, a la hora de realizar un servidor potente, estable, profesional y, casi con toda seguridad,
declinarnos por Linux (como alternativa seria y empresarial) solo tendríamos que copiar los archivos y traducir a una base
de datos libre, como por ejemplo sqlite.

Detalle de la pantalla de inicio de la aplicación

DEFINICIÓN DE LOS OBJETIVOS GENERALES DE LA APLICACIÓN


Se trata de desarrollar una aplicación multipuesto y multitarea que nos permita gestionar la facturación y el stock de una
pequeña o mediana tienda de electrodomésticos

PLANTEAR COMO CONSEGUIR DICHOS OBJETIVOS


Para plantear la resolución de los objetivos se ha decidido usar php dentro de un servidor web, ya que el objetivo de
este texto es aprender php. Con lo cual tendremos una aplicación multipuesto, que nos permite trabajar en una red local o
por Internet, obteniendo así, una aplicación multipuesto. Y que también nos permita tener varias ventanas abiertas a la vez,
consiguiendo así una aplicación multitarea.

Editorial CEP 217


Manual PHP 6.0. Módulo VIII

Con el fin didáctico de clarificar todos y cada uno de los pasos, vamos a usar Microsoft Access que nos permite la
creación de tablas de forma visual, y además nos permite realizar consultas de forma también visual, con lo cual nos
evitamos aprender sql que es el lenguaje para realizar consultas a las bases de datos.

Obviamente trabajaremos con el ODBC de Windows.

ANALIZAR LA CREACIÓN DE LA BASE DE DATOS Y LA RELACIÓN ENTRE LAS TABLAS


La clasificación que se le va a dar a los productos, en nuestro caso los electrodomésticos, a continuación veremos las
tablas con sus correspondientes campos:

familia: Tabla genérica que incluye los nombres de las diferentes familias de artículos, y asocia a cada
familia un código numérico
codigo: Campo numérico que se asigna a cada familia, es auto-numérico
familia: Campo de tipo texto que denomina a cada familia

subfamilia: Tabla semigenerica que relaciona las familias con las subfamilias
idFamilia: Campo numérico para asociarlo a la familia a la que pertenece
codigo: Campo numérico que se asigna a cada subfamilia, es auto-numérico
Subfamilia: Campo de tipo texto que denomina a cada subfamilia
El resto de tablas sigue el mismo planteamiento:

Articulo: Tabla concreta de los artículos que se almacenan y venden en la tienda


idFamilia
idSubFamilia
codigo
descripción
pvp
stock
pp
proveedor

Respecto a los proveedores, las tablas generadas son:

proveedor: Tabla que contiene los datos concretos de los proveedores


codigo
nombre
nif
fechaalta
direccion
localidad
cp
codprovincia
telefono
fax

218 Editorial CEP


Tema 1. Planificación de una aplicación en PHP

factproveedor: Datos de las facturas del proveedor


codfactura
fecha
iva
codigoProveedor
anyo
observaciones
codfp
pagado
fechacobro

factulineaproveedor: Tabla que contiene las diferentes líneas que componen las facturas de los
proveedores
codfactura
numlinea
codfamilia
codsubfamilia
codigo
cantidad
dcto
pp

Por ultimo, respecto a los clientes:

Cliente: Tabla que contiene los datos de los clientes


Codigo
Nombre
Nif
Fechaalta
Direccion
Localidad
Cp
Codprovincia
Telefono
fax

Factura: Datos de las facturas del cliente


codFactura
fecha
iva
codCliente
observaciones
pagado
direccionCliente

Editorial CEP 219


Manual PHP 6.0. Módulo VIII

Lineafactura: Tabla que contiene las diferentes líneas que componen las facturas de los clientes
codFactura
numlinea
codfamilia
codsubfamilia
codigo
cantidad
pvp
descripcion

Las tablas están planteadas con fines educativos, con el fin de ver una serie de decisiones de diseño validas. Pero se
podrían tomar otras que también lo fueran, por ejemplo, podríamos tener una tabla personas que contuviese los datos de
los proveedores y los clientes. Y de esta tabla genérica derivar a otras dos con datos concretos de clientes y proveedores.

Detalle de las tablas y las relaciones entre ellas

Se propone la introducción de los siguientes datos:

Familias
código familia
1 Lavadoras
2 Frigoríficos
3 Lavavajillas
4 Secadoras Carga Frontal
5 Combi
6 Hornos

SubFamilias
idfamilia codigo subfamilia
1 1 balay
3 2 Siemens
3 3 Balay
2 4 Siemens
2 5 Balay
4 6 Lavadoras
4 7 Frigoríficos

220 Editorial CEP


Tema 1. Planificación de una aplicación en PHP

Articulo
idFamilia idSubFamilia codigo descripcion pvp stock pp proveedor
1 1 1 B-567 325 0 245 1
2 1 1 S-894 584 1 23 1
2 2 1 B-564 234 2 0 0
3 1 1 F-567 2345 1 245 1
3 2 1 B-567 2345 1 456 1
4 1 1 Puerta 23 -1 0 0
4 2 1 Enchufe 3 0 0 0
1 1 2 B-783 248 -3 2487 2
2 1 2 S-987 245 3 45 2
3 1 2 F-678 4444 2 325 2
4 2 2 Motor 234 0 0 0
1 1 3 b-678 567 1 0 0
4 1 2 Bomba agua 34 0 0 0

Proveedores
codigo nombre nif fechaalta direccion localidad cp
C/Ameba nº
1 Maderas del Sur C34443123 01/02/2011 4 Alicante 0923
C/ Los pinos
2 Lavadoras Alay Iberia B21124578 02/01/2006 nº 12 Madrid 1245

Proveedores
codprovincia telefono fax movil web email persona

1 966726245 966712356 66600123 www.mds.es mds@mds.es Sofia del Mar


Jose
2 912236254 666234222 www.alayi.es alayi@alayi.es Martinez

Proveedores
cargo observaciones

Adminstrativo Ninguna
Jefe de Tiene mal
personal genio

factproveedor
codfactura fecha iva codigoProveedor anyo observaciones codfp pagado
1 01/01/2006 16 1 2006 ninguna SI

factproveedor
fechacobro
21/11/2011

Editorial CEP 221


Manual PHP 6.0. Módulo VIII

factulineaproveedor
codfactura numlinea codfamilia codsubfamilia Codigo cantidad dcto pp
1 2 1 1 1 1 0 245
1 3 1 1 1 1 0 245

cliente
codigo nombre nif fechaalta direccion localidad cp

1 Jose Luis Juarez Morgado 22451234S 21/02/2011 C/ La luz madrid 08022


Elche
2 Vicente Martinez Martinez 22457832B 21/11/2005 C/ Los Pinos (Alicante) 024581

Avd. La
3 Angel del Río Medina 88990033A 21/12/2003 libertad Madrid 03526

cliente
codprovincia telefono fax movil web
1 9656571574 954586512 6668276888 No disponible

2 936127548 936127548 66622447855 htt://www.vicente.com

1 965743645 - 666222111 http://www.delmaformacion.net

cliente
email cuenta observaciones
No disponible 4524788521466666885 ninguna
Lo recomendó
vicente@telefonica.net 77778888555566112244 su hermana

Le gusta la
delmaformacion@hotmail.com 11122233344455566878 programación

factura
codFactura fecha iva codCliente observaciones pagado direccionCliente
1 01/05/2011 18 1 SI C/ La luz
2 02/05/2011 18 2 NO C/Los pinos
3 03/05/2011 18 2 NO C/Los pinos
4 04/05/2011 18 3 NO Avd Libertad

lineaFactura
codFactura numlinea codfamilia codsubfamilia codigo cantidad pvp descripcion
1 12 1 1 1 1 325.0 B-567
1 16 3 2 1 1 2345.0 B-568
1 17 3 2 1 1 2345.0 B-569
1 18 1 1 1 1 325.0 B-570
2 19 1 1 1 1 325.0 B-571
2 20 1 1 1 1 325.0 B-572
2 21 1 1 1 1 325.0 B-573

222 Editorial CEP


Tema 1. Planificación de una aplicación en PHP

ORGANIZAR ADECUADAMENTE LOS ARCHIVOS


Los archivos los vamos a guardar en diferentes carpetas para facilitar su implementación y posterior mantenimiento. La
organización que se plantea para la aplicación es la siguiente:

La carpeta general que va a contener el resto de carpetas y archivos se llamara tienda, dentro de ella estará datos, que
se contendrá la base de datos. Navegación que contendrá los archivos correspondientes al menú. Php donde guardaremos
el código php, esta dividido en código, librería y dompdf (para los listados en pdf). Por ultimo plantillas donde guardaremos
las plantillas de la aplicación.

Editorial CEP 223


Manual PHP 6.0. Módulo VIII

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

224 Editorial CEP


Tema 1. Planificación de una aplicación en PHP

< LO QUE HEMOS APRENDIDO TEMA 1

- Planificar una aplicación PHP

Editorial CEP 225


TEMA 2
Desarrollo de los
diferentes menús

n DESARROLLO DE LOS DIFERENTES MENÚS


Tema 2. Desarrollo de los diferentes menús

DESARROLLO DE LOS DIFERENTES MENÚS


Para el diseño de los menús usaremos hojas de estilo en cascada, también llamadas CSS, Cascading Style Sheets.
Aprenderemos a crear menús sencillos para acabar con el ejemplo del menú de la aplicación.

Vamos, en primer lugar, a describir la parte de html. Concretamente vamos a trabajar con listas sin orden que viene
definidas entre las etiquetas <ul> y </ul>. Estas listas están compuestas por elementos que a su vez empiezan y terminan
con las etiquetas <li> y </li>. Los elementos a su vez tienen una etiqueta <a ref.=""> para indicar a que pagina se derivara
cuando pulsemos con el ratón.

Veamos un ejemplo:

<html>

<head>

<link rel="stylesheet" href="estilo.css">

</head>

<body>

<ul id="nav">

<li><a ref.="…"> Inicio</a></li>

<li><a ref.="…"> mis aficiones</a></li>

<li><a ref.="…"> Sobre mi</a></li>

<li><a ref.="…"> links de interes</a></li>

</ul>

</body>

</html>

Este podría ser un menú vertical para una página web personal. Para completarlo habría que añadirle una pequeña
decoración con css, la cual se debe guardar en el archivo estilo.css y se hace referencia en la línea <link rel="stylesheet"
href="estilo.css">. Es de destacar que le hemos puesto el identificador id="nav" para poder hacer mencionarlo en el archivo
css.

Editorial CEP 229


Manual PHP 6.0. Módulo VIII

El contenido que se propone para el archivo estilo.css es el siguiente:

ul {

padding: 0;

margin: 0;

list-style: none;

#nav a {

font-size:14pt;

font-family: Arial;

text-decoration: none;

color: #FFFFFF;

background: #0000FF;

display: block;

padding: 4px 7px;

width: 140px;

#nav a:hover {

background: #7B68EE;

La primera parte (ul) nos describe la posición inicial de todas las listas, es decir en la parte superior izquierda de la
ventana del navegador (padding y margin), además de omitir los puntos propios de una lista no ordenada (list-style: none).

La siguiente parte, nav, a la cual le damos nombre para evitar confundirnos con otros enlaces que podrían coexistir en
la página, nos indica que comportamiento y características van a tener los enlaces de la lista. En primer lugar, fijamos el
tamaño de la letra (font-size) y la fuente de la misma (font-family). Omitimos la línea típica de los enlaces (text-decoration:
none). Con color y background definimos el color del texto y del fondo. Con display block obligamos a que se muestre como
un bloque. Padding se usa para definir el numero de puntos de espacio entre el enlace y el borde del mismo, por ultimo con
width definimos el ancho.

La ultima parte (a:hover) nos va a indicar el comportamiento en el caso de pasar por encima el ratón. Con background
cambiamos de color al contacto con el Mouse.

230 Editorial CEP


Tema 2. Desarrollo de los diferentes menús

Para versiones antiguas de Internet Explorer hay que añadir:

<!--

hay que añadir el script de google creado por Dean Edwards que esta en http://code.google.com/p/ie7-js/

-->

<!--[if lt IE 7]> <script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE7.js"></script> <![endif]-->

<!--[if lt IE 8]> <script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE8.js"></script> <![endif]-->

<!--[if lt IE 9]> <script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script> <![endif]-->

Que es un script hecho en java por Dead Edwards.

Detalle de la visualización en el navegador

El siguiente objetivo es realizar un menú horizontal con menús desplegables. Para conseguir transformar este menú
vertical en uno horizontal, solamente tenemos que añadir float: left; en cualquier punto dentro de las llaves correspondientes
de nav a.

Quedaría así:

ul {

padding: 0;

margin: 0;

list-style: none;

#nav a {

font-size:14pt;

font-family: Arial;

text-decoration: none;

color: #FFFFFF;

background: #0000FF;

Editorial CEP 231


Manual PHP 6.0. Módulo VIII

display: block;

padding: 4px 7px;

width: 140px;

float: left;

#nav a:hover {

background: #7B68EE;

Para crear un menú orientado horizontalmente que muestre un submenú vertical, cuando un elemento del menú principal
está seleccionado, hay que definir el comportamiento de los submenús.

El ejemplo puede quedar así:

ul {

padding: 0;

margin: 0;

list-style: none;

#nav a {

font-size:14pt;

font-family: Arial;

text-decoration: none;

color: #FFFFFF;

background: #0000FF;

display: block;

padding: 4px 7px;

width: 140px;

float: left;

232 Editorial CEP


Tema 2. Desarrollo de los diferentes menús

#nav a:hover {

background: #7B68EE;

li {

float: left;

position: relative;

li ul {

display: none;

position: absolute;

left: 0;

li:hover ul, li.over ul {

display: block;

top: 1.90em;

width: 140px;

Lo podemos ver funcionando con este ejemplo:

<html>

<head>

<link rel="stylesheet" href="estilo.css">

</head>

<body>

<!--[if lt IE 7]> <script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE7.js"></script> <![endif]-->

Editorial CEP 233


Manual PHP 6.0. Módulo VIII

<!--[if lt IE 8]> <script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE8.js"></script> <![endif]-->

<!--[if lt IE 9]> <script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script> <![endif]-->

<ul id="nav">

<li><a href="">Inicio</a>

<ul>

<li><a href="">Inicio</a></li>

</ul>

</li>

<li><a href="">mis aficiones</a>

<ul>

<li><a href="">Cine</a></li>

<li><a href="">Musica</a></li>

<li><a href="">Deportes</a></li>

</ul>

</li>

<li><a href="">Sobre mi</a>

<ul>

<li><a href="">Curriculum</a></li>

<li><a href="">Mi trabajo</a></li>

<li><a href="">Mi ciudad</a></li>

</ul>

</li>

<li><a href="">links de interes</a>

234 Editorial CEP


Tema 2. Desarrollo de los diferentes menús

<ul>

<li><a href="">Yahoo</a></li>

<li><a href="">UOC</a></li>

<li><a href="">CEP</a></li>

</ul>

</li>

</ul>

</body>

</html>

Detalle de la ejecución

Como se puede observar, el html son listas anidadas hasta un segundo nivel sin mas. Respecto al archivo css se han
añadido para todas las listas le añadimos la obligatoriedad de tener una posición relativa y ajustarse a la izquierda:

li {

float: left;

position: relative;

Respecto al segundo nivel de listas, por defecto no se ve, la posición la ponemos absoluta, con ningún margen a la
izquierda y por último definimos como se verán los enlaces de los submenús, por una parte definimos que se verán como
bloque y por otra parte definimos el espacio que habrá entre el menú principal horizontal y el submenú con top, sin olvidar
indicar el ancho (especialmente importante para Internet explorer):

li:hover ul, li.over ul {

display: block;

top: 1.90em;

width: 140px;

Editorial CEP 235


Manual PHP 6.0. Módulo VIII

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

236 Editorial CEP


Tema 2. Desarrollo de los diferentes menús

< LO QUE HEMOS APRENDIDO TEMA 2

- Realizar menús en CSS para aplicaciones PHP

Editorial CEP 237


TEMA 3
Plantillas

n PLANTILLAS
Tema 3. Plantillas

PLANTILLAS
Una plantilla (en ingles template) es un documento html, que contiene el diseño de la pagina, después con php
parseamos las diferentes variables o ítems. Para el desarrollo de las plantillas se ha decidido usar el procesador de textos
Word, aunque se podría emplear cualquier otro que permita guardar los archivos en formato html. Veamos como podemos
diseñar la primera pantalla de nuestra aplicación con Microsoft Word.

Pantalla inicial con el logotipo de la aplicación, que aparecerá al inicializar la misma

La plantilla es la siguiente:

Detalle de la plantilla

La siguiente plantilla puede ser realizada con Microsoft Word, no es necesario que sea exactamente igual, con ser
parecida es suficiente. Pero, es muy importante tener en la plantilla los ítems TITULO, SUB y MENU, sin los cuales no se
puede realizar la sustitución por parte del script en php. Este script recibe el nombre de index.php.

Editorial CEP 241


Manual PHP 6.0. Módulo VIII

<?php

$estilo = file_get_contents("../navegacion/estilo.css"); //Guardamos archivo que contiene el menu

$menu = file_get_contents("../navegacion/menu.htm"); //Guardamos archivo que contiene el menu

$plantilla=str_replace(

array('TITULO','SUB','<style>','MENU'),

array('Gestión Facturación','Familias','<style>'.$estilo,$menu),

file_get_contents("../plantillas/index.htm"));

print $plantilla; // sacamos al navegador la plantilla con todos sus cambios

?>

Como se puede observar el script es muy sencillo, en primer lugar guardamos el archivo de estilo en la variable $estilo,
acto seguido guardamos el menú de navegación en la variable $menu. La instrucción file_get_contents es la encargada de
realizar esta tarea, ya que se encarga de abrir un archivo y asignarle su valor a una variable. Por ultimo reemplazamos en
la plantilla el titulo (TITULO), subtitulo (SUB), el estilo (<stile>), el menú (MENU) y lo imprimimos todo.

Como hemos podido observar trabajar con plantillas es muy sencillo.

242 Editorial CEP


Tema 3. Plantillas

< LO QUE HEMOS APRENDIDO TEMA 3

- Trabajar con plantillas diseñadas en Microsoft Word para aplicaciones PHP

Editorial CEP 243


MÓDULO IX
Biblioteca de procedimientos y
funciones en PHP

TEMA 1: Ampliación de Plantillas


TEMA 2: Librerias
TEMA 3: Scripts en PHP

OBJETIVOS GENERALES DEL MÓDULO

- Abordar un problema real, con una solución en PHP


- Aprender a crear y usar plantiíllas, librerías
- Aplicar lo aprendido en el resto de temas para crear scripts en una solución PHP
TEMA 1
Ampliación de Plantillas

n AMPLIACIÓN DE PLANTILLAS
Tema 1. Ampliación de Plantillas

AMPLIACIÓN DE PLANTILLAS
Continuando con lo aprendido en el modulo anterior sobre plantillas, vamos a realizar las correspondientes a una
aplicación real. Vamos a ver un ejemplo de plantillas para una aplicación de tienda-almacén.

Index.html

Pagina principal de la aplicación. Es de destacar los items:

TITULO: Contendrá el titulo de la pagina

SUB: Contendrá el subtitulo de la pagina

MENU: Contendrá el menu

Estos tres items se repetirán en todas las plantillas, por lo tanto no se volverá a hacer referencia a ellos.

Editorial CEP 249


Manual PHP 6.0. Módulo IX

Guia.html

Pequeño índice de ayuda, que contiene todas las opciones disponibles en la aplicación

Familia.html

Contiene información referente a las familias

ITEM0: Contendrá el código de la familia

ITEM1: Contendrá la descripción de la familia

ERRORES: Contendrá la descripción de los errores de esta parte de la aplicación

250 Editorial CEP


Tema 1. Ampliación de Plantillas

Subfamilia.html

Contiene información referente a las subfamilias

ITEM0: Contendrá un selector con las familias

ITEM1: Contendrá el código de la subfamilia

ITEM2: Contendrá la descripción de la subfamilia

ERRORES: Contendrá la descripción de los errores de esta parte de la aplicación

Editorial CEP 251


Manual PHP 6.0. Módulo IX

Articulo.html

Contiene información referente a los artículos

ITEM0: Contendrá un selector con las familias

ITEM1: Contendrá un selector con las subfamilias

ITEM2: Contendrá el código del articulo

ITEM3: Contendrá la descripción del articulo

ITEM4: Contendrá el precio de venta al publico

ITEM5: Contendrá el numero de artículos en tienda/almacén

ERRORES: Contendrá la descripción de los errores de esta parte de la aplicación

252 Editorial CEP


Tema 1. Ampliación de Plantillas

Listade.html

Se usara para los listados de elementos en la aplicación

ITEM0: Contendrá el nombre de los elementos a listar

ITEM1: Contendrá los elementos a listar

Editorial CEP 253


Manual PHP 6.0. Módulo IX

Cliente.html

Contiene información referente a los clientes

ITEM1: Contendrá el Código

ITEM2: Contendrá el Nombre Completo

ITEM3: Contendrá el NIF

ITEM4: Contendrá la Fecha de alta

ITEM5: Contendrá la Dirección

ITEM6: Contendrá la Localidad

ITEM7: Contendrá el Código Postal

ITEM8: Contendrá la Provincia

ITEM9: Contendrá el Teléfono

ITEM_10: Contendrá el Fax

ITEM_11: Contendrá el Móvil

ITEM_12: Contendrá la Web

ITEM_13: Contendrá el Email

ITEM_14: Contendrá la Cuenta Corriente

254 Editorial CEP


Tema 1. Ampliación de Plantillas

ITEM_15: Contendrá las Observaciones

ITEM_16: Contendrá la opción Pulse aquí

Como se puede observar ponemos ITEM_10 en lugar de ITEM10, para evitar que al sustituir ITEM1 nos realice un
cambio equivocado

Datos_generales_factura.html

Contiene información referente a las facturas

ITEM1: Contendrá el Código de la factura

ITEM2: Contendrá la Fecha

ITEM3: Contendrá el IVA el tanto por ciento

ITM4: Contendrá el Cliente

ITEM5: Contendrá la dirección del cliente

ITEM6: Contendrá las Observaciones

ITEM7: Contendrá la opción correspondiente

Editorial CEP 255


Manual PHP 6.0. Módulo IX

256 Editorial CEP


Tema 1. Ampliación de Plantillas

< LO QUE HEMOS APRENDIDO TEMA 1

- Aplicar las plantillas a un caso practico

Editorial CEP 257


TEMA 2
Librerias

n CONECTAR.PHP
n CUESTION.PHP
n OBTENERFILA.PHP
n SELECCIONAFAMILIA.PHP
n SELECCIONASUBFAMILIA.PHP
Tema 2. Librerias

En este tema vamos a ver las librerías de la aplicación. Es de destacar la importancia en el mantenimiento y en la
modificación y reutilización de estos fragmentos de código.

Estas funciones o fragmentos de programa estarán guardadas en la carpeta librería.

CONECTAR.PHP
1 <?php
2 $dsn="tienda";//debe ser de sistema no de usuario
3 $usuario="";
4 $password="";
5 $cid=odbc_connect($dsn,$usuario,$password);
6 if (!$cid){ exit("Error al intentar conectarse a la base de datos."); }
7 ?>
Se encarga de conectar a la base de datos tienda, se repetirá en la mayoría de los scripts con los que vamos a trabajar

CUESTIÓN.PHP

1 <?php
2 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec()<br>$sql"));
3 ?>

Introducimos, en la variable $result, el resultado de la consulta introducida en la variable $sql.

OBTENERFILA.PHP
1 function obtenFila($plantilla,$pivote){
2 $posicion=stripos($plantilla,$pivote,0); // localizamos la situación de pivote
3 $inicio=0;
4 while ($inicio==0){
5 $posicion--;
6 $inicio=stripos($plantilla,'<tr',$posicion);
7 if ($inicio>$posicion){$inicio=0;}
8 if ($posicion==-1){$inicio=-1;}// no lo encuentra
9 }
10 if ($posicion==-1){print "No encuentro el inicio de la fila de la tabla.<br>";}
11 $fin=stripos($plantilla,'</tr>',$inicio)+5; // localizamos el ultimo caracter a copiar
12 $filaTabla=substr($plantilla,$inicio,$fin-$inicio);
13
14 return $filaTabla;
15 }

La función obtenFila, básicamente localiza la fila de una tabla y la devuelve. En primer lugar introducimos en $posicion
la posición en la plantilla de la fila que contiene el pivote (2). Acto seguido localizamos la etiqueta <tr (que nos indica el inicio
de la fila de la tabla). Esto lo hacemos (3 a 9) restándole 1 a posición hasta que lo encuentre o hasta que nos devuelva -1
(con lo cual tendríamos un error). En tal caso devolvemos un mensaje de error y salimos de la función (10). Después
localizamos el final de la línea (11), localizando la etiqueta '</tr>' e introduciendo el resultado en la variable $fin. Ahora que
ya tenemos el inicio y el fin de la fila, podemos introducir esta en la variable $filaTabla (12) y devolver el resultado (14).

Editorial CEP 261


Manual PHP 6.0. Módulo IX

SELECIONAFAMILIA.PHP
1 <?php
2 function seleccionaFamilia($idFamilia){ // muestra una lista con las familias
3 include ("../libreria/conectar.php");
4 $linea="<form>";
5 $linea=$linea."<!-- <input type='button' value='ejecutar'
onClick='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value;'> -->";
6 $linea=$linea."<select name='servicio'
onchange='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value'>";
7
8 $sql="Select * from familia order by codigo";
9
10 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
11
12 while(odbc_fetch_row($result)){
13
14 $codigo=odbc_result($result,1);
15 $descripcion=odbc_result($result,2);
16 $linea=$linea."<option ";
17 if ($codigo==$idFamilia) {$linea=$linea." selected ";}
18 $linea=$linea." value='subfamilia.php?idFamilia=".$codigo."'>".$codigo.".-".$descripcion."</option>";
19 }
20 $linea=$linea."</select></form></center>";
21 return $linea;
22 }
23 ?>

Este script devuelve la relación de todas las familias en un select de html. Es de destacar que se usa un fragmento de
javascript (linea 5) para eliminar el botón de enviar y favorecer la estética de la aplicación.

262 Editorial CEP


Tema 2. Librerias

SELECCIONASUBFAMILIA
1 <?php
2 function seleccionaSubFamilia($idFamilia,$idSubFamilia){ // muestra una lista con las subfamilias
3 include ("conectar.php");
4 $linea="<form><!-- <input type='button' value='ejecutar'
onClick='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value;'> -->";
5 $linea=$linea."<select name='servicio'
onchange='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value'>";
6
7 $sql="Select * from subfamilia order by codigo";
8
9 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
10
11 while(odbc_fetch_row($result)){
12
13 $codigo=odbc_result($result,2);
14 $descripcion=odbc_result($result,3);
15 $linea=$linea."<option ";
16 if ($codigo==$idSubFamilia) {$linea=$linea." selected ";}
17 $linea=$linea." value='articulo.php?idSubFamilia=".$codigo."&idFamilia=".$idFamilia."'>".$codigo.".-
".$descripcion."</option>";
18 }
19 $linea=$linea."</select></form></center>";
20 return $linea;
21 }
22 ?>

Este script devuelve la relación de todas las subfamilias en un select de html. Es de destacar que se usa un fragmento
de javascript (linea 5) para eliminar el botón de enviar y favorecer la estética de la aplicación.

Editorial CEP 263


Manual PHP 6.0. Módulo IX

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

264 Editorial CEP


Tema 2. Librerias

< LO QUE HEMOS APRENDIDO TEMA 2

- Aplicar las librerías a un caso práctico

Editorial CEP 265


TEMA 3
Scripts en PHP

n INTRODUCCIÓN
n FAMILIAS
n SUBFAMILIAS
n CLIENTES
n FACTURAS A CLIENTES
Tema 3. Scripts en php

INTRODUCCIÓN
Por ultimo vamos a enlazar todo lo visto anteriormente para realizar nuestra aplicación de tienda-almacén. Para lo cual
vamos a ver solamente las siguientes opciones del menú:
Artículos Clientes Proveedores Facturación
Familias Clientes Proveedores Facturas a clientes
Subfamilias
Artículos
FAMILIAS
Como puede observarse a simple vista, tendremos una tabla con todas las familias, con la posibilidad de añadir y
eliminar. Pasemos a ver el código:
Familia.php
1 <?php
2
3 include ("libreria/conectar.php");
4
5 foreach ($_REQUEST AS $indice => $valor) ${$indice}=$valor;
6
7 if (@$accion=='grabar'){
8
9 $descripcion=trim($descripcion); // borramos espacios de delante y detrás de la descripción
10
11 if (strlen($descripcion)==0){$errores=1;$mensajeError='La descripción no puede ser un campo
vacio.';}
12
13 else
14
15 {
16 $sql="SELECT count(familia.familia) FROM familia WHERE (((familia.familia)='".$descripcion."'))";
17
18 include("cuestion.php");
19
20 $numero=odbc_result($result,1);
21
22 if ($numero!=0){ // ya existe la familia
23 $errores=1;
24 $mensajeError='Ya existe esta familia, elija otro nombre.';
25 }
26 }
27
28 if ($errores==0){// si no hay errores procedemos a la grabación
29 $sql="Insert into familia (familia) values('$descripcion')";
30
31 include("cuestion.php");
32 }
33 }
34
35 if (@$accion=='borrar'){
36
37 $sql="DELETE FROM familia WHERE codigo=".$codigo;
38
Editorial CEP 269
Manual PHP 6.0. Módulo IX

39 include("libreria/cuestion.php");
40 }
41
42 include("libreria/obtenerfila.php");
43
44 $estilo = file_get_contents("../navegacion/estilo.css"); //Guardamos archivo que contiene el menu
45
46 $menu = file_get_contents("../navegacion/menu.htm"); //Guardamos archivo que contiene el menu
47
48 $plantilla=str_replace(
49 array('TITULO','SUB','<style>','MENU'),
50 array('Gestión Facturación','Familias','<style>'.$estilo,$menu),
51 file_get_contents("../plantillas/familia.htm"));
52
53 $fT=obtenFila($plantilla,'ITEM1');//obtenemos la fila de la tabla a modificar en la plantilla
54
55 $auxFT=$fT; // usamos una variable auxiliar
56
57 $sql="Select * from familia order by codigo";
58
59 include("libreria/cuestion.php");
60
61 while(odbc_fetch_row($result)){
62
63 include('libreria/items.php');
64
$auxFT=str_replace(array('ITEM1','ITEM2','ITEM3'),array($codigo,$descripcion,
65 '<center><a style="text-decoration:none;" href="familia.php?codigo='.$codigo.'&accion=borrar"><p
style="font-size:20.0pt;font-family:Wingdings">"</p></a></center>'
66 ),$auxFT).$fT;
67
68 }
69
70 $formulario='<INPUT TYPE="text" NAME="descripcion" SIZE="50"><INPUT TYPE="hidden"
NAME="accion" VALUE="grabar">';
71 $envio='<center><a style="text-decoration:none" href="#"
onclick="document.forms['."'".'form1'."'".'].submit(); return false;"><p style="font-size:20.0pt;font-
family:Wingdings"><</p></a></center>';
72 $auxFT='<FORM id="form1" ACTION="familia.php"
METHOD="GET">'.str_replace(array('ITEM1','ITEM2','ITEM3'),array('',$formulario,$envio),$auxFT).'
</form>';
73
74 $plantilla=str_replace($fT,$auxFT,$plantilla);
75 if (@$errores==1){
76 $plantilla=str_replace('ERRORES',$mensajeError,$plantilla);
77 }
78 else
79 {
80 $plantilla=str_replace('ERRORES','',$plantilla);
81 }
82 print $plantilla;
83
84 ?>

270 Editorial CEP


Tema 3. Scripts en php

En este caso esta todo (alta, baja y consulta) dentro de un unico script, siguiendo los planteamientos que se ha seguido
en el resto del texto. Es de destacar, para este script y los sucesivos en el tema, que se ha usado la fuente Wingdings, para
introducir imágenes.

SUBFAMILIAS
Con el fin de ver varias alternativas, la parte de grabar nueva subfamilia y borrar subfamilia lo veremos en scripts aparte.
El script que maneja la plantilla y muestra la información correspondiente es el siguiente:
subfamilia.php
1 <?php
2
3 foreach ($_REQUEST AS $indice => $valor) ${$indice}=$valor;
4
5 include("../libreria/obtenerfila.php");
6
7 include("../libreria/seleccionafamilia.php");
8
9 $estilo = file_get_contents("../../navegacion/estilo.css"); //Guardamos archivo que contiene el menu
10
11 $menu = file_get_contents("../../navegacion/menu.htm"); //Guardamos archivo que contiene el menu
12
13 include ("../libreria/conectar.php");
14
15 if (@strlen($idFamilia)==0){
16 $sql="Select * from familia";
17 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
18 $idFamilia=odbc_result($result,1);
19
20 $sql="Select codigo from subfamilia where idFamilia=".$idFamilia." order by idFamilia,codigo";
21 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
22 $codigo=odbc_result($result,1);
23 }
24
25 $lineaFamilia=seleccionaFamilia($idFamilia);
26
27 $plantilla=str_replace(
28 array('TITULO','SUB','<style>','MENU','ITEM0'),
29 array('Gestión Facturación','SubFamilias','<style>'.$estilo,$menu,$lineaFamilia),
30 file_get_contents("../../plantillas/subfamilia.htm"));
31
32 $fT=obtenFila($plantilla,'ITEM1');//obtenemos la fila de la tabla a modificar en la plantilla
33
34 $auxFT=$fT; // usaremos una variable auxiliar
35
36 if (strlen($idFamilia)!=0){
37 $sql="Select * from subfamilia where idFamilia=".$idFamilia." order by codigo";
38
39 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
40 }
41 while(odbc_fetch_row($result)){
42
43 $idFamilia=odbc_result($result,1);

Editorial CEP 271


Manual PHP 6.0. Módulo IX
( )
44
45 $codigo=odbc_result($result,2);
46
47 $descripcion=odbc_result($result,3);
48
49 $auxFT=str_replace(array('ITEM1','ITEM2','ITEM3'),array($codigo,$descripcion,
50 '<center><a style="text-decoration:none;"
href="eliminaSubfamilia.php?codigo='.$codigo.'&accion=borrar&idFamilia='.$idFamilia.'"><p
style="font-size:20.0pt;font-family:Wingdings">"</p></a></center>'
51 ),$auxFT).$fT;
52
53 }
54
55 $formulario='<input type="hidden" name="idFamilia" value='.$idFamilia.'><INPUT TYPE="text"
NAME="descripcion" SIZE="50"><INPUT TYPE="hidden" NAME="accion" VALUE="grabar">';
56 $envio='<center><a style="text-decoration:none" href="#"
onclick="document.forms['."'".'form1'."'".'].submit(); return false;"><p style="font-size:20.0pt;font-
family:Wingdings"><</p></a></center>';
57 $auxFT='<FORM id="form1" ACTION="grabaSubfamilia.php"
METHOD="GET">'.str_replace(array('ITEM1','ITEM2','ITEM3'),array('',$formulario,$envio),$auxFT).'</
form>';
58
59 $plantilla=str_replace($fT,$auxFT,$plantilla);
60 if (@$errores==1){
61 $plantilla=str_replace('ERRORES',$mensajeError,$plantilla);
62 }
63 else
64 {
65 $plantilla=str_replace('ERRORES','',$plantilla);
66 }
67
68 print $plantilla;
69 ?>

Para añadir una nueva subfamilia usaremos el siguiente script, llamado grabaSubfamilia.php:

grabaSubfamilia.php
1 <?
2
3 function gotoPage($PageName)
4 {
5 print "<html><body>";
6 print "<script language=\"Javascript\">";
7 print "window.location.href=\"$PageName\"";
8 print "</script></body></html>";
9 }
10
11 foreach ($_REQUEST AS $indice => $valor) ${$indice}=$valor;
12
13 if (strlen($descripcion)>0){
14
15 include ("../libreria/conectar.php");
16
17 // calculamos el siguiente codigo

272 Editorial CEP


Tema 3. Scripts en php
g g
18
19 $sql="select count(*) from subfamilia where idFamilia=".$idFamilia; // obtenemos el ultimo registro
20
21 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec()<br>$sql"));
22 $registros=odbc_result($result,1); // obtenemos el numero de registros
23 if ($registros>0){
24 $sql="select max(codigo) from subfamilia where idFamilia=".$idFamilia; // obtenemos el ultimo
registro
25
26 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec()<br>$sql"));
27
28 $codigo=odbc_result($result,1); // obtenemos el numero de registros
29
30 $sql="select count(*) from subfamilia where idFamilia=".$idFamilia; // obtenemos el numero de
registros
31
32 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec()<br>$sql"));
33
34 $numero=odbc_result($result,1); // obtenemos el numero de registros
35
36 if ($numero!=$codigo){ // tenemos elementos dados de baja
37
38 $posibleCodigo=1;
39
40 while ($posibleCodigo!=$codigo){
41
42 $sql="select count(*) from subfamilia where idFamilia=".$idFamilia." and codigo=".$posibleCodigo;
43
44 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec()<br>$sql"));
45
46 if (odbc_result($result,1)!=0){$posibleCodigo++;}else{$codigo=$posibleCodigo;}
47 }
48 $codigo--; // le restamos 1 porque de forma estandard calculamos el siguiente sumando 1
49 }
50
51 $codigo++;// calculamos el siguiente
52 $sql="Insert into subfamilia values('$idFamilia','$codigo','$descripcion')";
53
54 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec()<br>$sql"));
55
56 }else {
57 $codigo=1;
58 $sql="Insert into subfamilia values('$idFamilia','1','$descripcion')";
59
60 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec()<br>$sql"));//es el primero
61 }
62 }
63 gotoPage("subfamilia.php?idFamilia=".$idFamilia."&codigo=".$codigo);
64
65 ?>

Editorial CEP 273


Manual PHP 6.0. Módulo IX

Para borrar las subfamilias usaremos el script, eliminaSubFamilia.php


eliminaSubFamilia.php
1 <?php
2
3 /* las subfamilias las eliminamos completamente, en lugar de poner una marca como en las
familias,
4 esto es par evitar la busqueda y la vuelta a calcular, solo se calcula si se puede reutilizar
5 algun condigo */
6
7 function gotoPage($PageName)
8 {
9 print "<html><body>";
10 print "<script language=\"Javascript\">";
11 print "window.location.href=\"$PageName\"";
12 print "</script></body></html>";
13 }
14
15 foreach ($_REQUEST AS $indice => $valor) ${$indice}=$valor;
16
17 include ("../libreria/conectar.php");
18
19 $sql=" delete from subfamilia where codigo=".$codigo." and idFamilia=".$idFamilia;
20 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec()<br>$sql"));
21
22 gotoPage("subfamilia.php?idFamilia=".$idFamilia."&codigo=".$codigo);
23
24 ?>

En el desarrollo del script se ha usado un fragmento de javascript (lineas de la 7 a la 13) que nos deriva a una pagina
que le pasamos como parámetro (es similar a locale en php)

CLIENTES
Ahora pasamos al siguiente script propio de clientes, con su correspondiente plantilla:
Clientes.php
1 <?php
2
3 foreach ($_REQUEST AS $indice => $valor) ${$indice}=$valor;
4
5 include ("conectar.php");
6
7 if ($accion=='borrar'){
8
9 $sql="Insert into familia (familia) values('$descripcion')";
10
11 $sql="DELETE FROM cliente WHERE codigo=".$codigo; include("cuestion.php");
12
13 header("Location: listade.php?baseDato=cliente");
14
15 }
16
17 if ($accion=='grabaModificar'){

274 Editorial CEP


Tema 3. Scripts en php
( g ){
18
19 $sql="Insert into familia (familia) values('$descripcion')";
20
21 $sql="UPDATE cliente SET nombre ='".$nombre."' WHERE codigo=".$codigo;include("cuestion.php");
22 $sql="UPDATE cliente SET nif ='".$nif."' WHERE codigo=".$codigo;include("cuestion.php");
23 $sql="UPDATE cliente SET fechaalta ='".$fechaalta."' WHERE codigo=".$codigo;include("cuestion.php");
24 $sql="UPDATE cliente SET direccion ='".$direccion."' WHERE codigo=".$codigo;include("cuestion.php");
25 $sql="UPDATE cliente SET localidad ='".$localidad."' WHERE codigo=".$codigo;include("cuestion.php");
26 $sql="UPDATE cliente SET codprovincia ='".$codprovincia."' WHERE codigo=".$codigo;include("cuestion.php");
27 $sql="UPDATE cliente SET telefono ='".$telefono."' WHERE codigo=".$codigo;include("cuestion.php");
28 $sql="UPDATE cliente SET fax ='".$fax."' WHERE codigo=".$codigo;include("cuestion.php");
29 $sql="UPDATE cliente SET movil ='".$movil."' WHERE codigo=".$codigo;include("cuestion.php");
30 $sql="UPDATE cliente SET web ='".$web."' WHERE codigo=".$codigo;include("cuestion.php");
31 $sql="UPDATE cliente SET email ='".$email."' WHERE codigo=".$codigo;include("cuestion.php");
32 $sql="UPDATE cliente SET cuenta ='".$cuenta."' WHERE codigo=".$codigo;include("cuestion.php");
33 $sql="UPDATE cliente SET observaciones ='".$observaciones."' WHERE
codigo=".$codigo;include("cuestion.php");
34
35 header("Location: cliente.php?baseDato=cliente&codigo=".$codigo);
36
37 }
38
$estilo = file_get_contents("../navegacion/estilo.css"); //Guardamos archivo que contiene el menu
39
40 $menu = file_get_contents("../navegacion/menu.htm"); //Guardamos archivo que contiene el menu
41
42 $plantilla=str_replace(
43 array('TITULO','SUB','<style>','MENU','ITEM0'),
44 array('Gestión Facturación',$codigo,'<style>'.$estilo,$menu,$codigo),
45 file_get_contents("../plantillas/cliente.htm"));
46 $sql="Select * from cliente where codigo=".$codigo;
47
48 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
49 if ($accion!='modificar'){ // es decir, es consulta solamente
$plantilla=str_replace(array(ITEM1,ITEM2,ITEM3,ITEM4,ITEM5,ITEM6,ITEM7,ITEM8,ITEM9,ITEM_10,
ITEM_11,ITEM_12,ITEM_13,ITEM_14,ITEM_15),
50 array(odbc_result($result,1),odbc_result($result,2),odbc_result($result,3),odbc_result($result,4),odbc_result($resu
lt,5),
51 odbc_result($result,6),
52 odbc_result($result,7),odbc_result($result,8),odbc_result($result,9),odbc_result($result,10),odbc_result($result,11)
,
53 odbc_result($result,12),
54 odbc_result($result,13),odbc_result($result,14),odbc_result($result,15)),$plantilla);
55 $plantilla=str_replace('ITEM_16',
56 '<table><tr><td><a href="cliente.php?codigo='.$codigo.'&accion=modificar"><p style="font-size:20.0pt;font-
family:Wingdings"><</p></a></td><td><a href="cliente.php?codigo='.$codigo.'&accion=borrar"><p style="font-
size:20.0pt;font-family:Wingdings">"</p></a></td></tr></table>'
57 ,$plantilla);
58 }
59 else
60 {// modificamos
61 $plantilla=str_replace("ITEM1","<FORM id='form1' ACTION='cliente.php' METHOD='GET'>
".odbc_result($result,1),$plantilla);
62 for ($i=2;$i!=10;$i++){ // nos saltamos el primero porque el indice lo podemos cambiar
Editorial CEP 275
Manual PHP 6.0. Módulo IX
( ){
63 $plantilla=str_replace("ITEM$i","<input name='".odbc_field_name ($result,$i)."'
value='".odbc_result($result,$i)."'>",$plantilla);
64 }
65
66 for ($i=10;$i!=16;$i++){
67 $plantilla=str_replace("ITEM_$i","<input name='".odbc_field_name ($result,$i)."'
value='".odbc_result($result,$i)."'>",$plantilla);
68 }
69
70 $plantilla=str_replace('ITEM_16',
71 '<INPUT NAME="codigo" VALUE="'.$codigo.'" TYPE="HIDDEN"><INPUT NAME="accion"
VALUE="grabaModificar" TYPE="HIDDEN">
72 <a href="#" onclick="document.forms['."'".'form1'."'".'].submit(); return false;"><p style="font-size:20.0pt;font-
family:Wingdings"><</p></a>'
73 ,$plantilla);
74
75 }
76 print $plantilla;
77
78 ?>

FACTURAS A CLIENTES
En primer lugar vamos a ver los datos generales de toda factura:
Datos_generales.php
1 <?php
2
3 include ("conectar.php");
4
5 foreach ($_REQUEST AS $indice => $valor) ${$indice}=$valor;
6
7 if (strlen($Grabar)!=0){ // hemos pulsado el boton grabar y queremos salvar los datos
8
9 if (strlen($codFactura)!=0){ // hacemos una actualización de datos
10 $sql="UPDATE factura SET codCliente=".$codCliente." WHERE
codFactura=".$codFactura;include("cuestion.php");
11 $sql="UPDATE factura SET fecha='".$fecha."' WHERE codFactura=".$codFactura;include("cuestion.php");
12 $sql="UPDATE factura SET iva='".$iva."' WHERE codFactura=".$codFactura;include("cuestion.php");
13 $sql="UPDATE factura SET observaciones='".$observaciones."' WHERE
codFactura=".$codFactura;include("cuestion.php");
14 $sql="UPDATE factura SET direccionCliente='".$direccion."' WHERE
codFactura=".$codFactura;include("cuestion.php");
15 header('Location: factura.php?codFactura='.$codFactura);
16 }else{
17 $sql="Insert into factura (fecha, iva, observaciones, pagado, direccionCliente)
values('$fecha','$iva','$observaciones','NO',
'$direccion')";
18
19 include("cuestion.php");
20
21 $sql="Select max(codFactura) from factura"; // he puesto como ejemplo la numero 1
22
23 include("cuestion.php");
24
25 $codFactura=odbc_result($result,1);
26

276 Editorial CEP


Tema 3. Scripts en php

27 header('Location: factura.php?codFactura='.$codFactura);
28
29 }
30 }
31
32 $estilo = file_get_contents("../navegacion/estilo.css"); //Guardamos archivo que contiene el menu
33
34 $menu = file_get_contents("../navegacion/menu.htm"); //Guardamos archivo que contiene el menu
35
36 $plantilla=str_replace(
37 array('TITULO','SUB','<style>','MENU'),
38 array('Gestión Facturación','Facturas','<style>'.$estilo,$menu),
39 file_get_contents("../plantillas/datos_generales_factura.htm"));
40
41 function seleccionaCliente($codFactura,$codCliente,$fecha,$iva){ // muestra una lista con los clientes
42 include ("conectar.php");
43 $linea="<form><!-- <input type='button' value='ejecutar'
onClick='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value;'> -->";
44 $linea=$linea."<select name='servicio'
onchange='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value'>";
45
46 $sql="Select * from cliente order by codigo";
47
48 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
49
50 while(odbc_fetch_row($result)){
51
52 $codigo=odbc_result($result,1);
53 $nombre=odbc_result($result,2);
54 $linea=$linea."<option ";
55 if ($codigo==$codCliente) {$linea=$linea." selected ";}
56 $linea=$linea."
value='datos_generales.php?codCliente=".$codigo."&codFactura=".$codFactura."&fecha=".$fecha."&iva="
.$iva."'>".$codigo.".-".$nombre."</option>";
57 }
58 $linea=$linea."</select></form>";
59 return $linea;
60 }
61
62 if (strlen($codFactura)!=0){ // la factura existe y vamos a leerla para modificarla
63
64 $sql="Select * from factura where codFactura=".$codFactura; // he puesto como ejemplo la numero 1
65
66 include("cuestion.php");
67
68 // Ponemos los datos generales
69
70 $codFactura=odbc_result($result,1);
81 $fecha=odbc_result($result,2);
82 $iva=odbc_result($result,3);
83
84 $observaciones=odbc_result($result,5);
85 $pagado=odbc_result($result,6);
86 $direccion=odbc_result($result,7);
87 }
88
89 if (strlen($codCliente)==0){
90

Editorial CEP 277


Manual PHP 6.0. Módulo IX

101 $sql="Select * from cliente order by codigo"; // consultamos el nombre del cliente
102
103 include("cuestion.php");
104
105 $codCliente=odbc_result($result,1);
106
107 if (strlen($codFactura)!=0){ // si la factura es un alta nos saltamos el paso de leer, ya que no hay nada que
leer
108 $codCliente=odbc_result($result,4);
109 $sql="Select * from cliente where codigo=".$codCliente; // consultamos el nombre del cliente
110
111 include("cuestion.php");
112 $direccion=odbc_result($result,5);
113 }
114 }else{
115
116 $sql="Select * from cliente where codigo=".$codCliente; // consultamos el nombre del cliente
117
118 include("cuestion.php");
119
120 $direccion=odbc_result($result,5);
121
122 }
123
124 $cliente=seleccionaCliente($codFactura,$codCliente,$fecha,$iva);
125
126 $plantilla=str_replace(

Por ultimo, procederemos al tratamiento de las líneas de la factura:


Factura.php
1 <?php
2
3 include ("conectar.php");
4
5 foreach ($_REQUEST AS $indice => $valor) ${$indice}=$valor;
6
7 if (strlen($pagado)!=0){ // queremos grabar si esta pagado o no
8
9 $sql="UPDATE factura SET pagado='".$pagado."' WHERE codFactura=".$codFactura;
10
11 include("cuestion.php");
12
13 }
14
15 if ($accion=='grabar'){
16
17 $descripcion=trim($descripcion); // borramos espacios de delante y detras de la descripción
18 $errores=0;
19 if (strlen($descripcion)==0){$errores=1;$mensajeError='La descripción no puede ser un campo vacio.';}
20 if (($cantidad==0)||(strlen($cantidad)==0)||(!is_numeric($cantidad))){$errores=1;$mensajeError='La cantidad
debe ser un número mayor de 0.';}
21 if (($precio==0)||(strlen($precio)==0)||(!is_numeric($precio))){$errores=1;$mensajeError='El precio debe ser
un número mayor de 0.';}
22 if ($errores==0){
23

278 Editorial CEP


Tema 3. Scripts en php

24 $codigo = explode(".", $codigo);


25
26 $sql="Insert into lineaFactura (codFactura,codFamilia,codSubFamilia,codigo,cantidad,pvp,descripcion)
values('$codFactura','$codigo[0]','$codigo[1]','$codigo[2]','$cantidad','$precio','$descripcion')";
27
28 include("cuestion.php");
29 }
30 }
31
32 if ($accion=='borrar'){
33 $sql="DELETE FROM lineaFactura WHERE codFactura=".$codFactura." and numlinea=".$linFactura;
34
35 include("cuestion.php");
36 }
37
38 function obtenFila($plantilla,$pivote){
39 $posicion=stripos($plantilla,$pivote,0); // localizamos la situación de pivote
40 $inicio=0;
41 while ($inicio==0){
42 $posicion--;
43 $inicio=stripos($plantilla,'<tr',$posicion);
44 if ($inicio>$posicion){$inicio=0;}
45 if ($posicion==-1){$inicio=-1;}// no lo encuentra
46 }
47 if ($posicion==-1){print "No encuentro el inicio de la fila de la tabla.<br>";}
48 $fin=stripos($plantilla,'</tr>',$inicio)+5; // localizamos el ultimo caracter a copiar
49 $filaTabla=substr($plantilla,$inicio,$fin-$inicio);
50
51 return $filaTabla;
52 }
53
54 function seleccionaFamilia($codFactura,$idFamilia,$idSubFamilia,$idArticulo){ // muestra una lista con las
familias
55 include ("conectar.php");
56 $linea="<form><!-- <input type='button' value='ejecutar'
onClick='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value;'> -->";
57 $linea=$linea."<select name='servicio'
onchange='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value'>";
58
59 $sql="Select * from familia order by codigo";
60
61 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
62
63 while(odbc_fetch_row($result)){
64
65 $codigo=odbc_result($result,1);
66 $descripcion=odbc_result($result,2);
67 $linea=$linea."<option ";
68 if ($codigo==$idFamilia) {$linea=$linea." selected ";}
69 $linea=$linea." value='factura.php?codFactura=".$codFactura."&idFamilia=".$codigo."&idSubFamilia=".
70 $idSubFamilia."&idArticulo=".$idArticulo."'>".$codigo.".-".$descripcion."</option>";
71 }
72 $linea=$linea."</select></form>";

Editorial CEP 279


Manual PHP 6.0. Módulo IX

73 return $linea;
74 }
75
76 function seleccionaSubFamilia($codFactura,$idFamilia,$idSubFamilia,$idArticulo){ // muestra una lista con
las subfamilias
77 include ("conectar.php");
78 $linea="<form><!-- <input type='button' value='ejecutar'
onClick='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value;'> -->";
79 $linea=$linea."<select name='servicio'
onchange='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value'>";
80
81 $sql="Select * from subfamilia where idFamilia=".$idFamilia;
82
83 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
84
85 while(odbc_fetch_row($result)){
86
87 $codigo=odbc_result($result,2);
88 $descripcion=odbc_result($result,3);
89 $linea=$linea."<option ";
90 if ($codigo==$idSubFamilia) {$linea=$linea." selected ";}
91 $linea=$linea."
value='factura.php?codFactura=".$codFactura."&idSubFamilia=".$codigo."&idFamilia=".$idFamilia."&idArticul
o="
92 .$idArticulo."'>".$codigo.".-".$descripcion."</option>";
93 }
94 $linea=$linea."</select></form>";
95 return $linea;
96 }
97
98 function seleccionaArticulo($codFactura,$idFamilia,$idSubFamilia,$idArticulo){ // muestra una lista con los
articulos
99 include ("conectar.php");
100 $linea="<form><!-- <input type='button' value='ejecutar'
onClick='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value;'> -->";
101 $linea=$linea."<select name='servicio'
onchange='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value'>";
102
103 $sql="Select * from articulo where idFamilia=".$idFamilia." and idSubFamilia=".$idSubFamilia."
104 order by idFamilia,idSubfamilia, codigo";
105
106 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
107
108 while(odbc_fetch_row($result)){
109
110 $codigo=odbc_result($result,3);
111 $descripcion=odbc_result($result,4);
112 $linea=$linea."<option ";
113 if ($codigo==$idArticulo) {$linea=$linea." selected ";}
114 $linea=$linea."
value='factura.php?codFactura=".$codFactura."&idSubFamilia=".$idSubFamilia."&idFamilia=".$idFamilia."
115 &idArticulo=".$codigo."'>".$codigo.".-".$descripcion."</option>";
116 }
117 $linea=$linea."</select></form>";
280 Editorial CEP
Tema 3. Scripts en php

118 return $linea;


119 }
120
121 $estilo = file_get_contents("../navegacion/estilo.css"); //Guardamos archivo que contiene el menu
122
123 $menu = file_get_contents("../navegacion/menu.htm"); //Guardamos archivo que contiene el menu
124
125
126 if (strlen($idFamilia)==0){ // si es la primera vez que entramos desconocemos familia y subfamilia
127 $sql="Select * from familia";
128 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
129 $idFamilia=odbc_result($result,1);
130 }
131
132 if (strlen($idSubFamilia)==0){ // si es la primera vez que entramos desconocemos familia y subfamilia
133 $sql="Select codigo from subfamilia where idFamilia=".$idFamilia." order by idFamilia,codigo";
134 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
135 $idSubFamilia=odbc_result($result,1);
136 }else
137 {// primero preguntamos si la subfamilia existe, ya que se pueda dar el caso de que no exista
138 $sql="Select codigo from subfamilia where idFamilia=".$idFamilia." and codigo=".$idSubFamilia."
139 order by idFamilia,codigo";
140 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
141 $idSubFamilia=odbc_result($result,1);
142 if (strlen($idSubFamilia)==0){ // no existe
143 $sql="Select codigo from subfamilia where idFamilia=".$idFamilia." order by idFamilia,codigo";
144 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
145 $idSubFamilia=odbc_result($result,1);
146 }
147 }
148
149 if (strlen($idArticulo)==0){ // si es la primera vez que entramos desconocemos familia y subfamilia
150 $sql="Select codigo from articulo where idFamilia=".$idFamilia." and idSubFamilia=".$idSubFamilia."
151 order by idFamilia,idSubfamilia, codigo";
152 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
153 $idArticulo=odbc_result($result,1);
154 }else
155 {// primero preguntamos si el articulo existe, ya que se pueda dar el caso de que no exista
156 $sql="Select codigo from articulo where idFamilia=".$idFamilia." and idSubFamilia=".$idSubFamilia."
157 and codigo=".$idArticulo." order by idFamilia,idSubFamilia,codigo";
158 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
159 $idArticulo=odbc_result($result,1);
160 if (strlen($idArticulo)==0){ // no existe
161 $sql="Select codigo from articulo where idFamilia=".$idFamilia." and idSubFamilia=".$idSubFamilia."
162 order by idFamilia,idSubFamilia,codigo";
163 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec"));
164 $idArticulo=odbc_result($result,1);
165 }
166 }
167
168 $lineaFamilia=seleccionaFamilia($codFactura,$idFamilia,$idSubFamilia,$idArticulo);
169 $lineaSubFamilia=seleccionaSubFamilia($codFactura,$idFamilia,$idSubFamilia,$idArticulo);
170 $lineaArticulo=seleccionaArticulo($codFactura,$idFamilia,$idSubFamilia,$idArticulo);

Editorial CEP 281


Manual PHP 6.0. Módulo IX
( )
171
172 $plantilla=str_replace(
173 array('TITULO','SUB','<style>','MENU','ITEM0','ITEM1','ITEM2'),
174 array('Gestión Facturación','Facturas','<style>'.$estilo,$menu,$lineaFamilia,$lineaSubFamilia,$lineaArticulo),
175 file_get_contents("../plantillas/factura.htm"));
176
177 $fT=obtenFila($plantilla,'ITEM_12');//obtenemos la fila de la tabla a modificar en la plantilla
178
179 $auxFT=$fT; // usamos una variable auxiliar
180
181 $sql="Select * from factura where codFactura=".$codFactura; // he puesto como ejemplo la numero 1
182
183 include("cuestion.php");
184
185 // Ponemos los datos generales
186
187 $codFactura=odbc_result($result,1);
188 $fecha=odbc_result($result,2);
189 $iva=odbc_result($result,3);
190 $codCliente=odbc_result($result,4);
191 $observaciones=odbc_result($result,5);
192 $pagado=odbc_result($result,6);
193 $direccion=odbc_result($result,7);
194
195 $sql="Select nombre from cliente where codigo=".$codCliente; // consultamos el nombre del cliente
196
197 include("cuestion.php");
198
199 $cliente=odbc_result($result,1);
200
201 // Relleno de la linea de pagado
202
203 $lineaSiNo="<form style='margin: 0px; padding: 0px'>";
204 $lineaSiNo=$lineaSiNo."<!-- <input type='button' value='ejecutar'
onClick='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value;'> -->";
205 $lineaSiNo=$lineaSiNo."<select name='servicio'
onchange='top.location.href=this.form.servicio.options[this.form.servicio.selectedIndex].value'>";
206
207 $SI="factura.php?codFactura=".$codFactura."&pagado=SI&idFamilia=".$idFamilia."&idSubFamilia=".$idSub
Familia
208 ."&idArticulo=".$idArticulo."'>SI</option>";
209 $NO="factura.php?codFactura=".$codFactura."&pagado=NO&idFamilia=".$idFamilia."&idSubFamilia=".
210 $idSubFamilia."&idArticulo=".$idArticulo."'>NO</option>";
211
212 if ($pagado=='SI'){
213 $lineaSiNo=$lineaSiNo."<option selected value='".$SI;
214 $lineaSiNo=$lineaSiNo."<option value='".$NO;
215 $lineaSiNo=$lineaSiNo."</select>";
216 // Fin de Seleccionado el SI
217 }
218
219 if ($pagado=='NO'){
220 $lineaSiNo=$lineaSiNo."<option value='".$SI;

282 Editorial CEP


Tema 3. Scripts en php
p
221 $lineaSiNo=$lineaSiNo."<option selected value='".$NO;
222 $lineaSiNo=$lineaSiNo."</select>";
223 // Fin de seleccionado el no
224 }
225
226 $lineaSiNo=$lineaSiNo."</form>";
227
228 // Fin de relleno de la linea pagado
229
230 $plantilla=str_replace(
231 array('ITEM3','ITEM4','ITEM5','ITEM6','ITEM7','ITEM8','ITEM9','ITEM_10','ITEM_11'),
232 array($codFactura,$fecha,$iva,$cliente,$direccion,$observaciones,$lineaSiNo,'','<a
href="imprimeFactura.php?codFactura='.$codFactura.'" <p style="font-size:25.0pt;font-
family:Wingdings">?</p></a>'),
233 $plantilla);
234
235 // Fin de ponemos los datos generales
236
237 $sql="Select * from lineaFactura where codFactura=".$codFactura." order by numlinea"; // he puesto como
ejemplo la numero 1
238
239 include("cuestion.php");
240
241 while(odbc_fetch_row($result)){
242
243 $codigo=odbc_result($result,3).".".odbc_result($result,4).".".odbc_result($result,5);
244
245 $cantidad=odbc_result($result,6);
246 $precio=odbc_result($result,7);
247 $descripcion=odbc_result($result,8);
248 $importe=$cantidad*$precio; $importeTotal=$importeTotal+$importe;
249
250
251
252 $auxFT=str_replace(array('ITEM_12','ITEM_13','ITEM_14','ITEM_15','ITEM_16','ITEM_17'),
253 array($codigo,$descripcion,$cantidad,$precio." €",$importe." €",'<center><a style="text-decoration:none;"
href="factura.php?codFactura='.$codFactura.'&accion=borrar&linFactura='.odbc_result($result,2).'">
254 <p style="font-size:20.0pt;font-family:Wingdings">"</p></a></center>'
255 ),$auxFT).$fT;
256
257 }
258
259 $sql="Select descripcion,pvp from articulo where idFamilia=".$idFamilia."and idSubFamilia=".$idSubFamilia."
260 and codigo=".$idArticulo;
261
262 include("cuestion.php");
263
264 $descripcion=odbc_result($result,1);
265 $precio=odbc_result($result,2);
266
267 $formulario='<INPUT TYPE="text" NAME="codigo" value="'.$idFamilia.'.'.$idSubFamilia.'.'.$idArticulo.'"
SIZE="10"><INPUT TYPE="hidden" NAME="accion" VALUE="grabar"><INPUT TYPE="hidden"
NAME="codFactura" VALUE="'.$codFactura.'">';
268 $envio='<center><a style="text-decoration:none" href="#" onclick="document.forms['."'".'form1'."'".'].submit();
Editorial CEP 283
Manual PHP 6.0. Módulo IX
y [ ] ()
269 return false;"><p style="font-size:20.0pt;font-family:Wingdings"><</p></a></center>';
270 $auxFT='<FORM id="form1" ACTION="factura.php"
METHOD="GET">'.str_replace(array('ITEM_12','ITEM_13','ITEM_14','ITEM_15','ITEM_16','ITEM_17'),
271 array($formulario,'<INPUT TYPE="text" NAME="descripcion" value="'.$descripcion.'" SIZE="50">','<INPUT
TYPE="text" NAME="cantidad" value="1" SIZE="5">','<INPUT TYPE="text" NAME="precio"
value="'.$precio.'"
272 SIZE="5">',($precio*1)." €",$envio),$auxFT).'</form>';
273
274 $plantilla=str_replace($fT,$auxFT,$plantilla);
275
276 $importeIVA=($importeTotal*$iva)/100;
277
278 $total=$importeTotal+$importeIVA;
279
280 $plantilla=str_replace(array('ITEM_18','ITEM_19','ITEM_20'),array($importeTotal,$importeIVA,$total),$plantill
a);
281
282 if ($errores==1){
283 $plantilla=str_replace('ERRORES',$mensajeError,$plantilla);
284 }
285 else
286 {
287 $plantilla=str_replace('ERRORES','',$plantilla);
288 }
289
290 print $plantilla;
291
292 ?>

284 Editorial CEP


Tema 3. Scripts en php

< LO QUE HEMOS APRENDIDO TEMA 3

- Aplicar los scripts a un caso practico

Editorial CEP 285


MÓDULO X
Optimización de programas en PHP

TEMA 1: Optimización de programas en PHP

OBJETIVOS GENERALES DEL MÓDULO

- Abordar diferentes estrategias para mejorar el rendimiento de nuestros scripts en PHP


- Comparar diferentes instrucciones y sus alias para comprobar la mejora en el rendimiento
- Conocer diferentes funciones y sus pros y contras respecto a la optimización
TEMA 1
Optimización de programas
en PHP

n HTML FRENTE A PHP


n OPTIMIZAR LAS VARIABLES
n LIBERAR MEMORIA
n EVITAR BUCLES
n ORGANIZACIÓN DEL CÓDIGO
n EL USO DE LA SUPRESIÓN DE ERRORES
n USO DE COMILLAS DOBLES Y SIMPLES
n USO DEL IF
n USO DE ALIAS
n IMPRIMIR TEXTOS
n USO DE EXPRESIONES REGULARES
n GESTIÓN DE LA MEMORIA
Tema 1. Optimización de programas en php

En este modulo que se compone solo de un tema vamos a ver diferentes estrategias para optimizar la velocidad de
nuestros scripts en php.

HTML FRENTE A PHP


La parte HTML no es procesada por el PHP, en consecuencia es mas rapido. Veamos un ejemplo:

<?php

echo “Hola! La hora actual es: “.date(“G:H:s”);

?>

Es mas lento que:

<html>

<body>

Hola! La hora actual es: <?php echo date(“G:H:s”); ?>

</body>

</html>

OPTIMIZAR LAS VARIABLES


No usar variables que no se usan, ocupan memoria y no son necesarias. Dar prioridad a las constantes frente a las
variables globales, son mas rápidas.

LIBERAR MEMORIA
También es importante destruir las variables con la instrucción unset y liberar así memoria. Esto es importante sobre
todo en los servidores con recursos limitados.

EVITAR BUCLES
Siempre que se pueda hay que evitar usar bucles. En el caso de que no se pueda evitar hay que dar prioridad al
do..while frente al while, y a su vez a este frente al for. También es necesario controlar que hay dentro del bucle con el fin
de que no haya información inútil. Veamos un ejemplo:

<?php

for ($i=0;$i!=10;$i++){

$a=2;

echo $i*$a;

echo ‘<br>’;

Editorial CEP 291


Manual PHP 6.0. Módulo X

?>

la variable $a=2 se puede poner fuera del bucle. El siguiente ejemplo es mas eficiente:

<?php

$a=2;

for ($i=0;$i!=10;$i++){

echo $i*$a;

echo ‘<br>’;

?>

ORGANIZACIÓN DEL CÓDIGO


A la hora de usar instrucciones de inclusión es preferible usar include() y require() frente a include_once() y
require_once(). Ya que estas dos ultimas usan más recursos.

EL USO DE LA SUPRESIÓN DE ERRORES


Cuando usamos la @ estamos suprimiendo un error. Esto es tremendamente util, pero a su vez costoso en recursos. Es
preferible usar error_reporting(0), que elimina todos los errores o la función isset(), que comprueba si existe una variable o
no.

USO DE COMILLAS DOBLES Y SIMPLES


Priorizar el uso de comillas simples frente a las dobles, ya que estas ultimas procesan la cadena (en busca del $ para
encontrar variables) y consumen mas recursos

USO DEL IF
Es importante priorizar el uso del if/else frente al switch/case, ya que el primero es mas rápido.

292 Editorial CEP


Tema 1. Optimización de programas en php

USO DE ALIAS
Un alias es una función que a su vez llama a otra función. En consecuencia siempre es mas rápido usar la función
original. Veamos algunos ejemplos de alias:

Función Alias
rtrim chop
closedir close
exit die
getdir dir
disk_free_space diskfreespace
fwrite fputs
ini_set ini_alter
is_writable is_writeable
implode join
current pos
rewinddir rewind
strstr strchr
count sizeof

IMPRIMIR TEXTOS
La función echo es mas rápida que la función print. Usarla siempre que sea posible.

USO DE EXPRESIONES REGULARES


La función explode, que permite el uso de expresiones regulares, es más rápido que split

GESTIÓN DE LA MEMORIA
Para controlar la memoria que usa nuestro script y la velocidad del mismo se puede usar memory_get_usage() y
microtime()

Editorial CEP 293


Manual PHP 6.0. Módulo X

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

294 Editorial CEP


Tema 1. Optimización de programas en php

< LO QUE HEMOS APRENDIDO TEMA 1

- Usar diferentes estrategias para mejorar el rendimiento de nuestros scripts en php

- Diferenciar diferentes instrucciones y sus alias para mejorar el rendimiento

- Optimizar script PHP usando funciones adecuadas

Editorial CEP 295


MÓDULO XI
Depuración

TEMA 1: Maguma

OBJETIVOS GENERALES DEL MÓDULO

- Conocer el proceso de depuración de un script PHP


- Introducir al alumno en un entorno de desarrollo integrado
TEMA 1
Maguma

n INTRODUCCIÓN
n MAGUMA
Tema 1. Maguma

INTRODUCCIÓN
Para los usuarios mas experimentados es muy común usar exit, echo, print y error_reporting para seguir la traza del
programa y realizar la traza del script de forma manual. Sin embargo, pienso que sobre todo al principio es importante usar
una o varias herramientas de depuración, que nos faciliten esta labor.

MAGUMA
Una buena herramienta gratuita (aunque tiene una versión de pago con más opciones) es maguma, que es un
procesador de textos con un potente debuger.

La dirección de descarga es la siguiente: www.maguma.com , se recomienda la opción “Maguma Workbench”

Detalle del entorno de trabajo ya instalado

Para comprobar el funcionamiento vamos a comprobar el siguiente script:

<!doctype html public “-//W3C//DTD HTML 4.0 //EN”>

<html>

<head>

<title>Title here!</title>

</head>

<body>

Editorial CEP 301


Manual PHP 6.0. Módulo XI

<?php

for ($i=0;$i!=10;$i++){

echo $i.’<br>’;

?>

</body>

</html>

Tiene que estar activada la opción

Para ver el resultado lo podemos ver con la opción , podemos ver cual es el resultado en el
navegador que lleva integrado. Es decir, en otras palabras, con esta opción, el entorno de trabajo ejecuta el script y después
lo muestra.

El debug se activa con: , Con esta opción podemos ejecutar el debugger, se activan automáticamente las
siguientes opciones:

Step in (F7). Siguiente paso

Step over (F8). Paso a paso

Step out (ctrl.+F8). Salir

Stop debugging (ctrl.+F2). Parar debugging

Automáticamente se activa la visualización de las variables con los valores que va tomando durante la ejecución del
programa:

Detalle de la visualización de las variables

La opción Step in (F7, Siguiente paso) probablemente sea la mas interesante a nivel didáctico, ya que se ve paso a paso
como se ejecuta el programa y cambia el valor de la variable $i.

302 Editorial CEP


Tema 1. Maguma

< LO QUE HEMOS APRENDIDO TEMA 1

- El proceso de depuración de un script PHP

- Utilizar un entorno de desarrollo integrado

Editorial CEP 303


MÓDULO XII
Objetos

TEMA 1: Objetos
TEMA 2: Constructores y Destructores. Visibilidad. Herencia de Objetos

OBJETIVOS GENERALES DEL MÓDULO

- Introducir al alumno en la definición y metodología de la programación orientada a objetos


- Conocer los términos y conceptos básicos para profundizar en los siguientes temas en la
POO
- Introducir el concepto de clase en php
- Identificar las instrucciones básicas para construir clases en php
- Conocer el funcionamiento de la creación y destrucción de un objeto
- Identificar las palabras clave necesarias para construir y destruir objetos
- Implementar tanto constructores como destructores de clases.
- Implementar adecuadamente la visibilidad en los objetos
- Conocer y usar la herencia
TEMA 1
Objetos

n OBJETOS
Tema 1. Objetos

OBJETOS
Casi todos los lenguajes modernos de programación soportan total o parcialmente la programación orientada o objetos.
Esta viene definida por la no separación de los datos y los algoritmos. Es decir:

Código + Datos=Objeto
Este estilo de programación refuerza la encapsulación, evitando así errores, además de que permite la herencia, con lo
cual podemos reutilizar el código ya escrito.

En capítulos anteriores ya hemos visto como definir estructuras de datos que contienen información, procedimientos y
funciones para manejarla. Ahora veremos como combinarlo todo para obtener así objetos. Un objeto contiene los datos de
una entidad, es decir, sus características (podrimos pensar en una persona, edad, nombre, teléfono, etc.) y su
comportamiento (si fuese un coche, estado: aparcado, en marcha, velocidad).

Las características son variables y su comportamiento las funciones y procedimientos vistos en módulos anteriores.

Las clases son un tipo de dato definido por el programador, al igual que php ya tiene algunos definidos como enteros,
strings, etc. Es decir, estamos definiendo un nuevo tipo de dato cada vez que definimos una clase.

Un ejemplo de clase puede ser:

<?php

Class avion

Var $velocidad; // ejemplo de atributo

function setVelocidad($v) // ejemplo de metodo

This->velocidad=100;

?>

Recuerde escribir el código anterior en un archivo con el nombre avión.php.

Como podemos observar, se ha usado la palabra clave class, seguido del nombre de la misma, para indicar que vamos
a definir una clase.

Esta clase tiene un atributo que es velocidad, esta precedida de la palabra var para continuar con la nomenclatura de
los módulos anteriores, pero a partir de la versión 5 de php ya no es necesaria, se podría poner directamente public, en su
lugar. Profundizaremos en este detalle mas adelante.

Este pequeño ejemplo de clase también tiene un método que es setVelocidad, este nos permite dar valor al atributo
velocidad. Este método comienza la palabra reservada function, al igual que las funciones y procedimientos vistos con

Editorial CEP 309


Manual PHP 6.0. Módulo XII

anterioridad. Seguido del nombre del mismo y encerrado entre llaves. Realmente la diferencia con lo visto hasta el momento
es el uso de la pseudo-variable this, que nos permite referirnos a cualquier atributo que pertenezca a la clase.

Lo siguiente que debemos considerar es como instanciar la clase, es decir, como crear un objeto a partir de la clase,
esto lo conseguimos con el operador new.

El operador new se emplea para crear un nuevo objeto de la clase. Su sintaxis es la siguiente:

<?php

Include(‘avion.php’);

$objeto= new avión();

?>

El operador “->” se usa para acceder a los métodos y variables de un objeto desde fuera de la clase. Continuando con
el objeto avión, supongamos que tiene un atributo altitud, podríamos acceder a el de la siguiente forma:

$objeto->getAltitud();

Sin embargo si estamos dentro de la clase lo hacemos con la sintaxis siguiente:

$this->altitud;

Esta sintaxis solo puede ser usada dentro de la clase, haciendo referencia a los métodos y variables del mismo.

Por ultimo hacer referencia a la herencia. Esta permite que una clase disponga de todos los métodos y atributos de la
clase padre, además de añadir los suyos propios. Con esto conseguimos reutilizar código y potenciar la encapsulación.
Continuando con el ejemplo del avión veamos un ejemplo:

<?php

Include(‘avion.php’);

Class avionDeCombate extend avión

Var $armamento;

Function setArmamento($a){

This->armamento=$a;

?>

En los módulos anteriores hemos hecho uso del include como forma de evitar tener que incluir de nuevo el código, tal y
como hemos hecho con avión.php. Cuando trabajamos con clases podemos usar ‘__autoload’, con lo cual evitamos tener
que repetir varias veces la instrucción include.

310 Editorial CEP


Tema 1. Objetos

En el ejemplo anterior quedaría como sigue:

<?php

function __autoload($class_name)

require_once $class_name . ‘.php’;

Class avionDeCombate extend avión

Var $armamento;

Function setArmamento($a){

This->armamento=$a;

?>

Como se puede observar la instrucción __autoload se ha puesto al principio del script y con esto evitamos el include de
avión.php, la mejora significativas es que si se necesitase llamar a mas clases no habría que modificar el programa.

Editorial CEP 311


Manual PHP 6.0. Módulo XII

# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................

312 Editorial CEP


Tema 1. Objetos

< LO QUE HEMOS APRENDIDO TEMA 1

- Que es la programación orientada a objetos

- Los términos y conceptos básicos de la misma

- El concepto de clase en PHP

- Las instrucciones básicas para construir clases en php

Editorial CEP 313


TEMA 2
Constructores y destructores.
Visibilidad. Herencia de objetos

n CONSTRUCTORES Y DESTRUCTORES. VISIBILIDAD. HERENCIA DE OBJETOS


Tema 2. Constructores y destructores. Visibilidad. Herencia de objetos

CONSTRUCTORES Y DESTRUCTORES. VISIBILIDAD. HERENCIA DE OBJETOS


Los métodos de creación y destrucción no son imprescindibles, pero si muy útiles, por ejemplo para inicializar los
atributos de un objeto a un determinado valor, abrir un archivo o cerrarlo cuando destruimos el objeto.

Es de tener en cuenta que tenemos dos métodos especiales __construct() que se ejecuta en el momento de la creación
de la clase y __destruct() que se ejecuta cuando se destruye el objeto.

Veamos un ejemplo con __construct:

<?php

Class avion

Var $velocidad; // ejemplo de atributo

function __construct()

$this->velocidad=0; // al inicializar el avión no tiene velocidad

function getVelocidad($v) // ejemplo de método que obtiene la velocidad actual del avion

return $this->velocidad;

$objeto=new avión();

echo $objeto->getVelocidad; // imprimiría 0

?>

El ejemplo crea un objeto avión, que inicializa con el constructor, la velocidad a 0, después imprimimos el valor de esta
velocidad.

El método __construct() puede ser sustituido, para mantener compatibilidad con versiones anteriores, por el nombre de
la clase. Por ejemplo:

<?php

Class avion

Var $velocidad; // ejemplo de atributo

function avion()

Editorial CEP 317


Manual PHP 6.0. Módulo XII

$this->velocidad=0; // al inicializar el avión no tiene velocidad

function getVelocidad($v) // ejemplo de método que obtiene la velocidad actual del avión

return $this->velocidad;

$objeto=new avion();

echo $objeto->getVelocidad; // imprimiría 0

?>

Como se puede observar la única diferencia es que el método __construct ha sido sustituido por el nombre de la clase.
Antes de la versión 5 de php era necesario hacerlo así.

Veamos ahora un ejemplo de método desctruct

<?php

Class avion

Var $velocidad; // ejemplo de atributo

function avion()

$this->velocidad=0; // al inicializar el avión no tiene velocidad

function __destruct(){

echo ‘memoria liberada’;

function getVelocidad($v) // ejemplo de método que obtiene la velocidad actual del avión

return $this->velocidad;

$objeto=new avion();

318 Editorial CEP


Tema 2. Constructores y destructores. Visibilidad. Herencia de objetos

echo $objeto->getVelocidad; // imprimiría 0

?>

Al ejecutar el script podemos observar que aparece en el navegador el mensaje “memoria liberada”, ya que al acabar la
ejecución se llama al método destructor ejecutando las operaciones pertinentes. En este caso solo muestra un mensaje.

Los datos de la clase tienen diferentes grados de visibilidad, potenciando la encapsulación:

- Public: Se puede ver y modificar desde dentro o fuera de la clase

- Private: Únicamente se puede acceder dentro de la clase

- Protected: Al igual que prívate, pero además se puede trabajar con este dato desde las clases heredadas

Para potenciar la encapsulación y eliminar, en la medida de lo posible, los errores también usaremos dos métodos
específicos, que son setAtributo y getAtributo, siendo atributo el correspondiente a cada clase.

Una vez vistos los conceptos teóricos continuemos con el ejemplo del avión:

Un avión tiene diferentes características, entre otras, velocidad, altitud y flaps. Su comportamiento puede venir definido
por las siguientes acciones acelera, desacelera, asciende, desciende, subeFlaps, bajaFlaps.

Todo esto lo definimos de la siguiente manera:

Creamos un archivo llamado avión.php y las siguientes líneas de código:

<?php

Class avion

public $velocidad, $altitud, $flaps;

private $id;

protected $marca;

public function __construct() {

echo “creamos un nuevo avión con los parametros:<br>”;

$this->velocidad=0;

$this->altitud=0;

$this->flaps=’Abajo’;

$this->id=’desconocido’;

$this->marca=’desconocida’;

Editorial CEP 319


Manual PHP 6.0. Módulo XII

function getFlaps()

return $this->flaps;

function setFlaps($f)

$this->flaps=$f;

function getVelocidad()

return $this->velocidad;

function setVelocidad($f)

$this->velocidad=$f;

function getAltitud()

return $this->altitud;

function setAltitud($f)

$this->altitud=$f;

function setId($i)

$this->id=$i;

function getId()

320 Editorial CEP


Tema 2. Constructores y destructores. Visibilidad. Herencia de objetos

return $this->id;

function __destruct() {

print “Borrando el avión”;

}function setMarca($m)

$this->marca=$m;

function getMarca()

return $this->marca;

?>

Ahora creamos otro archivo que se va a llamar usoAvion.php, en la cual podremos ver como usar la clase creada en el
archivo anterior:

<?php

include(‘avion.php’);

$objeto=new avion();

echo ‘Flaps: ‘.$objeto->flaps.’<br>’;

echo ‘Velocidad: ‘.$objeto->velocidad.’<br>’;

echo ‘Altitud: ‘.$objeto->getAltitud().’<br>’;

echo ‘Id: ‘.$objeto->getId().’<br>’;

echo ‘Marca: ‘.$objeto->getmarca().’<br><br>’;

echo ‘Ahora cambiamos los parametros:<br><br>’;

$objeto->setFlaps(“Arriba”);

$objeto->setVelocidad(100);

Editorial CEP 321


Manual PHP 6.0. Módulo XII

$objeto->setAltitud(200);

$objeto->setId(‘X21’);

$objeto->setmarca(‘Boing’);

echo ‘Flaps: ‘.$objeto->getFlaps().’<br>’;

echo ‘Velocidad: ‘.$objeto->getVelocidad().’<br>’;

echo ‘Altitud: ‘.$objeto->getAltitud().’<br>’;

echo ‘Id: ‘.$objeto->getId().’<br>’;

echo ‘Marca: ‘.$objeto->getmarca().’<br><br>’;

?>

Como se puede observar en el ejemplo la clase avión tiene tres atributos públicos: velocidad, altitud, flaps que se pueden
accede desde la propia clase y sus clases hijas o desde fuera de la misma. También tenemos diferentes métodos para poder
modificar estos atributos. Los que comienzan por ‘Set’, como por ejemplo, setAltitud, nos sirven para dar valor al atributo y
los empiezan por ‘Get’ los usamos para obtener el valor que tiene este.

La variable objeto nos sirve, como su nombre indica, para definir un objeto de la clase avión.

El método __construct se activa al crear un nuevo avión y inicializa los parámetros, y el desctruct cuando finalizamos la
ejecución del script. Opcionalmente a este método se le puede asignar alguna acción.

Durante la ejecución del programa, primero se inicia el objeto, con $objeto=new avion(); Después se muestran los
valores de los diferentes atributos. Es de destacar que los atributos públicos se pueden llamar desde los métodos get o set
(getFlaps()) o bien directamente (.$objeto->flaps).

Llegados a este punto es interesante introducirnos en la idea de herencia que nos permite reutilizar el código. Una clase
hija ‘hereda’ atributos y métodos de la clase madre, además de añadir nuevos métodos y atributos.

Veámoslo mas claramente con un ejemplo, al igual que en los ejemplos anteriores creamos un archivo llamado
avionDeCombate.php:

<?php

include(‘avion.php’);

class avionComercial extends avion{

public $tipo, $nacionalidad,$plazas,$ubicacion;

public function __construct(){

parent::__construct();

echo ‘de combate’;

$this->tipo=’desconocido’;

322 Editorial CEP


Tema 2. Constructores y destructores. Visibilidad. Herencia de objetos

$this->nacionalidad=’desconocida’;

$this->plazas=’desconocido’;

$this->ubicacion=’desconocida’;

function setTipo($t)

$this->tipo=$t;

function getTipo()

return $this->tipo;

function setNacionalidad($n)

$this->nacionalidad=$n;

function getNacionalidad()

return $this->nacionalidad;

function setPlazas($e)

$this->marca=$e;

function getPlazas()

return $this->plazas;

function setUbicacion($u)

Editorial CEP 323


Manual PHP 6.0. Módulo XII

$this->ubicacion=$u;

function getUbicacion()

return $this->ubicacion;

?>

Como se puede observar, en el método constructor llamamos al método padre previamente e inicializamos después los
atributos propios de esta nueva clase

Para comprobar su funcionamiento, creamos otro archivo llamado usoAvionDeCombate.php:

<?php

include(‘avionComercial.php’);

$objeto=new avionDeCombate();

echo ‘<br>Flaps: ‘.$objeto->flaps.’<br>’;

echo ‘Velocidad: ‘.$objeto->velocidad.’<br>’;

echo ‘Altitud: ‘.$objeto->getAltitud().’<br>’;

echo ‘Id: ‘.$objeto->getId().’<br>’;

echo ‘Marca: ‘.$objeto->getmarca().’<br>’;

echo ‘Tipo: ‘.$objeto->getTipo().’<br>’;

echo ‘Nacionalidad: ‘.$objeto->getNacionalidad().’<br>’;

echo ‘Plazas: ‘.$objeto->getPlazas().’<br>’;

echo ‘Ubicacion: ‘.$objeto->getUbicacion().’<br><br>’;

echo ‘Ahora cambiamos los parametros:<br><br>’;

$objeto->setFlaps(“Abajo”);

$objeto->setVelocidad(50);

$objeto->setAltitud(100);

$objeto->setTipo(‘privado’);

324 Editorial CEP


Tema 2. Constructores y destructores. Visibilidad. Herencia de objetos

$objeto->setNacionalidad(‘Argentina’);

$objeto->setPlazas(‘los ángeles azules’);

$objeto->setUbicacion(‘Sevilla’);

echo ‘Flaps: ‘.$objeto->getFlaps().’<br>’;

echo ‘Velocidad: ‘.$objeto->getVelocidad().’<br>’;

echo ‘Altitud: ‘.$objeto->getAltitud().’<br>’;

echo ‘Id: ‘.$objeto->getId().’<br>’;

echo ‘Marca: ‘.$objeto->getmarca().’<br><br>’;

echo ‘Tipo: ‘.$objeto->getTipo().’<br>’;

echo ‘Nacionalidad: ‘.$objeto->getNacionalidad().’<br>’;

echo ‘Plazas: ‘.$objeto->getPlazas().’<br>’;

echo ‘Ubicacion: ‘.$objeto->getUbicacion().’<br><br>’;

?>

Editorial CEP 325


Manual PHP 6.0. Módulo XII

< LO QUE HEMOS APRENDIDO TEMA 2

- Implementar constructores y destructores

- Cuales son las palabras claves para construir objetos

- Usar adecuadamente la visibilidad

- Usar la herencia

326 Editorial CEP


Tema 2. Constructores y destructores. Visibilidad. Herencia de objetos

Editorial CEP 327


Manual PHP 6.0. Módulo XII

328 Editorial CEP


Tema 2. Constructores y destructores. Visibilidad. Herencia de objetos

Editorial CEP 329

También podría gustarte