Introducción a PHP5

download Introducción a PHP5

If you can't read please download the document

Transcript of Introducción a PHP5

OperadorSimboloEjemploResultadoNegacin--3Adicin+3+36Substraccin-45-540Multiplicacin*5*315Divisin/60/320Mdulo%7%21Incremento++$x=3; $x++;4Decremento--$x=3; $x--;3

???Pgina ??? (???)16/07/2008, 03:37:57Pgina / OperadorSimboloEquivalenciaAsignacin$x = $y$x = $yAsignacin y suma$x += $y$x = $x + $yAsignacin y resta$x -= $y$x = $x $yAsignacin y multiplicacin$x *= $y$x = $x * $yAsignacin y divisin$x /= $y$x = $x / $yAsignacin y resto$x %= $y$x = $x % $yAsignacin y concatenacin$s .= $x$s = $s . $x

???Pgina ??? (???)13/07/2008, 03:46:54Pgina / OperadorSmboloEjemploResultadoIgual==3 == 3ciertoIdntico===3 === 3falsoDiferente!=7 !=7falso9 8ciertoNo idnticos!==4 !== 4ciertoMenor3 > 4falsoMenor o igual= 1cierto

???Pgina ??? (???)13/07/2008, 03:46:54Pgina / OperadorSimboloEjemploResultadoY (and)&&TRUE && FALSEfalsoO (or)||TRUE || FALSEciertoNO (not)!! TRUEfalso

???Pgina ??? (???)13/07/2008, 03:46:54Pgina / CampoTipoLongitudExtraPrimariandicecodigoINT5auto_incrementSnombreVARCHAR20SurlVARCHAR30descripcionLONGTEXT

???Pgina ??? (???)16/07/2008, 03:37:57Pgina / Introduccin a PHP

Aitor Gmez [email protected]

16 a 18 de Julio de 2008e-ghostESIDE Universidad de Deusto

Copyleft

Esta presentacin ha sido realizada por Aitor Gmez Goiri (twolf), en base a la presentacin realizada por Jorge Garca Ochoa de Aspuru (bardok) para los cursillos de Julio de 2005 y 2006.

El logotipo de la portada es propiedad de Vincent Pontier (El Roubio).

El resto del contenido est licenciado bajo los trminos de la licencia Reconocimiento No comercial Compartir igual de Creative Commons.

Para ver una copia de esta licencia visite:http://creativecommons.org/licenses/by-nc-sa/2.5/es

ndice

Introduccin

Fundamentos de PHP

Informacin de usuario

Acceso a base de datos

Otros

ndice

Introduccin

Fundamentos de PHP

Informacin de usuario

Acceso a base de datos

Otros

Introduccin

Qu es?

Caractersticas

Pros y contras

Historia

PHP5

Cmo funciona?

Configuracin del servidor Apache

Qu es?

PHP Hypertext Preprocessor

Lenguaje interpretado o de scripting

Sintaxis similar a C, Java o Perl

Proposito general

Aplicaciones web

Aplicaciones para lnea de comandos (PHPCLI)

Aplicaciones con interfaz grfica

Open Source

Caractersticas

Alto rendimiento

Integracin con bases de datos

Bibliotecas incorporadas

Facilidad de aprendizaje y uso

Portabilidad

Gran documentacin on-line (php.net)

etc.

Pros y contras

PHP is the BASIC of the 21st Century

PHP Sucks, But It Doesn't Matter

Wikipedia, Meneame, Digg, WordPress, largo etc.

Usado en ms de 20 millones de dominios

Historia

1994: Rasmus Lerdorf quiere mostrar su currculum vtae y guardar ciertos datos cmo estadsticas sobre el trfico que reciba su web y crea Personal Home Page

Se empez a extender...

acceso a bases de datos

generacin de pginas web dinmicas

1997: se liber la versin PHP/FI 2.0

1998: PHP3

Historia (2)

2000: PHP 4: se reescribe el ncleo (llamado Zend Engine)

Ms modular, rendimiento, funcionalidad...

Su uso se extendi enormemente

2004: PHP5

Zend Engine 2.0

En 2008, se convirti en la nica versin estable bajo desarrollo.

Renovarse o morir (aplicaciones y servidores)

El curso se centra en esta versin

PHP 5

Modelo de orientacin a objetos

El anterior era un poco rudimentario

Excepciones

Nuevas extensiones

SimpleXML, para el proceso sencillo de XML

PDO, interfaz de orientacin a objetos para interactuar con la base de datos.

Extensiones DOM y XSL

Para ms detalles, aqu.

Cmo funciona?

Nosotros vemos pginas web en un navegador:

Mozilla, Konqueror, Opera, Nautilus...

Un navegador interpreta HTML

(y hojas de estilo, Javascript, etc, pero eso est fuera del alcance de este curso ;-)

Un navegador NO sabe interpretar PHP

Entonces, quin lo hace por l?

Cmo funciona? (2)

El navegador puede:

Mostrar una pgina alojada en el ordenador en el que l est instalado

ste es el ordenador cliente

La pgina se muestra tal y como est guardada, no hay proceso posible: tiene que ser HTML

Pedir una pgina a un servidor

El servidor puede procesar la pgina antes de enviarla al navegador

Cmo funciona? (3)

Ejemplo: peticin de una pgina PHP a un servidor web

Servidor web interpreta cdigo PHP para generar la pgina HTML.

