Introducción a PHP5

50 %
50 %
Information about Introducción a PHP5

Published on July 27, 2008

Author: twolf

Source: slideshare.net

Description

Presentación usada en un cursillo de introducción a PHP.

Introducción a PHP Aitor Gómez Goiri [email_address] www.twolf.eu 16 a 18 de Julio de 2008 e-ghost ESIDE – Universidad de Deusto

Copyleft Esta presentación ha sido realizada por Aitor Gómez Goiri (twolf), en base a la presentación realizada por Jorge García 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 términos 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 Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Introducción

Fundamentos de PHP

Información de usuario

Acceso a base de datos

Otros

Índice Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Introducción

Fundamentos de PHP

Información de usuario

Acceso a base de datos

Otros

Introducción ¿Qué es? Características Pros y contras Historia PHP5 ¿Cómo funciona? Configuración del servidor Apache

¿Qué es?

Características

Pros y contras

Historia

PHP5

¿Cómo funciona?

Configuración 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 línea de comandos (PHPCLI) Aplicaciones con interfaz gráfica Open Source

PHP Hypertext Preprocessor

Lenguaje interpretado o de scripting

Sintaxis similar a C, Java o Perl

Proposito general

Aplicaciones web

Aplicaciones para línea de comandos (PHPCLI)

Aplicaciones con interfaz gráfica

Open Source

Características Alto rendimiento Integración con bases de datos Bibliotecas incorporadas Facilidad de aprendizaje y uso Portabilidad Gran documentación on-line ( php.net ) etc.

Alto rendimiento

Integración con bases de datos

Bibliotecas incorporadas

Facilidad de aprendizaje y uso

Portabilidad

Gran documentación 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 más de 20 millones de dominios

“ PHP is the BASIC of the 21st Century “

“ PHP Sucks, But It Doesn't Matter ”

Wikipedia, Meneame, Digg, WordPress, largo etc.

Usado en más de 20 millones de dominios

Historia 1994: Rasmus Lerdorf quiere mostrar su currículum vítae y guardar ciertos datos cómo estadísticas sobre el tráfico que recibía su web y crea Personal Home Page Se empezó a extender... acceso a bases de datos generación de páginas web dinámicas 1997: se liberó la versión PHP/FI 2.0 1998: PHP3

1994: Rasmus Lerdorf quiere mostrar su currículum vítae y guardar ciertos datos cómo estadísticas sobre el tráfico que recibía su web y crea Personal Home Page

Se empezó a extender...

acceso a bases de datos

generación de páginas web dinámicas

1997: se liberó la versión PHP/FI 2.0

1998: PHP3

Historia (2) 2000: PHP 4: se reescribe el núcleo (llamado Zend Engine) Más modular, rendimiento, funcionalidad... Su uso se extendió enormemente 2004: PHP5 Zend Engine 2.0 En 2008, se convirtió en la única versión estable bajo desarrollo. Renovarse o morir (aplicaciones y servidores) El curso se centra en esta versión

2000: PHP 4: se reescribe el núcleo (llamado Zend Engine)

Más modular, rendimiento, funcionalidad...

Su uso se extendió enormemente

2004: PHP5

Zend Engine 2.0

En 2008, se convirtió en la única versión estable bajo desarrollo.

Renovarse o morir (aplicaciones y servidores)

El curso se centra en esta versión

PHP 5 Modelo de orientación a objetos El anterior era un poco rudimentario Excepciones Nuevas extensiones SimpleXML , para el proceso sencillo de XML PDO , interfaz de orientación a objetos para interactuar con la base de datos. Extensiones DOM y XSL Para más detalles, aquí .

Modelo de orientación a objetos

El anterior era un poco rudimentario

Excepciones

Nuevas extensiones

SimpleXML , para el proceso sencillo de XML

PDO , interfaz de orientación a objetos para interactuar con la base de datos.

Extensiones DOM y XSL

Para más detalles, aquí .

¿Cómo funciona? Nosotros vemos páginas 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, ¿quién lo hace por él?

Nosotros vemos páginas 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, ¿quién lo hace por él?

¿Cómo funciona? (2) El navegador puede: Mostrar una página alojada en el ordenador en el que él está instalado Éste es el ordenador “cliente” La página se muestra tal y como está guardada, no hay proceso posible: tiene que ser HTML Pedir una página a un servidor El servidor puede procesar la página antes de enviarla al navegador

El navegador puede:

Mostrar una página alojada en el ordenador en el que él está instalado

Éste es el ordenador “cliente”

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

Pedir una página a un servidor

El servidor puede procesar la página antes de enviarla al navegador

¿Cómo funciona? (3) Ejemplo: petición de una página PHP a un servidor web Servidor web interpreta código PHP para generar la página HTML . Es probable que en el código se hagan llamadas a bases de datos para obtener datos con lo que completar dicho HTML.

Ejemplo: petición de una página PHP a un servidor web

Configuración 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 través de módulos, como el módulo PHP Si está cargado y configurado, en caso de que el fichero pedido sea una página PHP, se procesa y lo que se envía es el resultado

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 través de módulos, como el módulo PHP

Si está cargado y configurado, en caso de que el fichero pedido sea una página PHP, se procesa y lo que se envía es el resultado

Configuración servidor (2) El proceso descrito aquí es para configurar el servidor en una distribución Ubuntu GNU/Linux No debería 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

El proceso descrito aquí es para configurar el servidor en una distribución Ubuntu GNU/Linux

No debería 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

Configuración servidor (3) Para comprobar que el servidor Apache está activo: http://localhost Aparecerá la siguiente página Accedemos a través del servidor, no directamente

