iw-utxx: programación web en php con bases de datos

52
Implantación de Implantación de Aplicaciones Web Aplicaciones Web UT 4: Programación web en PHP con acceso a bases de datos. CFGS «Administración de Sistemas Informáticos en Red» CIFP Juan de Colonia (Burgos) David H. Martín Alonso – Curso 2012/2013 –

Upload: david-martin

Post on 13-Jun-2015

487 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: IW-UTXX: Programación web en PHP con bases de datos

Implantación de Implantación de Aplicaciones WebAplicaciones Web

UT 4: Programación web en PHPcon acceso a bases de datos.

CFGS «Administración de SistemasInformáticos en Red»

CIFP Juan de Colonia (Burgos)

David H. Martín Alonso

– Curso 2012/2013 –

Page 2: IW-UTXX: Programación web en PHP con bases de datos

Red profesional colaborativa del ciclo«Administración de Sistemas Informáticos en Red»

Proyecto ARCEProyecto ARCE

David H. Martín Alonso

CIFP Juan de Colonia

Burgos

IES José Luis Sampedro

Tres Cantos (Madrid)

Víctor Cabezas Pozo

IES Conselleria

Valencia

José Luis Rodríguez Rodríguez

IES Jacarandá

Brenes (Sevilla)

Page 3: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

ContenidosContenidos

Internacionalización, localización

Programación orientada a objetos

Documentación

Acceso a bases de datos con PDO

Page 4: IW-UTXX: Programación web en PHP con bases de datos

Red profesional colaborativa del ciclo«Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOSPHP Y BASES DE DATOS

Internacionalización, localización

Page 5: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

Programación orientada a objetosProgramación orientada a objetos

ASCIICP 850

Win-1252ISO-8859-1

UnicodeUTF-8

Page 6: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

6/52

i18n – UTF8i18n – UTF8Internacionalización (i18n) y localización (L10n)

i + 18 letras + n L + 10 letras + n

• Soporte de idiomas– Codificaciones de caracteres diversas– Traducción de interfaces de usuario

• Requisito para las aplicaciones web– Por dimensión internacional de la WWW– Por variedad de codificaciones en los sistemas operativos

• Necesidad de coherencia entre aplicaciones– Navegador – PHP – Base de datos

• Propuesta: uso generalizado de UTF-8– Contenido HTTP – Codificación HTML– Texto recogido en formularios– Almacenamiento de variables en PHP– Funciones alternativas de tratamiento de cadenas en PHP– Definición de bases de datos

■ i18n + L10n□POO□Documentación□Bases de Datos

Page 7: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

7/52

¿Cómo usar PHP con UTF8?¿Cómo usar PHP con UTF8?• Cadenas de texto en codificaciones multibyte: mbstring

– Las funciones originales son para codificaciones de 8 bits– Objetivo de mejora en PHP6

• PHP:– La codificación interna es ISO-8859-1. La cambiamos:

mb_internal_encoding( 'UTF-8' );

– Usamos las funciones alternativas de «mbstring»Ej.: strlen () → mb_strlen()

• HTTPheader( 'Content-Type: text/html; charset=UTF-8' );

• HTML– Aunque se prima la cabecera HTTP, lo pondremos también

<meta charset="utf-8">

• Formularios:– Los navegadores respetarán la codificación de HTML

• MySQLCREATE nombre_bd DEFAULT CHARACTER SET utf8;SET NAMES utf8;

■ i18n + L10n□POO□Documentación□Bases de Datos

Page 8: IW-UTXX: Programación web en PHP con bases de datos

PHP Y BASES DE DATOS.

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

Ordenar en PHP un array de textos «difíciles» como

puede ser {'paño', 'palo', 'pato'… }. Será necesario

controlar correctamente el uso de cadenas multibyte

en codificación UTF-8 y la localización española.

Se pueden emplear para ello las siguientes

funciones:

mb_internal_encoding