Es probable que en el cdigo se hagan llamadas a bases de datospara obtener datos con lo que completar dicho HTML.

Configuracin del servidor

Vamos a utilizar el servidor Apache

http://www.apache.org

Servidor HTTP Open Source

En principio, soporta el protocolo HTTP

Se pide un fichero, el servidor lo devuelve

Extensible a travs de mdulos, como el mdulo PHP

Si est cargado y configurado, en caso de que el fichero pedido sea una pgina PHP, se procesa y lo que se enva es el resultado

Configuracin servidor (2)

El proceso descrito aqu es para configurar el servidor en una distribucin Ubuntu GNU/Linux

No debera variar sustancialmente para otras distribuciones

Instalar los paquetes apache, php5, apache-common y apache utils

apt-get install apache2 libapache2-mod-php5

Versiones (julio 2008):

Apache: 2.2.8-1

PHP: 5.2.4-2

Configuracin servidor (3)

Para comprobar que el servidor Apache est activo:

http://localhost

Aparecer la siguiente pgina

Accedemos a travs del servidor, no directamente

Configuracin servidor (4)

Activaremos el mdulo userdir

nos permite que para cada usuario, si tiene un directorio llamado public_html en su carpeta home, exista un directorio virtual del tipo:

http://www.midominio.net/~usuario

Nosotros vamos a trabajar con ese directorio.

Si no deberis trastear con el grupo www-data, el directorio /var/www o los ficheros /etc/apache2/conf.d/algo.conf

sudo a2enmod userdirsudo /etc/init.d/apache2 force-reload

Configuracin servidor (5)

Finalmente, comprobamos que funciones las pginas PHP

Suponiendo que el usuario que se llama ubuntu

Creamos el fichero: /home/ubuntu/public_html/info.php

Accedemos a l
a travs del servidor:
http://localhost/~ubuntu/info.php

ndice

Introduccin

Fundamentos de PHP

Informacin de usuario

Acceso a base de datos

Otros

Fundamentos de PHP

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Mtodos avanzados de escape

Orientacin a objetos

Fundamentos de PHP

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Mtodos avanzados de escape

Orientacin a objetos

Primeros pasos

Como se dijo en la introduccin:

PHP se incrusta dentro del cdigo HTML

PHP se procesa en el servidor

Sirve para crear pginas HTML que despus se enviarn al cliente, y para realizar otras operaciones

Podemos generar una pgina segn el contenido de un formulario...

... o segn el contenido de una base de datos...

... o segn la hora del servidor...

...

Primeros pasos (2)

Cmo incrustar PHP dentro del HTML?

Con la etiqueta

El servidor procesa el cdigo que hay entre (o smplemente )

Con la etiqueta

El servidor evala la expresin, y escribe su resultado en la pgina web

No puede haber ms cdigo que la expresin que queremos evaluar y sacar por pantalla

Primeros pasos (3)

Cmo procesa el cdigo?

Tenemos la pgina:

El servidor comienza a procesar la pgina

Si encuentra HTML, lo enva directamente al cliente

Si encuentra una etiqueta de PHP, procesa el cdigo, y si el cdigo escribe algo, esa "escritura" se incluye en el HTML que se enva al cliente

Primeros pasos (4)

El servidor devolvera el siguiente fragmento:

Hola mundo!

Fundamentos de PHP

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Mtodos avanzados de escape

Orientacin a objetos

Sintaxis

Es muy similar a la de C, Java o Perl.

Las instrucciones se escriben separadas por ';'

Las estructuras de control son muy similares

if, while, switch, for, etc.

Las llamadas a funcin se realizan con parntesis

phpinfo();

strlen('abcdef'); // 6

Los comentarios en el cdigo se realizan con:

// Una sola lnea

# Una sola lnea

/* Varias
lneas*/

Fundamentos de PHP

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Mtodos avanzados de escape

Orientacin a objetos

Tipos

Existen distintos tipos:

Boolean, integer, float, string, array, object,...

Nos desentendemos de ellos

no es declarado por el programador

PHP lo decide en tiempo de ejecucin dependiendo del contexto en el que es usado la variable

Variables

Tienen dos particularidades:

Pueden cambiar de tipo fcilmente

Ej.: si en una variable hemos guardado un entero, podemos utilizarlo como un String, y viceversa
(siempre que el String represente un entero)

El nombre de la variable lleva '$' delante

$usuario = 'jose';

Es posible concatenar variables (strings) con el operador '.'

Variables (2)

Dentro de un string delimitado con comillas dobles se evalan las variables

Con la funcin unset() podemos quitar el valor de una variable

La funcin isset() nos indica si una variable est inicializada

$nombre = 'juan'; echo ("El valor de la variable nombre es $nombre."); $var = "pepe"; unset($var); // Ahora no tiene valor (NULL) if (isset($var)){ echo 'Tiene valor';}

Fundamentos de PHP

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Mtodos avanzados de escape

Orientacin a objetos

Operadores

Aritmticos

Asignacin

Operadores (2)

Comparacin

Lgicos

Otros

Fundamentos de PHP

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Mtodos avanzados de escape

Orientacin a objetos

Estructuras de control

Condicionales

Bucles

include y require

Condicionales

Condicional simple

if ()
{...}

Condicional y alternativa

if ()
{...}
else
{...}

Condicionales (2)

Condicional mltiple

switch ()
{
case : ...
break;
case : ...
break;
...
case : ...
break;
default: ...
break;
}