Para comprobar que el servidor Apache está activo:

http://localhost

Aparecerá la siguiente página

Accedemos a través del servidor, no directamente

Configuración servidor (4) Activaremos el módulo “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 deberéis trastear con el grupo www-data, el directorio /var/www o los ficheros /etc/apache2/conf.d/algo.conf sudo a2enmod userdir sudo /etc/init.d/apache2 force-reload

Activaremos el módulo “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 deberéis trastear con el grupo www-data, el directorio /var/www o los ficheros /etc/apache2/conf.d/algo.conf

Configuración servidor (5) Finalmente, comprobamos que funciones las páginas PHP Suponiendo que el usuario que se llama “ubuntu” Creamos el fichero: “/home/ubuntu/public_html/info.php” <?php phpinfo(); ?> Accedemos a él a través del servidor: http://localhost/~ubuntu/info.php

Finalmente, comprobamos que funciones las páginas PHP

Suponiendo que el usuario que se llama “ubuntu”

Creamos el fichero: “/home/ubuntu/public_html/info.php” <?php phpinfo(); ?>

Accedemos a él a través del servidor: http://localhost/~ubuntu/info.php

Índice Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Introducción

Fundamentos de PHP

Información de usuario

Acceso a base de datos

Otros

Fundamentos de PHP Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Métodos avanzados de escape

Orientación a objetos

Fundamentos de PHP Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Métodos avanzados de escape

Orientación a objetos

Primeros pasos Como se dijo en la introducción: PHP se incrusta dentro del código HTML PHP se procesa en el servidor Sirve para crear páginas HTML que después se enviarán al cliente, y para realizar otras operaciones Podemos generar una página según el contenido de un formulario... ... o según el contenido de una base de datos... ... o según la hora del servidor... ...

Como se dijo en la introducción:

PHP se incrusta dentro del código HTML

PHP se procesa en el servidor

Sirve para crear páginas HTML que después se enviarán al cliente, y para realizar otras operaciones

Podemos generar una página según el contenido de un formulario...

... o según el contenido de una base de datos...

... o según la hora del servidor...

...

Primeros pasos (2) ¿Cómo incrustar PHP dentro del HTML? Con la etiqueta <?php [instrucciones] ?> El servidor procesa el código que hay entre “<?php” y “?>” (o símplemente “<? .... ?>”) <?php echo (&quot;Hola mundo!&quot;); ?> Con la etiqueta <?=[expresión]?> El servidor evalúa la expresión, y escribe su resultado en la página web <?=&quot;Hola mundo!&quot; ?> No puede haber más código que la expresión que queremos evaluar y sacar por pantalla

¿Cómo incrustar PHP dentro del HTML?

Con la etiqueta <?php [instrucciones] ?>

El servidor procesa el código que hay entre “<?php” y “?>” (o símplemente “<? .... ?>”) <?php echo (&quot;Hola mundo!&quot;); ?>

Con la etiqueta <?=[expresión]?>

El servidor evalúa la expresión, y escribe su resultado en la página web <?=&quot;Hola mundo!&quot; ?>

No puede haber más código que la expresión que queremos evaluar y sacar por pantalla

Primeros pasos (3) ¿Cómo procesa el código? Tenemos la página: El servidor comienza a procesar la página Si encuentra HTML, lo envía directamente al cliente Si encuentra una etiqueta de PHP, procesa el código, y si el código escribe algo, esa &quot;escritura&quot; se incluye en el HTML que se envía al cliente <html> <body> <?php echo 'Hola mundo!'; ?> </body> </html>

¿Cómo procesa el código?

Tenemos la página:

El servidor comienza a procesar la página

Si encuentra HTML, lo envía directamente al cliente

Si encuentra una etiqueta de PHP, procesa el código, y si el código escribe algo, esa &quot;escritura&quot; se incluye en el HTML que se envía al cliente

Primeros pasos (4) El servidor devolvería el siguiente fragmento: <html> <body> Hola mundo! </body> </html>

El servidor devolvería el siguiente fragmento:

Fundamentos de PHP Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Métodos avanzados de escape

Orientación 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 función se realizan con paréntesis phpinfo(); strlen('abcdef'); // 6 Los comentarios en el código se realizan con: // Una sola línea # Una sola línea /* Varias líneas */

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 función se realizan con paréntesis

phpinfo();

strlen('abcdef'); // 6

Los comentarios en el código se realizan con:

// Una sola línea

# Una sola línea

/* Varias líneas */

Fundamentos de PHP Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Métodos avanzados de escape

Orientación 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 ejecución dependiendo del contexto en el que es usado la variable <?php $un_bool = TRUE; // un valor booleano $un_str = &quot;foo&quot;; // una cadena $un_int = 12; // un entero echo gettype($un_bool); // imprime: boolean // Si este valor es un entero, incrementarlo en cuatro if (is_int($un_int)) $un_int += 4; ?>

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 ejecución dependiendo del contexto en el que es usado la variable

Variables Tienen dos particularidades: Pueden cambiar de tipo fácilmente 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 '.' <?php $mensaje1 = 'Hola'; $mensaje2 = 'mundo!'; echo $mensaje1.' '.$mensaje2; ?>

Tienen dos particularidades:

Pueden cambiar de tipo fácilmente

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 evalúan las variables Con la función “unset()” podemos quitar el valor de una variable La función “isset()” nos indica si una variable está inicializada $nombre = 'juan'; echo (&quot;El valor de la variable nombre es $nombre.&quot;); $var = &quot;pepe&quot;; unset($var); // Ahora no tiene valor (NULL) if (isset($var)) { echo 'Tiene valor'; }