setlocale

asort

mb_strlen

mb_convert_encoding

Actividad I: mbstringActividad I: mbstring

Page 9: IW-UTXX: Programación web en PHP con bases de datos

PHP Y BASES DE DATOS.

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

Buscar la base de datos «World», base de datos de

ejemplo distribuida para MySQL. Adaptar el archivo

para que la base de datos se almacene

correctamente en UTF-8 y que las tablas empleen el

orden ortográfico estándar de Unicode.

Actividad II: Unicode en MySQLActividad II: Unicode en MySQL

Page 10: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

10/52

L10nL10n• Identificación y ajuste al idioma de usuario

– Textos de la interfaz de usuario– Formatos de fecha y otros– Ordenación de cadenas respetando alfabetos nacionales

• Traducciones– Identificación y cambio de localización

setlocale(LC_ALL, 'es_ES.UTF8');

– Incorporar traducciones del idioma deseado → array– Acceso a TODOS los textos: array + claves

printf($text['Suma de %d y %d'], $a, $b);

– Evitar el operador de concatenación «.»El orden lo marca el traductor, NO el programador.

– Deberíamos escribir el propio código en inglés... ¿no?

• Presencia en el código– Ordenación

asort($lista, SORT_LOCALE_STRING);

– Fechas en cadenas de texto

■ i18n + L10n□POO□Documentación□Bases de Datos

Page 11: IW-UTXX: Programación web en PHP con bases de datos

PHP Y BASES DE DATOS.

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

Localizar los archivos de traducción de Joomla,

observarlos, revisarlos, retocarlos.

• En versiones anteriores de Joomla

encontrábamos dos paquetes de traducciones:

uno «recomendado» y el otro en JoomlaSpanish

incompleto.

Observar la presencia abundante de cadenas de

formato de tipo «printf» y recordar su conveniencia

frente al operador «.» de concatenación de cadenas.

Actividad III: traduccionesActividad III: traducciones

Page 12: IW-UTXX: Programación web en PHP con bases de datos

Red profesional colaborativa del ciclo«Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOSPHP Y BASES DE DATOS

Introducción a laProgramación Orientada a Objetos

Page 13: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

13/52

Programación orientada a objetosProgramación orientada a objetosProgramación orientada a objetos (OOP, POO)

Forma o «paradigma» de programación• Antecedentes: programación procedimental, modular,

orientada a procesos– El código actúa sobre los datos

• Programación orientada a objetos– El programa se organiza en torno a los datos– Conserva estilo: programación estructurada, modular

Objeto: datos + «sus» procedimientos– Abstracción del mundo real– Propiedades encapsuladas, privadas, protegidas

Símil: tarjetas inteligentes vs. tarjetas magnéticas

• Clases: tipo, plantilla para replicar objetos– Jerarquía de herencia. Perfeccionamiento progresivo.

□i18n + L10n■POO□Documentación□Bases de Datos

Page 14: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

14/52

POO: beneficiosPOO: beneficios

Beneficios de la POO:• Calidad:

– robustez del código / reducción de errores

• Reutilización de código• Facilidad de mantenimiento• Consecuencia: reducción de costes globales

• Gestión de elementos con mucha variedadEntornos gráficos de usuario

• Incorporado a todos los lenguajes modernos

□i18n + L10n■POO□Documentación□Bases de Datos

€€ €

$ $

Page 15: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

15/52

• Tipo compuesto: abstracción, estructura con datos y operaciones

– Datos, atributos, variables → Estado– Operaciones, funciones, métodos → Comportamiento

Principios de la POO:• Encapsulación, ocultamiento

– Datos afines se mantienen de forma conjunta y privada– Los procedimientos ligados a esos datos también– Los cambios están controlados– Acceso a través de una interfaz de métodos públicos

• Herencia– Clases: definición de tipos de objetos– Objetos: múltiples instancias de esas clases – Podemos derivar otras clases con funcionalidades añadidas

