Download - 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