Dentro de un string delimitado con comillas dobles se evalúan las variables

Con la función “unset()” podemos quitar el valor de una variable

La función “isset()” nos indica si una variable está inicializada

Fundamentos de PHP Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Métodos avanzados de escape

Orientación a objetos

Operadores Aritméticos Asignación

Aritméticos

Asignación

Operadores (2) Comparación Lógicos Otros

Comparación

Lógicos

Otros

Fundamentos de PHP Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Métodos avanzados de escape

Orientación a objetos

Estructuras de control Condicionales Bucles include y require

Condicionales

Bucles

include y require

Condicionales Condicional simple if (<condición>) {...} Condicional y alternativa if (<condición>) {...} else {...}

Condicional simple if (<condición>) {...}

Condicional y alternativa if (<condición>) {...} else {...}

Condicionales (2) Condicional múltiple switch (<expresión>) { case <valor 1>: ... break; case <valor 2>: ... break; ... case <valor n>: ... break; default: ... break; }

Condicional múltiple switch (<expresión>) { case <valor 1>: ... break; case <valor 2>: ... break; ... case <valor n>: ... break; default: ... break; }

Condicionales (3) Ejemplo //$x = 4; //descomentadlo después de probarlo una vez if( ! isset($x) ) { echo '<p>Por favor, establezca un valor para la variable.</p>'; } else { echo '<p>La variable está correctamente definida y es</p>'; switch ($x) { case 1: echo (' el uno.</p>'); break; case 2: echo (' el dos.</p>'); break; case 3: echo (' el tres.</p>'); break; default: echo ('distinta a 1, 2 o 3.</p>'); break; } }

Ejemplo

Bucles while Mientras se cumpla una condición, se ejecuta al código que hay en el (puede no ejecutarse nunca) Ejemplo: $a = 1; while ( $a < 10) { echo &quot;<p>El número actual es $a</p>&quot;; $a++; }

while

Mientras se cumpla una condición, se ejecuta al código que hay en el (puede no ejecutarse nunca)

Ejemplo:

Bucles (2) do ... while Se ejecuta el código mientras se cumpla una condición (al menos se ejecuta una vez) Ejemplo $a = 0; do { $a++; echo ('<p>El número es '.$a.'</p>'); } while ( $a < 10);

do ... while

Se ejecuta el código mientras se cumpla una condición (al menos se ejecuta una vez)

Ejemplo

Bucles (3) for Ejecuta un código mientas se cumpla una condición (puede no ejecutarse ninguna vez) Opcionalmente, se puede proporcionar: Una expresión de inicialización, se ejecuta la primera vez Una expresión de condición Una expresión de paso, se ejecuta al final de cada pasada del bucle Ejemplo: for ($a = 1; $a <= 10; $a++) { echo ('<p>El número es '.$a.'</p>'); }

for

Ejecuta un código mientas se cumpla una condición (puede no ejecutarse ninguna vez)

Opcionalmente, se puede proporcionar:

Una expresión de inicialización, se ejecuta la primera vez

Una expresión de condición

Una expresión de paso, se ejecuta al final de cada pasada del bucle

Ejemplo:

Bucles (4) Foreach Se ejecuta un determinado código por cada uno de los elementos de una colección Por ejemplo, si tenemos un array con 3 elementos: $arr = array('perro','gato','okapi','ornitorrinco'); foreach ($arr as $elem) { // En cada vuelta, elem guarda uno de los strings echo (&quot;<p>El elemento es: $elem.</p>&quot;); } foreach ($arr as $index => $elem) { // En cada vuelta, elem guarda uno de los strings, e index el índice echo (&quot;<p>El elemento $index es: $elem.</p>&quot;); }

Foreach

Se ejecuta un determinado código por cada uno de los elementos de una colección

Por ejemplo, si tenemos un array con 3 elementos:

Bucles (5) Ejemplo Nota: para todo lo anterior existe una sintaxis alternativa .

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 página vars.php <?php $color = 'verde'; $fruta = 'manzana'; ?> test.php <?php echo &quot;Una $fruta $color&quot;; // Una include 'vars.php'; echo &quot;Una $fruta $color&quot;; // Una manzana verde ?>

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 página

Fundamentos de PHP Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Métodos avanzados de escape

Orientación a objetos

Matrices Acceso a una posición A través de “[...]” echo ($matriz[1]); El índice de una matriz puede ser cualquier cosa echo ($matriz[&quot;gato&quot;]); Creación de una matriz A través de “array()” $profesiones = array('Taxista', 'Bombero', 'Alcalde'); En la posición 0 del array está el string 'Taxista&quot;, en la 1 'Bombero' y así sucesivamente

Acceso a una posición

A través de “[...]”

echo ($matriz[1]);

El índice de una matriz puede ser cualquier cosa

echo ($matriz[&quot;gato&quot;]);

Creación de una matriz

A través de “array()”

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

En la posición 0 del array está el string 'Taxista&quot;, 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' Creación con corchetes Podemos crear elementos de una matriz sobre la marcha: $matriz[7] = &quot;Texto de la posición 7&quot;; // si no especificamos un índice, se inserta en la siguiente posición $matriz[] = &quot;Esto iría en la posición 8&quot;;

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'

Creación con corchetes

Podemos crear elementos de una matriz sobre la marcha:

Matrices (3) Modificación de elementos Podemos modificar un elemento de una matriz reasignando un valor $matriz = array(3 => &quot;Oso&quot;, 5 => &quot;Perro&quot;); $matriz[3] = &quot;Gato&quot;; Eliminación de elementos Podemos eliminar elementos, o la matriz entera con &quot;unset()&quot; $matriz = array(3 => 'Oso', 5 => 'Lagarto'); unset($matriz[3]); // No hay nada en la posición 3 unset($matriz); // No hay nada en la matriz

Modificación de elementos

Podemos modificar un elemento de una matriz reasignando un valor

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

$matriz[3] = &quot;Gato&quot;;

Eliminación de elementos

Podemos eliminar elementos, o la matriz entera con &quot;unset()&quot;

Matrices (4) Recorrido de un array con “foreach” La estructura foreach, además de ser utilizada como hemos visto en la sección 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 &quot;El $clave es $valor<br />&quot;; }