• Polimorfismo– Una misma acción puede tomar distintas formas en los

descendientes

POO: ObjetosPOO: Objetos□i18n + L10n■POO□Documentación□Bases de Datos

Page 16: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

16/52

• 1967: Simula• '70: Smalltalk• 1983: C++• 1985: Eiffel• 1995: Java• 2001: C# (plataforma .NET)• Incorporado en los lenguajes modernos

– Perl, PHP, Python

POO: HistoriaPOO: Historia□i18n + L10n■POO□Documentación□Bases de Datos

Page 17: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

17/52

• C++– Lenguaje compilado, alto rendimiento– Ámbito: programación de sistemas

• Java, C#– Lenguajes de propósito general– Ámbito: programación de aplicaciones locales y web– Basados en máquina virtual: compilación + traducción

• PHP– Lenguaje de propósito general– Lenguaje interpretado, de scripts, portable– Ámbito: muy popular en programación para la web– Soporte en evolución, estable en PHP versión 5

POO: LenguajesPOO: Lenguajes□i18n + L10n■POO□Documentación□Bases de Datos

Page 18: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

18/52

• Lenguaje Unificado de Modelado– Unified Modelling Language (UML)– Herramienta gráfica de diseño para OO– Describe diversos tipos de diagramas

Los diagramas de clase permiten representar• Jerarquía de clases / interfaces• Elementos

– Atributos, tipos y ámbitos– Métodos y sus parámetros formales– Asociaciones

[TUML]

POO: Diseño con UMLPOO: Diseño con UML□i18n + L10n■POO□Documentación□Bases de Datos

Page 19: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

Programación orientada a objetosProgramación orientada a objetos

POOUMLClasesObjetos

AtributosMétodos

Page 20: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

20/52

• Código relacionado con clases y objetos ¿dónde?En bloques <?php?>, intercaladoinclude o require para incorporar todas las partes

– Definición de las clasesRecomendable, no obligatorio, usar 1 archivo × 1 claseNo se ejecuta hasta ser requerido por algún objeto

– Instanciación y manipulación de objetos

Clases en PHPClases en PHP□i18n + L10n■POO□Documentación□Bases de Datos

Page 21: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

21/52

• Declaración: class EjemploTipo {…}– Identificador con estilo CamelCase

Mayúsculas como separadores de palabras– Nombre de archivo ≈ nombre de la clase– Definición recogida entre las llaves

• Atributos: variables que representan estado– Al comienzo de la clase– En PHP no se requiere prefijar el tipo de dato– Con modificadores de acceso: público/privado– Probablemente privados, para evitar acceso externo directo

Métodos __get y __set para acceder a ellos

• Métodos: código que implementa capacidades– Funciones

Definición de las clasesDefinición de las clases□i18n + L10n■POO□Documentación□Bases de Datos

Page 22: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

22/52

• Declaración de clases:class HMundo {…};

…o con herenciaclass HMundo extends Saludo {…};

• Declaración de atributos:public $datoVulnerable;private $nombrePropio;

• Declaración de métodos:public function sumaPareja($a, $b) {…};

…o para el constructor inicialpublic function __construct(…) {…};

• Acceso interno a atributos:$this->telefonoMovil

…en PHP SÍ es obligatorio siempre poner $this

• Instanciación de objetos:$bienvenida=new HMundo('Pepe');

• Acceso externo a métodos:$bienvenida->saludar();

Sintaxis esencialSintaxis esencial□i18n + L10n■POO□Documentación□Bases de Datos

Page 23: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

POO en PHP: Ejemplo IPOO en PHP: Ejemplo I#!/usr/bin/php -f

<?phpclass HolaMundo {

private $nombre;

public function __construct($nombre) {$this->nombre=$nombre;

}

public function saluda() {$mensaje=sprintf("¡Hola %s!",$this->nombre);return $mensaje;

}}

