SlideShare une entreprise Scribd logo
1  sur  134
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 ,[object Object],[object Object],[object Object],[object Object],[object Object]
Índice ,[object Object],[object Object],[object Object],[object Object],[object Object]
Introducción ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
¿Qué es? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Características ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Pros y contras ,[object Object],[object Object],[object Object],[object Object]
Historia ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Historia (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PHP 5 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
¿Cómo funciona? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
¿Cómo funciona? (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
¿Cómo funciona? (3) ,[object Object],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.
Configuración del servidor ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Configuración servidor (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Configuración servidor (3) ,[object Object],[object Object],[object Object],[object Object]
Configuración servidor (4) ,[object Object],[object Object],[object Object],[object Object],[object Object],sudo a2enmod userdir sudo /etc/init.d/apache2 force-reload
Configuración servidor (5) ,[object Object],[object Object],[object Object],[object Object]
Índice ,[object Object],[object Object],[object Object],[object Object],[object Object]
Fundamentos de PHP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Fundamentos de PHP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Primeros pasos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Primeros pasos (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Primeros pasos (3) ,[object Object],[object Object],[object Object],[object Object],[object Object],<html> <body> <?php echo 'Hola mundo!'; ?> </body> </html>
Primeros pasos (4) ,[object Object],<html> <body> Hola mundo! </body> </html>
Fundamentos de PHP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Sintaxis ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Fundamentos de PHP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tipos ,[object Object],[object Object],[object Object],[object Object],[object Object],<?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; ?>
Variables ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],<?php $mensaje1 = 'Hola'; $mensaje2 = 'mundo!'; echo $mensaje1.' '.$mensaje2; ?>
Variables (2) ,[object Object],[object Object],[object Object],$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'; }
Fundamentos de PHP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Operadores ,[object Object],[object Object]
Operadores (2) ,[object Object],[object Object],[object Object]
Fundamentos de PHP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Estructuras de control ,[object Object],[object Object],[object Object]
Condicionales ,[object Object],[object Object]
Condicionales (2) ,[object Object]
Condicionales (3) ,[object Object],//$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; } }
Bucles ,[object Object],[object Object],[object Object],$a = 1; while ( $a < 10) { echo &quot;<p>El número actual es $a</p>&quot;; $a++; }
Bucles (2) ,[object Object],[object Object],[object Object],$a = 0; do { $a++; echo ('<p>El número es '.$a.'</p>'); } while ( $a < 10);
Bucles (3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],for ($a = 1; $a <= 10; $a++) { echo ('<p>El número es '.$a.'</p>'); }
Bucles (4) ,[object Object],[object Object],[object Object],$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;); }
Bucles (5) ,[object Object],[object Object]
include y require ,[object Object],[object Object],[object Object],[object Object],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 ?>
Fundamentos de PHP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Matrices ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Matrices (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],$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;;
Matrices (3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],$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
Matrices (4) ,[object Object],[object Object],$modelo['identificador'] = 3; $modelo['fabricante'] = 'ABB'; $modelo['nombre'] = 'detector presencia'; foreach ($modelo as $clave => $valor) { echo &quot;El $clave es $valor<br />&quot;; }
Fundamentos de PHP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Funciones ,[object Object],[object Object],function <nombre_función> ($parm1, $parm2, ...) { ... return <resultado>; } function negrita($texto) { return '<b>'.$texto.'</b>'; } echo 'Quiero '.negrita('remarcar').' lo que es '.negrita('importante');
Fundamentos de PHP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Errores ,[object Object],[object Object],[object Object]
Excepciones ,[object Object],[object Object],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(); }
Función die ,[object Object],[object Object],<?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'; ?>
Fundamentos de PHP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Métodos avanzados de escape ,[object Object],<?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>
Fundamentos de PHP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Objetos ,[object Object],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) ,[object Object],[object Object],[object Object],[object Object],class ClaseA { protected $num; function getNum() // Si no se especifica nada, es público { return $this->num; // &quot;num&quot; no lleva &quot;$&quot; } }
Objetos (3) ,[object Object],[object Object],[object Object],[object Object],class MiClase extends ClasePadre { public static $my_static = 'static var'; public static function doubleColon() { parent::doubleColon(); echo self::$my_static . &quot;&quot;; } } MiClase::doubleColon();
Objetos (4) ,[object Object],[object Object],class Persona { private $nombre; function __construct($nom) { $this->nombre = $nom; } function __toString() { return $this->nombre; } } $p = new Persona(&quot;Twolf&quot;); echo $p;
Objetos (5) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Objetos (6) ,[object Object],<?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(); ?>
Índice ,[object Object],[object Object],[object Object],[object Object],[object Object]
Información de usuario ,[object Object],[object Object],[object Object]
Superglobales ,[object Object],[object Object],[object Object],[object Object],[object Object],<?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 />'; ?>
Superglobales (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
GET y POST ,[object Object],[object Object],[object Object],[object Object],[object Object]
GET y POST (2) ,[object Object],[object Object],<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
GET y POST (3) ,[object Object],[object Object],<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>
GET y POST (4) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],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
GET y POST (5) ,[object Object],[object Object],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>
Sesiones ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Sesiones (2) ,[object Object],[object Object],<?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;]; ?>
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) ,[object Object],<?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>
Índice ,[object Object],[object Object],[object Object],[object Object],[object Object]
Acceso a base de datos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Introducción ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Configuración del servidor de BB.DD. ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Configuración del servidor de BB.DD. (2) ,[object Object],[object Object]
Creación de un usuario ,[object Object],[object Object],[object Object],[object Object]
Creación de una tabla ,[object Object],[object Object],[object Object]
Estructura de una tabla ,[object Object]
PHP Data Objects ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PHP Data Objects (2) ,[object Object],[object Object],[object Object],[object Object],$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) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PHP Data Objects (4) ,[object Object],[object Object],[object Object],[object Object],$sql = 'SELECT * FROM animales'; foreach ($pdo->query($sql) as $row) { echo '('.$row['identificador'].','.$row['denominacion'].')'.””; }
Importar archivo ,[object Object],[object Object]
Prepared Statements ,[object Object],[object Object],[object Object]
Prepared Statements (2) ,[object Object],[object Object],$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 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ejercicio favoritos (1) ,[object Object]
Ejercicio favoritos (2) ,[object Object]
Ejercicio favoritos (3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ejercicio favoritos (4) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ejemplo práctico ,[object Object],[object Object],[object Object],[object Object],[object Object]
Ejemplo práctico (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ejemplo práctico (3) ,[object Object],<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>
Ejemplo práctico (4) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ejemplo práctico (5) ,[object Object],[object Object],[object Object],[object Object],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; }
Ejemplo práctico (6) ,[object Object],[object Object],$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);
Ejemplo práctico (7) ,[object Object],[object Object],[object Object],[object Object],[object Object]
Ejemplo práctico (8) ,[object Object],[object Object],[object Object],[object Object],[object Object],$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); }
Índice ,[object Object],[object Object],[object Object],[object Object],[object Object]
Otros ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
SimpleXML ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
SimpleXML (2) ,[object Object],<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>
SimpleXML (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
SimpleXML (3) ,[object Object],[object Object],$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>'; }
SimpleXML (4) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
SimpleXML (5) ,[object Object],[object Object],[object Object],$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 código fuente //echo htmlentities($xml->asXML()); // Para verlo bien desde el navegador
SimpleXML (6) ,[object Object],[object Object],$nombre_archivo = 'animales.xml'; $contenido = $xml->asXML(); if (is_writable($nombre_archivo)) { if (!$gestor = fopen($nombre_archivo, 'w')) { echo &quot;No se puede abrir el archivo ($nombre_archivo)&quot;; exit; } if (fwrite($gestor, $contenido) === FALSE) { echo &quot;No se puede escribir al archivo ($nombre_archivo)&quot;; exit; } echo &quot;Éxito, se escribió ($contenido) al archivo ($nombre_archivo)&quot;; fclose($gestor); } else echo &quot;No se puede escribir sobre el archivo $nombre_archivo&quot;;
XTemplate ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
XTemplate (2) ,[object Object],[object Object],[object Object],[object Object]
XTemplate (3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
XTemplate (4) ,[object Object],<!-- BEGIN: main --> <html><head><title>Listado usuarios</title></head><body> <h1>{TITULO}</h1> <!-- BEGIN: table --> <table><thead> <tr><th>Nombre</th><th colspan=”2”>Apellidos</th></tr></thead> <tbody> <!-- BEGIN: row --> <tr> (...) <td width=&quot;30%&quot;>{PERSONA.APELLIDO1}</td> <td width=&quot;30%&quot;>{PERSONA.APELLIDO2}</td></tr> <!-- END: row --> <!-- BEGIN: norow --> <tr> <td colspan=&quot;3&quot; align=&quot;center&quot;>Nada.</td></tr> <!-- END: norow --> </tbody> </table> <!-- END: table --> </body></html> <!-- END: main -->
XTemplate (5) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
XTemplate (6) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
XTemplate (7) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
XTemplate (8) ,[object Object],// definición 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=&quot;checked&quot;':''); $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 línea de comandos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PHP en línea de comandos (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PEAR ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PEAR (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PEAR (3) ,[object Object],[object Object],[object Object],[object Object],<?php require_once 'Mail.php'; $params['host'] = 'mail.deusto.es'; // p.e. $params['auth'] = TRUE;  $params['debug'] = TRUE; $params['username'] = '9aigomez@rigel.deusto.es'; $params['password'] = 'passwd'; $obj = &Mail::factory('smtp',$params); $recipients = 'tulvur@gmail.com'; $headers['From']  = '9aigomez@rigel.deusto.es'; $headers['To']  = 'tulvur@gmail.com'; $headers['Subject'] = 'Asunto interesante'; $body = 'Mensaje más interesante aún (si cabe).'; $obj->send($recipients, $headers, $body); ?>
PEAR (4) ,[object Object],DEBUG: Recv: 220 smtp-in2.deusto.es ESMTP DEBUG: Send: EHLO localhost (...) DEBUG: Send: MAIL FROM:<9aigomez@rigel.deusto.es> (...) DEBUG: Send: DATA DEBUG: Recv: 354 End data with <CR><LF>.<CR><LF> DEBUG: Send: From: 9aigomez@rigel.deusto.es To: tulvur@gmail.com Subject: Asunto interesante Mensaje más interesante aún (si cabe). . DEBUG: Recv: 250 2.0.0 Ok: queued as 2F2F346A7E7 DEBUG: Send: QUIT DEBUG: Recv: 221 2.0.0 Bye
¿Por dónde continuar? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
¿Por dónde continuar? (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
¿Por dónde continuar? (3) ,[object Object],[object Object],[object Object],[object Object]
Agur ;-) ,[object Object],[object Object],[object Object]

Contenu connexe

Tendances (19)

Curso php y_mysql
Curso php y_mysqlCurso php y_mysql
Curso php y_mysql
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
desarrolo de sitios web php y mysql
desarrolo de sitios web php y mysqldesarrolo de sitios web php y mysql
desarrolo de sitios web php y mysql
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
Php!
Php!Php!
Php!
 
PHP MYSQL - FIEI-UNFV Clase 01
PHP MYSQL - FIEI-UNFV Clase 01PHP MYSQL - FIEI-UNFV Clase 01
PHP MYSQL - FIEI-UNFV Clase 01
 
Curso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVCurso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPV
 
Manual php completo by_ desarrolloweb
Manual php completo by_ desarrollowebManual php completo by_ desarrolloweb
Manual php completo by_ desarrolloweb
 
Exposicion de php
Exposicion de phpExposicion de php
Exposicion de php
 
Iniciación PHP 5. Introducción
Iniciación PHP 5. IntroducciónIniciación PHP 5. Introducción
Iniciación PHP 5. Introducción
 
Mini manual php
Mini manual phpMini manual php
Mini manual php
 
Introducción a PHP
Introducción a PHPIntroducción a PHP
Introducción a PHP
 
Php Con Postgres
Php Con PostgresPhp Con Postgres
Php Con Postgres
 
Php curso03
Php   curso03Php   curso03
Php curso03
 
7 razones para usar funciones en php
7 razones para usar funciones en php7 razones para usar funciones en php
7 razones para usar funciones en php
 
Curso Php
Curso PhpCurso Php
Curso Php
 
Iniciacion a PHP (I)
Iniciacion a PHP (I)Iniciacion a PHP (I)
Iniciacion a PHP (I)
 
Php
PhpPhp
Php
 
54 Php. La Opcion Include
54 Php. La Opcion Include54 Php. La Opcion Include
54 Php. La Opcion Include
 

Similaire à Introducción a PHP5 (20)

QUE ES PHP
QUE ES PHPQUE ES PHP
QUE ES PHP
 
Php
PhpPhp
Php
 
Tutorial php basico
Tutorial php basicoTutorial php basico
Tutorial php basico
 
Manual php
Manual phpManual php
Manual php
 
PHP IUTE
PHP IUTEPHP IUTE
PHP IUTE
 
Php
PhpPhp
Php
 
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfPHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
 
Curso introduccionphp sql
Curso introduccionphp sqlCurso introduccionphp sql
Curso introduccionphp sql
 
Guiacursophp sql
Guiacursophp sqlGuiacursophp sql
Guiacursophp sql
 
Manual de php
Manual de phpManual de php
Manual de php
 
Manual de php
Manual de phpManual de php
Manual de php
 
33 php
33 php33 php
33 php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Apuntes php
Apuntes phpApuntes php
Apuntes php
 
Programacion en php atavez de ejemplos
Programacion en php atavez de ejemplosProgramacion en php atavez de ejemplos
Programacion en php atavez de ejemplos
 
Apuntes php
Apuntes phpApuntes php
Apuntes php
 
Tema4.pdf
Tema4.pdfTema4.pdf
Tema4.pdf
 
Desarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyDesarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfony
 
Programacion - Php
Programacion - PhpProgramacion - Php
Programacion - Php
 

Plus de Open University, KMi

Plus de Open University, KMi (16)

Coordination of Resource-Constrained Devices through a Distributed Semantic S...
Coordination of Resource-Constrained Devices through a Distributed Semantic S...Coordination of Resource-Constrained Devices through a Distributed Semantic S...
Coordination of Resource-Constrained Devices through a Distributed Semantic S...
 
Redis
RedisRedis
Redis
 
Assessing data dissemination strategies
Assessing data dissemination strategiesAssessing data dissemination strategies
Assessing data dissemination strategies
 
RESTful Triple Spaces of Things
RESTful Triple Spaces of ThingsRESTful Triple Spaces of Things
RESTful Triple Spaces of Things
 
Presentación de Otsopack en Tecnalia
Presentación de Otsopack en TecnaliaPresentación de Otsopack en Tecnalia
Presentación de Otsopack en Tecnalia
 
Zuhaitzak
ZuhaitzakZuhaitzak
Zuhaitzak
 
Errekurtsibitatea
ErrekurtsibitateaErrekurtsibitatea
Errekurtsibitatea
 
Egitura linealak
Egitura linealakEgitura linealak
Egitura linealak
 
Konposizioa, herentzia eta polimorfismoa
Konposizioa, herentzia eta  polimorfismoa Konposizioa, herentzia eta  polimorfismoa
Konposizioa, herentzia eta polimorfismoa
 
Fitxategiak
FitxategiakFitxategiak
Fitxategiak
 
2D arraya eta objetu arrayak
2D arraya eta objetu arrayak2D arraya eta objetu arrayak
2D arraya eta objetu arrayak
 
"On the complementarity of Triple Spaces and the Web of Things" poster @ WoT2011
"On the complementarity of Triple Spaces and the Web of Things" poster @ WoT2011"On the complementarity of Triple Spaces and the Web of Things" poster @ WoT2011
"On the complementarity of Triple Spaces and the Web of Things" poster @ WoT2011
 
Triple Space adaptation for IoT
Triple Space adaptation for IoTTriple Space adaptation for IoT
Triple Space adaptation for IoT
 
A Triple Space-Based Semantic Distributed Middleware for Internet of Things
A Triple Space-Based Semantic Distributed Middleware for Internet of ThingsA Triple Space-Based Semantic Distributed Middleware for Internet of Things
A Triple Space-Based Semantic Distributed Middleware for Internet of Things
 
Presentacion Defensa
Presentacion DefensaPresentacion Defensa
Presentacion Defensa
 
Introducción a PHP5
Introducción a PHP5Introducción a PHP5
Introducción a PHP5
 

Dernier

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 

Dernier (20)

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 

Introducción a PHP5

  • 1. 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
  • 2. 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
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78. 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>
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.