Recorrido de un array con “foreach”

La estructura foreach, además de ser utilizada como hemos visto en la sección de estructuras de control, resulta especialmente útil para obtener los índices del array:

Fundamentos de PHP Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Métodos avanzados de escape

Orientación a objetos

Funciones Podemos definir nuestras propias funciones Ejemplo function <nombre_función> ($parm1, $parm2, ...) { ... return <resultado>; } function negrita($texto) { return '<b>'.$texto.'</b>'; } echo 'Quiero '.negrita('remarcar').' lo que es '.negrita('importante');

Podemos definir nuestras propias funciones

Ejemplo

Fundamentos de PHP Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Métodos avanzados de escape

Orientación a objetos

Errores Para tratar los errores que se produzcan en nuestra aplicación web podemos optar por: Hacer uso de excepciones Finalizar el script (con funciones die, exit, etc.)

Para tratar los errores que se produzcan en nuestra aplicación 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(); }

Similar a otros lenguajes

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

Función die Equivalente a exit Cuando se devuelve, se detiene el script y se muestra el mensaje. <?php $x = 15; $y = 0; echo 'llego aquí<br />'; if($y==0) die('División imposible.'); // Probad a comentarlo echo ($x/$y); echo '<br />llego al final'; ?>

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 Métodos avanzados de escape Orientación a objetos

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Métodos avanzados de escape

Orientación a objetos

Métodos avanzados de escape PHP permite construcciones como: <?php function negrita($texto) { ?> <span style=&quot; font-weight: bold;&quot;><?php echo $texto; ?></span> <?php } $numero=15; $limite=16; if($numero<$limite) $ret='menor'; else $ret='mayor o igual'; ?> <p>El número especificado es <?php negrita($ret); ?> que <?php negrita($limite); ?>.</p>

PHP permite construcciones como:

Fundamentos de PHP Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Primeros pasos

Sintaxis

Tipos y variables

Operadores

Estructuras de control

Matrices

Funciones

Errores

Métodos avanzados de escape

Orientación a objetos

Objetos Definición 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; } }

Definición de una clase

Objetos (2) Creación de objetos Si tenemos una clase &quot;ClaseA&quot; podremos crear objetos mediante el operador &quot;new&quot; $objeto = new ClaseA(); El puntero &quot;$this&quot; Es una referencia al propio objeto. Se usa dentro de los métodos class ClaseA { protected $num; function getNum() // Si no se especifica nada, es público { return $this->num; // &quot;num&quot; no lleva &quot;$&quot; } }

Creación de objetos

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

El puntero &quot;$this&quot;

Es una referencia al propio objeto. Se usa dentro de los métodos

Objetos (3) Operador de resolución :: Es un símbolo que permite acceso a los miembros o métodos estáticos 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 . &quot; &quot;; } } MiClase::doubleColon();

Operador de resolución ::

Es un símbolo que permite acceso a los miembros o métodos estáticos y constantes.

Desde afuera: usan el nombre de la clase.

Desde dentro: usan self o parent.

Objetos (4) Constructores Un constructor es un método 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(&quot;Twolf&quot;); echo $p;

Constructores

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

Objetos (5) Destructor __destruct() Se le llamará tan pronto como se borren todas las referencias a un objeto en particular Métodos mágicos Existen unos nombres de métodos 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

Destructor __destruct()

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

Métodos mágicos

Existen unos nombres de métodos 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 <?php class ClaseA { protected $attrA = 'A'; function getAttrA() { return $this->attrA; } } class ClaseB extends ClaseA { private $attrB = 'B'; function getAttrB() { return $this->attrB; } } $obj = new ClaseB; echo $obj->getAttrA(); echo $obj->getAttrB(); ?>

PHP soporta herencia de clases

Índice Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Introducción

Fundamentos de PHP

Información de usuario

Acceso a base de datos

Otros

Información de usuario Superglobales GET y POST Sesiones

Superglobales

GET y POST

Sesiones

Superglobales Son variables incorporadas (matrices asociativas) disponibles en todos los ámbitos $GLOBALS para definir variables globales $_SERVER contiene información tal como cabeceras, rutas y ubicaciones de scripts <?php echo $_SERVER['SERVER_ADDR'].'<br />'; echo $_SERVER['SERVER_NAME'].'<br />'; echo $_SERVER['QUERY_STRING'].'<br />'; echo $_SERVER['DOCUMENT_ROOT'].'<br />'; echo $_SERVER['REMOTE_ADDR'].'<br />'; ?>

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

$GLOBALS

para definir variables globales

$_SERVER

contiene información tal como cabeceras, rutas y ubicaciones de scripts

Superglobales (2) $_SESSION contiene variables de sesión $_POST variables pasadas a través del método HTTP POST $_GET variables pasadas a través del método HTTP GET $_REQUEST contiene datos de $_GET, $_POST, y $_COOKIE. etc.