$objeto=new HolaMundo('David');printf("%s\n",$objeto->saluda());?>

(1) Comienzo de bloque PHP

(2) Declaración de la clase

(3) Declaración de atributos

(4) Constructor de la clase

(5) Definición de método(6) Acceso a los atributos del objeto

(7) Instanciación de objeto

(8) Acceso a método

Page 24: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

POO en PHPPOO en PHP

classnew

__constructpublic / private / protected

get / set→

Page 25: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

25/52

• private– Acceso privado, solo desde métodos de la propia clase.– Uso: habitualmente los atributos serán todos privados.– Uso: cierto métodos reservados para uso interno.

• public– Acceso público, desde cualquier parte del código.– Uso: conjunto seleccionado de métodos visibles.

• protected– Acceso protegido, desde métodos de clases descendientes.– Uso: limitado, acceso entre métodos y atributos emparentados

• Propiedades: atributos «virtuales»– Acceso externo como atributos públicos.– Virtualidad gestionada por «métodos mágicos»

__set() y __get() – Adquirido de C#

VisibilidadVisibilidad□i18n + L10n■POO□Documentación□Bases de Datos

Page 26: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

26/52

• Interfaces: como clases, pero sin código– Métodos declarados, pero sin implementar– Se requiere de una clase derivada para crear objetos– Permiten herencia múltiple

interface iRedondo {…};class Esfera implements iRedondo {…};$bola=new Esfera();

– Métodos y clases abstractas: solo parcialmente incompletasabstract class AMedias {

abstract protected function pendiente();…}

• Elementos estáticos– Comunes para toda la clase: variables, constantes y métodos.– Accesibles sin necesidad de instanciar ningún objeto

• Operador de acceso «::»– Acceso a elementos de clase, análogo a «→»

• Métodos mágicos– Nombres reservados para usos especiales– __construct, __set, __get …

POO avanzadoPOO avanzado□i18n + L10n■POO□Documentación□Bases de Datos

Page 27: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

27/52

• Excepciones: objetos para gestión de errores– Se «lanzan» cuando se produce una situación que impide

completar un método.– Se interrumpe la ejecución del método y se vuelve al método

llamante. En éste se repite la misma situación y la excepción se va transfiriendo a medida que subimos por la «pila» de funciones.

– Código mínimo. Sólo nombre y jerarquía para identificarlas.

• Se pueden «capturar»: bloques try-catch– Se interrumpe la propagación de la excepción.– Se ejecuta el bloque «catch» donde se analizar la situación.

Ejecutar el código (try) y si salta una excepción que queramos capturar (catch) derivar a ese bloque.

– Tres opciones:Burocrática: avisar y continuar. Mala idea generalmente.Reintento: revisar los parámetros y repetir.Propagación: lanzar otra excepción y seguir la cadena.

– Plan: propagar hacia arriba hasta que el método responsable del dato la capture y tome otras acciones.

ExcepcionesExcepciones□i18n + L10n■POO□Documentación□Bases de Datos

Page 28: IW-UTXX: Programación web en PHP con bases de datos

Red profesional colaborativa del ciclo«Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOSPHP Y BASES DE DATOS

Documentación en PHP: Doxygen

Page 29: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

29/52

Documentación: FinalidadDocumentación: FinalidadFinalidad de la documentación

• Intercambio de conocimiento acerca de la aplicación y su desarrollo

• Aprovechamiento óptimo de la funcionalidad programada

Calidad → Reducción de costes• Costes de desarrollo

– Adecuación a las especificaciones– Reutilización de código– Reducción de errores, reducción del esfuerzo de reparación– Reducción del esfuerzo de adaptación y mejora

• Costes de explotación– Tiempo de aprendizaje– Uso eficiente– Reducción de errores de uso

• Supone un coste inicial amortizado inmediatamente

€€ €

$ $

□i18n + L10n□POO■Documentación□Bases de Datos