Condicionales (3)

Ejemplo

//$x = 4; //descomentadlo despus de probarlo una vez

if( ! isset($x) ) {echo 'Por favor, establezca un valor para la variable.';}else {echo 'La variable est correctamente definida y es';switch ($x) {case 1: echo (' el uno.');break;case 2: echo (' el dos.');break;case 3: echo (' el tres.');break;default: echo ('distinta a 1, 2 o 3.');break;}}

Bucles

while

Mientras se cumpla una condicin, se ejecuta al cdigo que hay en el (puede no ejecutarse nunca)

Ejemplo:

$a = 1;while ( $a < 10) {echo "El nmero actual es $a";$a++;}

Bucles (2)

do ... while

Se ejecuta el cdigo mientras se cumpla una condicin (al menos se ejecuta una vez)

Ejemplo

$a = 0;do{ $a++; echo ('El nmero es '.$a.'');}while ( $a < 10);

Bucles (3)

for

Ejecuta un cdigo mientas se cumpla una condicin (puede no ejecutarse ninguna vez)

Opcionalmente, se puede proporcionar:

Una expresin de inicializacin, se ejecuta la primera vez

Una expresin de condicin

Una expresin de paso, se ejecuta al final de cada pasada del bucle

Ejemplo:

for ($a = 1; $a $elem){ // En cada vuelta, elem guarda uno de los strings, e index el ndice echo ("El elemento $index es: $elem.");}

Bucles (5)

Ejemplo

Nota: para todo lo anterior existe una sintaxis alternativa.

include y require

Para incluir y evaluar un archivo determinado...

include, require, include_once y require_once.

Diferencia: include() produce un Warning mientras que require() produce un Error Fatal.

utilizar require() cuando queramos que un fichero no encontrado cuelgue el procesamiento de la pgina

vars.php

test.php

Fundamentos de PHP

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Mtodos avanzados de escape

Orientacin a objetos

Matrices

Acceso a una posicin

A travs de [...]

echo ($matriz[1]);

El ndice de una matriz puede ser cualquier cosa

echo ($matriz["gato"]);

Creacin de una matriz

A travs de array()

$profesiones = array('Taxista', 'Bombero', 'Alcalde');

En la posicin 0 del array est el string 'Taxista", en la 1 'Bombero' y as sucesivamente

Matrices (2)

Podemos especificar el ndice de cada uno de los elementos:

$matriz = array('nombre' => 'Aitor', 'apellido' => 'Gomez', 'edad' => 23);

Si hacemos:
echo $matriz['nombre']; // Obtenemos 'Aitor'

Creacin con corchetes

Podemos crear elementos de una matriz sobre la marcha:

$matriz[7] = "Texto de la posicin 7"; // si no especificamos un ndice, se inserta en la siguiente posicin $matriz[] = "Esto ira en la posicin 8";

Matrices (3)

Modificacin de elementos

Podemos modificar un elemento de una matriz reasignando un valor

$matriz = array(3 => "Oso", 5 => "Perro");

$matriz[3] = "Gato";

Eliminacin de elementos

Podemos eliminar elementos, o la matriz entera con "unset()"

$matriz = array(3 => 'Oso', 5 => 'Lagarto'); unset($matriz[3]); // No hay nada en la posicin 3 unset($matriz); // No hay nada en la matriz

Matrices (4)

Recorrido de un array con foreach

La estructura foreach, adems de ser utilizada como hemos visto en la seccin de estructuras de control, resulta especialmente til para obtener los ndices del array:

$modelo['identificador'] = 3;$modelo['fabricante'] = 'ABB';$modelo['nombre'] = 'detector presencia';

foreach ($modelo as $clave => $valor){ echo "El $clave es $valor
";}

Fundamentos de PHP

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Mtodos avanzados de escape

Orientacin a objetos

Funciones

Podemos definir nuestras propias funciones

Ejemplo

function ($parm1, $parm2, ...){ ... return ;}

function negrita($texto) {return ''.$texto.'';}

echo 'Quiero '.negrita('remarcar').' lo que es '.negrita('importante');

Fundamentos de PHP

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Mtodos avanzados de escape

Orientacin a objetos

Errores

Para tratar los errores que se produzcan en nuestra aplicacin web podemos optar por:

Hacer uso de excepciones

Finalizar el script (con funciones die, exit, etc.)

Excepciones

Similar a otros lenguajes

se lanzan con throw, dentro del bloque try se capturan excepciones potenciales y se tratan con catch

function division($dividendo, $divisor) {if($divisor==0) throw new Exception('No dividas entre cero!',0);return $dividendo/$divisor;}

try {echo division(15,0);} catch(Exception $e) {echo $e->getMessage();}

Funcin die

Equivalente a exit

Cuando se devuelve, se detiene el script y se muestra el mensaje.

Fundamentos de PHP

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Mtodos avanzados de escape

Orientacin a objetos

Mtodos avanzados de escape

PHP permite construcciones como:

El nmero especificado es que .

Fundamentos de PHP

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Mtodos avanzados de escape

Orientacin a objetos

Objetos

Definicin de una clase

class NombreClase [extends ClasePadre] [implements Iinterfaz]{const CONSTANTE = 1;static private $instanciasCreadas = 0;protected $atributo;

public function __construct($a) {$this->atributo = $a;self::metodoEstatico();}function __destruct() {}

static private function metodoEstatico() {self::$instanciasCreadas++;}public function __toString() {return 'Clase con atributo '.$this->atributo;}}

Objetos (2)

Creacin de objetos

Si tenemos una clase "ClaseA" podremos crear objetos mediante el operador "new"
$objeto = new ClaseA();

El puntero "$this"

Es una referencia al propio objeto. Se usa dentro de los mtodos

class ClaseA{ protected $num; function getNum()// Si no se especifica nada, es pblico { return $this->num;// "num" no lleva "$" }}

Objetos (3)

Operador de resolucin ::

Es un smbolo que permite acceso a los miembros o mtodos estticos y constantes.

Desde afuera: usan el nombre de la clase.

Desde dentro: usan self o parent.

class MiClase extends ClasePadre{ public static $my_static = 'static var';

public static function doubleColon() { parent::doubleColon(); echo self::$my_static . "\n"; }}

MiClase::doubleColon();

Objetos (4)

Constructores

Un constructor es un mtodo de nombre __construct() al que se llama al crearse el objeto.

class Persona{private $nombre;function __construct($nom) { $this->nombre = $nom; }function __toString() { return $this->nombre; }}$p = new Persona("Twolf");echo $p;

Objetos (5)

Destructor __destruct()

Se le llamar tan pronto como se borren todas las referencias a un objeto en particular

Mtodos mgicos

Existen unos nombres de mtodos que tienen asociada una funcionalidad concreta

__toString()

Permite a una clase decidir como actuar cuando se la convierte en cadena

__clone()

Se llama al crear una copia de un objeto

Objetos (6)

PHP soporta herencia de clases

ndice

Introduccin

Fundamentos de PHP

Informacin de usuario

Acceso a base de datos

Otros

Informacin de usuario

Superglobales

GET y POST

Sesiones

Superglobales

Son variables incorporadas (matrices asociativas) disponibles en todos los mbitos

$GLOBALS

para definir variables globales

$_SERVER

contiene informacin tal como cabeceras, rutas y ubicaciones de scripts

Superglobales (2)

$_SESSION

contiene variables de sesin

$_POST

variables pasadas a travs del mtodo HTTP POST

$_GET

variables pasadas a travs del mtodo HTTP GET

$_REQUEST

contiene datos de $_GET, $_POST, y $_COOKIE.

etc.

GET y POST

Informacin desde formularios

La informacin de un formulario puede enviarse con el mtodo "get" o el mtodo "post"

Existen dos matrices en PHP llamadas $_GET y $_POST

Se accede por el nombre del parmetro

Se obtiene el valor del parmetro

GET y POST (2)

Ejemplo: crear el siguiente fichero PHP (ejerparams.php):

Acceder a la pgina con la URL:

http://localhost/~ubuntu/ejerparams.php?login=bardok&[email protected]

GET y POST (3)

Creamos la pgina "formparams.html" y enviamos los datos a "ejerparams.php":

Modificacin: en lugar de utilizar el mtodo "get" utilizar el "post"

Login:
Password:
Email:

GET y POST (4)

Para acceder a un dato en concreto dentro de los arrays "$_POST" y "$_GET"

La clave para acceder a un elemento es el nombre del parmetro

Mltiples valores en un parmetro:

Un parmetro puede tener distintos valores a la vez:

El nombre del parmetro ser "nombreparametro[]":

El parmetro "nombreparametro" es un array con los elementos seleccionados.

echo 'El nombre de usuario utilizado es '.$_GET['login'];

Valor 1Valor 2

GET y POST (5)

Si se seleccionan los dos checkboxes anteriores:

Ejemplo con $_REQUEST (ejrequest.php)

sel[0] => "v1"sel[1] => "v2"

Ejemplo de uso de $_REQUEST

Eres de .lava...Murcia

Sesiones

Variables de sesin

Podemos guardar informacin del usuario que se mantendr mientras no se cierre el navegador

Se transmite de unas pginas a otras

El ejemplo ms clsico: carrito de la compra

Otra utilidad: validacin de usuarios

Todo lo que guardemos en el array "$_SESSION" quedar almacenado de este modo

Para poder usarlo: lo primero en la pgina, llamada a "session_start();"

Sesiones (2)

Ejemplo: pgina pblica/privada

public_private.php

Sesiones (3)

Bienvenido, Link a una pgina privada Por favor, introduce tu nombre de usuario Nombre de usuario:

Sesiones (4)

private_login.php

ndice

Introduccin

Fundamentos de PHP

Informacin de usuario

Acceso a base de datos

Otros

Acceso a base de datos

Introduccin

Configuracin del servidor de base de datos

Creacin de un usuario en la base de datos

Creacin de una tabla

PHP Data Objects

Importar un archivo a base de datos

Prepared statements

Ejercicio favoritos

Ejemplo prctico: guardar ficheros

Introduccin

Es posible acceder a bases de datos a travs de PHP

Uso de mdulos de bases de datos

Gran cantidad de bases de datos soportadas

En nuestro caso usaremos MySQL como servidor de bases de datos junto con PHPMyAdmin para administrar las mismas

Existen distintas formas de acceso a base de datos, nosotros usaremos PDO.

es nativa en PHP5 (a diferencia de AdoDB)

nos abstrae del tipo de base de datos concreto que usemos (a diferencia de las funciones de mysql)

hace uso de orientacin a objetos

Configuracin del servidor de BB.DD.

Paquetes a instalar

En el caso de utilizar Ubuntu, los paquetes a instalar son:

mysql-client, mysql-server, php5-mysql, phpmyadmin

En caso de que la base de datos tenga un ordenador servidor propio, habra que instalar mysql-server en l, y mysql-client en el servidor web

php5-mysql instala el mdulo que permite a PHP interactuar con MySQL

phpmyadmin permite administracin web

La instalacin para el cursillo tiene cmo contrasea para el usuario administrador (root): "r00tr00t".

No obstante crearemos un nuevo usuario para nuestros menesteres

Configuracin del servidor de BB.DD. (2)

Accedemos a PHPMyAdmin

http://localhost/phpmyadmin

Creacin de un usuario

Creamos un usuario sobre el que trabajar

Privilegios

Agregar a un nuevo usuario

Todos los privilegios de datos y estructura

Creacin de una tabla

Nos identificamos como php

Seleccionamos la tabla php que se ha creado y sobre la que tenemos todos los privilegios

Creamos una tabla ejemplo con dos campos

Estructura de una tabla

Completamos y grabamos

PHP Data Objects

Una vez instalado el mdulo de MySQL, tenemos un API de funciones para interactuar con distintas bases de datos. Por supuesto existe un driver para MySQL.

Pasos a seguir:

Conexin con el servidor de Base de Datos

Trabajar con las tablas

En caso de seleccin, trabajar con los registros

Cerrar la conexin con la base de datos
(con el mtodo que explicamos, PDO, no har falta que nos encarguemos explcitamente de cerrar nada, ya que es una tarea que se realizar implcitamente al destruir el objeto correspondiente)

PHP Data Objects (2)

Conexin con el servidor de base de datos

La conexin a la base de datos devuelve un identificativo de la conexin a la base de datos

Si ha habido error, lanzar una excepcin

Debemos encerrar la construccin del objeto PDO en un try/catch

$pdo = new PDO('mysql:dbname=nombreDB;host=nombreHost','usuario','password');

try { $pdo = new PDO('mysql:dbname=php;host=localhost','php','php');} catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage();}

PHP Data Objects (3)

Trabajar con las tablas

$pdo->query("sentencia_sql");

La sentencia SQL puede ser una insercin, borrado, actualizacin o seleccin

$pdo->query('INSERT INTO animales VALUES (1, gato)');

En el caso de realizarse una seleccin, se devolver un objeto PDOStatement con el resultado de la misma

$res = $pdo->query('SELECT * FROM animales');

PHP Data Objects (4)

Una vez realizada la seleccin, podemos recorrer el resultado utilizando el mtodo fetch o simplemente haciendo un foreach

Ejemplo completo en seleccionSimple.php

Antes de probarlo, importaremos la sencilla tabla de animales.

Mediante la pestaa de import de PHPMyAdmin.

$sql = 'SELECT * FROM animales';foreach ($pdo->query($sql) as $row) {echo '('.$row['identificador'].','.$row['denominacion'].')'.\n;}

Importar archivo

Seleccionamos el fichero animales.sql y continuamos.

Antes de ejecutar seleccionSimple.php, no os olvidis de verificar que los datos de la conexin son los correctos.

Prepared Statements

El anterior mtodo (PDO->query()), est bien cuando se va a ejecutar una sentencia SQL una nica vez.

Para consultas que se van a realizar mltiples veces, se puede obtener un mejor rendimiento preparando el objeto PDOStatement a usar, y realizando despus las llamadas necesarias a PDOStatement->execute().

La consulta solo ser preparada una vez, pero podr ser ejecutada tantas veces como se desee con los mismos o diferentes parmetros.

Prepared Statements (2)

Ejemplo insercionPreparada.php:

Probar las otras formas de insercin preparada que existen en dicho fichero descomentandolas.

$stmt = $pdo->prepare('INSERT INTO animales (identificador, denominacion) VALUES (:id, :name)');$stmt->bindParam(':name', $name);$stmt->bindParam(':id', $id);

// inserta una fila$name = 'vaca';$value = 8;$stmt->execute();

// inserta otra fila con valores distintos$name = 'pajaro';$value = 9;$stmt->execute();

Ejercicio favoritos

Dar de alta una tabla en la base de datos (con la estructura que se quiera)

Insertar elementos en la tabla

Crear una pgina que tenga

Un formulario que permita altas, bajas y modificaciones en la tabla

Un listado con los elementos de la tabla

Los elementos son enlaces que, pulsados, nos llevan a la misma pgina, pero con el elemento seleccionado (sus datos aparecen en el formulario)

Ejercicio favoritos (1)

Propuesta de tabla

Ejercicio favoritos (2)

Propuesta interfaz

Ejercicio favoritos (3)

Estructura

Si quisiramos dividir la aplicacin en varias capas (en archivos y carpetas), podramos empezar consultando aqu.

En el ejercicio dividiremos la propia pgina en varios "bloques".

Propuesta de estructura

Conexin a la base de datos

Gestin de los comandos

Todos los elementos de tipo "submit" tienen como nombre "accion" y como "value" la accion que realizan

Ejercicio favoritos (4)

Propuesta de estructura (2)

Recuperacin de los datos del grupo seleccionado (si lo hay)

Al seleccionar un grupo, se pasar como parmetro el cdigo del mismo

Pgina web en s

Formulario: si hay algn grupo seleccionado, sus valores se muestran en los componentes, se muestran los botones "modificar" y "eliminar" y se guarda el cdigo seleccionado en un campo "hidden"

Listado: recorrido de la tabla. Cada elemento es un link a la propia pgina con el formato:

"gestiongrupos.php?selectedcodigo="
(ej.: gestiongrupos.php?selectedcodigo=3)

Ejemplo prctico

Vamos a realizar el siguiente ejemplo:

Desde un formulario se enva un fichero con una imagen

El fichero se almacena en una base de datos

Desde un fichero php, accedemos a la base de datos, y recuperamos ficheros, para mostrarlos

Lo interesante es que la imagen no est en un fichero, est en la base de datos, y el fichero php se convierte en la propia imagen

Ejemplo prctico (2)

El formulario

Tiene que tener codificacin:

multipart/form-data

El fichero se enva con un control file

El control hidden MAX_FILE_SIZE indica el tamao mximo del fichero a enviar

Tiene que estar ANTES del control file

Ejemplo prctico (3)

Traducido a HTML...

Seleccin de ficheros Selecciona el fichero (imagen jpeg):

Ejemplo prctico (4)

Insertar el fichero

Hemos definido, en la tabla FICHEROS los siguientes campos:

FIC_Codigo: autonumrico, clave primaria

FIC_Data: los datos de la imagen

FIC_Type: tipo de fichero

El fichero se encuentra en el array $_FILES['fichero']

$_FILES['fichero']['name'] : nombre del fichero

$_FILES['fichero']['size'] : tamao del fichero

$_FILES['fichero']['type'] : tipo del fichero

$_FILES['fichero']['tmp_name'] : fichero temporal

Ejemplo prctico (5)

Insertar el fichero

Vamos a usar la funcin comillas_inteligentes:

Escapa el string, y le pone comillas simples si no es un valor numrico

Para poder meter los datos sin problemas en la sentencia SQL

function comillas_inteligentes($valor) { // Retirar las barras if (get_magic_quotes_gpc()) { $valor = stripslashes($valor); } // Colocar comillas si no es entero if (!is_numeric($valor)) { $valor = "'" . mysql_real_escape_string($valor) . "'"; } return $valor; }

Ejemplo prctico (6)

Insertar fichero (2)

Cogemos los datos de la imagen (estar en el fichero temporal), y los metemos en la base de datos

$nombre_f = $_FILES['fichero']['name'];$type_f = $_FILES['fichero']['type'];$tmp_name_f = $_FILES['fichero']['tmp_name'];...// Leer el fichero en un array de bytes$data = file_get_contents($tmp_name_f);// Pasamos la codificacin a BASE 64$data = base64_encode($data);// Meter el fichero en la base de datos$comando = sprintf("insert into FICHEROS(FIC_Data,FIC_Type) VALUES(%s,%s)" ,comillas_inteligentes($data) ,comillas_inteligentes($type_f) );mysql_query($comando);

Ejemplo prctico (7)

Recuperar la imagen

Usaremos una pgina que recibe como parmetro el cdigo de la imagen

Si hemos recuperado correctamente la imagen, tendremos que indicar que el fichero php no va a devolver texto, sino una imagen de un formato concreto

Para ello tenemos que cambiar la cabecera HTTP Content-type

El tipo de fichero lo tenemos en la base de datos (lo hemos guardado cuando nos lo han mandado)

Ejemplo prctico (8)

Recuperar la imagen

Si llamamos a la pgina, por ejemplo con:

.../visualizar_img.php?codigo=4

Devolver la imagen con el cdigo 4, si es que existe

Tras recuperar los datos, los escribimos, sin ms

$sql_data = "SELECT FIC_Data, FIC_Type FROM FICHEROSWHERE FIC_Codigo=$codigo";$res_data = mysql_query($sql_data,$db);if ($arr_data = mysql_fetch_array($res_data)){ $datos = $arr_data['FIC_Data']; $datos = base64_decode($datos); $tipo = $arr_data['FIC_Type']; header("Content-type: $tipo"); echo ($datos);}

ndice

Introduccin

Fundamentos de PHP

Informacin de usuario

Acceso a base de datos

Otros

Otros

SimpleXML

XTemplate

PHP en lnea de comandos

PEAR

PHP en el IDE Eclipse

PDT

PHPeclipse

Por dnde continuar?

SimpleXML

La extensin SimpleXML es una forma fcil y sencilla de hacer uso de documentos XML.

Convierte XML a un objeto SimpleXML.

De dos maneras:

Haciendo uso del constructor

$xml = new SimpleXMLElement('prueba.xml',null,TRUE);

$a = new SimpleXMLElement('');

Usando funciones

$xml = simplexml_load_file('prueba.xml');

$xml = simplexml_load_string('guau');

SimpleXML (2)

Para los siguientes ejemplos supondremos que existe el archivo animales.xml con el siguiente contenido.

4mammalia154mammalia162aves6

SimpleXML (2)

Para acceder a los datos, entre otros, podemos usar:

$elem->nomElem

Accedemos al elemento de nombre 'nomElem'

Si hay varios elementos con dicho nombre, devolver una matriz

$elem->children()

Devuelve una lista con sus subelementos sobre la que podemos iterar

$elem->attributes()

Devuelve una lista con sus atributos

Podemos acceder a un atributo concreto:

$elem->attributes()->nombreAtributo

SimpleXML (3)

Ejemplo simple de lectura

Explorando el XML...

$xml = new SimpleXMLElement('animales.xml',null,TRUE);

foreach ($xml->animal as $animal) {echo 'El '.$animal->attributes()->raza;echo ' ('.$animal->clase. ')';echo ' vive una media de '.$animal->longevidad.' aos y tiene ';echo $animal->patas.' patas.
';}

foreach ($xml->animal as $animal) {echo '

  • Animal: '.$animal->attributes()->raza.'';echo '
    • ';foreach ($animal->children() as $elemento=>$valor) {echo '
    • '.$elemento.': '.$valor.'';}echo '

';}

SimpleXML (4)

Modificar el XML

$nuevoElemento = $xml->addChild('nombre');

$nuevoElemento = $xml->addChild('nombre','valor');

$elemento->addAttribute('nombre','valor');

Mostrarlo

$xml->asXML();

El objeto SimpleXML no facilita la escritura en un archivo

Para ver correctamente en el navegador podemos hacer uso de la funcin htmlentities que traduce los caracteres especiales a caracteres HTML.

SimpleXML (5)

Ejemplos de modificacin

Que SimpleXML no escriba en ficheros no quiere decir que en PHP no haya mltiples formas de hacerlo.

Para ms ejemplos, aqu.

$xml = new SimpleXMLElement('animales.xml',null,TRUE);

$panda = $xml->addChild('animal');$panda->addAttribute('raza','oso panda');$patas = $panda->addChild('patas','4');$clase = $panda->addChild('clase','mammalia');$edad = $panda->addChild('longevidad','12');

echo $xml->asXML(); // Mejor ved el cdigo fuente//echo htmlentities($xml->asXML()); // Para verlo bien desde el navegador

SimpleXML (6)

Que SimpleXML no escriba en ficheros no quiere decir que en PHP no haya otras formas de hacerlo.

La que se propone a continuacin hace uso de las funciones de manejo de ficheros.

$nombre_archivo = 'animales.xml';$contenido = $xml->asXML();if (is_writable($nombre_archivo)) { if (!$gestor = fopen($nombre_archivo, 'w')) { echo "No se puede abrir el archivo ($nombre_archivo)"; exit; } if (fwrite($gestor, $contenido) === FALSE) { echo "No se puede escribir al archivo ($nombre_archivo)"; exit; } echo "xito, se escribi ($contenido) al archivo ($nombre_archivo)"; fclose($gestor);} else echo "No se puede escribir sobre el archivo $nombre_archivo";

XTemplate

XTemplate es una clase cuyo objetivo es permitir separar la vista (capa de presentacin) de la lgica del script PHP.

Almacena el HTML de forma independiente al cdigo

Podemos editar el HTML con nuestro editor preferido

Los programadores se dedican a lo suyo (cdigo) y los diseadores concentran sus fuerzas en la presentacin.

Podemos parametrizar el HTML, hacer bucles, etc. (para hacer dinmica la pgina, si no a ver para que queremos PHP... :-D)

Se usa en muchos proyectos comerciales libres

SugarCRM, Drupal entre otros.

XTemplate (2)

Por lo tanto, para hacer uso de XTemplate, tendremos:

Una plantilla en base a la cual se generar el HTML final.

Esta plantilla est escrita 100% en HTML.

El objeto XTemplate, que nos provee de unos mtodos a los que llamaremos desde nuestra aplicacin en PHP para ir rellenando la plantilla con datos.

XTemplate (3)

La plantilla HTML debe contener ciertos elementos:

Secciones.

Son los trozos en los que se divide la plantilla.

Delimitadas por:

Pueden ser analizadas ms de una vez, creando bucles.

Cdigo a reemplazar

Entre corchetes

Cmo se ver, se pueden usar matrices con claves para hacer varias asignaciones a la vez

Para ello en la plantilla habr algo semejante a: {DATA.ID} y {DATA.NAME}

XTemplate (4)

Ejemplo: listadoUsuarios.html

Listado usuarios{TITULO}NombreApellidos (...){PERSONA.APELLIDO1}{PERSONA.APELLIDO2}Nada.

XTemplate (5)

Para usar XTemplate debemos:

Bajarnos el cdigo :-)

Incluir el archivo xtemplate.class.php, all donde queramos usar sus funcionalidades

require_once('PATH/xtemplate.class.php');

Crear nuestra clase XTemplate, en base al archivo en el que se incluye el HTML

$xtpl = new XTemplate('listaDetalles.html');

El archivo que nos bajemos contiene documentacin y ejemplos muy ilustrativos que tambin se pueden encontrar en su sitio web.

XTemplate (6)

Mtodos de la clase XTemplate ms importantes:

Set null string

Asignar un valor a los nulos

Nulo: cuando no existe la variable que se trata de asignar, cuando no se asigna una variable, cuando el valor de lo asignado es , etc.

$xtpl->set_null_string('-');

Assign

Esencial. Sirve para asignar un valor a los elementos del HTML encerrados entre corchetes.

$xtpl->assign('TITULO', $titulo);

$xtpl->assign('PERSONA', $arrayConDatos);
// asigna $array['ID'] a PERSONA.ID, $array['NAME']...

XTemplate (7)

Parse

Analiza sintcticamente el trozo de cdigo delimitado por y

En otras palabras, va generando el trozo correspondiente del HTML final en base a la plantilla

$xtpl->parse('main.table.row.cell');

Text

Devuelve un string con el HTML construido por el parse.

Out

Imprime el HTML que se ha construido con parse.

$xtpl->out('main');

Equivalente a echo $xtpl->text('main');

XTemplate (8)

Ejemplo de uso de una plantilla (listado.php):

// definicin del array$usu[0]['USERNAME']='twolf';(...)require_once('xtpl/xtemplate.class.php');$xtpl = new XTemplate('listadoUsuarios.html');$xtpl->set_null_string('-');$xtpl->assign('TITULO','Listado de usuarios');if(isset($usu) && is_array($usu)) {$primero = true;foreach($usu as $usuario) {$xtpl->assign('CHECKED',($primero)?'checked="checked"':'');$xtpl->assign('PERSONA',$usuario);$primero = false;$xtpl->parse('main.table.row');}} else $xtpl->parse('main.table.norow');$xtpl->parse('main.table'); $xtpl->parse('main');$xtpl->out('main');

PHP en lnea de comandos

PHP no slo funciona junto a un servidor web. Una forma curiosa de usarlo consiste en ejecutar un script desde la consola.

Mirar ejemplo: scriptTiempo

No funciona del todo bien

Es arcaico y nada ptimo

Busca datos dentro de una pgina HTML mediante expresiones regulares y sabiendo de antemano en que lnea mirar

Sirve para hacerse una idea

PHP en lnea de comandos (2)

Instalar el interprete para lnea de comandos

sudo aptitude install php5-cli

Comprobar si el script tiene los permisos necesarios para ejecutarse

Abrimos la consola y nos ubicamos en la carpeta del script (de lo contrario bastara con especificar su ruta el ejecutarlo).

Ejecutarlo

sudo ./scriptTiempo

sudo ./scriptTiempo -a

etc.

PEAR

PHP Extensin and Application Repository promueve la reutilizacin de cdigo que realizan tareas comunes

Objetivos:

promover una biblioteca de cdigo bien estructurada

mantener un sistema de distribucin y mantenimiento de paquetes de cdigo

promover un estilo de codificacin estndar

Si la funcionalidad de base que ofrece PHP es ya de por si extensa, PEAR la aumenta sustancialmente.

PEAR (2)

Para usar alguno de los paquetes de PEAR, basta con:

Instalar php-pear

sudo aptitude install php-pear

PEAR es sistema de distribucin y mantenimiento de paquetes de cdigo que mencionbamos antes

Instalar el paquete que queramos usar haciendo uso de PEAR

sudo pear install

Incluirlo en el script en el que lo vayamos a usar:

require_once 'nombre_paquete.php';

PEAR (3)

Ejemplo:

Instalaremos los paquetes Mail y Net_SMTP

sudo pear install Mail Net_SMTP

Lo usamos:

PEAR (4)

Lo cual nos devolver:
(porque hemos activado el modo debug)

DEBUG: Recv: 220 smtp-in2.deusto.es ESMTPDEBUG: Send: EHLO localhost(...)DEBUG: Send: MAIL FROM:(...)DEBUG: Send: DATADEBUG: Recv: 354 End data with .DEBUG: Send: From: [email protected]: [email protected]: Asunto interesante

Mensaje ms interesante an (si cabe)..

DEBUG: Recv: 250 2.0.0 Ok: queued as 2F2F346A7E7DEBUG: Send: QUITDEBUG: Recv: 221 2.0.0 Bye

Por dnde continuar?

A continuacin os enumero algunos documentos y sitios webs utiles para los que queris continuar profundizando en PHP (espero que todos ;-) ).

PHP5 Power Programming

Libro muy completo, actualizado y encima gratuito (open publication license). Est en ingls, pero creo que puede ser un buen libro de referencia.

PHP.net

Dnde mejor viene cada cosa explicada.

W3Schools

Web muy til: sencilla pero clarificadora. Es la suelo usar para dudas puntuales de CSS o HTML.

Por dnde continuar? (2)

PHP Tutorials - Herong's Tutorial Notes

Libro escrito por el autor mientras aprenda PHP (con bastantes ejemplos). Es gratuito en su versin ONLINE, pero por 5$ lo tenis en PDF.

Curso de la Universidad de Sevilla

Bueno para reforzar cosas vistas. Trata con mayor detalle algunos de los temas bsicos vistos y propone ejercicios interesantes para practicar.

Desarrolloweb.com

Un manual (que puede que en algunas secciones no se encuentre actualizado) y muchos ejemplos, muy detallados. Es una referencia un poco nostlgica, porque es donde comenc yo en esto de PHP :-)

Por dnde continuar? (3)

Chuleta de PHP

Para recordar algunas funciones tiles del lenguaje. En este curso no las hemos visto.

Y cualquiera que podis encontrar...

...si veis alguno que creis interesante, comentadme y actualizo este documento.

Agur ;-)

Para cualquier correccin, sugerencia, o comentario en general, no dudis en poneros en contacto conmigo en:

aitor @ twolf . eu

Espero que os haya resultado til el cursillo y en cualquier caso, gracias por aguantar tan pacientemente mi inexperiencia.

Muokkaa otsikon tekstimuotoa napsauttamalla

Muokkaa jsennyksen tekstimuotoa napsauttamalla

Toinen jsennystaso

Kolmas jsennystaso

Neljs jsennystaso

Viides jsennystaso

Kuudes jsennystaso

Seitsems jsennystaso

Kahdeksas jsennystaso

Yhdekss jsennystaso

Pulse para editar el formato del texto de ttulo