$_SESSION

contiene variables de sesión

$_POST

variables pasadas a través del método HTTP POST

$_GET

variables pasadas a través del método HTTP GET

$_REQUEST

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

etc.

GET y POST Información desde formularios La información de un formulario puede enviarse con el método &quot;get&quot; o el método &quot;post&quot; Existen dos matrices en PHP llamadas $_GET y $_POST Se accede por el nombre del parámetro Se obtiene el valor del parámetro

Información desde formularios

La información de un formulario puede enviarse con el método &quot;get&quot; o el método &quot;post&quot;

Existen dos matrices en PHP llamadas $_GET y $_POST

Se accede por el nombre del parámetro

Se obtiene el valor del parámetro

GET y POST (2) Ejemplo: crear el siguiente fichero PHP (ejerparams.php): Acceder a la página con la URL: <html> <body> <?php foreach ($_GET as $nombre => $param) { ?> <p><?=$nombre.': '.$param?></p> <? } ?> </body> </html> http://localhost/~ubuntu/ejerparams.php? login=bardok&pass=1234$email=mail@server.com

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

Acceder a la página con la URL:

GET y POST (3) Creamos la página &quot;formparams.html&quot; y enviamos los datos a &quot;ejerparams.php&quot;: Modificación: en lugar de utilizar el método &quot;get&quot; utilizar el &quot;post&quot; <html> <body> <form method=&quot;get&quot; action=&quot;ejerparams.php&quot;> Login: <input type=&quot;text&quot; name=&quot;login&quot; /><br /> Password: <input type=&quot;password&quot; name=&quot;pass&quot; /><br /> Email: <input type=&quot;text&quot; name=&quot;email&quot; /><br /> <input type=&quot;submit&quot; value=&quot;Enviar&quot; /> </form> </body> </html>

Creamos la página &quot;formparams.html&quot; y enviamos los datos a &quot;ejerparams.php&quot;:

Modificación: en lugar de utilizar el método &quot;get&quot; utilizar el &quot;post&quot;

GET y POST (4) Para acceder a un dato en concreto dentro de los arrays &quot;$_POST&quot; y &quot;$_GET&quot; La clave para acceder a un elemento es el nombre del parámetro Múltiples valores en un parámetro: Un parámetro puede tener distintos valores a la vez: El nombre del parámetro será &quot;nombreparametro[]&quot;: El parámetro &quot;nombreparametro&quot; es un array con los elementos seleccionados. echo 'El nombre de usuario utilizado es '.$_GET['login']; <input type=&quot;checkbox&quot; name=&quot;sel[]&quot; value=&quot;v1&quot;/>Valor 1 <input type=&quot;checkbox&quot; name=&quot;sel[]&quot; value=&quot;v2&quot;/>Valor 2

Para acceder a un dato en concreto dentro de los arrays &quot;$_POST&quot; y &quot;$_GET&quot;

La clave para acceder a un elemento es el nombre del parámetro

Múltiples valores en un parámetro:

Un parámetro puede tener distintos valores a la vez:

El nombre del parámetro será &quot;nombreparametro[]&quot;:

El parámetro &quot;nombreparametro&quot; es un array con los elementos seleccionados.

GET y POST (5) Si se seleccionan los dos checkboxes anteriores: Ejemplo con $_REQUEST (ejrequest.php) sel[0] => &quot;v1&quot; sel[1] => &quot;v2&quot; <html><head><title>Ejemplo de uso de $_REQUEST</title></head> <body><?php if( isset($_REQUEST['provincia']) ) { ?> <p>Eres de <?php echo $_REQUEST['provincia']; ?>.</p> <?php } else { ?> <form method=&quot;get&quot; action=&quot;ejrequest.php&quot;> <select name=&quot;provincia&quot;> <option value=&quot;Álava&quot;>Álava</option> ... <option value=&quot;Murcia&quot;>Murcia</option> </select><input type=&quot;submit&quot; value=&quot;Enviar&quot; /> </form> <?php } ?> </body></html>

Si se seleccionan los dos checkboxes anteriores:

Ejemplo con $_REQUEST (ejrequest.php)

Sesiones Variables de sesión Podemos guardar información del usuario que se mantendrá mientras no se cierre el navegador Se transmite de unas páginas a otras El ejemplo más clásico: carrito de la compra Otra utilidad: validación de usuarios Todo lo que guardemos en el array &quot;$_SESSION&quot; quedará almacenado de este modo Para poder usarlo: lo primero en la página, llamada a &quot;session_start();&quot;

Variables de sesión

Podemos guardar información del usuario que se mantendrá mientras no se cierre el navegador

Se transmite de unas páginas a otras

El ejemplo más clásico: carrito de la compra

Otra utilidad: validación de usuarios

Todo lo que guardemos en el array &quot;$_SESSION&quot; quedará almacenado de este modo

Para poder usarlo: lo primero en la página, llamada a &quot;session_start();&quot;

Sesiones (2) Ejemplo: página pública/privada public_private.php <?php session_start(); if (isset($_GET[&quot;accion&quot;])) { $accion = $_GET[&quot;accion&quot;]; if ($accion == &quot;Login&quot;) { $_SESSION[&quot;login&quot;] = $_GET[&quot;login&quot;]; } else if ($accion == &quot;Desconectar&quot;) { unset($_SESSION[&quot;login&quot;]); } } $registrado = isset($_SESSION[&quot;login&quot;]); if ($registrado) $login = $_SESSION[&quot;login&quot;]; ?>