Page 30: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

30/52

Documentación: EtapasDocumentación: Etapas• Distintas metodologías de desarrollo concretan

distintos modelos• Análisis y desarrollo

– Ordinogramas, pseudocódigo (Prog. estructurada)– UML , diagramas de clases (Prog. Orientada a Objetos)– Diagramas entidad-relación (Bases de Datos)

• Codificación– Paradigmas: modular, estructurado, orientado a objetos– Identificadores– Comentarios en línea

Entre el código, aspectos no obvios del algoritmo– Comentarios formales

Niveles: archivos, clases, funciones, parámetros

• Puesta en producción– Manual de programador– Manual de administrador– Manual de usuario

□i18n + L10n□POO■Documentación□Bases de Datos

Page 31: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

31/52

• La falta de claridad en el código limita seriamente el desarrollo

– El esfuerzo de programación crece exponencialmente

• La programación estructurada emplea patrones conocidos

– Fácil comprensión– Fácil adaptación– Importancia de espaciado y sangrado

• Los identificadores facilitan la lectura y la comprensión– Nombres significativos– Importancia de evitar nombres crípticos– Diferentes convenios asociados históricamente con cada

lenguaje

• Comentarios intercalados– Para explicar procesos complicados– NO sustituyen ni a la claridad, ni a la sencillez ni a los

identificadores

Documentación de códigoDocumentación de código□i18n + L10n□POO■Documentación□Bases de Datos

Page 32: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

32/52

Comentarios a nivel de módulos• Funciones, ficheros, clases. Identifican el módulo.• Informan de su funcionalidad y condiciones de uso

– Interfaz. Modelo de «caja negra».

• Simultáneos a la codificación, si no previos– Ayuda del propio programador– Perdida de utilidad y de contenido si se hacen en diferido

Formatos predeterminados– Establecidos por la organización o comunidad de

programadores– Propuestos por el lenguaje en lenguajes OO como Java o C#

(.NET)– Determinados por las herramientas

Procesados con generadores de documentación– Generación automática en formatos múltiples– A partir de los comentarios en el propio código

Documentación de interfazDocumentación de interfaz□i18n + L10n□POO■Documentación□Bases de Datos

Page 33: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

33/52

• Java: lenguaje de programación orientado a objetos– Origen 1990 (Sun Microsystems)– Inspirado en C y C++– Interpretado, multiplataforma– Lenguaje POO de propósito general popular y referente.

Javadoc:• Herramienta de generación de documentación para

Java– Parte del entorno de desarrollo básico (Java Development Kit,

JDK)– A partir de comentarios en el código genera HTML (páginas

web)– Uniformidad de estilo de TODA la documentación de Java– Mecanismo de comunicación universal → Reutilización

• Objetivo: documentar elementos reutilizables– Paquetes, clases, métodos, parámetros, atributos– Documentación de la interfaz para poder reutilizar clases

El formato «Javadoc» (I)El formato «Javadoc» (I)□i18n + L10n□POO■Documentación□Bases de Datos

Page 34: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

