Documentos de Académico
Documentos de Profesional
Documentos de Cultura
- Mi primer programa
- Introducción
- Kate
- Kdevelop
- Editra
- Gphpedit
- Eclipse
- Procedimientos y funciones
- 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 constantes
- Definición
- Integer (Entero)
- decoct
- dechex
- decbin
- octdec
- hexdec
- bindec
- base_convertí
- Array
- Objeto
- gettype
- Forzado
- Integer (entero)
- Formatos de base
- Suma
- Resta
- Multiplicación
- División
- Módulo
- Incremento
- Decremento
- Operadores de asignación
- Operadores de comparación
- Operador de ejecución
- Y lógico
- O lógico
- Xor
- Not
- Condición (IF)
- Switch
- Bucles
- Introducción
- Archivos de texto
- Archivos pdf
- Introducción
- Plantillas
- Ampliación de plantillas
- Conectar.PHP
- Cuestion.PHP
- Obtenerfila.PHP
- Selecionafamilia.PHP
- Seleccionasubfamilia.PHP
- Introducción
- Familias
- Subfamilias
- Clientes
- Facturas a clientes
- Liberar memoria
- Evitar bucles
- Uso del if
- Uso de alias
- Imprimir textos
- Gestión de la memoria
- Introducción
- Maguma
- Objetos
- 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
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.
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.
20 Editorial CEP
Tema 1. Instalación del entorno de trabajo
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
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:
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):
/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
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:
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:
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:
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
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
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/
- Coloreado de sintaxis
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
- etc.
Editorial CEP 35
Manual PHP 6.0. Módulo I
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/
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.
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
Editorial CEP 39
MÓDULO II
Conceptos fundamentales de la
programación en PHP
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'>
</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
dos lineas */
?>
Editorial CEP 45
Manual PHP 6.0. Módulo II
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
salir:
?>
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:
<?php
$programa=@$_GET['programa'];
if (@strlen($programa)==0){
echo '<html>';
echo '<body>';
46 Editorial CEP
Tema 1. Estructura de un programa en PHP
echo '</FORM>';
echo '</body>';
echo '</html>';
}else{
$lineas=explode(" ",$programa);
if (($lineas[1]!='PRINT')&&($lineas[1]!='print')){goto error2;}
echo $lineas[2];
goto salir;
error1:
echo is_int($lineas[0]);
error2:
error3:
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
Explode: Descompone una cadena de caracteres, usando un delimitador, y nos devuelve un vector con tantos
fragmentos como encuentre.
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.
<?php
function suma($n1,$n2)
$s=$n1+$n2;
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.
<?php
function suma($n1,$n2)
$s=$n1+$n2;
return $s;
$resultado=suma(2,3);
?>
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()
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.
<?php
function sumaUno(&$c,&$d)
$c++; // sumo 1
$a=1;
$b=4;
sumaUno($a,$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
- Estructurar un programa
Editorial CEP 53
MÓDULO III
Estructura de los programas en PHP
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;
?>
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
?>
<html>
<body>
<font color='red'>
</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:
////////////////////////////////////////////////////////////////////////////////////////////
// y dividir //
// 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.
<?php
return $a+$b;
60 Editorial CEP
Tema 1. Estructura de los programas en PHP
return $a-$b;
return $a*$b;
function divide($a,$b){
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>
</head>
<body>
62 Editorial CEP
Tema 1. Estructura de los programas en PHP
</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.
<?php
/////////////////////////////////////////////////////////////////////////////////////////////
// y dividir //
// 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);}
?>
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
/////////////////////////////////////////////////////////////////////////////////////////////
// y dividir //
// 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!='/'))
Echo '<html>';
Echo '<head>';
Echo '</head>';
Echo '<body>';
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);}
?>
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
Editorial CEP 67
MÓDULO IV
Tipos de datos en PHP
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;
?>
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.
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
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...
- Integer;
- 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;
?>
DECHEX
Cambia de decimal a hexadecimal
<?php
$n=1020;
?>
DECBIN
Cambia de decimal a binario
<?php
$n=1020;
?>
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;
?>
BINDEC
De binario a decimal
<?php
$n=1111111100;
?>
BASE_CONVERT
Convierte de una base cualquiera a otra
<?php
$n = '0x3FC';
?>
<?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
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;
?>
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
?>
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,
$pi.
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,
$pi.
ABC;
echo $texto;
?>
<?php
$cadena1='hola ';
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.
<?php
$familia = array(
);
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(
);
print_r($familia);
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);
?>
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);
echo '<br>';
print_r($alumnos);
?>
array_shift()
<?php
$alumnos=array("Pepe","Juan","Anselmo");
print_r($alumnos);
echo '<br>';
Editorial CEP 87
Manual PHP 6.0. Módulo IV
print_r($alumnos);
?>
unset()
<?php
$familia = array(
);
print_r($familia);
unset($familia["padre"]);
echo '<br>';
print_r($familia);
?>
array_push()
<?php
$alumnos=array("Pepe","Juan","Anselmo");
print_r($alumnos);
array_push($alumnos,"Josefa","María");
echo '<br>';
print_r($alumnos);
?>
array_merge()
<?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;
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
- Cuales son los diferentes tipos de datos que podemos usar en php
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";
$variable = 823;
?>
También es especialmente útil la función var_dump, que nos muestra información sobre la variable
<?php
$variable = 562;
var_dump($variable);
?>
Veamos un ejemplo
<?php
$string = "45";
settype($string,"integer");
?>
- "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";
?>
- (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
is_array()
<?php
echo "\n";
?>
is_bool()
<?php
$falso = false;
$numero = 0;
echo "Booleano";
else
// Si numero es booleano retorna verdadero (true) en caso contrario retorna false (falso)
else
{echo "Booleano";}
?>
Editorial CEP 97
Manual PHP 6.0. Módulo IV
is_double()
<?php
if(is_double(3.5)) {
}else {
?>
is_float()
<?php
if(is_float(45.67)) {
}else {
?>
is_int()
Si es un número entero devuelve true (verdadero) en caso contrario devuelve falso (false)
<?php
if (is_int(56)) {
} else {
?>
98 Editorial CEP
Tema 3. Funciones
is_integer()
is_long()
is_null()
<?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()
<?php
$var=123;
$var="123";
$var="A123";
?>
is_object()
<?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;
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;
echo "<br>";
$a=array(1,2,3);
?>
is_string()
<?php
$variable="cadena";
echo "<br>";
$variable=123;
?>
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
?>
Existen diferentes formas de representar el formato de los números en php, como podemos ver a continuación:
number_format ($numero)
Nos da la parte entera del número, omitiendo los decimales, usa como separador de miles la coma.
<?php
$numero=50;
?>
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;
?>
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;
?>
FORMATOS DE BASE
Php nos permite cambiar a diferentes formatos de base, veamos las diferentes funciones:
decoct
<?php
$n=1020;
?>
dechex
<?php
$n=1020;
?>
decbin
<?php
$n=1020;
?>
octdec
<?php
$n=01774;
echo octdec($n);//1020
?>
hexdec
De hexadecimal a decimal
<?php
$n=0x3FC;
?>
bindec
De binario a decimal
<?php
$n=1111111100;
?>
base_convert
<?php
$n = '0x3FC';
?>
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;
?>
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 4+2;
?>
RESTA
Resta dos valores. Ejemplo:
<?php
Echo 4-2;
?>
MULTIPLICACIÓN
Multiplica dos valores. Ejemplo:
<?php
Echo 4*2;
?>
DIVISIÓN
Divide dos valores. Ejemplo:
<?php
Echo 4/2;
?>
MÓDULO
Resto de dividir dos valores. Ejemplo:
<?php
Echo 4%2;
?>
INCREMENTO
Suma 1 a un determinado valor. Veamos un ejemplo:
<?php
Echo 2++;
?>
DECREMENTO
Resta 1 a un determinado valor. Ejemplo:
<?php
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;
?>
<?php
$a=1;
$a+=2;
?>
<?php
$a=1;
$a-=2;
?>
<?php
$a=3;
$a*=2;
?>
<?php
$a=6;
$a/=2;
?>
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;
?>
<?php
$a='Editorial ';
$a.='CEP';
?>
OPERADORES DE COMPARACIÓN
Realizan comparaciones entre variables y números
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)
else
?>
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)
else
?>
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)
else
?>
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)
else
?>
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)
else
?>
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)
else
?>
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)
else
?>
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)
else
?>
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.
# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
n Y LÓGICO
n O LÓGICO
n XOR
n NOT
Tema 2. Operadores lógicos
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;
?>
NOT
Devuelve verdadero si la condición es falsa. Se usa el signo de admiración !. Veamos un ejemplo:
<?php
$a=1;
?>
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
< menor
<?php
$edad=19;
if ($edad>=18){
?>
El ejemplo imprime "eres mayor de edad", solo si la variable $edad es igual o mayor que 18.
<?php
$edad=19;
if ($edad>=18){
}else{
?>
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;
?>
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.
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) {
} elseif ($dado == 2) {
} elseif ($dado == 3) {
} elseif ($dado == 4) {
} elseif ($dado == 5) {
} elseif ($dado == 6) {
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:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
?>
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:
case 2:
case 3:
case 4:
case 5:
case 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.
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.
<?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.
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:
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
Ejemplo:
<?php
?>
copy
Ejemplo:
<?php
copy("/path/archivo.txt","/nuevopath/archivo");
?>
file_exists
Ejemplo:
<?php
if file_exists("/path/archivo.txt"){
}else
?>
filesize
Ejemplo:
<?php
echo filesize("/path/archivo.txt");
?>
mkdir
Crea un directorio
Ejemplo:
<?php
mkdir("/path/directorio");
?>
move_uploaded_file
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");
?>
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.
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.
<?php
$archivo=fopen('ejemplo.txt','w');
fclose($archivo);
?>
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.
<?php
$archivo=fopen('ejemplo.txt','r');
echo $lineas;
fclose($archivo);
?>
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.
<?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.
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");
fclose($contador);
++$visitas;
$contador = fopen("contador.txt","w");
fwrite($contador, $visitas);
fclose($contador);
?>
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:
3. Desbloquea el archivo
<?
flock(2);
$contador = fopen("contador.txt","r");
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);
?>
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');
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:
Veamos el ejemplo:
<?php
$n = count($linea);
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.
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:
<?php
header('Content-type: application/msword'); // le indicamos al navegador que es un documento que debe abrir con word
?>
header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word
?>
header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word
?>
header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word
?>
header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word
?>
header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word
?>
header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word
?>
header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word
?>
header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word
?>
header('Content-type: application/msword'); // le indicamos al anavegador que es un documento que debe abrir con word
?>
<?php
$archivo="ejemploExcel.xls";
header('Content-type: application/ms-excel');
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";
header('Content-type: application/ms-excel');
echo $celdas;
?>
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
header("Content-type: application/vnd.ms-excel");
echo "<table>";
echo "<tr><td>6</td><td>3</td>=A1*B1</td></tr>";
echo "</table>";
?>
- Crear archivos tipo hoja de calculo en php compatibles con Microsoft Excel
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.
<?php
$pagina = "
<html>
<body>
</body>
</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.
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>
</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).
<?php
$pagina = "
<html>
<head>
<title>Ejemplo de Estilo</title>
<style type='text/css'>
body {
color: blue;
background-color: cyan }
</style>
</head>
<body>
</body>
</html>
";
$pdf->stream("ejemplo.pdf"); // lo descargamos con el nombre que aparece entre paréntesis en este caso "ejemplo.pdf"
?>
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 }
<html>
<head>
<title>Ejemplo de Estilo</title>
</head>
<body>
</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.
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>
</menu>
<?php
// Desde este indice, por defecto controlamos la creación de la base de datos y de la tabla
?>
</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
// esta opción nos da acceso a dar de baja la información que no necesitemos o modificarla con modifica.php
@sqlite_query($db, "CREATE TABLE agenda(id INTEGER PRIMARY KEY, nombre, descripcion, direccion, cp, localidad,
provincia, email, telefono)");
while($row = sqlite_fetch_array($resultado))
"&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>";
?>
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.
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
?>
<html>
<head>
<title>Agenda de telefonos</title>
</head>
<body>
</form>
</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.
<?php
// este documento html nos sirve tanto para modificar o dar de alta un contacto nuevo
?>
<html>
<head>
<title>Agenda de telefonos</title>
</head>
<body>
</form>
</body>
</html>
<?php
@sqlite_query($db, "CREATE TABLE agenda(id INTEGER PRIMARY KEY, nombre, descripcion, direccion, cp, localidad,
provincia, email, telefono)");
$id=$_GET['id'];
header('Location: listar.php')
?>
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.
<?php
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>
</menu>
<?php
// Desde este indice, por defecto controlamos la creación de la base de datos y de la tabla
?>
</body>
</html>
<?php
// esta opción nos da acceso a dar de baja la información que no necesitemos o modificarla con modifica.php
mysql_select_db("datos",$conectar);
nombre varchar(50),
descripcion varchar(150),
direccion varchar(150),
cp int(11),
localidad varchar(50),
provincia varchar(50),
email varchar(50),
telefono varchar(50)
)");
while($row = mysql_fetch_row($resultado))
"&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>";
?>
<?php
// este documento html nos sirve tanto para modificar o dar de alta un contacto nuevo
?>
<html>
<head>
<title>Agenda de telefonos</title>
</head>
<body>
</form>
</body>
</html>
<?php
mysql_select_db("datos",$conectar);
nombre varchar(50),
descripcion varchar(150),
direccion varchar(150),
cp int(11),
localidad varchar(50),
provincia varchar(50),
email varchar(50),
telefono varchar(50),
)");
$nombre=$_GET['nombre'];
$descripcion=$_GET['descripcion'];
$direccion=$_GET['direccion'];
$cp=$_GET['cp'];
$localidad=$_GET['localidad'];
$provincia=$_GET['provincia'];
$email=$_GET['email'];
$telefono=$_GET['telefono'];
'$nombre',
'$descripcion',
'$direccion',
$cp,
'$localidad',
'$provincia',
'$email',
'$telefono')");
header('Location: listar.php')
?>
<?php
mysql_select_db("datos",$conectar);
nombre varchar(50),
descripcion varchar(150),
direccion varchar(150),
cp int(11),
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'];
header('Location: listar.php')
?>
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.
Pulsamos agregar y seleccionamos el driver adecuado, en nuestro caso Driver de Microsoft Access (*.mdb)
Acto seguido le ponemos el nombre que queramos y seleccionamos el archivo de la base de datos
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>
</menu>
<?php
// Desde este indice, por defecto controlamos la cración de la base de datos y de la tabla
?>
</body>
</html>
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
// 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",'','');
nombre varchar(50),
descripcion varchar(150),
direccion varchar(150),
cp int(11),
localidad varchar(50),
provincia varchar(50),
email varchar(50),
telefono varchar(50)
)");
while($row = odbc_fetch_array($resultado))
"&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>";
?>
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
?>
<html>
<head>
<title>Agenda de telefonos</title>
</head>
<body>
</form>
</body>
</html>
grabaA.php
<?php
$db = odbc_connect("datos",'','');
nombre varchar(50),
descripcion varchar(150),
direccion varchar(150),
cp int,
localidad varchar(50),
provincia varchar(50),
email varchar(50),
telefono varchar(50),
)");
$nombre=$_GET['nombre'];
$descripcion=$_GET['descripcion'];
$direccion=$_GET['direccion'];
$cp=$_GET['cp'];
$localidad=$_GET['localidad'];
$provincia=$_GET['provincia'];
$email=$_GET['email'];
$telefono=$_GET['telefono'];
'$nombre',
'$descripcion',
'$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",'','');
nombre varchar(50),
descripcion varchar(150),
direccion varchar(150),
cp int,
localidad varchar(50),
provincia varchar(50),
email varchar(50),
telefono varchar(50),
)");
$id=$_GET['id'];
header('Location: listar.php')
?>
Es de destacar la instrucción odbc_exec, que nos sirve para realizar una consulta.
# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
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.
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.
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:
factulineaproveedor: Tabla que contiene las diferentes líneas que componen las facturas de los
proveedores
codfactura
numlinea
codfamilia
codsubfamilia
codigo
cantidad
dcto
pp
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.
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
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
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
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
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
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
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.
# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
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>
</head>
<body>
<ul id="nav">
</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.
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;
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.
<!--
hay que añadir el script de google creado por Dean Edwards que esta en http://code.google.com/p/ie7-js/
-->
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;
display: block;
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.
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;
width: 140px;
float: left;
#nav a:hover {
background: #7B68EE;
li {
float: left;
position: relative;
li ul {
display: none;
position: absolute;
left: 0;
display: block;
top: 1.90em;
width: 140px;
<html>
<head>
</head>
<body>
<ul id="nav">
<li><a href="">Inicio</a>
<ul>
<li><a href="">Inicio</a></li>
</ul>
</li>
<ul>
<li><a href="">Cine</a></li>
<li><a href="">Musica</a></li>
<li><a href="">Deportes</a></li>
</ul>
</li>
<ul>
<li><a href="">Curriculum</a></li>
</ul>
</li>
<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):
display: block;
top: 1.90em;
width: 140px;
# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
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.
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.
<?php
$plantilla=str_replace(
array('TITULO','SUB','<style>','MENU'),
array('Gestión Facturación','Familias','<style>'.$estilo,$menu),
file_get_contents("../plantillas/index.htm"));
?>
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.
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
Estos tres items se repetirán en todas las plantillas, por lo tanto no se volverá a hacer referencia a ellos.
Guia.html
Pequeño índice de ayuda, que contiene todas las opciones disponibles en la aplicación
Familia.html
Subfamilia.html
Articulo.html
Listade.html
Cliente.html
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
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.
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 ?>
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).
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.
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.
# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
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 ?>
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);
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
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'){
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
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
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(
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
En este modulo que se compone solo de un tema vamos a ver diferentes estrategias para optimizar la velocidad de
nuestros scripts en php.
<?php
?>
<html>
<body>
</body>
</html>
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>’;
?>
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>’;
?>
USO DEL IF
Es importante priorizar el uso del if/else frente al switch/case, ya que el primero es mas rápido.
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.
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()
# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
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.
<html>
<head>
<title>Title here!</title>
</head>
<body>
<?php
for ($i=0;$i!=10;$i++){
echo $i.’<br>’;
?>
</body>
</html>
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:
Automáticamente se activa la visualización de las variables con los valores que va tomando durante la ejecución del
programa:
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.
TEMA 1: Objetos
TEMA 2: Constructores y Destructores. Visibilidad. Herencia de 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.
<?php
Class avion
This->velocidad=100;
?>
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
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’);
?>
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();
$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’);
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.
<?php
function __autoload($class_name)
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.
# ANOTACIONES
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
....................................................................................................................................................................................................
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.
<?php
Class avion
function __construct()
function getVelocidad($v) // ejemplo de método que obtiene la velocidad actual del avion
return $this->velocidad;
$objeto=new avión();
?>
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
function avion()
function getVelocidad($v) // ejemplo de método que obtiene la velocidad actual del avión
return $this->velocidad;
$objeto=new avion();
?>
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í.
<?php
Class avion
function avion()
function __destruct(){
function getVelocidad($v) // ejemplo de método que obtiene la velocidad actual del avión
return $this->velocidad;
$objeto=new avion();
?>
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.
- 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.
<?php
Class avion
private $id;
protected $marca;
$this->velocidad=0;
$this->altitud=0;
$this->flaps=’Abajo’;
$this->id=’desconocido’;
$this->marca=’desconocida’;
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()
return $this->id;
function __destruct() {
}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();
$objeto->setFlaps(“Arriba”);
$objeto->setVelocidad(100);
$objeto->setAltitud(200);
$objeto->setId(‘X21’);
$objeto->setmarca(‘Boing’);
?>
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’);
parent::__construct();
$this->tipo=’desconocido’;
$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)
$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
<?php
include(‘avionComercial.php’);
$objeto=new avionDeCombate();
$objeto->setFlaps(“Abajo”);
$objeto->setVelocidad(50);
$objeto->setAltitud(100);
$objeto->setTipo(‘privado’);
$objeto->setNacionalidad(‘Argentina’);
$objeto->setUbicacion(‘Sevilla’);
?>
- Usar la herencia