Ejemplo: página pública/privada

public_private.php

Sesiones (3) <html><body> <?php if ($registrado) { ?> <p>Bienvenido, <b><?=$login?></b></p> <p><a href=&quot;private_login.php&quot;>Link a una página privada</a></p> <form method=&quot;get&quot; action=&quot;public_private.php&quot;> <input type=&quot;submit&quot; name=&quot;accion&quot; value=&quot;Desconectar&quot; /> </form> <?php } else { ?> <p>Por favor, introduce tu nombre de usuario</p> <form method=&quot;get&quot; action=&quot;public_private.php&quot;> Nombre de usuario: <input type=&quot;text&quot; name=&quot;login&quot; /><br /> <input type=&quot;submit&quot; name=&quot;accion&quot; value=&quot;Login&quot; /> </form> <?php } ?> </body></html>

Sesiones (4) private_login.php <?php session_start(); ?> <html> <body> <?php if (isset($_SESSION[&quot;login&quot;])) { echo (&quot;El nombre de usuario es &quot;.$_SESSION[&quot;login&quot;]); } else { echo(&quot;No hay nombre de usuario&quot;); } ?> </body> </html>

private_login.php

Índice Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Introducción

Fundamentos de PHP

Información de usuario

Acceso a base de datos

Otros

Acceso a base de datos Introducción Configuración del servidor de base de datos Creación de un usuario en la base de datos Creación de una tabla PHP Data Objects Importar un archivo a base de datos Prepared statements Ejercicio favoritos Ejemplo práctico: guardar ficheros

Introducción

Configuración del servidor de base de datos

Creación de un usuario en la base de datos

Creación de una tabla

PHP Data Objects

Importar un archivo a base de datos

Prepared statements

Ejercicio favoritos

Ejemplo práctico: guardar ficheros

Introducción Es posible acceder a bases de datos a través de PHP Uso de módulos 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 orientación a objetos

Es posible acceder a bases de datos a través de PHP

Uso de módulos 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 orientación a objetos

Configuración 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, habría que instalar mysql-server en él, y mysql-client en el servidor web php5-mysql instala el módulo que permite a PHP interactuar con MySQL phpmyadmin permite administración web La instalación para el cursillo tiene cómo contraseña para el usuario administrador (root): &quot;r00tr00t&quot;. No obstante crearemos un nuevo usuario para nuestros menesteres

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, habría que instalar mysql-server en él, y mysql-client en el servidor web

php5-mysql instala el módulo que permite a PHP interactuar con MySQL

phpmyadmin permite administración web

La instalación para el cursillo tiene cómo contraseña para el usuario administrador (root): &quot;r00tr00t&quot;.

No obstante crearemos un nuevo usuario para nuestros menesteres

Configuración del servidor de BB.DD. (2) Accedemos a PHPMyAdmin http://localhost/phpmyadmin

Accedemos a PHPMyAdmin

http://localhost/phpmyadmin

Creación de un usuario Creamos un usuario sobre el que trabajar Privilegios Agregar a un nuevo usuario Todos los privilegios de datos y estructura

Creamos un usuario sobre el que trabajar

Privilegios

Agregar a un nuevo usuario

Todos los privilegios de datos y estructura

Creación 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

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

Completamos y grabamos

PHP Data Objects Una vez instalado el módulo de MySQL, tenemos un API de funciones para interactuar con distintas bases de datos. Por supuesto existe un driver para MySQL. Pasos a seguir: Conexión con el servidor de Base de Datos Trabajar con las tablas En caso de selección, trabajar con los registros Cerrar la conexión con la base de datos (con el método que explicamos, PDO, no hará falta que nos encarguemos explícitamente de cerrar nada, ya que es una tarea que se realizará implícitamente al destruir el objeto correspondiente)

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

Pasos a seguir:

Conexión con el servidor de Base de Datos

Trabajar con las tablas

En caso de selección, trabajar con los registros

Cerrar la conexión con la base de datos (con el método que explicamos, PDO, no hará falta que nos encarguemos explícitamente de cerrar nada, ya que es una tarea que se realizará implícitamente al destruir el objeto correspondiente)

PHP Data Objects (2) Conexión con el servidor de base de datos La conexión a la base de datos devuelve un identificativo de la conexión a la base de datos Si ha habido error, lanzará una excepción Debemos encerrar la construcción 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(); }

Conexión con el servidor de base de datos

La conexión a la base de datos devuelve un identificativo de la conexión a la base de datos

Si ha habido error, lanzará una excepción

Debemos encerrar la construcción del objeto PDO en un try/catch

PHP Data Objects (3) Trabajar con las tablas $pdo->query(&quot;sentencia_sql&quot;); La sentencia SQL puede ser una inserción, borrado, actualización o selección $pdo->query('INSERT INTO animales VALUES (“1”, “gato”)'); En el caso de realizarse una selección, se devolverá un objeto PDOStatement con el resultado de la misma $res = $pdo->query('SELECT * FROM animales');

Trabajar con las tablas

$pdo->query(&quot;sentencia_sql&quot;);

La sentencia SQL puede ser una inserción, borrado, actualización o selección

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

En el caso de realizarse una selección, 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 selección, podemos recorrer el resultado utilizando el método fetch o simplemente haciendo un foreach Ejemplo completo en seleccionSimple.php Antes de probarlo, importaremos la sencilla tabla de animales. Mediante la pestaña de “import” de PHPMyAdmin. $sql = 'SELECT * FROM animales'; foreach ($pdo->query($sql) as $row) { echo '('.$row['identificador'].','.$row['denominacion'].')'.” ”; }