El formato «Javadoc» (II)El formato «Javadoc» (II)/** Punto en un espacio 2D. * @author <a href="mailto:profe@cesbur">Profe de PLE</a>*/public class Punto {

/** Crea un {@link Punto} a partir de sus coordenadas. * @param cartesianas true para cartesianas, false para angulares * @param a abscisa o módulo * @param b ordenada o argumento */public Punto(boolean cartesianas, double a, double b) {

...}

/** Realiza un desplazamiento horizontal. * @param dx desplazamiento * @return la abscisa tras el desplazamiento */public void moverX(double dx) {

...return x;

}

Compatible C/Java/PHP, pero con dos **

Palabras clave, con @ Descripción de la funcionalidad

Parámetros necesarios

Resultados

IdentificaciónFormatos HTML

Hiperenlaces a código

Page 35: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

Ejemplo PHP: tablero.phpEjemplo PHP: tablero.php<?php/** @file tablero.php Conversión de coordenadas de ajedrez. */

/** Tamaño del tablero */define('DIM', 8);$letras = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');$numeros = array(1, 2, 3, 4, 5, 6, 7, 8);

/*** Facilita las coordenadas en el tablero de ajedrez.* a1 es la celda inferior izquierda negra.* @param fila_tabla número de fila, con 0 para la fila superior* @param columna_tabla numero de columna, con 0 a la izquierda* @return el texto correspondiente*/function celda($fila_tabla, $columna_tabla) {

return celda_a_letra($fila_tabla, $columna_tabla) .celda_a_numero($fila_tabla, $columna_tabla);

}

...?>

Page 36: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

36/52

DoxygenDoxygen• Generador de documentación libre GPL/GNU

– Multiplataforma: GNU/Linux, MAC OS X, MS Windows– Aplicable a C, C++, Java, C#, PHP, Python y alguno más– Compatible con Javadoc, requiere algún ajuste para C o PHP– Genera ficheros HTML, pero también RTF y LATEX

• Operación:– Descarga e instalación

En Linux está disponible en las distribuciones habitualesDOS: Descargar, descomprimir y agregar al PATH. También hay instalador.

– En el directorio de código fuente crear el fichero de configuracióndoxygen -g → DoxyfileRecomendable crear directorios separados: src, bin y docs

– Editar el fichero Doxyfile a gusto con un editor de texto– Ejecutando nuevamente doxygen se generan los documentos

Genera avisos si encuentra código no documentado

□i18n + L10n□POO■Documentación□Bases de Datos

Page 37: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

37/52

Doxyfile: sugerenciasDoxyfile: sugerencias– PROJECT_NAME = "Ejemplos OO-PHP"– PROJECT_NUMBER = 1.0– OUTPUT_DIRECTORY = docs– OUTPUT_LANGUAGE = Spanish– JAVADOC_AUTOBRIEF = YES– RECURSIVE = YES

– EXTRACT_ALL, EXTRACT_PRIVATE, EXTRACT_STATIC

– SOURCE_BROWSER, GENERATE_TREEVIEW = YES– HAVE_DOT, UML_LOOK = YES

– GENERATE_LATEX = NO

• No genera nada hasta que no se documentan los ficheros

– Etiqueta @file al frente de los ficheros deseados– Descripción delante de cada clase, método o función– Descripción de funciones incluyendo @param y @return

□i18n + L10n□POO■Documentación□Bases de Datos

Page 38: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

38/52

Reglas de estiloReglas de estiloNuestro objetivo es documentar la funcionalidad de las funciones: el QUÉ, no CÓMO

• Texto concreto y conciso• Evitar calcar el identificador, sino darle más sentido• No repetir contexto: «Función que..»• Comenzar con verbo en tercera persona de singular• La primera frase va a los índices: ser muy concretos

– Hasta el primer punto '.' y espacio(para no cortar direcciones de correo)

– Podemos ampliar la explicación en oraciones sucesivas, pero teniendo en cuenta que tampoco se busca explicar aquí el algoritmo: el código debe ser autoexplicativo.

• No olvidar los comportamientos excepcionales y errores tratados por la función

• Debe ser un reflejo de las especificaciones– Anticipo del diseño de pruebas unitarias de caja negra

□i18n + L10n□POO■Documentación□Bases de Datos

Page 39: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

39/52

Etiquetas Javadoc / DoxygenEtiquetas Javadoc / Doxygen• Delimitación de comentarios: /** */• Descripciones: texto.

– Permiten HTML básico para formato.

• Parámetros de funciones: @param identificador

• Valor devuelto: @return (sin identificador)

• Enlaces internos:– En bloque:

@see funcion() / @see #identificador– En línea:

{@link funcion()} / {@link #identificador}Entre llaves; se pueden intercalar en cualquier texto

• Identificación:@author nombre / @version numero

• Ficheros (en Doxygen):@file nombre.ext Contenido

□i18n + L10n□POO■Documentación□Bases de Datos

Page 40: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

40/52

Doxygen: instalaciónDoxygen: instalación□i18n + L10n□POO■Documentación□Bases de Datos

GNU Linux / Ubuntu– Fácil: gestor de paquetes, buscar Doxygen– Opcionalmente instalar Graphviz (dot, genera gráficos)– Acceso por consola de texto

$> doxygen

MS Windows• Descargar y descomprimir Doxygen + Graphviz

– Evitar los instaladores si es posible– Elegir nombres de directorios cortos, sin espacios

• Ejecutar desde una consola de texto– Agregar a PATH

• Sugerencia:– Hacer copia de la «consola de sistema»– Asociar un archivo de comandos: /k archivo.cmd– Configurar PATH y mode en el archivo (windows-1252)– Cambiar tipo de letra: Lucida Console

Page 41: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

PHP + Doxygen en MS Windows (I)PHP + Doxygen en MS Windows (I)

Page 42: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

PHP + Doxygen en MS Windows (II)PHP + Doxygen en MS Windows (II)

Page 43: IW-UTXX: Programación web en PHP con bases de datos

Red profesional colaborativa del ciclo«Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOSPHP Y BASES DE DATOS

Acceso a bases de datos con PDO

Page 44: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

44/52

PHP Data Objects (PDO)PHP Data Objects (PDO)□i18n + L10n□POO□Documentación■Bases de Datos

• Extensión de PHP para acceso a bases de datos.• Capa de abstracción, independiente del SGBD.

– Interface común, parámetros ajustables.– Funcionalidad dependiente del SGBD.

Abstracción en el acceso, no en la base de datos.– Requiere activar la extensión pdo_xxxx del gestor, en php.ini

Verificable con phpinfo()

• A partir de PHP 5.1Wez Furlong, Message Systems

– Previamente se empleaban extensiones particulares.– Siguen operativas y en uso.

• Tecnología orientada a objetos– Tres clases

PDO – Base de datosPDOStatement – ResultadosPDOException – Incidencias

Page 45: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

45/52

PDO I: Conexión y desconexiónPDO I: Conexión y desconexión□i18n + L10n□POO□Documentación■Bases de Datos

• Conexión = creación del objeto– Instancia de la case PDO.– Los datos de conexión van en los parámetros al constructor.

• Los errores generan excepciones.– La descripción del error va en el texto de la excepción.

+ Códigos de error ANSI SQLSTATE– Se debe capturar con una estructura try-catch.

• Desconexión automática– Al anular la referencia al objeto.

try {

$db = new PDO($dsn, $user, $password, $options);

} catch (PDOException $e) {die ("Failed to connect: " . $e->getMessage());

}…$db=NULL;

(1) Instanciación del objeto

(3) Vigilando la excepción

(4) Mensaje del error

(2) Anular y cerrar

Page 46: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

46/52

PDO II: ConsultasPDO II: Consultas□i18n + L10n□POO□Documentación■Bases de Datos

Dos estrategias:• Consulta directa, sin preparación

– Consulta de datos: devuelve PDOStatement o FALSE.$consulta=$db->query($sql);

– Otras sentencias: devuelve número de filas afectadas o 0.$n=$db->exec($sql);

– PROTEGER ANTES de comillas y caracteres especiales$sql=$db->quote($texto);

– Se recomienda evitarlas en favor de consultas preparadas.

• Consulta con preparación– Optimiza para consultas reutilizables con parámetros.– El uso de parámetros protege de inyecciones SQL.

$consulta=$db->prepare($sql_p);$consulta->execute(array(…));

Los parámetros se incorporan en la consulta originalcomo «?» o como «:clave» según el array a usar

– PDO::prepare() devuelve también PDOStatement.

Page 47: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

Ejemplo PHP: consulta MySQLEjemplo PHP: consulta MySQLrequire_once('conf/config.php');$sql_p = 'select Name,Code from Country where name like ?';

try {// Conexión$fuente = sprintf('mysql:host=%s;dbname=%s', DBHOST, DBNAME);$basededatos = new PDO($fuente, DBUSER, DBPASSWORD);$basededatos->exec('set names utf8');

// Consulta$consulta = $basededatos->prepare($sql_p);$consulta->execute(array('S%n'));$resultados = $consulta->fetchAll(); // acceso con buffer

// Procesado$nelementos = count($resultados);foreach ($resultados as $fila) {

printf("%s - %s\n", $fila['Code'], $fila['Name']);}

} catch (PDOException $e) { // Erroresprintf('Error en base de datos: %s', $e->getMessage());

}$basededatos = NULL; //Cierre

Page 48: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

48/52

PDO III: Consultas y resultadosPDO III: Consultas y resultados□i18n + L10n□POO□Documentación■Bases de Datos

Resultados: proceso de PDOStatement– Las consultas devuelven objetos PDOStatement.– En caso de consultas preparadas hay que ejecutarlas.– Finalmente se recogen o analizan los resultados.

• Lectura de TODA la tabla resultante– Desaconsejable en consultas voluminosas

$resultados=$consulta->fetchAll();

• Lectura por filas/tuplas una a unawhile (Sfila=$consulta->fetch()) {…};

Acabar o cerrar con closeCursor() antes de otra consulta.

• Número de filas/tuplas afectadas$n=$consulta->rowCount();

– Para INSERT, DELETE, UPDATE. Informan del acierto o no.– Con SELECT depende de la base de datos: no hay garantía.

• Se puede recorrer directamente con «foreach».Gracias a que implementa la interface Traversable.

Page 49: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

Ejemplo PHP: entradaEjemplo PHP: entrada

require_once('conf/config.php');

$sql_p = 'update Access set User=?';try {

// Conexión$fuente = sprintf('mysql:host=%s;dbname=%s', DBHOST, DBNAME);$basededatos = new PDO($fuente, DBUSER, DBPASSWORD);$basededatos->exec('set names utf8');

// Consulta$consulta = $basededatos->prepare($sql_p);$resultado = $consulta->execute(array('ASIR2012'));

// Procesado$mensaje = ($resultado) ? "SÍ" : "NO";printf("Actualización %s realizada\n", $mensaje);

} catch (PDOException $e) { // Erroresprintf('Error en base de datos: %s', $e->getMessage());

}$basededatos = NULL; //Cierre

Page 50: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

ReferenciasReferencias

Sintes, B. (2011, IES Abastos). Páginas web con PHPhttp://www.mclibre.org/consultar/php/

Simpson, A. (WebCollab, consulta 12/2011) PHP and UTF-8 Howtohttp://webcollab.sourceforge.net/unicode.html

PHP (The PHP Group, consulta 12/2011) PHP Manual – Clases y objetoshttp://www.php.net/manual/es/oop5.intro.php

Salinas, P. (Univ. Chile, consulta 12/2011) Tutorial de UML – Modelo de claseshttp://www.dcc.uchile.cl/~psalinas/uml/modelo.html

Furlong, W. (Message Systems, consulta 1/2012) PHP Data Objectshttp://www.slideshare.net/wezfurlong/php-data-objects

Bibliografía actualizada en delicious:http://www.delicious.com/dhmartin/IW-ASIR

Page 51: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

LicenciaLicencia

Este material está disponible bajo una Licencia Creative Commons,

http://creativecommons.org/licenses/by-nc-sa/3.0/es/

Page 52: IW-UTXX: Programación web en PHP con bases de datos

Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

PHP Y BASES DE DATOS.

¿Dudas o cuestiones?¿Dudas o cuestiones?