Una vez realizada la selección, podemos recorrer el resultado utilizando el método fetch o simplemente haciendo un foreach

Ejemplo completo en seleccionSimple.php

Antes de probarlo, importaremos la sencilla tabla de animales.

Mediante la pestaña de “import” de PHPMyAdmin.

Importar archivo Seleccionamos el fichero “animales.sql” y continuamos. Antes de ejecutar seleccionSimple.php, no os olvidéis de verificar que los datos de la conexión son los correctos.

Seleccionamos el fichero “animales.sql” y continuamos.

Antes de ejecutar seleccionSimple.php, no os olvidéis de verificar que los datos de la conexión son los correctos.

Prepared Statements El anterior método (PDO->query()), está bien cuando se va a ejecutar una sentencia SQL una única vez. Para consultas que se van a realizar múltiples veces, se puede obtener un mejor rendimiento “ preparando ” el objeto PDOStatement a usar, y realizando después 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 parámetros.

El anterior método (PDO->query()), está bien cuando se va a ejecutar una sentencia SQL una única vez.

Para consultas que se van a realizar múltiples veces, se puede obtener un mejor rendimiento “ preparando ” el objeto PDOStatement a usar, y realizando después 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 parámetros.

Prepared Statements (2) Ejemplo insercionPreparada.php: Probar las otras formas de inserción 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();

Ejemplo insercionPreparada.php:

Probar las otras formas de inserción preparada que existen en dicho fichero descomentandolas.

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 página 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 página, pero con el elemento seleccionado (sus datos aparecen en el formulario)

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

Insertar elementos en la tabla

Crear una página 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 página, pero con el elemento seleccionado (sus datos aparecen en el formulario)

Ejercicio favoritos (1) Propuesta de tabla

Propuesta de tabla

Ejercicio favoritos (2) Propuesta interfaz

Propuesta interfaz

Ejercicio favoritos (3) Estructura Si quisiéramos dividir la aplicación en varias capas (en archivos y carpetas), podríamos empezar consultando aquí . En el ejercicio dividiremos la propia página en varios &quot;bloques&quot;. Propuesta de estructura Conexión a la base de datos Gestión de los comandos Todos los elementos de tipo &quot;submit&quot; tienen como nombre &quot;accion&quot; y como &quot;value&quot; la accion que realizan

Estructura

Si quisiéramos dividir la aplicación en varias capas (en archivos y carpetas), podríamos empezar consultando aquí .

En el ejercicio dividiremos la propia página en varios &quot;bloques&quot;.

Propuesta de estructura

Conexión a la base de datos

Gestión de los comandos

Todos los elementos de tipo &quot;submit&quot; tienen como nombre &quot;accion&quot; y como &quot;value&quot; la accion que realizan

Ejercicio favoritos (4) Propuesta de estructura (2) Recuperación de los datos del grupo seleccionado (si lo hay) Al seleccionar un grupo, se pasará como parámetro el código del mismo Página web en sí Formulario: si hay algún grupo seleccionado, sus valores se muestran en los componentes, se muestran los botones &quot;modificar&quot; y &quot;eliminar&quot; y se guarda el código seleccionado en un campo &quot;hidden&quot; Listado: recorrido de la tabla. Cada elemento es un link a la propia página con el formato: &quot;gestiongrupos.php?selectedcodigo=<codigo>&quot; (ej.: gestiongrupos.php?selectedcodigo=3)

Propuesta de estructura (2)

Recuperación de los datos del grupo seleccionado (si lo hay)

Al seleccionar un grupo, se pasará como parámetro el código del mismo

Página web en sí

Formulario: si hay algún grupo seleccionado, sus valores se muestran en los componentes, se muestran los botones &quot;modificar&quot; y &quot;eliminar&quot; y se guarda el código seleccionado en un campo &quot;hidden&quot;

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

&quot;gestiongrupos.php?selectedcodigo=<codigo>&quot; (ej.: gestiongrupos.php?selectedcodigo=3)

Ejemplo práctico Vamos a realizar el siguiente ejemplo: Desde un formulario se envía 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

Vamos a realizar el siguiente ejemplo:

Desde un formulario se envía 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 práctico (2) El formulario Tiene que tener codificación: multipart/form-data El fichero se envía con un control “file” El control hidden “MAX_FILE_SIZE” indica el tamaño máximo del fichero a enviar Tiene que estar ANTES del control file

El formulario

Tiene que tener codificación:

multipart/form-data

El fichero se envía con un control “file”

El control hidden “MAX_FILE_SIZE” indica el tamaño máximo del fichero a enviar

Tiene que estar ANTES del control file

Ejemplo práctico (3) Traducido a HTML... <form enctype=&quot;multipart/form-data&quot; action=&quot;procesar_fichero.php&quot; method=&quot;post&quot;> <fieldset> <legend>Selección de ficheros</legend> <input type=&quot;hidden&quot; name=&quot;MAX_FILE_SIZE&quot; value=&quot;1000000&quot; /> <label for=&quot;fichero&quot;>Selecciona el fichero (imagen jpeg): <input type=&quot;file&quot; name=&quot;fichero&quot; id=&quot;fichero&quot; /> </label> <br /> <input type=&quot;submit&quot; value=&quot;Enviar&quot; /> </fieldset> </form>

Traducido a HTML...

Ejemplo práctico (4) Insertar el fichero Hemos definido, en la tabla “FICHEROS” los siguientes campos: FIC_Codigo: autonumérico, 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'] : tamaño del fichero $_FILES['fichero']['type'] : tipo del fichero $_FILES['fichero']['tmp_name'] : fichero temporal

Insertar el fichero

Hemos definido, en la tabla “FICHEROS” los siguientes campos:

FIC_Codigo: autonumérico, 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'] : tamaño del fichero

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

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

Ejemplo práctico (5) Insertar el fichero Vamos a usar la función “comillas_inteligentes”: Escapa el string, y le pone comillas simples si no es un valor numérico 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 = &quot;'&quot; . mysql_real_escape_string($valor) . &quot;'&quot;; } return $valor; }

Insertar el fichero

Vamos a usar la función “comillas_inteligentes”:

Escapa el string, y le pone comillas simples si no es un valor numérico

Para poder meter los datos sin problemas en la sentencia SQL

Ejemplo práctico (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 codificación a BASE 64 $data = base64_encode($data); // Meter el fichero en la base de datos $comando = sprintf(&quot;insert into FICHEROS(FIC_Data,FIC_Type) VALUES(%s,%s)&quot; ,comillas_inteligentes($data) ,comillas_inteligentes($type_f) ); mysql_query($comando);

Insertar fichero (2)

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

Ejemplo práctico (7) Recuperar la imagen Usaremos una página que recibe como parámetro el código 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)

Recuperar la imagen

Usaremos una página que recibe como parámetro el código 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 práctico (8) Recuperar la imagen Si llamamos a la página, por ejemplo con: .../visualizar_img.php?codigo=4 Devolverá la imagen con el código 4, si es que existe Tras recuperar los datos, los escribimos, sin más $sql_data = &quot;SELECT FIC_Data, FIC_Type FROM FICHEROS WHERE FIC_Codigo=$codigo&quot;; $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(&quot;Content-type: $tipo&quot;); echo ($datos); }

Recuperar la imagen

Si llamamos a la página, por ejemplo con:

.../visualizar_img.php?codigo=4

Devolverá la imagen con el código 4, si es que existe

Tras recuperar los datos, los escribimos, sin más

Índice Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Introducción

Fundamentos de PHP

Información de usuario

Acceso a base de datos

Otros

Otros SimpleXML XTemplate PHP en línea de comandos PEAR PHP en el IDE Eclipse PDT PHPeclipse ¿Por dónde continuar?

SimpleXML

XTemplate

PHP en línea de comandos

PEAR

PHP en el IDE Eclipse

PDT

PHPeclipse

¿Por dónde continuar?

SimpleXML La extensión SimpleXML es una forma fácil 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('<a><b/></a>'); Usando funciones $xml = simplexml_load_file('prueba.xml'); $xml = simplexml_load_string('<animales><animal raza=&quot;perro&quot;>guau</animal></animales>');

La extensión SimpleXML es una forma fácil 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('<a><b/></a>');

Usando funciones

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

$xml = simplexml_load_string('<animales><animal raza=&quot;perro&quot;>guau</animal></animales>');

SimpleXML (2) Para los siguientes ejemplos supondremos que existe el archivo animales.xml con el siguiente contenido. <animales> <animal raza=&quot;perro&quot;> <patas>4</patas> <clase>mammalia</clase> <longevidad>15</longevidad> </animal> <animal raza=&quot;gato&quot;> <patas>4</patas> <clase>mammalia</clase> <longevidad>16</longevidad> </animal> <animal raza=&quot;periquito&quot;> <patas>2</patas> <clase>aves</clase> <longevidad>6</longevidad> </animal> </animales>

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

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

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 ' (<span style=&quot;font-style:italic&quot;>'.$animal->clase. '</span>)'; echo ' vive una media de '.$animal->longevidad.' años y tiene '; echo $animal->patas.' patas.<br />'; } foreach ($xml->animal as $animal) { echo '<ul><li>Animal: '.$animal->attributes()->raza.'</li>'; echo '<ul>'; foreach ($animal->children() as $elemento=>$valor) { echo '<li>'.$elemento.': '.$valor.'</li>'; } echo '</ul></ul>'; }

Ejemplo simple de lectura

Explorando el XML...

SimpleXML (4) Modificar el XML $nuevoElemento = $xml->addChild('nombre'); $nuevoElemento = $xml->addChild('nombre','valor'); $elemento->addAttribute(&ap

Add a comment

Related presentations

Related pages

PHP: Introducción - Manual

Introducción. Estas funciones están destinadas a trabajar con » mhash. Mhash puede ser utilizada para crear sumas de comprobación, resúmenes de ...
Read more

Manual de PHP5 | Código Fuente

Manual realizado por Luis Miguel Cabezas Granado. Contiene: Prólogo Introducción Introducción a PHP5 Variables, constantes y tipos de datos Operadores
Read more

1. Introducción a PHP for Manual PHP5 Basico - scribd.com

Scribd is the world's largest social reading and publishing site.
Read more

Tutorial PHP - 1. Introducción a PHP | UskoKruM2010 - YouTube

** My APP http://myapp.wips.com/uskokrum2010 ... Introducción a PHP | UskoKruM2010 ... "php" "php5" "php web" "php tutorial" "curso ...
Read more

Introducción a la programación web con PHP5 - Monografias.com

Herramientas para programar en el curso Sistema operativo: Windows o...
Read more

Introducción a php by CursoVirtual - issuu

INTRODUCCIÓN A PHP. HISTORIA DE PHP El lenguaje PHP (Personal Home Page). Fue creado en 1994 por Rasmus Lerdorf para sus proyectos personales antes de su ...
Read more