You are on page 1of 45

Conceptos básicos

El lenguaje PHP es un lenguaje de programación de estilo clásico, con esto quiero decir que es un lenguaje de programación con variables, sentencias condicionales, bucles, funciones.... No es un lenguaje de marcas como podría ser HTML, XML o WML. Está mas cercano a JavaScript o a C, para aquellos que conocen estos lenguajes. Pero a diferencia de Java o JavaScript que se ejecutan en el navegador, PHP se ejecuta en el servidor, por eso nos permite acceder a los recursos que tenga el servidor como por ejemplo podría ser una base de datos. El programa PHP es ejecutado en el servidor y el resultado enviado al navegador. El resultado es normalmente una página HTML pero igualmente podría ser una pagina WML.

Al ser PHP un lenguaje que se ejecuta en el servidor no es necesario que su navegador lo soporte, es independiente del navegador, pero sin embargo para que sus páginas PHP funcionen, el servidor donde están alojadas debe soportar PHP.

Nuestro primer PHP
La ventaja que tiene PHP sobre otros lenguajes de programación que se ejecutan en el servidor (como podrían ser los script CGI Perl), es que nos permite intercalar las sentencias PHP en las paginas HTML, es un concepto algo complicado de entender si no se ha visto nunca como funciona unas paginas PHP o ASP. Vamos a ver un ejemplo sencillo para comprenderlo mejor. En azul está el código

HTML y en rojo el código PHP. Seguiremos este criterio durante todo el manual.
<!-- Manual de PHP de WebEstilo.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> Parte de HTML normal. <BR><BR> <?php echo "Parte de PHP<br>"; for($i=0;$i<10;$i++) { echo "Linea ".$i."<br>"; } ?>

</body> </html>

El código PHP ejecutado tiene dos partes: la primera imprime "Parte de PHP" y la segunda es un bucle que se ejecuta 10 veces de 0 a 9, por cada vez que se ejecuta se escribe una línea, la variable $i contiene el número de línea que se está escribiendo. No importa si no entiende muy bien el programa este ejemplo solo es para ilustrar como se intercala el código HTML y el código PHP.

Variables
Una variable es un contenedor de información, en el que podemos meter números enteros, números decimales, carácteres... el contenido de las variables se puede leer y se puede cambiar durante la ejecución de una página PHP. En PHP todas las variables comienzan con el símbolo del dólar $ y no es necesario definir una variable antes de usarla. Tampoco tienen tipos, es decir que una misma variable puede contener un número y luego puede contener carácteres.
<!-- Manual de PHP de WebEstilo.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php $a = 1; $b = 3.34; $c = "Hola Mundo"; echo $a,"<br>",$b,"<br>",$c; ?> </body> </html>

Ejecutar ejemplo Ver código fuente En este ejemplo hemos definido tres variables, $a, $b y $c y con la instrucción echo hemos impreso el valor que contenían, insertando un salto de línea entre ellas.

Existen 2 tipos de variables, las variables locales que solo pueden ser usadas dentro de funciones y las variables globales que tienen su ámbito de uso fuera de las funciones, podemos acceder a una variable global desde una función con la instrucción global

nombre_variable;

Aritméticos
Los operadores de PHP son muy parecidos a los de C y JavaScript, si usted conoce estos lenguajes le resultaran familiares y fáciles de reconocer. Estos son los operadores que se pueden aplicar a las variables y constantes numéricas. Operador + Nombre Suma Ejemplo Descripción Suma dos números

5 + 6

* / % ++ --

Resta Multiplicación División Módulo Suma 1 Resta 1

7 - 9 6 * 3 4 / 8 7 % 2 $a++ $a--

Resta dos números Multiplica dos números Divide dos números Devuelve el resto de dividir ambos números, en este ejemplo el resultado es 1 Suma 1 al contenido de una variable. Resta 1 al contenido de una variable.

<!-- Manual de PHP de WebEstilo.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php $a = 8; $b = 3; echo $a + $b,"<br>"; echo $a - $b,"<br>"; echo $a * $b,"<br>"; echo $a / $b,"<br>"; $a++; echo $a,"<br>"; $b--; echo $b,"<br>"; ?> </body> </html>

Comparación
Los operadores de comparación son usados para comparar valores y así poder tomar decisiones. Operador + * / % ++ -Nombre Suma Resta Multiplicación División Módulo Suma 1 Resta 1 Ejemplo Descripción Suma dos números Resta dos números Multiplica dos números Divide dos números Devuelve el resto de dividir ambos números, en este ejemplo el resultado es 1 Suma 1 al contenido de una variable. Resta 1 al contenido de una variable.

5 + 6 7 - 9 6 * 3 4 / 8 7 % 2 $a++ $a--

<!-- Manual de PHP de WebEstilo.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php

$a = 8; $b = 3; echo $a + $b,"<br>"; echo $a - $b,"<br>"; echo $a * $b,"<br>"; echo $a / $b,"<br>"; $a++; echo $a,"<br>"; $b--; echo $b,"<br>"; ?> </body> </html>

Lógicos
Los operadores lógicos son usados para evaluar varias comparaciones, combinando los posibles valores de estas. Operador && and || or ! Nombre Y Y O O No Ejemplo Devuelve cierto cuando: Devuelve verdadero cuando ambas condiciones son verdaderas. son verdaderas.

(7>2) && (2<4)

(7>2) and (2<4) Devuelve verdadero cuando ambas condiciones (7>2) || (2<4) (7>2) or (2<4) ! (7>2)
Devuelve verdadero cuando al menos una de las dos es verdadera. Devuelve verdadero cuando al menos una de las dos es verdadera. Niega el valor de la expresión.

<!-- Manual de PHP de WebEstilo.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php $a = 8; $b = 3; $c = 3; echo ($a == $b) && ($c > $b),"<br>"; echo ($a == $b) || ($b == $c),"<br>"; echo !($b <= $c),"<br>"; ?> </body> </html>

Condicionales
Las sentencias condicionales nos permiten ejecutar o no unas ciertas instrucciones dependiendo del resultado de evaluar una condición. Las más frecuentes son la instrucción if y la instrucción switch. Sentencia if ... else
<?php if (condición) { Sentencias a ejecutar cuando la

switch($posicion) { case "arriba": // Bloque 1 echo "La variable contiene". case <!-.. break. } ?> </body> </html> Ejecutar ejemplo Ver código fuente En este ejemplo la condición no es verdadera por lo que se ejecuta la parte de código correspondiente al else. } ?> La sentencia if ejecuta una serie de instrucciones u otras dependiendo de la condición que le pongamos. Probablemente sea la instrucción más importante en cualquier lenguaje de programación. } else { Sentecias a ejecutar cuando la condición es falsa. echo " el valor arriba".. } ?> </body> </html> Ejecutar ejemplo Ver código fuente . case "abajo": // Bloque 2 echo "La variable contiene". } else { echo "a no es menor que b".condición es cierta. <!-.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php $a = 8. if ($a < $b) { echo "a es menor que b". Sentencia switch . default: // Bloque 3 echo "La variable contiene otro valor".Manual de PHP de WebEstilo. break. echo " el valor abajo". echo " distinto de arriba y abajo".Manual de PHP de --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php $posicion = "arriba". $b = 3.

es decir repetir la ejecución de un conjunto de instrucciones mientras se cumpla una condición."<br>".com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> Inicio<BR> <?php $i=0. Sentencia while <?php while (condición) { intrucciones a ejecutar.Manual de PHP de WebEstilo. while ($i<10) { echo "El valor de i es ". condición . <!-. el valor de $i al comienzo es 0. dependiendo del valor de la variable $posicion se ejecuta el bloque 1 cuando el valor es "arriba". $i.Con la sentencia switch podemos ejecutar unas u otras instrucciones dependiendo del valor de una variable. en el ejemplo anterior.Manual de PHP de WebEstilo. ejecutar en iteración) { intrucciones a ejecutar. } ?> Final<BR> </body> </html> Ejecutar ejemplo Ver código fuente En el siguiente ejemplo.com --> <html> <head> <title>Ejemplo de PHP</title> </head> . el bloque 2 cuando el valor es "abajo" y el bloque 3 si no es ninguno de los valores anteriores. } ?> <!-. } ?> Mientras la condición sea cierta se reiterará la ejecución de las instrucciones que están dentro del while. se va sumando 1 al valor de $i de manera que cuando $i vale 10 ya no se cumple la condición y se termina la ejecución del bucle. durante la ejecución del bucle. Bucles Los bucles nos permiten iterar conjuntos de instrucciones. $i++. Sentencia for <?php for (inicial .

} ?> Final<BR> </body> </html> Ejecutar ejemplo Ver código fuente La instrucción for es la instrucción de bucles más completa.'e'. En esta página veremos la instrucción printf que nos da mucha más potencia. Sentencia printf . /* Recorro el array utilizando foreach */ foreach ($las_vocales as $elem) { print $elem.com) Recorrer un array utilizando foreach en vez de un blucle for: <? /* Creo un array */ $las_vocales = array ('a'. /* Es equivalente a realizar */ for ($i=0. $i<10 . El primer parámetro del for. En una sola instrucción nos permite controlar todo el funcionamiento del bucle.<body> Inicio<BR> <?php for($i=0 ."<br>". } print '<br>'. } ?> Añadir una aportación 08/10/2003 Salida Hasta ahora hemos usado la instrucción echo para realizar salida a pantalla.'o'.'u').'<br>'. Condicionales Salida Aportaciones de usuarios Vicent Gozalbes Sanchis (vigosan@msn. $i.'<br>'. esta instrucción es bastante limitada ya que no nos permite formatear la salida. $i++) { echo "El valor de i es ".$i++) { print $las_vocales[$i].'i'.$i<count($las_vocales). es ejecutado la primera vez y sirve para inicializar la variable del bucle. el segundo parámetro indica la condición que se debe cumplir para que el bucle siga ejecutándose y el tercer parámetro es una instrucción que se ejecuta al final de cada iteración y sirve para modificar el valor de la variable de iteración.

Número con decimales.2f"..2.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php $var="texto". nos permite intercalar texto entre ellos.$i++) { . for ($i=0.<?php printf(cadena formato. variable1.2). <!-.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php printf("El numero dos con diferentes formatos: %d %f %. estos son los más importantes. Aunque existen otros tipos.$var.Manual de PHP de WebEstilo. printf("Puede fácimente intercalar <b>%s</b> con números <b>%d</b> <br>". printf("<TABLE BORDER=1 CELLPADDING=20>"). Número sin decimales. Carácter ASCII. La principal ventaja es que además de poder formatear los valores de salida.2. <!-. variable2. ?> </body> </html> Ejecutar ejemplo Ver código fuente La cadena de formato puede incluir una seria de carácteres especiales que indican como formatear las variables que se incluyen en la instrucción.$num). $num=3.).. Elemento %s %d %f %c Tipo de variable Cadena de carácteres. ?> La cadena de formateo indica cómo se han de representar las valores que posteriormente le indicaremos.$i<10.Manual de PHP de WebEstilo.

. variable1.$i). ?> </body> </html> Manejo de cadenas Dado el uso del lenguaje PHP el tratamiento de cadenas es muy importante.cadena). texto). nos permite intercalar texto entre ellos. a continuación explicaremos las más usadas. variable2. cadena2). Nos devuelve el número de carácteres de una cadena. La cadena de formateo indica cómo se han de representar las valores que posteriormente le indicaremos.2. 7. <!-. Ejecutar ejemplo Ver código fuente 14. cadena2. Reemplaza la cadena1 por la cadena2 en el texto. Formatea una cadena de texto al igual que printf pero el resultado es devuelto como una cadena. La cadena de formato puede incluir una seria de carácteres especiales que indican como formatear las variables que se incluyen en la instrucción.. existen bastantes funciones para el manejo de cadenas. La principal ventaja es que además de poder formatear los valores de salida. str_replace(cadena1..d</td></tr>".2.). 13. ?> <?php printf(cadena formato. longitud). . Elemento %s Tipo de variable Cadena de carácteres. split(separador. 1. } printf("</table>"). Devuelve una subcadena de otra. var1.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php printf("El numero dos con diferentes formatos: %d %f %. ?> </body> </html> 12. 10. strpos(cadena1.Manual de PHP de WebEstilo. 11. 6. 5. 3. empezando por inicio y de longitud longitud. Elimina los saltos de línea y los espacios finales de una cadena. 4.2f". 8. sprintf(cadena de formato. inicio. Busca la cadena2 dentro de cadena1 indicándonos la posición en la que se encuentra.. 2. var2.printf("<tr><td>%10. substr(cadena. strlen(cadena). Divide una cadena en varias usando un carácter separador.2). chop(cadena). 9.).

d</td></tr>". 4.$i). 7. 2. Divide una cadena en varias usando un carácter separador. Nos devuelve el número de carácteres de una cadena. printf("Puede fácimente intercalar <b>%s</b> con números <b>%d</b> <br>". 3. printf("<TABLE BORDER=1 CELLPADDING=20>"). existen bastantes funciones para el manejo de cadenas. Formatea una cadena de texto al igual que printf pero el resultado es devuelto como una cadena. str_replace(cadena1. Reemplaza la cadena1 por la cadena2 en el texto.$i<10.). texto). longitud). estos son los más importantes.cadena). a continuación explicaremos las más usadas. Número con decimales. Aunque existen otros tipos. 15. 16. 1. for ($i=0. var2. cadena2.. 5. <!-.$var. ?> </body> </html> Manejo de cadenas Dado el uso del lenguaje PHP el tratamiento de cadenas es muy importante. sprintf(cadena de formato. Carácter ASCII. empezando por inicio y de longitud longitud. Devuelve una subcadena de otra. Busca la cadena2 dentro de cadena1 indicándonos la posición en la que se encuentra. substr(cadena. <!-.%d %f %c Número sin decimales.$i++) { printf("<tr><td>%10. } printf("</table>"). inicio.Manual de PHP de WebEstilo.. strpos(cadena1.$num). split(separador. 6. var1. $num=3.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php $var="texto". cadena2). strlen(cadena).Manual de PHP de WebEstilo.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php . Elimina los saltos de línea y los espacios finales de una cadena. chop(cadena).

Manual de PHP de WebEstilo. $b) { $media=($a+$b)/2.) { instrucción1.3)."rojo". como verde es la hierba. parametro2.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php function media_aritmetica($a. $palabras=split(" "."Esto es una prueba"). ahorrándonos la necesidad de escribirlas de nuevo. for($i=0. .."<br>". echo substr("Devuelve una subcadena de otra"."<br><br>". Esto produce la terminación de la función retornando un valor.8*5).9.$i++) echo $palabras[$i]. <!-. echo $resultado.."<br>". instrucción4.$palabras[$i]. } ?> Opcionalmente podemos pasarle parámetros a las funciones que se trataran como variable locales y así mismo podemos devolver un resultado con la instrucción return valor. echo str_replace("verde"."). <?php function Nombre(parametro1. instrucción3. echo strpos("Busca la palabra dentro de la frase". return valor_de_retorno."<br>". if (chop("Cadena \n\n ") == "Cadena") echo "Iguales<br><br>". "palabra"). ?> </body> </html> Funciones El uso de funciones nos da la capacidad de agrupar varias instrucciones bajo un solo nombre y poder llamarlas a estas varias veces desde diferentes sitios. $resultado=sprintf("8x5 = %d <br>"."<br><br>". instrucción2."Un pez de color verde."<br>".echo strlen("12345").

"<br>". $total = $monto + $interes . $descuento = descuento_por_volumen($monto). También. $interes = interes_a_plazo($monto."<br>". las funciones ayudan a mantener un orden que se agradece mucho cuando intentas detectar algún error.524543).$descuento ?> Aquí no importa qué método se usa para calcular el interés.net) Añadir una aportación 29/04/2004 Las funciones ayudan a automatizar tareas y contribuyen a que tu código sea más entendible para ti y para otros que deban trabajar con él. si se ingresan datos extraños (letras en vez de números) éstos se verifican dentro de la función. $meses = 24. Por ejemplo. la tasa de interés puede ir dentro de la función. $meses). ?> </body> </html> Ejecutar ejemplo Ver código fuente Manejo de cadenas Librería Aportaciones de usuarios Juan Pablo Gil (webmaster@huinca. los tramos de descuento se evalúan dentro de la función. echo media_aritmetica(3242. Librería . simplemente se aplica. En fin. Esto mismo sugiere que los nombres de las funciones deben ser apropiados y descriptivos. También ayudan al trabajo en equipo.6). el siguiente código es bastante entendible por cualquiera: <?php $monto = 100500. } echo media_aritmetica(4.return $media.

.phtml") ?> <?php CabeceraPagina().</FONT><BR> <hr> <? } function PiePagina() { ?> <hr> <FONT SIZE="-1">Este es el pie de página.El uso de librerías es tremendamente útil.com --> <?php function CabeceraPagina() { ?> <FONT SIZE="+1">Esta cabecera estará en todas sus páginas. ?> </body> </html> Ejecutar ejemplo Ver código fuente <!-.Manual de PHP de WebEstilo. <!-.Manual de PHP de WebEstilo..</FONT><BR> Autor: Joaquin Gracia <? } ?> Ver código fuente Ahora vamos a crear 2 páginas que usan la librería definida anteriormente para conseguir que las dos paginas tengan la misma cabecera y pie de pagina.<BR><BR> fin<BR><BR> <?php PiePagina(). de manera que luego podemos incluir esta librería en distintas páginas y disponer de esas funciones fácilmente. La instrucción para incluir una librería en nuestra página es include("nombre de librería") <!-.com --> <html> . nos permiten agrupar varias funciones y variables en un mismo fichero.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php include("libreria01.Manual de PHP de WebEstilo. ?> Página 1 <BR><BR><BR><BR><BR> Contenido blalbl blalb alb<BR><BR> más cosas.

<!-.Manual de PHP de WebEstilo. Pero por razones de seguridad a partir de entonces para acceder a las variables del formulario hay que usar el array de parámetros $_POST[] o $_GET[] dependiendo del método usado para enviar los parámetros.0 PHP creaba una variable por cada elemento del FORM. En versiones anteriores a 4. esta variable creada tenía el mismo nombre que el cuadro de texto de la página anterior y el valor que habíamos introducido. ?> Esta es otra página<BR><BR> completamente distinta<BR><BR> pero comparte el pie y la cabecera con la otra.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de procesado de formularios</H1> .Manual de PHP de WebEstilo.phtml" METHOD="GET"> <INPUT TYPE="text" NAME="nombre"><BR> <INPUT TYPE="submit" VALUE="Enviar"> </FORM> </body> </html> Ejecutar ejemplo Ver código fuente Al pulsar el botón Enviar el contenido de cuadro de texto es enviado a la página que indicamos en el atributo ACTION de la etiqueta FORM.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de procesado de formularios</H1> Introduzca su nombre: <FORM ACTION="procesa. ?> </body> </html> Envío y recepción de datos El lenguaje PHP nos proporciona una manera sencilla de manejar formularios. así como en método por el que se le pasará la información a la página.phtml") ?> <?php CabeceraPagina().<BR><BR> <?php PiePagina(). En este ejemplo se ha creado una entrada en el array $_GET[] con el índice 'nombre' y con el valor que haya introducido el navegante. permitiéndonos de esta manera procesar la información que el usuario ha introducido.2. <!-. Al diseñar un formulario debemos indicar la página PHP que procesará el formulario.<head> <title>Ejemplo de PHP</title> </head> <body> <?php include("libreria01.

La diferencia entre estos dos métodos radica en la forma de enviar los datos a la página. mientras que el método GET envía los datos usando la URL.El nombre que ha introducido es: <?php echo $_GET['nombre'] ?> <br> </body> </html> Method GET y POST En la página anterior hemos comentado que los datos de un formulario se envía mediante el método indicado en el atributo METHOD de la etiqueta FORM. <!-.phtml .phtml" METHOD="POST"> Introduzca su nombre:<INPUT TYPE="text" NAME="nombre"><BR> Introduzca sus apellidos:<INPUT TYPE="text" NAME="apellidos"><BR> <INPUT TYPE="submit" VALUE="Enviar"> </FORM> </body> </html> Ejecutar ejemplo Ver código fuente procesa2.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de procesado de formularios</H1> <FORM ACTION="procesa2.Manual de PHP de WebEstilo. el método POST los envía por la entrada estándar STDIO.phtml" METHOD="GET"> Introduzca su nombre:<INPUT TYPE="text" NAME="nombre"><BR> Introduzca sus apellidos:<INPUT TYPE="text" NAME="apellidos"><BR> <INPUT TYPE="submit" VALUE="Enviar"> </FORM> </body> </html> Ejecutar ejemplo Ver código fuente <!-. los dos métodos posibles son GET y POST.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de procesado de formularios</H1> <FORM ACTION="procesa2.Manual de PHP de WebEstilo.

solo que con el método GET podemos ver los parámetros pasados ya que están codificados en la URL." ".Manual de PHP de WebEstilo. Envio de emails PHP nos ofrece la posibilidad de enviar emails de una manera sencilla y fácil.$_GET['apellidos'] ?><br> El nombre que ha introducido por POST es: <?php echo $_POST['nombre']. texto del mensaje. ?> En el parámetro destinatario pondremos la dirección de email a donde se enviará el mensaje. Content-type:.<!-." ". From:. tema. Existe una sintaxis extendida de la instrucción mail( información adicional a la cabecera del mensaje. que nos permiten tener un mayor control sobre el mensaje. para ello el lenguaje nos proporciona la instrucción mail( ) <?php mail(destinatario. <!-. texto del mensaje). información adicional de cabecera). ) que nos permite añadir <?php mail(destinatario.Manual de PHP de WebEstilo.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de procesado de formularios</H1> El nombre que ha introducido por GET es: <?php echo $_GET['nombre'].$_POST['apellidos'] ?> <br> </body> </html> Ver código fuente El resultado final es el mismo. en el parámetro tema el tema o subject del mensaje y el parámetro texto del mensaje el cuerpo del mensaje en formato texto plano... ?> En la información de cabecera podremos incluir parámetros adicionales al mensaje como Reply-To:. tema.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de envio de email</H1> Introduzca su direccion de email: .

Manual de PHP de WebEstilo. if ($direccion!=""){ if ($tipo=="plano"){ // Envio en formato texto plano mail($direccion." en formato <b>".$tipo. } ?> <br> </FORM> </body> </html> Crear la base de datos Para la realización de este curso sobre PHP con acceso a base de datos hemos elegido la base de datos MySQL por ser gratuita y por ser también la mas empleada en entornos UNIX.<FORM ACTION="email. } echo "Se ha enviado un email a la direccion: ".webestilo."FROM: Pruebas <webmaster@hotmail.</body></html>". "FROM: Pruebas <webmaster@hotmail."Ejemplo de envio de email".phtml <!-."<html><head><title>WebEstilo."</b>.phtml" METHOD="GET"> <INPUT TYPE="text" NAME="direccion"><BR><BR> Formato: <BR> <INPUT TYPE="radio" NAME="tipo" VALUE="plano" CHECKED> Texto plano<BR> <INPUT TYPE="radio" NAME="tipo" VALUE="html"> HTML<BR><BR> <INPUT TYPE="submit" VALUE="Enviar"> </FORM> </body> </html> Ver código fuente email. Manual de PHP</title></head><body>Ejemplo de envio de email de HTML<br><br>WebEstilo."Ejemplo de envio de email de texto plano\n\nWebEstilo.\n".\nhttp://www.com>\n"). } else { // Envio en formato HTML mail($direccion. $tipo=$_GET['tipo'].<br>http://www.com>\n").com/<br> <u>Manuales</u> para <b>desarrolladores</b> web. para lo cual el servidor donde tenemos alojadas las páginas nos tiene que proporcionar herramientas para crearla o acceso al Telnet para que la creemos por nosotros mismos."Ejemplo de envio de email".webestilo. El comando para crear una base de datos MySQL es el siguiente: .com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de envio de email</H1> <? $direccion=$_GET['direccion']."."Content-type: text/html\n".$direccion.com/\n Manuales para desarrolladores web.

com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <?php function Conectarse() { if (!($link=mysql_connect("localhost". } if (!mysql_select_db("base_datos". Apellidos varchar(100)."Password"))) { echo "Error conectando a la base de datos.mysqladmin -u root create base_datos Con este comando conseguimos crear la una base de datos en el servidor de bases de datos de nuestro servidor. exit().$link)) { echo "Error seleccionando la base de datos.". Para ello PHP nos proporciona una serie de instrucciones para acceder a bases de datos MySQL. el siguiente paso es conectarnos a la misma desde una página PHP. la descripción de las tablas contienen la estructura de la información que almacenaremos en ellas.sql CREATE TABLE prueba ( ID_Prueba int(11) DEFAULT '0' NOT NULL auto_increment."usuario".". otro campo con el nombre de una persona y por último un campo con el apellido de la persona.sql prueba. UNIQUE ID_Prueba (ID_Prueba) ). Para lo cual usaremos en lenguaje de consultas SQL común para todas las bases de datos relacionales. exit(). Nombre varchar(100). En este ejemplo creamos una tabla llamada prueba con 3 campos: un campo identificador. <!-. Conexión a la base de datos Una vez que tenemos creada la base de datos en nuestro servidor. PRIMARY KEY (ID_Prueba). Para crear la tabla puede usar la herramienta de administración de MySQL de su servidor web o puede escribir un fichero de texto con el contenido de la sentencia SQL equivalente y luego decirle al motor de base de datos que la ejecute con la siguiente instrucción: mysql -u root base_datos <prueba. } . Una vez conseguido esto debemos crear las tablas en la base de datos. que nos servirá para identificar unívocamente una fila con el valor de dicho campo.Manual de PHP de WebEstilo.

mysql_close($link).<br>". Finalmente."Usuario". #cierra la base de datos . echo "Conexión con la base de datos conseguida. una vez que hemos terminado de usar el vínculo con la base de datos.com) Añadir una aportación 10/03/2004 <html> <head> <title>Title here!</title> </head> <body> <?php #Esta es una forma mucho mas facil de #conectarse a la base de datos en MySql #coneccion con el MDB en MySql $link = mysql_connect("NombreHost"."contraseña") or die ("no se ha podido conectar"). //cierra la conexion ?> </body> </html> Al ejecutar la instrucción mysql_connect creamos un vínculo entre la base de datos y la pagina PHP. este vínculo será usado posteriormente en las consultas que hagamos a la base de datos. #Seleccion de la base de datos a utilizar mysql_select_db("dbprueba") or die("Error al tratar de selecccionar esta base").return $link. Crear la base de datos Consultas a la base de datos Aportaciones de usuarios graziany gomez diaz (graziany@hotmail. } $link=Conectarse(). lo liberaremos con la instrucción mysql_close para que la conexión no quede ocupada.

exit(). conex. ya podemos realizar consultas a las tablas de la base de datos.Manual de PHP de WebEstilo. } $link=Conectarse().<br>". } if (!mysql_select_db("base_datos".$link)) { echo "Error seleccionando la base de datos.com --> <html> <head> itle>Ejemplo de PHP</title> </head> <body> <?php function Conectarse() { if (!($link=mysql_connect("localhost". ."."usuario".phtml <!-. Para facilitar la programación hemos separado la función de conexión en una librería a parte."Password"))) { echo "Error conectando a la base de datos.". } return $link. //cierra la conexion ?> </body> </html> Ver código fuente Ejecutar ejemplo Al ejecutar la instrucción mysql_connect creamos un vínculo entre la base de datos y la pagina PHP.mysql_close($link). echo "Conexión con la base de datos conseguida. de tal manera que la incluiremos en todas las páginas que accedan a la base de datos. mysql_close($link). exit(). ?> </body> </html> Consultas a la base de datos Una vez que nos hemos conectado con el servidor de bases de datos. este vínculo será usado posteriormente en las consultas que hagamos a la base de datos.

una vez que hemos terminado de usar el vínculo con la base de datos. exit(). lo liberaremos con la instrucción mysql_close para que la conexión no quede ocupada. $row["Nombre"].Manual de PHP de WebEstilo. } mysql_free_result($result)."usuario".phtml <!-.%s</td><td>&nbsp. ya podemos realizar consultas a las tablas de la base de datos."Password"))) { echo "Error conectando a la base de datos.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1> <?php include("conex. de tal manera que la incluiremos en todas las páginas que accedan a la base de datos. $result=mysql_query("select * from prueba". } ?> Ver código fuente <!-.com --> <?php function Conectarse() { if (!($link=mysql_connect("localhost". ?> </table> </body> </html> . Consultas a la base de datos Una vez que nos hemos conectado con el servidor de bases de datos.</TD></TR> <?php while($row = mysql_fetch_array($result)) { printf("<tr><td>&nbsp.$link)) { echo "Error seleccionando la base de datos. ?> <TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1> <TR><TD>&nbsp.".Apellidos&nbsp.".Manual de PHP de WebEstilo.Nombre</TD><TD>&nbsp. } if (!mysql_select_db("base_datos".$link).phtml").Finalmente.</td></tr>". } return $link.%s&nbsp. exit(). conex. mysql_close($link). $link=Conectarse().$row["Apellidos"]). Para facilitar la programación hemos separado la función de conexión en una librería a parte.

mysql_select_db("construyasl"). /* Set $keyword and $results. and use addslashes() to * minimize the risk of executing unwanted SQL commands: */ $keyword = addslashes( $_POST['keyword'] )."construyasl". /* Get timestamp before executing the query: */ $start_time = getmicrotime().com) Añadir una aportación 29/08/2003 en realidad es mejor crear algo como esto: search. if( $_POST['keyword'] ) { /* Connect to the database: */ mysql_pconnect("localhost".php: <? /* * search.php-script.Ejecutar ejemplo Ver código fuente En este ejemplo hemos utilizado 3 instrucciones nuevas: mysql_query. mysql_fetch_array y mysql_free_result. con la instrucción mysql_fetch_array extraemos los datos de la consulta a un array y con mysql_free_result liberamos la memoria usada en la consulta. */ print "<html><head><title>My Search Engine</title></head><body>\n".php * * Script for searching a database populated with keywords by the * populate. Conexión a la base de datos Insertar registros Aportaciones de usuarios Claudio Marrero (yagoloco22@hotmail. Con la instrucción mysql_query hemos hecho una consulta a la base de datos en el lenguaje de consultas SQL."lzdttV6u0MoC") or die("ERROR: Could not connect to database!"). .

$row['url']. ." seconds. /* Present the search-results: */ print "<h2>Search results for '".page_url AS url.5)). } /* Present how long it took the execute the query: */ print "query executed in ". } else { /* If no keyword is defined.$results = addslashes( $_POST['results'] ).word_word = \"$keyword\" GROUP BY p. COUNT(*) AS occurrences FROM page p. for( $i = 1. } ?> Y el otro es populate.$row['url'].$_POST['keyword'].word_id AND w. print "Results: <select name='results'><option value='5'>5</option>\n". <a href='". print "(occurrences: ".page_id AND w."</a>\n".page_id = o. } print "</body></html>\n". $i++ ) { print "$i. print "<option value='10'>10</option><option value='15'>15</option>\n".word_id = o.microtime()). occurrence o WHERE p. print "<option value='20'>20</option></select>\n".php * * Script for populating the search database with words."'>". $sec) = explode(" ".php: <? /* * populate.(substr($end_time-$start_time. word w.0. /* Execute the query that performs the actual search in the DB: */ $result = mysql_query(" SELECT p. * pages and word-occurences.$row['occurrences']. present the search page instead: */ print "<form method='post'> Keyword: <input type='text' size='20' name='keyword'>\n". print "<input type='submit' value='Search'></form>\n".". $row = mysql_fetch_array($result). /* Simple function for retrieving the current timestamp in microseconds: */ function getmicrotime() { list($usec. /* Get timestamp when the query is finished: */ $end_time = getmicrotime().")<br><br>\n". return ((float)$usec + (float)$sec).page_id ORDER BY occurrences DESC LIMIT $results" )."':</h2>\n".

1024) ) { /* Remove whitespace from beginning and end of string: */ $buf = trim($buf). $words[$i][$j]. while( $buf = fgets($fd." ). mysql_select_db("test"). } else { /* If not. $buf). /* Define the URL that should be processed: */ $url = addslashes( $_GET['url'] ). $row = mysql_fetch_array($result).$words). } /* Does this URL already have a record in the page-table? */ $result = mysql_query("SELECT page_id FROM page WHERE page_url = \"$url\"")."secret") or die("ERROR: Could not connect to database!"). if( !$url ) { die( "You need to define a URL to process. $page_id = mysql_insert_id(). use the old page_id: */ $page_id = $row['page_id']. } else if( substr($url. $buf = ereg_replace('/&\w. $i++ ) { for( $j = 0. /* Try to remove all HTML-tags: */ $buf = strip_tags($buf).$buf. /* Loop through all words/occurrences and insert them into the database: */ for( $i = 0."root". } /* Start parsing through the text. $words[$i]."r")) ) die( "Could not open URL!" ). $j++ ) { /* Does the current word already have a record in the word-table? */ ./'. and build an index in the database: */ if( !($fd = fopen($url. ''.0. create one: */ mysql_query("INSERT INTO page (page_url) VALUES (\"$url\")"). if( $row['page_id'] ) { /* If yes.7) != "http://" ) { $url = "http://$url".*/ /* Connect to the database: */ mysql_pconnect("localhost". /* Extract all words matching the regexp from the current line: */ preg_match_all("/(\b[\w+]+\b)/".

phtml <!-.$cur_word = addslashes( strtolower($words[$i][$j]) ). $word_id = mysql_insert_id(). } else { /* If not.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1> <FORM ACTION="procesar. $result = mysql_query("SELECT word_id FROM word WHERE word_word = '$cur_word'"). } /* And finally. if( $row['word_id'] ) { /* If yes. ahora presentaremos como introducir nuevo registros en la base de datos. ejem07d. ?> Insertar registros Hasta ahora nos hemos conectado a una base de datos y hemos hecho consultas a la misma.phtml"> <TABLE> <TR> <TD>Nombre:</TD> <TD><INPUT TYPE="text" NAME="nombre" SIZE="20" MAXLENGTH="30"></TD> </TR> <TR> <TD>Apellidos:</TD> <TD><INPUT TYPE="text" NAME="apellidos" SIZE="20" MAXLENGTH="30"></TD> </TR> </TABLE> <INPUT TYPE="submit" NAME="accion" VALUE="Grabar"> </FORM> . $row = mysql_fetch_array($result). register the occurrence of the word: */ mysql_query("INSERT INTO occurrence (word_id. Para ello usaremos un formulario y en el ACTION del FORM <FORM ACTION="programaPHP"> indicaremos que debe ser procesado una pagina PHP.$page_id)"). use the old word_id: */ $word_id = $row['word_id'].page_id) VALUES ($word_id. create one: */ mysql_query("INSERT INTO word (word_word) VALUES (\"$cur_word\")"). print "Indexing: $cur_word<br>". } } } fclose($fd). esta página lo que hará será introducir los datos del formulario en la base de datos.Manual de PHP de WebEstilo.

$link=Conectarse(). La segunda página procesar.phtml que añadirá los datos a la tabla. header("Location: ejem07d.<B>Apellidos</B>&nbsp.Apellidos) values ('$nombre'. ?> <TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1> <TR><TD>&nbsp.<B>Nombre</B></TD> <TD>&nbsp.'$apellidos')". $link=Conectarse().phtml").$link). $result=mysql_query("select * from prueba".%s&nbsp.$link). mysql_query("insert into prueba (Nombre. $nombre=$_GET['nombre']. para cerrar el ciclo. $row["Nombre"]. } mysql_free_result($result). .%s</td> <td>&nbsp. ?> La primera página PHP ejem07d. mysql_close($link).phtml").<hr> <?php include("conex.</td></tr>".phtml Borrar registros Y finalmente. seguido de una consulta que nos muestra el contenido de la tabla prueba.phtml").</TD></TR> <?php while($row = mysql_fetch_array($result)) { printf("<tr><td>&nbsp. $apellidos=$_GET['apellidos']. nos queda el borrado de registros. ?> </table> </body> </html> Ejecutar ejemplo Ver código fuente procesar. $row["Apellidos"]).phtml se conecta a la base de datos y añade un nuevo registro con la instrucción insert del lenguaje de base de datos SQL. Una vez el registro se ha añadido se vuelve a cargar la página ejem07d.phtml <?php include("conex.phtml es un formulario que nos permite introducir nombre y apellido para añadirlo a la base de datos. El borrado de registros el uno de los procesos más sencillos. El formulario llama a la pagina procesar.

header("Location: ejem07e.phtml sabe que elemento de la tabla ha de borrar.phtml").<B>Nombre</B></TD> <TD>&nbsp. $result=mysql_query("select * from prueba". ejem07e. ?> </table> </body> </html> Ejecutar ejemplo Ver código fuente borra.phtml <?php include("conex.$link).$link).$row["Apellidos"].<B>Borrar</B>&nbsp.phtml <!-.<B>Apellidos</B>&nbsp.%s&nbsp.phtml?id=%d\">Borra</a></td></tr>". de esta manera la página borra.phtml pasándole el ID_Prueba de cada registro.</TD> <TD>&nbsp.phtml.Para indicar que elemento vamos a borrar hemos usado un enlace a la página borra.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de uso de bases de datos con PHP y MySQL</H1> <?php include("conex.</TD></TR> <?php while($row = mysql_fetch_array($result)) { printf("<tr><td>&nbsp. mysql_close($link). $link=Conectarse(). $row["Nombre"].$row["ID_Prueba"]).phtml").%s</td><td>&nbsp.</td><td><a href=\"borra. ?> <TABLE BORDER=1 CELLSPACING=1 CELLPADDING=1> <TR><TD>&nbsp. $id=$_GET['id']. $link=Conectarse().phtml .phtml se conecta a la base de datos y borra el registro indicado en la variable $id que ha sido pasado desde la página ejem07e. } mysql_free_result($result). Una vez el registro se ha borrado se vuelve a cargar la página ejem07e.Manual de PHP de WebEstilo. ?> La página borra. mysql_query("delete from prueba where ID_Prueba = $id".phtml").

com if (($PHP_AUTH_USER!="Joe") || ($PHP_AUTH_PW!="123")) { header('WWW-Authenticate: Basic realm="Acceso restringido"'). $PHP_AUTH_USER. header('HTTP/1.Manual de PHP de WebEstilo.Restringir el acceso En esta sección vamos a explicar cómo podemos restringir el acceso a según qué páginas. para que solo las personas autorizadas puedan acceder a ciertas partes del nuestro sitio web. En el siguiente ejemplo pediremos autorización y comprobaremos si el nombre de usuario es Joe y la contraseña 123. si ha sido instalado como un CGI los ejemplos de ésta sección no funcionarán. 1.0 401 Unauthorized'). echo "Ha introducido la contraseña: $PHP_AUTH_PW<br>". header('HTTP/1.com if (!isset($PHP_AUTH_USER)) { header('WWW-Authenticate: Basic realm="Acceso restringido"'). Atención: El acceso restringido a páginas usando las variables globales $PHP_AUTH_USER. si es así tendremos acceso al resto de la página. } ?> <!-.0 401 Unauthorized'). } else { echo "Ha introducido el nombre de usuario: $PHP_AUTH_USER<br>". echo 'Authorization Required. Para que el navegador nos muestre la ventana de petición de nombre de usuario y contraseña basta con enviar la siguiente cabecera: <?php // Manual de PHP de WebEstilo. Contraseña introducida. } ?> Ejecutar ejemplo Ver código fuente Esto provoca que se muestre la ventana de nombre de usuario y contraseña y los datos introducidos se asignen a las variables $PHP_AUTH_USER y $PHP_AUTH_PW. <?php // Manual de PHP de WebEstilo. exit. este sistema se basa en las variables globales $PHP_AUTH_USER y $PHP_AUTH_PW.'. 2.'. $PHP_AUTH_PW y $PHP_AUTH_TYPE solo funciona si PHP ha sido instalado como un módulo de Apache. Nombre de usuario introducido. exit. A partir de aquí realizaremos las comprobaciones necesarias para asegurarnos que los datos introducidos son los correctos. echo 'Authorization Required.com --> <html> <head> <title>Ejemplo de PHP</title> </head> . Para conseguir la autentificación en las páginas usaremos el sistema de autentificación del protocolo HTTP. $PHP_AUTH_PW.

while ($fich[$i] && !$validado) { $campo = explode("|". <?php // Manual de PHP de WebEstilo.0 401 Unauthorized'). } ?> <!-.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> Ha conseguido el acceso a la <B>zona restringida</B> con el usuario <?php echo $PHP_AUTH_USER?>. Por ejemplo: passwords.txt Joe|1235 Pedro|qwer Noe|Gty45e kermit|rwe4v En este ejemplo se pide la autorización al comienzo de la página si no se ha establecido con anterioridad y se comprueba con el fichero de contraseñas que hemos llamado passwords. Dicho fichero podría tener el siguiente formato: nombre_de_usuario|contraseña. $validado=false. exit.com if (!isset($PHP_AUTH_USER)) { header('WWW-Authenticate: Basic realm="Acceso restringido"'). exit.'. si el nombre de usuario y contraseña coincide con alguna entrada del fichero se nos permite ver el resto de la página. echo 'Authorization Required. } if (!$validado) { header('WWW-Authenticate: Basic realm="Acceso restringido"').txt.txt"). </body> </html> . es mejor que cada persona tenga un nombre de usuario y contraseña. </body> </html> Distinción de usuarios En la anterior página todo el mundo que tenía acceso a la parte restringida entraba con el mismo nombre de usuario y contraseña. teniendo un fichero separado con los nombres de usuario y las contraseñas válidas. En esta página veremos la forma de realizar esto. header('HTTP/1. header('HTTP/1.$fich[$i]). } $fich = file("passwords.0 401 Unauthorized'). $i=0.Manual de PHP de WebEstilo. esto evidentemente no es una buena solución. ya que de esta forma podemos inhabilitar a un usuario sin ver comprometida la seguridad de nuestro sitio. if (($PHP_AUTH_USER==$campo[0]) && ($PHP_AUTH_PW==chop($campo[1]))) $validado=true. echo 'Authorization Required.'.<body> Ha conseguido el acceso a la <B>zona restringida</B>. $i++.

mediante la función session_start(). Por lo tanto lo comentado a partir de aquí es solo aplicable a PHP4. pero es conveniente recordar que la disponibilidad o no de las cookies depende del usuario. y no es conveniente fiarse de lo que un usuario pueda o no tener habilitado. ?> . echo "He inicializado la sesión". se aplica a esta secuencia de navegación. para ello crearemos un identificador único que asignamos a cada una de estas sesiones de navegación. tendrás que crear tus propias librerías de gestión de sesiones o recurrir a alguna de las existentes. session en inglés. es la relativa al uso de las sesiones. hasta que lo abandona. Desde que entra en nuestro sitio. etc. o se retoma la sesión actual. si no existe.¿Qué son las sesiones? Por: Jose Valle Si existe una consulta repetida en las listas de PHP. Podemos también crear un cookie que incluya el identificador de sesión. o al registrar una variable en una sesión mediante session_register('miVariable').com session_start(). Los que programamos en PHP4 tenemos la suerte de que toda la gestión de sesiones la hace el mismo PHP. El término sesión en PHP. Veamos un sencillo ejemplo: <?php // Manual de PHP de WebEstilo. Inicialización de la sesión Por: Jose Valle Para utilizar sesiones en PHP lo primero es inicializarlas. Lo contado hasta ahora es teoría pura y es aplicable a cualquier lenguaje de programación C. Perl. A este identificador de sesión se le denomina. como la de PHPLIB . Si aún desarrollas PHP3. Básicamente una sesión es la secuencia de páginas que un usuario visita en un sitio web. como la sesión. En ambos casos se crea una nueva sesión. El uso de sesiones es un método ampliamente extendido en cualquier aplicación de cierta entidad. comúnmente. Podemos hacerlo explícitamente. El proceso en cualquier lenguaje de programación podría ser algo así: Existe Si existe Si no existe Generar un identificador único una la creamos una sesión? retomamos nueva Y para que no perdamos el hilo de la navegación del usuario deberemos asociar esta sesión a todas las URLs y acciones de formulario.

com session_start(). ?> Ejecutar ejemplo Ver código fuente Como dije anteriormente la sesión se crea o recoge mediante session_start().$PHP_SELF. Ejemplo práctico Por: Jose Valle Veamos otro ejemplo que. junto con el identificador de sesión. registramos la variable $contador en la primera línea del script. Podemos obtener la sesión en cualquier momento mediante la función session_id(). ?> Ejecutar ejemplo Ver código fuente En este caso session_start() comprueba en los cookies que existe una sesión y continua con ella. el concepto de variable de sesión. En esta línea hacemos uso de la variable reservada $PHP_SELF. En nuestro ejemplo anterior.'">Contador vale: '. $SID.com session_register('contador'). cada vez que recarguemos la página o hagamos click sobre el enlace. Básicamente es una variable.$SID. . En la segunda línea. PHP habrá insertado de forma automática la sesión y ésta será pasada de una página a otra sin hacer nada más. pero que reside en un espacio específico en el servidor. entre otras cosas. echo 'La sesión actual es: '. el valor de $contador se incrementará en 1. session_id() devuelve el identificador actual. o también cuando se registra una variable de sesión mediante session_register(). y que pertenece únicamente a un usuario. echo '<a href="'. puede resultar un poco abstracto. que contiene el nombre de la sesión y el identificador de la misma. Inserta en las sucesivas páginas la siguiente línea para ver si la sesión está disponible: <?php // Manual de PHP de WebEstilo. Si no has utilizado nunca las sesiones.session_id(). pero no vemos nada.Ejecutar ejemplo Ver código fuente Esta es la forma más básica. si el usuario tiene los cookies activados.'?'. Desde un punto de vista práctico la sesión es operativa. tal vez.++$_SESSION['contador']. te lo aclare un poco más <?php // Manual de PHP de WebEstilo. '</a>'. como cualquiera de las que gestiona PHP4. que hace referencia al propio script en ejecución y una constante propia de PHP4.

Veamos una prueba práctica: <?php // Manual de PHP de WebEstilo.com) 27/03/2004 $_REQUEST[$misesion] en el ejemplo en lugar de simplemente $misesion en el caso de tener deshabilitado Global en el php. antes que session_start() o session_register(). mediante la función session_name(). sino como $_POST[variable].session_name(). Inicialización de la sesión Error común Aportaciones de usuarios German Pizarro (german.$PHP_SELF.c) Añadir una aportación 08/08/2003 Para ser más genérico debiera considerarse que al deshabilitar register_globals no puede usarse los nombres de las variables sólo como $variable.' y la sesión '.pizarro@alumnos.Podemos averiguar también el nombre de la sesión.. ?> Ejecutar ejemplo Ver código fuente La asignación del nombre de sesión debe realizarse antes que ninguna otra función con sesiones. o modificarlo.'<br>'... Para probarlo crea una línea en blanco o con cualquier cosa antes de <?php.utfsm. Saludos. so!+ Alfonso (lacielsa290@hotmail. echo '<a href="'. Error común Por: Jose Valle Uno de los errores más comunes cuando se utilizan sesiones es dejar líneas en blanco antes de la inicialización de PHP o enviar alguna salida a la pantalla.'?'. echo 'Ahora el nombre es '.$misesion.ini .++$_SESSION['contador'].'</a><br>'.. session_register('contador').com session_name('misesion'). .'">Contador vale: '.SID.

Carrito de compra Por: Jose Valle Si después de todo lo comentado aún no entiendes para que sirven las sesiones.Si tienes los cookies activados."?".headers already sent by (output started at /home/session. Te ahorrará muchos disgustos. Imagina que quisieras crear un sistema de cesta de la compra. } } $_SESSION['itemsEnCesta']=$itemsEnCesta. Como medida práctica. }else{ foreach($itemsEnCesta as $k => $v){ if ($item==$k){ $itemsEnCesta[$k]+=$cantidad. if ($item){ if (!isset($itemsEnCesta)){ $itemsEnCesta[$item]=$cantidad. Simplemente por la existencia de una línea en blanco. $itemsEnCesta=$_SESSION['itemsEnCesta']. Si después de todo lo comentado aún no entiendes para que sirven las sesiones. Imagina que quisieras crear un sistema de cesta de la compra.php:2) in /home/session. } } if (!$encontrado) $itemsEnCesta[$item]=$cantidad.$SID?>" method="post"> Dime el producto <input type="text" name="item" size="20"><br> Cuantas unidades <input type="text" name="cantidad" size="20"><br> <input type="submit" value="Añadir a la cesta"><br> </form> <? if (isset($itemsEnCesta)){ echo'El contenido de la cesta de la compra es:<br>'. session_register('itemsEnCesta'). veamos un ejemplo práctico. en su forma básica podría ser algo así: <?php // Manual de PHP de WebEstilo.php on line 4 PHP está informando de que no puede activar los cookies en el navegador del usuario. ?> <html> <body> <tt> <form action="<?=$PHP_SELF. veamos un ejemplo práctico. no dejes espacios ni antes del inicio del script. $cantidad=$_POST['cantidad']. $encontrado=1. $item=$_POST['item']. . porque las cabeceras ya han sido enviadas..com session_start().. ni después de la finalización. te encontrarás un error de este tipo: Warning: Cannot send session cookie .

espero que te haya resultado ilustrativo y no olvides consultar el resto de funciones asociadas al uso de sesiones en el manual de PHP. Realmente las cookies no son mas que cadenas de texto que son enviadas desde el servidor al cliente (navegador) y almacenadas en este. Si el array existe recorremos su contenido. Con las cookies. añadimos la cantidad en la línea 10. En la 5 si el array itemsEnCesta no existe. Estas son las funcionalidades básicas de las sesiones. pequeñas porciones de información se quedan registradas en el navegador permitiendo identificar a este a través de diferentes páginas de un mismo sitio e incluso durante visitas entre distintos días. por lo tanto. lo creamos con el nuevo producto y la cantidad indicada. ¿Te imaginas las posibilidades de un sistema de almacenamiento de información de estas características?. añadimos el nuevo producto con la correspondiente cantidad a itemsEnCesta en la línea 14. Funcionamiento La cookie es enviada al navegador desde el servidor y si este la acepta permanece en él. La principal utilidad de las cookies (galletas) es la de solventar el problema de la falta de estado en la navegación a través de las paginas web. luego el navegador envía estas cookies al servidor permitiendo así la identificación del cliente en el servidor. } } ?> </tt> </body> </html> Ejecutar ejemplo Ver código fuente Una breve explicación. hasta el momento en que decidamos almacenar la información donde más nos interese. ni bases de datos. En la línea 4 comprobamos si el usuario ha pasado algún artículo. . ni tienes que andar pasando valores de una página a otra.$v. donde empieza el HTML.foreach($itemsEnCesta as $k => $v){ echo 'Artículo: '. si los hubiera. ¿Qué son las cookies? Por: Carlos Gallús Lahoz y Joaquin Gracia. No necesitas ficheros. es un nuevo artículo. Y a continuación imprimimos el formulario y los resultados. y si encontramos un artículo igual.$k. PHP va gestionando estos datos por nosotros. a partir de la línea 18. entre las líneas 8 y 13.'<br>'.' ud: '. Si no lo encontramos. desde el formulario.

com la cookie no se transmite para domain. string Dominio [.domain. string Path [. segundos de duración. Dominio.com . int Secure]]]]]) Setcookie() define una cookie que es enviada junto con el resto de la información de la cabecera(header). mientras que si ponemos domain. Normalmente se usa time() + N. Todos los argumentos excepto el nombre son opcionales. permitiendo la identificación del usuario por parte del servidor. El navegador las envía.com como para   www. Cómo usar las cookies Por: Carlos Gallús Lahoz y Joaquin Gracia. por lo tanto deberemos realizar la llamada a estas funciones antes de cualquier tag <HTML> o <HEAD>. También podemos reemplazar cualquier argumento con una cadena vacía ("").com.Las páginas piden la cookie al navegador. El argumento expire es un argumento entero que indica la hora en que se eliminara la cookie en el formato de hora que devuelven las funciones UNIX time() y mktime(). Esta es una restricción de las cookies no de PHP. para especificar la duración de una cookie.. Nombre de la cookie. int Expire [. esta función esta disponible a partir de la versión 3 de PHP. int setcookie (string Nombre [. Value. Path. en el cliente se eliminara la cookie que exista con ese nombre.com la cookie se transmite tanto para domain. El manejo de cookies en PHP se realiza mediante el uso de la función setcookie. string Valor [.. Expire. Las cookies deben ser enviadas antes de cualquier tag de html. A continuación vamos a ver como usar las cookies para nuestro beneficio. Dominio en donde tiene valor la cookie.domain. Subdirectorio en donde tiene valor la cookie.    Nombre. Si ponemos como dominio www. Valor que almacenará la cookie en el cliente. Si creamos una cookie solamente con el nombre.

com Ejemplo de uso de cookies Por: Carlos Gallús Lahoz y Joaquin Gracia. que dura 1 hora (3600 segundos) válida para todo el dominio webestilo."/".phtml."/". ?></b> que será válida durante 1 hora."webestilo. time()+3600. usamos un formulario que procesará la página procesar_cookie. "Luis". El argumento secure indica que la cookie solo se transmitirá a través de una conexión segura HTTPS. </body> . Para ello pediremos al usuario que introduzca su nombre.com setcookie("ejemusuario". time()+3600. Primero pedimos al usuario que introduzca el valor de su nombre. Secure.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de uso de cookie</H1> Introduzca su nombre: <FORM ACTION="procesar_cookie. ?> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de uso de cookie</H1> Se ha establecido una cookie de nombre <b>ejemusuario</b> con el valor: <b><? print $_GET['nombre']. <?php // Manual de PHP de WebEstilo. <!-.Manual de PHP de WebEstilo. Ejemplo setcookie("usuario". y cuya duración es una hora.phtml" METHOD="GET"> <INPUT TYPE="text" NAME="nombre"><BR> <INPUT TYPE="submit" VALUE="Enviar"> </FORM> </body> </html> Ejecutar ejemplo Ver código fuente Se establece la cookie ejemusuario con el valor introducido anteriormente. En este ejemplo establecemos una cookie de nombre usuario que contiene el valor Luis. que guardaremos en una cookie.com"). En este ejemplo vamos a ver como establecer una cookie y cómo se recupera el valor establecido.""). $_GET['nombre'].

<!-.com --> <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de uso de cookie</H1> Se ha establecido la cookie de nombre <b>ejemusuario</b> vale: <b><? print $_COOKIE['ejemusuario'].Manual de PHP de WebEstilo. ?></b> </body> </html> .</html> Ver código fuente En este ejemplo vemos lo fácil que es recuperar el valor de la cookie establecida anteriormente.

"root". "email"). mysql_result() es usado para mostrar los valores de los campos devueltos por la consulta ($result).mysql_result($result. que abre una conexión con el servidor MySQL en el Host especificado (en este caso la misma máquina en la que está alojada el servidor MySQL.mysql_result($result. echo "Teléfono :". También debemos especificar un usuario (nobody."<br>".mysql_result($result. El resultado de ésta operación es almacenado en la variable $result. envía una instrucción SQL al servidor MySQL para que éste la procese. email FROM agenda". Finalmente. root.localhost). $result = mysql_query("SELECT nombre. 0. "clave_del_root")). La siguiente función mysql_query(). echo "Nombre: ". veremos como mostrar los datos por pantalla. "telefono"). Podríamos establecer distintas conexiones a la BD en diferentes servidores. $result = mysql_query("SELECT * FROM agenda". while ($row = mysql_fetch_row($result)){ echo ""<tr><td>$row[0]</td><td>$row[1]</td></tr> \n". $link). y mostramos el valor de los campos especificados. echo "E-Mail :"."<br>". mysql_select_db("mydb"."<br>". El resultado de la conexión es almacenado en la variable $link. ). Mostrar los datos de una consulta Ahora que ya sabemos conectar con el servidor de BD. 0. usando el identificador de la conexión ($link)."<br>". } echo "</table> \n". "nobody"). echo "<table border = '1'> \n". echo "<tr><td>Nombre</td><td>E-Mail</td></tr> \n". Con mysql_select_db() PHP le dice al servidor que en la conexión $link nos queremos conectar a la base de datos mydb. Consulta de la BD <html> <body> <?php $link = mysql_connect("localhost". "nombre"). así que con el siguiente script nos conectaremos a la BD del servidor MySQL para obtener los datos de un registro. ?> . $link). es la que hace el trabajo duro.mysql_result($result. etc.Conectar a MySQL desde PHP Ya tenemos datos en nuestra BD. que es el primer registro. echo "Dirección: ". "nobody"). ?> </body> </html> En la primera línea del script nos encontramos con la función mysql_connect(). "direccion"). $link). pero nos conformaremos con una. En este ejemplo mostramos los valores del registro 0. mysql_select_db("mydb". $link). 0. 0. Conexión al MySQL <html> <body> <?php $link = mysql_connect("localhost". y si fuera necesario un password para el usuario indicado (mysql_connect("localhost".

En primer lugar escribiremos el texto HTML de la página web que nos servirá como formulario de entrada. if ($row = mysql_fetch_array($result)){ echo "<table border = '1'> \n". El primer campo referenciado es el 0. En el siguiente script solucionaremos este pequeño inconveniente. email FROM agenda". Almacenamos en $row el registro actual con la función mysql_fetch_array() que hace exactamente lo mismo que mysql_fetch_row(). $result = mysql_query("SELECT nombre. echo "</table> \n". como operador para concatenar cadenas. Escribiremos un script que sirva para buscar una determinada cadena (que recibiremos de un formulario. $link). nos aseguramos que se nos muestren todos los registros devueltos por la consulta en caso de haber más de uno. de todo lo visto hasta ahora. En esta ocasión while() evalua la función mysql_fetch_row(). con la exepción que podemos referenciar a los campos por su nombre ( $row["email"]).php3"> <strong>Palabra clave:</strong> <input type="text" name="T1" size="20"><br><br> <input type="submit" value="Buscar" name="buscar"> ."). dentro de nuestra base de datos. Hay que destacar la utilización del punto (. } ?> </body> </html> Esencialmente.$row["nombre"]."</td></tr> \n". asignamos a $row el primer registro de la consulta. y la almacenamos en la variable $buscar). la más obvia es la sentencia de control while(). y en caso de no haber ninguno (else) mostramos un mensaje ("No se ha encontrado. concretamente dentro del campo "nombre"..$row["email"]. que devuelve un array con el contenido del registro actual (que se almacena en $row) y avanza una posición en la lista de registros devueltos en la consulta SQL. el segundo el 1 y así sucesivamente. un ejemplo. Un buscador para nuestra base de datos Vamos a ver una aplicación. en vez de por un número. } else { echo "¡ No se ha encontrado ningún registro !". La función mysql_fetch_row() tiene un pequeño problema. la llamaremos formulario. Mientras que con la sentencia do/while. es que el array que devuelve sólo admite referencias numéricas a los campos obtenidos de la consulta. Formulario entrada <html> <body> <form method="POST" action="http://mysevidor/php/buscador.htm. "nobody")."</td><td>". Con la sentencia if/else. echo "<tr><td>Nombre</td><td>E-Mail</td></tr> \n". do { echo "<tr><td>". mysql_select_db("mydb". $link). ejecuta una cosa mientras la condición sea verdadera.. que tiene un funcionamiento similar al de otros lenguajes.</body> </html> En este script hemos introducido dos novedades.). } while ($row = mysql_fetch_array($result)). Consulta modificada de BD <html> <body> <?php $link = mysql_connect("localhost". este script hace lo mismo que el anterior.

y en es caso terminamos la ejecución del script con exit. do { echo "<tr> \n"."</td> \n".</form> </body> </html> El siguiente script de busqueda lo llamaremos buscador. con el que obtenemos información acerca de las caracteríticas de cada campo. como su nombre. } $link = mysql_connect("localhost". echo "<td>".etc. es la función mysql_fetch_field. y será el encargado de hacer la búsqueda en la BD. "nobody").$row["email"]. Con la sentencia LIKE buscamos cualquier ocurrencia de la cadena contenida en $buscar."</td> \n". echo "</tr> \n". echo "<td>". A la función le anteponemos el signo admiración (!) que es equivalente a un NOT. echo "</table> \n".$row["direccion"]. y devolver por pantalla los registros encontrados. si hubiesemos puesto nombre LIKE '%$buscar'. mientras que si hubiesemos puesto nombre LIKE '$buscar%'. if ($row = mysql_fetch_array($result)){ echo "<table border = '1'> \n". echo "</html></body> \n". buscariamos cualquier ocurrencia al principio del campo "nombre".htm no es una cadena vacia.tipo. $result = mysql_query("SELECT * FROM agenda WHERE nombre LIKE '%$buscar%' ORDER BY nombre". WHERE nombre LIKE '%$buscar%'."</td> \n". $link). $link). exit. mysql_select_db("mydb". Lo más importante de este script. La última novedad que hemos incorporado. echo "<td>". Script búsqueda <html> <body> <?php if (!isset($buscar)){ echo "Debe especificar una cadena a bucar". echo "<td><a href='mailto:".longitud. por ejemplo. para convertirlo en 'verdadero' en caso de que la variable esté vacia.$row["telefono"]. } ?> </body> </html> Lo primero que comprobamos es que el contenido de la variable $buscar que recibimos del la página web formulario. es sin duda la sentencia SQL que le enviamos al servidor MySQL. y más concretamente la condición que le imponemos. //Mostramos los nombres de las tablas echo "<tr> \n".$row["nombre"]. } while ($row = mysql_fetch_array($result)). buscariamos cualquier ocurrencia al final del campo"nombre".php3. .$row["email"]. } else { echo "¡ No se ha encontrado ningún registro !"."'>"."</a></td> \n". while ($field = mysql_fetch_field($result)){ echo "<td>$field->name</td> \n". mientras que con los signos de porcentaje (%) indicamos el lugar de la coincidencia.$row["id"]. y esto lo hacemos con la función isset() que devuelve 'falso' si la variable que recibe está vacia. echo "<td>".nombre de la tabla que los contiene. } echo "</tr> \n"."</td> \n".

.

direccion. $sql = "INSERT INTO agenda (nombre. por eso en este caso me conecto como root.php3. $sql = "INSERT INTO agenda (nombre. añadir registros <html> <body> <?php // process form $link = mysql_connect("localhost".php3 (este script no lo comentaré. '$email')". en un solo fichero que llamaremos add_reg. !algo tendran que hacer ustedes¡). ¡Aaah!. la cúal también usamos para las consultas. para poder añadir o modificar registros debemos tener permiso para ello en el servidor MySQL. email) ". $result = mysql_query($sql). una cosa muy importante.\n". vamos a combinar la página web de formulario y el fichero de script php3. email) ". Formulario inicial añadir BD <html> <body> <form method="post" action="add_reg.$db). . pues veamos como es este script. pero podría ser cualquier otro usuario. "VALUES ('$nombre'. y una vez introducidos ejecutamos un script llamado add_reg. mysql_select_db("mydb". "root"). con los campos que deseamos. echo "¡Gracias! Hemos recibido sus datos. '$direccion'. '$telefono'. Combinacion de formulario y script <html> <body> <?php if ($enviar) { // process form $link = mysql_connect("localhost". En primer lugar vamos a crear una página web con un simple formulario. mysql_select_db("mydb".php3"> Nombre :<input type="Text" name="nombre"><br> Dirección:<input type="Text" name="direccion"><br> Teléfono :<input type="Text" name="telefono"><br> E-mail :<input type="Text" name="email"><br> <input type="Submit" name="enviar" value="Aceptar información"> </form> </body> </html> Hemos creado un formulario donde recoger los datos. una pequeña frivolidad. y usaremos para las actualizaciones.$db).Añadir registros a nuestra base de datos En esta lección vamos ver como podemos añadir nuevos registros a nuesta BD. </body> </html> Como se puede ver. utilizamos la ya conocida función mysql_query(). La recogida de datos la vamos a hacer a traves de un interfaz de web. Para terminar esta lección. telefono. telefono. para introducir un nuevo registro. es decir una señora función. direccion. "root").

echo "¡Gracias! Hemos recibido sus datos.\n". mysql_select_db("mydb". y algo nuevo.$link). //Comprobamos si hemos recibido datos del formulario (enviar) if ($enviar) { // Si recibimos un id.$db). solo que en vez de utilizar UPDATE utilizamos DELETE en la sentenica SQL. '$telefono'. } </body> </html> Resumen de todo lo visto Como resumen de todo lo visto hasta ahora. mysql_select_db("mydb". "root"). . email='$email' WHERE id=$id".php3"> Nombre :<input type="Text" name="nombre"><br> Dirección:<input type="Text" name="direccion"><br> Teléfono :<input type="Text" name="telefono"><br> E-mail :<input type="Text" name="email"><br> <input type="Submit" name="enviar" value="Aceptar información"> </form> <?php } //end if ?> </body> </html> Borrar registros de nuestra base de datos El proceso de borrar un registro es identico al de modificar. sino añadimos un registro if ($id) { $sql = "UPDATE agenda SET nombre='$nombre'. echo "Registro Actualizado<p>". }else{ ?> <form method="post" action="add_reg. '$email')". "root").". Como ejercicio. }else{ echo "Debe especificar un 'id'. '$direccion'. telefono='$telefono'. $sql = "DELETE agenda WHERE id=$id") $result = mysql_query($sql).\n"."VALUES ('$nombre'. Borrado registros de BD <html> <body> <?php if (isset($id)){ // process form $link = mysql_connect("localhost". direccion='$direccion'. $result = mysql_query($sql). <html> <body> <?php $link = mysql_connect("localhost". Por tanto el script quedaría como sigue. os dejo la incorporación del buscador de la lección 5. vamos a hacer un script donde se mezcla todo. modificamos.

'$direccion'. $myrow = mysql_fetch_array($result). $nombre = $myrow["nombre"]." . '$email')".". $id = $myrow["id"]. . "('$nombre'. $result = mysql_query($sql).". // enviamos el id para poder editar el registro echo "<input type=hidden name="id" value=$id>". while ($myrow = mysql_fetch_array($result)) { echo $myrow["nombre"]. echo "Registro Borrado<p>". telefono. // es decir no venimos de un formulario if (!$id) { // Mostramos todos los registros de nuestra BD $result = mysql_query("SELECT * FROM agenda". echo "Registro Añadido<p>". } elseif ($delete) { // Borramos un registro $sql = "DELETE FROM agenda WHERE id=$id". $myrow["Telefono"].} else { $sql = "INSERT INTO agenda (nombre.$myrow["direccion"]. echo "<a href=\$PHP_SELF?id=". '$telefono'.$myrow["email"]." . esta es una funcion interna de PHP que nos devuelve la dirección del script en el que se ejecuta.$link). direccion.$myrow["id"]. echo "<a href=\$PHP_SELF?id=". $direccion = $myrow["direccion"]. } ?> Nombre:<input type="Text" name="nombre" value="<?php echo $nombre ?>"><br> Dirección:<input type="Text" name="direccion" value="<?php echo $direccion ?>"><br> Telefono:<input type="Text" name="telefono" value="<?php echo $telefono ?>"><br> Email:<input type="Text" name="email" value="<?php echo $email ?>"><br> <input type="Submit" name="enivar" value="Enviar Información"> </form> <?php } // End If if ($enviar) ?> </body> </html> Cabe destacar el uso de $PHP_SELF. } // Enviamos la sentencia SQL al servidor DB $result = mysql_query($sql).". } else { // Esta parte se ejecuta si no hemos presionado el boton enviar. } } } ?> <P> <a href="<?php echo $PHP_SELF?>">Añadir un registro</a> <P> <form method="post" action="<?php echo $PHP_SELF?>"> <?php if ($id) { // editamos el registro seleccionado $sql = "SELECT * FROM agenda WHERE id=$id". email) VALUES "."&delete=yes"> Borrar </a>". $email = $myrow["email"]." . $telefono = $myrow["telefono"].$myrow["id"]. $result = mysql_query($sql)."> Modificar </a><br>".

92  0.:9.700254'07.O/41:0390 .

00.08 348 5072903 907.O3  $03903./0!!/00-894 .8.4708 .4308/0503/03/4/0 .438000...:.0-46:0.-0  03 0 00254 . 0-46:0..3/40.:..8070907..43/.7E.43086:0089E3 /03974/00   .:9.43/.42  92 0.430820397.4708..47 /0 .:.54/024800.O3/0.O380./ 9900254/0!!.4708.7.:9.40-46:08340833:34/048.079.:9.00.83897:.39074708  :. ..47 /0 :3..4308.:..4308  08 /0.7  <    0397.3/40. .  43.3:.7:3.:25.7.. 00.803903..880.43:394/03897:.7 705097 ..:3..83897:.-0 548..390747  /0503/03/4 /0 .O3/0:3.43:3948 /0 3897:.-.77-.7 .. 89...8:497.0 55 0 .08 48 -:.O3   397:.43/.

990 .

4./ -4/ 3.47/008  -7   <  3..4# 55   0    0.# .0.

-4/ .

3/4  .390.00.O3   397:.47/0.42  92 0.7  <    .:..307.:.3/4  ./0!!/00-894 .O300. 8:2.O3/0-:. ..4308.703907../ 9900254/0!!.147 55 147 3.O/41:0390 308:039000254 0.00.0   ...O3/0-:. 34 80 .47 /0  /0 2.00....0    $03903.43/. .:9..:9.92  0..O38090723. 6:0 ..4203408 /:7.:250 .3:.0  80 .:9.700254'07.:.43/.

990 .

0./ .

4..# .47/008  -7 <  3.-4/ 3.4# 55 147      0.

-4/ .

77.7.43/.42509.4308/0:8:.20394/0-:..:9.6:00 -:. 57207.0/0:3-:.08.907.7E2097408 :3.08 $.3897:.3283 .O3 /0 -:.13.47707:3.748 '. 3897:. 3.O/41:0390   .:2575.O3 348507290.7E20974 /0 147  08 00..08 2E8 .  3 :3.../.O3 147 08 .43974.00.700254'07.794/401:3..O36:080/0-0.    5479. 84.7 ....3/41470..05.:9.:9.48.. .7.70.3.7.:9E3/480 0907.7. .7./.24/1../0 .-0/0907.43..-0/0-:.0 5...0 080:3/45.42   #0.8 .O387./4 .075.7E209743/.43.92  0.. 3897:..47/0.03.O3    43/. 3897:..-08$..0147   .0  87.O36:08000..0   57207 5..0394.:9.

704:3.77. .

4.08.. 0  4 :   . .8*. .77.

3/41470.. .:9. #0.77.47740.

. 1470.08.8*. .4..8002  5739002 -7  <  5739 -7   .

806:.7 .0390...70.

08( -7  <   N..08   5739..4.5479.8*.8*./7:3.4:39 ..4. 147  ..O3 .

 .

7 ./4 . 5E3. ..39. .7..O3 08 -.  3 089..3897:./.  $. 0248 :8.89... . 3897:.6:0 34 348507290 1472.2E854903.  089.57391  ./.. 70.. 8.7 8./.90.89./.  $03903.O3 0.47. . 5.4 5. ..390 29.2:.O3573916:0348/. 3897:.070248.

90./.3:.1472.904 3/.7..4708/08.70248  ..039.-0 .7 ...94 ./ 9900254/0!!. /0 1472.573.-0     .42  92 0.4708 6:0 5489074720390 0 3/.7909403970048   ./03. ..7 48 . 08 6:0 .O24 80 ./02E8 /0 54/07 1472..7.. .5.55 57391 .3 /0 705708039./0!!/00-894 .../03.. .8 .. 3485072903907.

990 .

43/107039081472./ -4/ 55 57391 3:2074/48.948/1 1      .0.

-4/ .

.945:0/03.424 1472.7E.:0303.086:03/.7.7E..43/0.42  92 0.8./0./03.92  © nf © ¯½I n –€ °  .3.:7:3.08  .90.2.90708  207483/0...-0 ..807..08  2074..907$  :36:008903497489548 08948843482E825479.3:.3897:.907080850.7.. %54/0..7./03./0.2./01472.O3  020394 8 / 1 .7E.-086:0803.3908    ./0!!/00-894 ./ 9900254/0!!.

990 .

203903907..79094 3:2 57391 !:0/01E.7-8...0./ -4/ 55 .

43320748-/.-.

.--7 .7 3:2   57391 % ##!   147      .

57391 979/ /.

9/.

97   < 57391 .

9.-0   .

-4/ .

./03./03..4393:..5.4708 6:0 5489074720390 0 3/.6:08003.... ./02E8 /0 54/07 1472.94 ../03.304 /0 .7..7 .    897548 ./03. .6:05739150740708:9.573.547.4708/08.42  92 0... 23.O3 05.:0./03...08/0:3.:0397.7./..90.-0         ./03.    859 805. .7 472.90./03../03. .. /0 1472. ./03.:094..304/0.8 ../03../03..  0250..    897*705../03..7..4/0439:/439:/    .92 .. 0 2.3/4:3.7./0 9094.039..7E.424:3. ./03.3/....904 3/..03../4 0 :84 /0 03:. 3485072903907.89./03..1472.:.7 ./03.....20394 /0 .8 2E8 :8.7. 9094 #0025. 08 6:0 .7909403970048     . :8.0:3.0 ./47 ./03.45 ./47    857391 .7.. .3 /0 705708039..488.70248 .70248  ./03../03./03..8  ..907 805.4 439:/ 0.9.0 !! 0 97. .7E....8:8.0032074/0.8 ..:3..48085./408/0../0:3./03.O24 80 .8 08 2: 25479.:0./01472./03974/0.90708/0:3..3/45473./03.94 ./ 9900254/0!!./0497.8    89703 .3:.0309094    55 57391 .4308 5...948/0J30.O303.548.4813. ./03../0!!/00-894 .E3/4348 .-0 ..390  08903 -.7 48 ../03.8:-. 3././03.    8:-897 .3908 1:3. 48/0.

990 .

0./ -4/ 55 57391 3:2074/48.43/107039081472.948/1 1      .

-4/ .

:0303..7.7.94 5:0/0 3.3. /0 ..8.:7 :3./03.90708 0850./03. /0 1472.7E.O3  020394 8 %54/0. .90..4241472.3897:..-0 ..90708  .08 6:0 3/../0. 807.7.7E..-086:0803..92      © nf © ¯½I n –€ °    .

2./ 1 .907$  :36:008903497489548 08948843482E825479.43/0.08  2074./0!!/00-894 .7E./ 9900254/0!!.2.08  . 207483/0.3908        .3:.42  92 0.

990 .

..79094 3:2 57391 !:0/01E.203903907./ -4/ 55 .0..7-8.

43320748-/.-.

7 3:2   57391 % ##!   147      57391 979/ /.- -7 ..

9/.

97   < 57391 .

9.-0   .

-4/ .

:.948/0J30...03. 9094 #0025.../03974/0.:0..0:3. :8../ 9900254/0!!. 48/0.O3 05.8 ./03../03..O303.    8:-897 ../03.548.6:05739150740708:9.4 439:/ 0./03.8 08 2: 25479.:3.304 /0 .90708/0:3./.:0397.42  92 0../03...8    89703 ./03./03./03.8:8.7E.    897*705./0!!/00-894 .7.390  08903 -.4393:../03./03.:094../03./408/0. ./0 9094../03.E3/4348 ..  0250..7 472./47    857391 ./4 0 :84 /0 03:.8 2E8 :8.3/4:3.7.3:./03.0 ../03.45 ../0497.488...4/0439:/439:/    ./03.547..    897548 ./03.3908 1:3./03.7. ../03.. 23.. .9.0309094   .48085.907 805. .0 !! 0 97.20394 /0 .89./03.. ... 3.4308 5.90./01472.8:-.7.4813.6:08003.424:3....8  ..3/.304/0.3/45473..94 .0032074/0.7 ../03.70248 ...08/0:3... .    859 805./0:3./03.92 .7E./03...:0. 0 2./47 ..

990 .

/ -4/ 55 .0.

8:-.33 .0:3.  147  5.-7.-7.. 07-. -7-7  0.45 .08-7-7  0./03..4897*705...:0.45.57:0-.07/0 744 &350/0.   -7-7  1 .07/008.4708:9.424.8(  0..489703  -7  5.48:-897 0.-7.0.  0.-7.-7../0497./03.07/0 .447../4 -7  0.0 .5..8( -7  708:9.17.8859  89408:3.4:./03.80 5./4857391 /-7    0..4897548 :8./03974/0.  -7   .

-4/ .

O3709473.70 5.7.8 3897:.8J 2824 54/0248 /0.2.08  ..20390 54/0248 5.0. 089./.3 .5.1:3.47    .47*/0*7094734 <    5.O3 709:73 .7-7. .8./ 9900254/0!!.O3 3897:....4308  :84 /0 1:3.7..424 .3:.07 :3 708:9. .7:5.9.4 :3 844 342-70  54/07 .3/4:3..8 .4308 6:0 80 97.//008..4  55 1:3...4308 -.8 1:3./ /0 .20974   3897:. .. 30...43.-0 4.94342-70 5.8 .42  92 0.90723.7.4.08 /08/0 /10703908 8948  ./4 .7..43 .47894574/:.4308 348 /.O3 3897:..20974 5.08/.O3/0.7.7.O3 3897:.7E209748 .477E3/4348 ..8/03:0.O3  709:73.0.92  :3.7..8 .7 . 3897:./0!!/00-894 .

990 .

/ -4/ 55  1:3.0. . .  20/. .. .79209.94320/.*.

 .

  -7 0.79209.420/..420/.79209.*.   -7   .709:7320/.*. <  0..

-4/ .

748 :..92  © nf © ¯½I n –€ °     .f° © nf °f¾   f    5479.4308/0:8:.3!.-4  ¯f¾ '°nf °    ³f °ff½fn° .

.

N48 097.:0394    6:J3425479.071.7.390307:347/036:080.  .7.02:.-./48/08.2-F3 . 1:3.:.7.6:09:.*5..:/.-.7.79.24394 390708 /08.:/.4308.2E803903/-05.5.4308.3/03974/0.7.803.97.81:3.0/0320748 F894880.3.43F 89428248:0706:048342-708/0.4..7.8.:942.:0394*547*.248/0/08.4 24394 20808  /08.948097.497486:0/0-.397.:0394/08.  55  24394   20808 390708390708*.:.O/480.3../0. 95. .81:3.O38803708.:/.1:3.39003903/-0547 . %.40306:54  -707J.70.O3   313 .4:203 24394  949.48 !4700254 08:0390.4397-:03.307747 %.8 /090.8.6:07.2..759..3/03974/0.. 9.O/408-.5745.9.:0394800.703907F8 82502039080.6:F2F94/480:8.81:3.2-F3.4308 /0-03807..3/439039.3.89.9../03907F85:0/07/03974/0.:. 1:3.5.O34897..3/.

07. 03 /8939.8/854307/008.7:5.074  /0 2..43081E.8 1:3..-0.20390   .089.:7 089.3:. :84 /0 -707J.4308  .7E0394/.307.8 08 970203/.!.42   55 1:3.81:3.-0.85E3..-08 03 :3 2824 1.7.7.943..88:85E3.7 .3.     %$ 89.07. 6:0 :04 54/0248 3. -707J./0!!/00-894 .8 .20390 9  348 5072903 .

943!0!. . %# 7  <  1:3.3.    7  %$ 89008050/05E3.

 .7.. -707J.07.O3 5.3 . %# :9474. 08 3..-0. /013/. -707J. .282.50/05.70. .. .6:37.39074720390 5.3. .7  5E3.3:.3.8 6:0 :8..:/0 342-70 /0 -707J.:7 :3.3. 3.  <   I n –€ °  47. 03 3:0897./ 9900254/0!!..4380:76:0..7.248 . 3897:.    .8/485.8903. 5E3.42  92 0./0!!/00-894 .

990 .

0.  592  55.48.-0.3.--. #####  43903/4-.   !E3.-## 2E8.8 ##  13##  55!0!.07.3.  .:/0 -707./ -4/ 553.!.-.

-4/ .

92  © nf © ¯½I n –€ °   .3:./0!!/00-894 .42  92 .

0./ 9900254/0!!.

990 .

## .  .3.   89..3.20390/8939.## 5074.07.42509.-0.43.497.07...0.5E3.790050./ -4/ 553.-0.!. ##  55!0!.08497.425.  592  55.:/0 -707.

-4/ .

 803.74 .31472...O36:00:8:.31472.O3/0/. 2. /0 2./0!!/00-894 .42  92 0.J470.3:.08.08.30.!!6:0574.307.43.7:31472:...7.   .5E3.92 3.74/0-02483/./4  /80N./ 9900254/0!!. :3.3974/:.307.05.7 1472:.8J .424032F94/454706:08005.O3.948  03:.7.0 !! 348 574547.74.2.7E.748  50729F3/4348/0089..574.8.5E3.7E01472:.

990 .

/ -4/ 0254/0574./4/01472:.08.0.748.

 3974/:.7 . 592% % !&%%!909342-70# !&%%!8:-29'&3...8:342-70  #% 574.08.

 # .

-4/ .

096:09.-./0!!/00-894 .7.77.430.74 .5E3.   !!./74 /09094 08 03.3974/:.7 0 .7 0 -49O3 3.70.7.:..390   ...7. .7E209748  308900025480./403.8 ./ .0397..-08 /0 1472:.70.797 /0 03943...-0547. 6:0 3/./4 . 5.97-:94% /0.030..77.7.:3.42  92 0.. 6:0 :8.47 6:0 ./4:3. 0020394 /0  #  089.7485.903J.92  © nf © ¯½I n –€ °   5:8.-J.. .08 5..-0../4  !074 547 7.0/07 ../.476:0.:./ 9900254/0!!.3907470 . 5E3. ./74/09094/0.0.7.248 3974/:.02824342-706:00.4308 /0 80:7/./.0784308.70../. /0 5..7 0 ./45.43903/4 /0 .430J3/..3:..*%(.248030.7E209748 *! $%( 4 *%(/0503/03/4/02F94/4:8.03.39074708 . #  3 ...0 342-70  .

990 .

/4/01472:.748.08./ -4/ 0254/0574.0.

 .

3974/:.4*% 342-70 ( -7 .342-706:0./408550.

-4/ .

8 6:0 0 2F94/4 % 03. 1472.97-:94% /0.39002F94/43/.  20397. 5E3. 03970 08948 /48 2F94/48 7. 48 /.3/4 . 03 ./..089E3/. 096:09.92 094/%! $% 3 .948 /0 :3 1472:.0397.42  92 0.J.74 80 03.547.. 5E3.7$%   ./4 6:0 48 /. /0 03. # 48/482F94/48 548-08843%! $%  . &#  0 2F94/4 ! $% 48 03././4030 .. /10703..390747 0248 . ./ 9900254/0!!. .3:.J.948 .7 48 /./0!!/00-894 .J.948 :8.42039. 20/.

990 .

/4/01472:.08.0./ -4/ 0254/0574.748.

50/48!&%%!909.8:342-70!&%%!909342-70# 3974/:..   #% 574.8:8.7 .50/48# !&%%!8:-29'&3...08. 592% % 3974/:.

 # .

-4/ .

42  92 0./ 9900254/0!!./0!!/00-894 .3:.92  © nf © ¯½I n –€ °     .

990 .

/4/01472:.08./ -4/ 0254/0574.0.748.

.8:342-70!&%%!909342-70# 3974/:.  #% 574..50/48!&%%!909.08..7 .8:8.50/48# !&%%!8:-29'&3. 592% ! $% 3974/:.

 # .

-4/ .

08.92  © nf © ¯½I n –€ °    574. 592 .

 ./ 9900254/0!!.42  92 0./0!!/00-894 .3:.

990 .

0.748./4/01472:./ -4/ 0254/0574.08.

/4547! $%08550.3974/:.4*% 342-70 (   *% ./4547%08550.3974/:. 342-706:0.50/48 ( -7 .50/48 (-7 342-706:0.4*! $% 342-70 (   *! $% .

-4/ .

/02038./7 31472. /0893.7E209748 .7E20974 /0893....:0754/02038.4/002.:7 5.0 31472.2.O32.4/1.O3/002./4803. 5. 9094/02038..8 0903//.07. 2038.307.     3 .43.74 902.3:.07.702.8./.43.9.&#  3.0 ./ 9900254/0!!.0902.7.04 003:./70./0!!/00-894 ..9.7E20974 9094 /0 2038.00.. /0 ..7E209748 5.   6:0 348 507290 .0   .74543/70248. 839..9.O3 2.42  92 0.43.O3./48.0  55 2.7E20974 902.-0./43/08003.548-/. 9094/02038. 3897:.3897:...1E.8 !!3484170.34  890 :3.6:0089E3.0 030 5./.424 #05 %4  742  439039 950  6:0 348 5072903 90307 :3 2.0     305./413..0348574547.../0.07.47 .. 54/70248 3..43./.0031472.-0. /0893.07485.00 5.0802824 8446:0.N.   55 2.9490945.74 902..-0.4302F94/4%54/0248.O3.//003.92  I n –€ °  708:9.803.7E0 2038. 31472.43974 84-7002038.. 48:-0.8/0:3.O3 /0 .9/02038.08 ..0.

990 .

.0./ -4/ 0254/003.4/002.

.8:/70. 3974/:.. .43/002.

34%0945.43## 472. #% 02./4954'&92%## !&%%!8:-29'&3.34# !&%%!7./4954'&5...7 . 592% % !&%%!909/70.94# !&%%!7.

 # .

-4/ .

42  92 0. 592  .3:./ 9900254/0!!.92  I n –€ °    02./0!!/00-894 .

990 .

4/002../ -4/ 0254/003.0.

..34  ..  /70.43  1 9545.43*% /70.43 ( 954*% 954 (  1 /70.

.

/09094 5.4031472.43 0254/003.34330-894 3995.9490945.4/002. /70..3.4/002. 0254/003.34  2.

.

42. 0-0894 .

423  <080 .085. .8907492.7./4708 0- 3 # !7:0-.774.80-2.3:./08.3.

.

3. 920../9900-894 .4031472.4/002.3:. /70.94% 2. /0!!.43 0254/003.

990.

/-4/0254/003.4/002.0./0 %-7-70-894 -7995.

.

 0-0894 .42.

08.3:.-7:.

:5./4708.774. -/08.7.

-0- .

-4/.

92 439039 950909.

8 0-2.43 /70..923 # !7:0-..4$0.94 - 954 ../4:302. .03./70..43 031472.8907492.423  < 0..

-  <  -7 .

 # .

-4/ .

.. 2.70.8 5E3../.7.7.85.70.42.948024800/4 .8 .3/45.9:9.70.92 70.80 /0 /.-.7:3. 4 .  547 807 9.7./.43..70024854734849748 28248  .:78484-70!!...084.%03095.../47 /43/0 9030248 . 03 03947348 &  5. 0 807.8 348 9030 6:0 574547..4.-. -.:.7077.084.948$"0808:0390 .7.2-F3 .7.-.7.7.O3/00890.8 0250.80/0/.80/0/.80/0/.43..948 !.6:0.948 $" 547 807 7.4.2039.

O3 /0 $" /0 8: 807.808/0 /.7.8 !.42  92 0./. .7.. 077. 00..70.7E 5. 57:0-..948 70.O3 286 :7449-.7 .7.7.2.9. .948033:08974807.43  .948030807..7..7./23897.-.31472.8 .7-7 :3 1.39  &%  %&.70248030.702039  42-70..286.80/0/.423 5../47  &3./47 0- 4 5:0/0 08.80/0/.248 :3./0!!/00-894 .50/4/0 .074 /0 9094 .08    3 0890 00254 .70. /0 .547924:3.254 /0391.808 /0 /.7348 .4390303.70.4 . !! !..2039.430.7   !## *!7:0-.-./23 :7449..2548 :3 ./.8070/0 3897:. :3.4380:248.803.3:.948 &3.80*/.3/4.282.:.80 /0 /.47 /0 /.4.89.75.:94*3.. 1.4380:/4 0894/0-0248 .80 /0/.7   50/48.03.  *!7:0-...-.948/03:08974807.70248 03 03:. 86 #%%57:0-.O3 /0.43085.7.7 .948 6:0 . 24947 /0 -.8 -. 5:0/0 :8. *!7:0-.20390 :3.  !.43 0 . $" 06:.507843..O36:0.  &"&*!7:0-.4 .    430O3.808/0/.-.438:9../08.7 ...507843.80/0/.43.-.5E3.43./ 9900254/0!!.-.0897:. /0391. ..7.-.70./0. 8:0390 3897:.-.../08/0:3..0 /0 .8...43 . .948 .0390  :04 /0... 803903..-..7.89. 94/.948$"   .430342-70/0:3.:90 .:3.42.430.70 .9:7.7 :3J.94857:0-.70.70. 9. :8.90-.. 86  57:0-.06:09030248.8408 .254.0/07.8 $" ../47 08:03905./47  6:0 348 807..254 4974.948 430890.0 . 9.04 !!348574547./47/0-.2.43903/4 /0 .254.43 0 .80*/.

990 .

948  09  < 1 286*800.0.80*/.430..47747800.-..9 4.-.80/0/.489 :8:.47747./ -4/ 55 1:3.43.9.948 3   0.9*/.943430.780   1  3286*.3/4..3/4.948  09  <  .9.8847/  0.-.80/0/.74 !.4330.

948.480 3 .4430O3.780  0.709:733 <  3430.9.80/0/.4380:/.-. -7  286*.43.

.

..43043  ..077.

-4/ .

 !!  0890 .:4 807E :8./4 5489074720390 03 .J3.80/0 /.8 6:0 .70248.8 .948 4 -07.3897:.80/0/.-.438:9.7 0.9. -.3./.43.:5.O3 286*.. 5..430O3346:0/04.:403970..248 ..248:3.4805.3897:.92   00.:4 .7.J3.20390 :3.70.7.948 .6:0.43.    .-. .J3.O3286*.948  3.80/0/..06:0 024890723.:9./4 /0 :8.4330.

 ff f¾   f¾ .

 –ff°'¯f n¯    92 0.748 7.°¾f¾ff f¾   f¾    5479.3420/..4308/0:8:./ 990%90070..

990 .

94803$6  .08:3.81.430.948../-57:0-.54//4.43003$6 3286*.7089.9.1472.80   .4397.80/0/.4330.80/0/...:9.43/0.9 42-70489 &8:.80N.780.430.7   $00..-.9.430.42.9.43.7/0800.7 286*800..948 ³f °ff½fn°  ./0 .  47/0 3480./ -4/ 55  89.-.0.9*/.-.80/0/.-.74 .077.  47/0 7747.2:..97.43..

.

  .

480 3    .286*.

-4/ .

/47 /0 -.-.80/0/.438:9..89. .5747.:702480394/.948 &3.2...-.8.307. 5./4.O3/0.-.2.948  .9.8/0.808 /0 /./4 .-707J.0/..42  92 0.7.92 438:9.1:3../ 900254/0!!.6:0.430.86:0.430O303:3.3:..85E3.430 592  ..8.7.O30248805.9.790 /09..7.80/0/.80/0/./0!!/00-894 .0 6:0 348 0248 .948  !.7.8.. 54/0248 70.948  .43 0 807.-.3.3.1.

990 .

-.0.480 3 .80*/.9.74 !..948.4380:/.4430O3.47747.9.3/4.430..4330.8847/  0.943430.780  0.80/0/.948  09  < 1 286*800./ -4/ 55 1:3.9.948 3   0.3/4.948  09  < 709:733 <  3430.43.9 4.80/0/.-.43.47747800. -7  286*.489 :8:.780   1  3286*.80/0/.-.-..9*/.

.

...43043  .077.

-4/ .

J3.248:3.. 5.3897:.92   I n –€ °   © nf © ¯½    00.948  .248 .:403970. .8 6:0 ..O3 286*.3.4330.-. !!  0890 ./4 5489074720390 03 .438:9.80/0/.9.948 .8 .80/0/.70.:4 807E :8. -.7.:9.J3.

1:3.948  !.9.438:9.3:.  438:9.80/0/.-.-.:4 .:5.80/0/.3/4../ 9900254/0!!.-./4.20390 :3.. 5.O3/0..3:.43.2..4330.8.5747.9*/.0/.430O3346:0/04.6:0.3.80*/.430 592  . 54/0248 70.948  .86:0.780   1  3286*.948  09  < 1 286*800. .3...-.47747800.9.89.O30248805.948  09  < 709:733 <    I n –€ °     .-707J.8.J3.7.-./47 /0 -.307.O3286*.42  92 0.7./0!!/00-894 .43.3.74 !.430.70248.47747../4 .430..0 6:0 348 0248 .43.8/0..8.943430.3897:./0!!/00-894 .42  55 1:3.-.2.948  .-.948 4 -07.808 /0 /.7.9 4.:702480394/.9.80/0 /.06:0 024890723..80/0/.-...7 0.489 :8:...4805.80/0/.430O303:3.6:0.80/0/..7.8847/  0.790 /09.948 3   0.3/4.1.7.9.948 &3.43 0 807.85E3././4 /0 :8.

990 .

43!!$".0.808/0/./ -4/ 0254/0:84/0-.948.

 3   % ##$!! %#% 3-8542-70.:/0 .430 592  3430.9.780  708:9286*6:07 800. 55 3.9 174257:0-.

%% 3-8550/48 3-85.

%.

77. 708:9  57391 979/ 3-858.%# 55  0 74286*109.*.

9/9/ 3-858 3-85.

9/.

480 3   .97  7442-70( 7450/48(  < 286*1700*708:9 708:9  286*.

-0 .9.

-4/ .

92 .

8 $"  ..    ..  .8 286*6:07  286*109.O3 286*109.80 /0 /./.43 286*1700*708:9-07. 3897:.*. 097.O3 286*6:07 0248 0. :3 ..438:9.4 :3.:8. 3897:. .77.77.20247.  286*1700*708:9  43 ..438:9.03. .0248 48 /.438:9./4  3897:. .248..43 .948 /0 . © nf © ¯½I n –€ °    3 0890 00254 0248 :9.77.948 03 0 03:.*. .4308 3:0. -.0 /0 .438:9..

77074 f–n'¯f n¯   0370../082047.748 .4.7.7.° °ff f¾   f¾ °¾ f –¾¾    5479.4308/0:8:.:/4.70./. 55   .4240894  80.

759   .75914780.-.  80.80545:.90 55 8.7.90/9047/8-90 545:.9./.3.7. 55  $.

330./990$0.  5739920.7.

990.

/-4/3  1 *! $% 047/ (   .0.

9. 4330.80 .-.99490/.

-.4330.9 4.8   .80  286*800.43897:.489 . 286*5.8 /99': 4  47/0 ## #4:/349.43897:.9*/..4330.994/..9.

0992089.25-0147000.:93906:07 .

79*920092.74920   . 89.

$09047/.3/:80.422.:93:3.//8.3/8 .390/$".3/708:98 .808 94 232090784100.

//8.808 *! $% 047/ (  ³f °ff½fn° . 047/.

.

  .

708:98.//8.808 *! $% 708:98 (   .

390 .95071472890.7.9:.. 0.:90906:079.80.

0*/  47/*/4 47/*/  47/*47/047/ # &!5 5..05 47/ 4.:7703..04 #5 5.:7703.08$ %708:98   .:7703. 708:9286*6:07 $%5 5.0*/4 5.08 # 5.0*:7$:7   &% $4..0*/ ##4.

0992089.2503906:0781380/ .

 03/*920092.74920   .

 708:98 .7. !7080399080.

7. 5739$0.708:98147  *! $% 047/ (  .

3 147 74286*109.701  74 :7 (   74 :7 ( . 708:9     5739 .77.*.

3 5739 4.08 (  -7-73 <  ..08 74 4.:7703..:7703..

:90906:07 . !70803944399449000.

79*920  80. 57396:0700.:90/3 8:-897 03/*920 89.43/8  < 080  .

/ . 134047/8/0130/ 57080399080.5.03890.7.

93.:0  . 573914722094/ 5489 047/ 35:9950 909 80  3..20 047/ 3 5739#08:98800.20 708:98 45943.

:0   ..459433 573945943.

:0  ..4594345943.

:0   .459433 573945943..

45943.

:0 $0.7.93  573935:9950 8:-29 .800. ..

14723 <  5739.

-4/.

923  .

2532.94314770970.43/8 . $2501:3.7480.390.:7703992089.

74920   89 :80. 054/0  2. 80.90 55    .  14.9 80. 1:3.943092.74920  709:73 14.9 :80.  <    0497408545:.

939080.90 55  $.9..7.08.  545:./.80947/8  5.08  .759147545:.:703.3/47/ 4.-.

.

  .

9. 4330.99490/.-.80 .

.9089   . 286*5.994/.-.9 4.80   286*800.9.489 7449 80.4330.4330.9*/.709  47/0 ## #4:/349.

0880/ . 013090&#9.984:/-0574.

//8.808 *% :7 (   1 :7   /0 4:300/94/0130.&#94574.  :7.088   < 0801 8:-897 :7  995.

.

   :7995.

.

:7 <  .

70.-0 .0.0 9.47/3905../. 40898&#.70.

77. 708:9   1 74 5.0*/ (   .0*/# 5.0*:7:7  74286*109. 708:9286*6:07 $%5.0#5.*.

108 :80904/5.0*/ .

0*/74 5.0*/ ( < 080  . 5.

1349 .90430 .70.

 286*6:07 $#%% 5.0*:7 '&$ :7   5.0*/286*38079*/  <  .0 5.

80 .-.783974:90909 . $9.3/-:/.9.33/0390/.795.

 1  1/14503 :7 7   /0 4:/3494503&#   0 -:11098 1/      .

09085.3/03/418973 .01742-0333. #024..

 -:1972 -:1   .

8 . %7947024.% 9.0.

0 . -:18975*9..8 -:1  -:1070*705.

.

 -:1   .

. 97.9.9.3907005174290.:7703930 .47/82.

9.*. . 570*2.

- ( .

 -:1 47/8   .

445974:.47/8.

:7703.3/3807990239490/.9.-.4.08.80 ..

 147  47/8(    147  47/8((    .

47/39047/ 9.0.-0 .70./. 40890.70..:7703947/.

 .

*..:7*47/.:7*47/   74286*109. 708:9  1 74 47/*/ (   .77.//8.808 89794407 47/8((    708:9286*6:07 $%47/*/# 47/ #47/*47/ .

108 :80904/47/*/ .

 47/*/74 47/*/ ( < 080  .

70.90430 . 1349 .

 286*6:07 $#%% 47/ 47/*47/ '&$ .:7*47/   47/*/286*38079*/  <  .

0419047/ .. 708907904. 3/13.:7703.

/4 :3.9..:3.2.4708974803.77089748 .:7703.4 .0*/  '&$ 47/*/ 5. 286*6:07 $#%% 4.70248 :3 1472:.89. !!  089.430.948   002 / 592  .3.70248..0 47/*/ 5.7E807E3974/:. .!! 3/.70248 6:0 /0-0 807 574.80 /0/. 5E3.3:.47. 348 0248.-.74  03 0 %  /0  #  # % 5747. -.948/01472:.-./0!!/00-894 .0*/   57393/03. 282. 04 :8.42  92 0.480 1/    38079.438:9..7403./4 .748/..80/0/.948 0248 0.948  !.5708039.:7*47/-7 < < <  1.8 .80/0/.7.47.46:0./ 9900254/0!!.08.73:0.4243974/:. 5.

990 .

43!!$".808/0/./ -4/ 0254/0:84/0-.0.948.

7 592 % %# %42-70.08.  #% 574.

% %!&%%!909342-70$ % .

% .

%# %# %50/48.

50/48$ % .% %!&%%!909.

% .

%# .

-.43'&7...% !&%%!8:-29.7 .

 # .

780  708:9286*6:07 800.7 55 3.9 174257:0-. 3   % ##$!! %#% 3-8542-70.430 592  3430.:/0 .9.

.

%% 3-8550/48.

 3-85.

%.

*.77.%# 55  0 74286*109. 708:9  57391 979/ 3-858.

9/9/ 3-858 3-85.

9/.

97 7442-70(  7450/48(  < 286*1700*708:9 708:9  286*.480 3   .

9.-0 .

-4/ .

7. . 6:0 348 2:0897.50/48 ( 286*6:07 3807939457:0-.43903/4 /0 . 574..43.943002 / 592       .08.948.92  © nf © ¯½I n –€ °    574.7 592 6:0.948$" &3./0:33:0.-.N.9.:0.80 /0 /.3.N.  .3897:. 5E3.780  342-70*% 342-70 ( ..430 592  3430./4 /0 70897480:34/048574. .50/4 5..438:9.80/0/.50/48*% .80:3/..948  80:/4 /0 :3..74.430./07 4. .//480.9. 57207. .002 / 592 477.2.20390  5.:/0 .7.. . 0 ..7 0 .0.077./4 /0 7089748   -477.50/48  3   0. 574. 42-70 50/48 .4  348 6:0/. !! 002 / 592 08 :3 1472:. 0 -477. -./7E48/.08.O3 38079/003:.77089748  13.80/0/.48  .5E3..948.5E3.08.74 6:0 348 507290 3974/:..7 342-70  .N. 1472:..4 708974.0/0-./74 .N.7.08482E8803.9.-..57:0-.7 592 55 3.:08 342-70 .9.-.5..7 59280.7.0070897480 .

-06:00020394/0. 5928.42  92 0.9.307.248 .8E3/40 0 *!7:0-. . 3/./0!!/00-894 . -477../. 2. 708974  /0 089.-./ 9900254/0!!./4 :3 03. 592 5.7   002 0 592  . /0 ./0-477. -477.!. 5E3.0 . ..7 0248 :8.... 5E3.7 6:0 0020394 .7.3:. -477.

990 .

948.808/0/.0.43!!$"./ -4/ 0254/0:84/0-.

  55 3.9.:/0 . 3   % ##$!! %#% 3-8542-70.780  708:9286*6:07 800.430 592  3430.9 174257:0-.

.

%% 3-8550/48.

 3-85.

% % 3-85477.7.

 3-85.

%.

 708:9  57391 979/ 3-858.77.*.%# 55  0 74286*109.

9/9/ 3-858 3-85.

. 701-477.9/9/. 592//477.

..

9/.

(  < 286*1700*708:9 708:9  286*.97  7442-70( 7450/48( 74*!7:0-.480 3   .

9.-0 .

-4/ .

0070897480.. ..5E3.943002 0 592       .80/0/.92  © nf © ¯½I n –€ °    -477.7.070*!7:0-.-477.:/0 .. 002 0 592 &3.5E3./07 4..780  /*% / ( 286*6:07 /0090174257:0-.430 592  3430..:0.8/45. -477.-. 592 55 3.-0/6:0..7./4/08/0..9. 59280./480.9.948-477.0./ 3   0.002 0 592 ..8.5E3.430.07089743/./403.7.

-. 05.8/4389... 8 !! .74  .7E3  !./4.248 .084 .O3 /0 342-70 /0 :8:.07.0 8.8.7.:90391.O3 .7 . 803 6:F 5E3. 8/4 389.079.. 03 ..70248088902.4303.8.0/07.85./..-08 4-..08 !!*&%*&$#  !!*&%*!    !!*&%*&$# 42-70/0:8:...80N.44 %%!  0890 88902..0..7908/03:08974 8940-  903..8 :8.743974/:.424:348002548/0F89.084 708973/4 ./4.:947.#0897370.O3341:3.85E3..3.... . 5E3.8 .80N..7../.3974/:. 55.8:0390.43..8:8..8507843..3/4 .7...85:0/.7./0. 80.O3 /0 57494./4    !!*&%*! 4397.O3  .8 5.7.7..:90391. /0 509.-08 4-.08 !!*&%*&$#  !!*&%*!  !!*&%*%! 844 1:3. 6:0 0 3.  !.8 .6:0844.43.4397. 80.89.O303../47 348 2:08970 ..3.-0.039.4380:7.084 3 089..O24 54/0248 7089737 0 .424:32O/:4/05... 80 -.

.

/07 %%!.3:.70.2.42 1 8809 !!*&%*&$#  0.084708973/4  0.90./0!!/00-894 ./07  :9039..8...

 55.48/./40342-70/0:8:.7.4397.80N..3.430830..4397.70894/0..74.7408 40.42574-..7../0342-70/0:8:..4.8J903/70248.-08 !!*&%*&$#!!*&%*!  5.O3  .  &3.5E3.8.80N.73486:048 /..85.6:J70.797/0.80:7.084.!!*&%*!-7 <   © nf © ¯½I n –€ °  894574.039.70248 8 0 342-70 /0 :8:.943#06:70/  09 < 080 0.948 3974/:.:947.7..4770.4.70248.74!!*&%*&$#-7 0.3974/:..80N.8303. 808..948  3 0 8:0390 00254 50/70248 .8.08.4 :947.3974/:.42574-.4./4884348..6:0802:08970./4./4880..4397.:9470/  0.9483974/:.

.

/07 %%!.70.3:.2./07  :9039../0!!/00-894 .084708973/4 0...42 1 !!*&%*&$#40  !!*&%*!  0.90.8.

943#06:70/  09 <   .3:./0!!/00-894 .4 :947.  &3./ 9900254/0!!.:9470/  0.42  92 0.

990 .

/  .0.

.4380:/40..-4/ ..43..084.708973/..

  .

-4/ .

43 0 1.8 .//03:08974894  3089.-. 6:0/0 089.80N. 1472..074 /0 .7483..80N..70894 90303/4:31..8 6:0 0248 ./01.42574209/.  55.07070894/0.80:7/.8847/8 99 40 !0/74607 4090 072970. 507843.42034/0.92 893.O3 08 2047 6:0 .80N.74. :3 342-70 /0 :8:.83480.4397.748 3.5E3.5E3. 90307 0 8:0390 1472.74  .4397.390747/.4397..80N.5.790708973/. .74...7.:3./0390203903408:3.1472.O3/0:8:.4397.3907475E3.4348 342-708 /0 :8:.E/.-:03.084.2.43 . !4700254  5./  80 ./4 .43.74.:947..074 54/7J./.43 02824342-70/0:8:. 08940.07.94/402:3/46:0903J.:3:8:.84:.4397.089.5E3.074 80348507290.8 ...7.94 342-70*/0*:8:.   3089000254805/0./070.-9..074805./4.43. 54/02483./.8847/8 99 80342-70/0:8:.80N.8  .80N.4257:0-.-0. 903.4397../4 5.070248.4 1.0397.0397.74  ..O3.  ./0..

.

42 1 8809 !!*&%*&$#  0.3:..70.90./07 %%!.2.084708973/4  0.../0!!/00-894 .8./07  :9039.

(  1 !!*&%*&$#..80 0 1.254 (   !!*&%*!..254(  ./07 %%!.943#06:70/  09 <  1./.10 5.2...../497:0   <  1 .70./4  0./.  &3.8847/8 99   ../41./.254054/0  1..:9470/  0./4  .90../07  :9039.8./.4 :947.45 .084708973/4  0.( .

4 :947./0!!/00-894 .943#06:70/  09 <   .  &3.3:.42  92 0./ 9900254/0!!.:9470/  0.

990 .

43..0.4380:/40./ -4/ .084....708973/..

.4 !!*&%*&$#  .430:8:.74550.

-4/ .

92  .

4308 /0 1472:.84..889.  9F7234808O303!! 808843033F8 80.4408/0503/0/0:8:.7 8084308 03 !! 4 572074 08 3.084 03 .7.79:85745.8./47 3. /0 089.....76:0.70.83.-.3 /08.-0 3.47.24803!!9030248.8-707J. 5. 039/.43...88084308 !47480'..9.797 /0 .7.:03. '0.6:07 03:.. 08 9047J. 0307. !!  $ .88084308   :84 /0 8084308 08 :3 2F94/4 . 6:0 34 507/. 808O3 $ 0890 ..248 0 4 /0 ./8543-/.0.:3.808O3.0 /0 5747.390 808843*708907 2'.O3 54/7J...7 :3.....033:08974894 ..438:9.7. 486:05747.-0 03 :3.89.780/046:0:3:8:.:03..7 089.0   !.:84/0.-0 .390 .248:3803.808903908 .70509/.70248:3/0391.O3 808843*89.6:04.089. 807 ./.5.:3.7 :3 ...8 .O3  5.5..8 &#8  . 5:7.42039.":F843.O3 /0 .04.89.7..:.74 3408.79 808O320/.2-48.079.0303901./0.70.74../473.5.5..O3/0./4  4 .:. 70897.4    5.O3 !07 09.0 /0 5747.439.0/0391.002824!!  !47 4 9..:.9:.7.80.86:0:3:8:.0.8:0790/06:094/.8  !4/0248 .  08 .25.43./05E3. 808O3 8340890 48070942.80.20390:3. 808O3 ./03.3:0.2. :3.6:07 .70.440 6:0 3.42320390 .745:0/.-9./434/0 .. ..20390 0903//4 03 .0   $0890:3. ..74 /0-070248 .. .:777.4 .248.89...8!! 903/7E86:0./47/0808O3800/03423./4 .808O308.03.424.O3 /0 :8:.9../4 .70.7.0.8 8084308/0 3. 94/. .8J  890 :3./47/0808O3 507408.8/0!! 08.2.70..424.400254 55.808O3 !47480'.:. . :9. 1:3.46:0. 3.2.6:J 08 844 .03039070..7:3/0391..3/43..O3 0890/0391.74  !4/0248 9. 05J..074  4 ./ E8.6:07 03:.2-F3 .47/.434 90307..774.808O3   574. 70942.20390  20/.. 089O3/08084308.70.84880..248 :3.-0 ..03:3894 0- 08/06:00397.. 3:0..8/0089O3/08084308470./0!!  3.394 4 .248 $ 34 0890 ..

.

403...808O3    ./4./0!!/00-894 ..42  808843*89.79  0.3:.

 1472./0:3.07 3.808O3F89../48  !! .0248 3. 2E8 -E8.6:07 2420394 20/.4 .8.08. 1:3. 57E.390 ..  5074 34 .03./.808O3089E/8543-0 55.9.88:.. 808O3 08 4507..078.8... 808O3 03 .497.5E3. © nf © ¯½I n –€ °  89.83 ..O3 808843*/  38079.4408 ..89.85E3.5.-7E 38079.9./.8:0390J30.  !4/0248 4-90307 ./4/01472.:.9.. 08 .74 9030 48 ..807E5.:942E9.  8 0 :8:. 2E8  08/0 :3 5:394 /0 ./.7..

.

4 !47480'.79  .4393:..:0..08 808843*/     © nf © ¯½I n –€ °  3 0890 ..84 808843*89. 808843*/ /0.3:.9...4 .2484974002546:0 9.42  808843*89. 03 48 .430.9:..0 904.  025457E.9:.808O3.79  0.4257:0-. 808O3  ./0!!/00-894 .4408 6:0 0890 :3../47...0   '0.42E8 55.00/0391.70:354.

.

439.439../47 (  .3:./47.42  808843*708907 .4 ./47  0./0!!/00-894 ..0   *$$$  .701 !!*$  $ 439.

424.O3:3..-0/0808O3 5:0/0708:9./0.4390300342-70/0 .-0/0808O320/../47 :394.248.94 E8..03...:.   © nf © ¯½I n –€ °  424 /0 .7. J30.4030807.390808843*708907   4 $34. 808O3 80 .439..3905745..74  33:0897400254..282..07010703. 574548./47/0.43.7./47803../47/0808O3  6:05079030..0 6:0 70.2039008:3.702039..-0 .430/0391.0248:84/0..-0 .390747 70897..6:07.8  .:3.  03970 497..J1.7..7590300.20390../0!!  $ 6:0..39074720390 ..7.40 20/.:.:3:8:.759  3 .7 :354.48..84-70003..3/48070897..88084308 0./43:3./.40850..248.8:9.J30.-897.4.7E03  3089./0 8.. !!*$ 6:0.808O30/0391..7:0248 . 4 70.!!  50746:0708/003:3085./4703.  .79 9.439.57207.-070807.2-F3.7.390 808843*89. 80:3/. .86:008943.4389.8 ....70.J30...0 0. 5E3..47/0.:.0594/0. 4 ./.

..2-F30342-70/0.79. 55..808O3 424/1.248:3.808843*3.74 20/.1:3.57E.390.07:.57:0-.O3 '0.20 !4/0248.9.

.

701 !!*$  $ 439.439../47 ( .42 808843*3.4 .3:.20 280843  808843*708907 .0 *$$$  ./47  0./0!!/00-894 ..439./47.

O3.39086:033:3..4 47.774 – ¯f° ½f'f¯°¾ €¾¯ n   ³f °ff½fn° .-7  0.43 8084308 .1:3..O3/0342-70/0808O3/0-070.4308/0:8:..20 .0342-7008 808843*3.83..808O3 280843 -7    © nf © ¯½I n –€ °  .780.3!.497.748 072.39086:0808843*89.79 4808843*708907   °nffn° f¾ ¾° n¯°    5479..

.

-0(   84   14384 fn ¾f'¯f n¯   .438/07.7708907*4-.-9.4/0-07.7.424*! $%.424.  !...7806:0.8072E803F7.7.../08.-0 834.7.-088O4.780 48342-708/0.7.8.8345:0/0:8.

.

.3808430808/0..7J30.0   &34/04807747082E8.574-.6:07.7.74.84/090307 /08...4 ..48./44-.:.:3.O3/0!!403./.43.70.7.:/48  7747.:.3908/055  .. !.3.39.3.7/0825020390280843030.-9.3.44.  *#"&$%280843(0300025403:.:3.03-.03055 3  $.. J30.5..3/480:9.3908/0.423 !47480'..803-.8.42:308.

3349803/808843.790/./48 9003.733./078.4408..$9030848.9.4397.7E8:307747/00890954 .70../8039- 4:95:9 89.9.440 0.

420.

808843 55 3.

420.

3 34 03903/08 5.248 :3 00254 57E./0.0.-E8.13..9. /0 :3.70. J30..4 2.0..089../4 ./47/0:8:.4257.8 ./4 . /0 .4.03 -.807.6:06:807..7E2:. 34/008085.03 .8 8084308  .4/08.4257./0. 08903.57E.7. !47480'.7 :3 88902.748.54/7J.9.7:388902.0   $ /085:F8 /0 94/4 4 .8 8084308  .9..3.483.248:30025457E.3.089. .759 3/085:F8/0 .8J 55.03 . /0 ...4257. 6:0 6:807.3. 6:0 87.4 42420//.-0. ..48/8:8948    $ /085:F8 /0 94/4 4 .3 34 03903/08 5.42039..9.808843 554330 !!089E31472.  038:1472.3/4/06:0345:0/0..  .07.7.74  5476:0 .70.42039.0.477.3 8/4 03.8 .8 .44080303.7794/0./..8  $25020390 547 .3908/03.O3  %0.8. 6:0 87.4  2.

.

/ 03.39/.8.42 808843*89.79  808843*708907 90283089.4397.:0N.3:.8:3/.943!!*$  $2094/5489 200574/:../ ( 90283089. (  1 902  1 8809 90283089.9435:99509093. 90283089./7.20..*$$$  90283089./ < < *$$$  90283089.  90283089...39/.-7 .  1 902  90283089./0835:99509093..39/....( ../4 < < 1 03.../*! $% ...089. (90283089./80 -7 35:99508:-29.2090280 -7 :.902(.39/.4397.39/./ <080 1470.902(./0!!/00-894 ./4 90283089.  902*! $% 902 ( .39.39/.  92 -4/ 99 1472.

..08-7  .43903/4/0.1472  1 8809 90283089.089.4 .  0./0.4257.

8..  0.4 79J.1470. -7  < <  .. 90283089.:4  :/ .

99 .

-4/ .

3/4 ../248 0 3:0.84. 497.9. /0 .248. ..J30./03.2... 08943.430 3:0.03.94.248.03..3.8 J30..79J.089...N.248 8 0 :8:. /43/00250.3 .20394 /0 31472.3/.7.79J.O3257224801472:.8 803. ..  .88084308 0850746:090.8./.4344.4397.  .8.77.808/0/.340890 4.81. 5.  !! .907J89.4393:. $34 4 03.43./3/. J30..8..0748 3-.74 .4574/:./4 :897..7.70.4708 /0 :3.. 5E3./4 .3/4 08948 /.43 .O3/43/02E83483907080  89./.39/.8/0.8843.39/.31472.0%  %0 2.948 547 34849748  . . 90283089.8 430.:4:.394  .42574-.438:9.80././08-E8.94 .708:9.4 ..89.39/../08..:84/08084308030 ¯f°f 99  ":F843.248:3.. -70.74 3./248.948 3903086:0. $0.8 548-/.797/0. J30.43903/4 03970./.0 05..92   © nf © ¯½I n –€ °  &3.75.4 574/:.8 ..248  08 :3 3:0.81:3. 0 2420394036:0/0. ./.:4  547 4 9.N.7448708:9.77.2..8.4397.089070.79J.:4 /08/001472:.4408 !47..03.4308.J30..7070894/01:3.5. 90283089.8./48 848:-07./08 /0 :3 88902.O3 /0 089.47702488:.47708543/0390.O3  3 .

:84/:7.0390030807.0.O3 80 6:0/.573./0391.059.85.0.8 .O3.039..89.807.4308 /0 31472..8 .0.03. /0089./../47/08/00807..8J.0890.8 547.390.8/0:328248940 3... .5.2.09.../0..97..0390 3.8 6:0 .3.003 F  . 089.9.8..3 70897.0./47  aZU[ZSWZ`[ .8 /08/0 0 807./03.0.:9/.6:37.F8/0.O3/0.f¾f¾f4.4408 .8 03 0890  :04 0 3.97....30.803970/893948/J./084.8 08.J..//0.1.4400803.20390 .4408  506:0N..8 03 0 3...4408 34 843 2././4780890.3./475072903/4./403./47 03.8  #0.70574-02./47 ./475072903/4/0391.8 /0 9094 6:0 843 03..../.80-  43 ./.7..8 .5072./47   .   .4408.3.F8/0/107039085E3.

.790/0807. 5072903/4.4408 !47.745475..440.4393:.424:8.07.O3/0:8:.7.0.8.4  O24:8.3:08974-0301.O3.85E3./0391.8.7.0./47   .7.803./47   3.../47.248.85/03..3.. .J.44085...

.394 /0-070248 70.3908/0.382909.:70(((((  $09. 0.:0 '.7.42 20397.05940342-7084345.3 .7.4406:0089.440 897342-70 8973'....03.440834/0!!  %4/4848.4408097.6:07 9.4308 .47. ./42.4308&920  2920 472..43:3.440 /0130:3.440348097.3 ..0390  570 .08:3.2.86:08 5430248/42./8543-0./03./.9 8973 4234 39$0...4406:00803.440803!!8070.1:3.44084.47.J.43080342-70 %.O3 5.7.. 1:3..   '.  /42.440 $....7:2039480. 920   80:3/48/0/:7....:394.440 089.6:079..3908 /0 .03.039080023.2-F354/0248 70025.3 .248:3.3945.f¾f¾f4..7:20394.1.4400301472./:7.078O3/0!!  39809.20390..7..7.4408/0-0380703..42...43070894/0.:0./07 .70.47 39570 8973!.440030.:.7E.O3/0:3.. 0850.42..430342-70 03 0.20/.8..424/4234  /42...8.440  !./092 5474 9.440  4234 423403/43/09030..O3089./..8.42 O O O O .-0..O3/0.9 $:-/70.3 .. 089.440 $5430248.6:0/0./.947403/43/09030.:.382905. .42..2..07. % 4  89.7:203940390746:03/.81:3.7 .   2.476:0.8 1:3.7.43.7..47..7.2039080:8.70897..5.:.6:37.31472.6:07.O3 809.797/0.94/047.304/0.08  O 42-70 42-70/0.3 .036:080 023./42.O3/0 .3900:84/0.7:20394057008:3..4245..

6:0.%%!$  0254 809..74 :8 920  .F8/0 :3.:703/.O $0.4408448097..38297E...7:2039480.440 :8:.:70 .430O380:7.97.

7.E/.74 6:0 .5.0248 :3. 0-0894 .-0.. .  80:3/48 .42 0254/0:84/0.440 /0 342-70 :8:.4408 !47.439030 0 .94/40/42340-0894 .47 :8 6:0/:7.42  3 0890 00254 089. 47.

7.746:0574..42  92 0.7*.f¾f¾f4./0!!/00-894 ...7/.07:3. :8:.-0.0450/70248./ 9900254/0!!.O248070.3:.440 592   ./4 !. :8:.74 6:0 3974/:.248 :3 1472:..08.6:37. 0 .-0..440.:507.   3089000254.7E.8:342-70 6:0:.0.47 089.7024803 :3.424089.248.5E3.07..440  !72074 50/248 .08.574....746:03974/:.47 /0 8: 342-70  :8..

990 .

0.440./ -4/ 0254/0:84/0.

.440 592% % !&%%!909342-70# !&%%!8:-29'&3.08.7*.8:342-70  #% 574.7 . 3974/:..

 # .

-4/ .

440 002:8:.74 .47.47 3974/:.  55.-0.. /:7.92  © nf © ¯½I n –€ °     $0 089. ./4 ..0 .:.39074720390   .O308:3.43 0 .

.

.74 *% 342-70 ( 920  .3:.42 809./0!!/00-894 .440 002:8:.

    92 0./ 9900254/0!!.

990 .

0.440./ -4/ 0254/0:84/0.

089..-0./4:3.  $0.74.440/0342-70-002:8:.

-.47-5739 *% 342-70 (.430..

E/.  ./:7.-6:0807E.39047.

-4/ .

.

.42  92 0. .92   I n –€ °     3 0890 00254 ./0!!/00-894 .440 089./.3:. ./ 9900254/0!!.-0.:507.47 /0 . 6:0 08 70.7 0 .0248 4 1E.39074720390   .

990 .

0./ -4/ 0254/0:84/0.440.

74.440/0342-70-002:8:..-0.089./4.  $0.

.-.0-5739 *  002:8:.74 (.

- .

-4/ .

92  .

. -7   ./47 $"5.70248.$"/08/0!! .43 -7 0./0807.9*/. 286*708:9 708:9  02.948033:0897.4-9030748/.9.$"  92 -4/  55 3286*.489 34-4/  286*800.03/.9 4.4 .7.442-70 286*708:9 708:9  342-70 -7 0.4%0F1434 286*708:9 708:9  9001434 -7 0. .4330..948/0:3708974  430O3.430.2/- 3  708:9286*6:07 $% # ..9030248/.. 430. 3  0.8J6:0.470.O3 286*708:9 708:9  /70.4308:03908.7.9.759348.

-4/ .

# .92 3.9482/- !4/7J..948/0:3...O308.  92 -4/  55 3286*.6:0F890.80/0/.24897.4507.03.57207.4330.7:3:8:.7.4/:74 :8.43..748/..4397.20390  286*708:9 08:8.8847/5../..489 34-4/  286*800.70248.4708/0708974 6:008057207708974 24897..84.7.1:3../4/0.O3$".489 7449  ../4 030890./0.438:9...3/40/0391.431472.4.070248./47$"5.430O3 .9 4.4979/42-70.0097..6:0089E.3897:.4708/048.489 %.  81:07.248089.0 807.2548/0..248 0.4304308.9485475.748.03.-0 3  43286*800.!!0/. 3  0.430.. -./403../4 286*.9 6:0..7.574.282.430O308.0*/0*7449 708:9.0:8:.438:9.7.O3 286*6:07 08.9 4.49. 708:9 308900025424897../47$"0304890850..9*/.8:03901:3..-..2.-0.03/10703908807..743/.430O3 33486:070248.0.4330.25480850.430.03. ..748/.9.:3.07/8939./47/0.J./45.248. 30.2/- 3  708:9286*6:07 $%342-70 02.807.9.24848.7.430807.  438:9.-0-47/07  3 0./47$" 4./08.7.2-F3/0-02480850.807.  ./4 /0F89.080 708:9.74 34-4/ 7449 09.430O3 3 03..74:35..8.-0 708:9  3.47/048.2.03/.39.08.O3 286*.430807.6:0./48  4897../4708 5074 348.42424897.4330.-0248.43:3../47/0 ..9*/.1.75934803.7.6:0..8..:0948547.-70:3..1.2E6:3../476:003./403. 47.J30.1..

9/9/ ..

9/.

*74 708:9  0.4979/74 (.973 0 74286*109.

9/9/74(.

9/.

973 < 0.4.

-03   .9.

.

-4/ .

3.O3286*109..20397.6:0/0..*. 6:080.03/. 3  1 74286*109.# .O303.2547010703..9 4..08 00. .43...438:9.9:.O380.0/. 3089.77..803903.:3.:9.O3286*109.439740 6:0 9030:31:3.20390 308:03908...07/.75984:..:3..08.92 308908.2039482.:./08 .77.48. 57207.$"  ../4080 0 80:3/40.9*/./07.2E84-.08.030390  438:9..8./4/4834../07089748 /0..548.43903/4/0708974.:0..77.43 0.:094803.43.1:3.1:3.83:2F7.08O4.489 34-4/  286*800.89.-0-47/07  3 0.*74 6:0/0.43.438:9.702480890506:0N43.2/- 3  708:9286*6:07 $%342-70 02. 086:00.2.*74 9030:3506:0N4574-02.4.8O30 0.25484-903/48/0.7./.49. 708:9  0.8.4330./04974803:.03.43/.0:3./290 7010703.48./0  92 -4/  55 3286*.8J8:..../0.75902483974/:.4979/42-70..:0...24/1.03 74 .

9/9/ ..

9/.

4979/ 74342-70( .973 /4 0.

9/9/ 7402.( .

9/.

*.4.77. 708:9  0.973 <0 74286*109.

03.-03 <080 0.4 480.9./4333708974 <   .4397.

-4/ .

.92 803..0/0547:3 32074  43.. 1:3.03..390747 2.24803740708974..43.9:.*.( 03. 6:0.0428246:00.. 1.*74 .20390 08908..O3286*109..77.20390428246:0286*109.43.48.. 005.9.O36:054/02487010703.759.7..803903.25485478:342-70 7402.00.

83..0 480.438:9.86:0. 03..-07 33:34 080 24897. /4.03.080 ../4  0397.84/034.248.4397.43.803903.74057207708974/0.248:32038.

7./../475..20390/03974/0..5..80/0/.7..43..0-6:0348807.-.3:0897...7.894..-70248/0:31472:..7.03.943995.7 /03974/03:0897.248.948 .702481472:.89.-.74 92  472:.80:7..708.7-70248:38..7..74/00397.03../090723. 8.4244507..5E3.7.7:3.43..47. 6:070.740397./.254 342-70  357207:..-0 -:8...07:3..709.-:8.948 '.4241472:.  92 -4/ 14722094/! $%.6:0/089.80/0/..8  &3-:8.:0948547.2486:0803482:08970394/48487089748/0./475..-072E8/0:34  ..7596:087.2..O3 :300254 /094/44.84/0 ./03.438:9.0 348.7-7024809094%/0.2././03.24803.74 .:9.903.  .. 5.O3/05:394 .7E..

.

/47.280.

55.

/47 55 89743!.-:8......-7.0.

:0:8..73..20-:8.8974335:99509093.7 .20%80 -7-7 35:99508:-29..

.

1472 .

-4/ .

075475. /0./48  $..759-86:0/../47 55 807E003.4397.07.7  0..4./03./4/0..03..-:.. -86:0/.4.92 8:03908.70248-:8.1..7:3..39.48708974803.759/0-:86:0/..7..7 0.40-00850.  92 -4/  55 1 8809 -:8.2.4.

92.

2/- 3  708:9286*6:07 $% # .-0-47/07  3 .-4/3 09 < 3286*.4330.49.7  ## 342-70 3  1 74286*109.*.77.#342-70 -:8.489 34-4/  286*800.9*/.9 4...03/. 708:9  0.

.

24848342-708/0.4897.89.*10/ 708:9  0.-.49/10/ 3.4973 0 10/286*109.8 0.20.

4.9/3 < 0.

973 /4 0.4973 0.49/ 74/( .

49/ 74342-70( .9/3 0.

.43( .49/ 74/70.9/3 0.

9/3 0.49/ 749001434( .

9/3 0.94 7402.(   7402.49/.701 2.( .

..

9/ 3 0.4.

77. 708:9  0.*.973 <0 74286*109.4.

4 480.03.-03 <080 0.4397./4333708974 <   .9.

-4/ .

.43 09  42E825479.-0089E.254 ..O3 286*109.43/.439030 09.7...6:074..8/0. 0-1472:.../0.../0./27..7/0.248..76:070.4348 8348/0547..4306:04-9030248 31472../47$"  2E8...248.74 923408:3....0797403 .907J9.../074 03..92 45720746:0.92.254 342-70  .0  3/. -:8.7 -:8.:7703....-.-0 -:8.7.254342-70 20397..00.13..43903/.7.O3/08./6:002483. 6:048..248.03 -:8.*10/ .1:3..:.0 1.54/0.:0.86:0.0/.43903/4/0.573....:..390/008908./.../0.7.-0089F. 803903...7 43.86:08 :-0802485:0894342-70 -:8.0248.84 90723./03...1:3..7.O30.43.-248/0. .  . 54700254 8:-0802485:0894342-70  -:8.39054302480834..O36:0025430248  #342-70 -:8..1:3.....:.248086:00..43.759.7.2480:.8.759 0883/:/..07.7 20397.803903. 0308..6:074./03.:7703.O3 8809 6:0/0..20390.709.43...807. 08944.O3.43...84 8.9../4 08.6:074..-06:070.0390.248.039.07/.4248:342-70 954 439:/ 342-70/0.$"6:0003.84/06:0.5E3.47547.7./03.:..7 -:8..O3  6:008 06:.42574-..248.34..:3 % 5.:7703.

 .

.80/0/.08/0:339071.. .70......0.O3.948 3089..248  472:.731472./77089748.0-.5E3.-7 35:9950$:-293.2003.07.25486:0/080./00- 357207:.7.20/70../73:0..:0./0/..//*70 55 42-7035:9950%093.35:9950%093.07.70..743. .43:3 82501472:.-./7  92 -4/  14722094/5489.3:0897.20342-70-7 70..4/.7.248..248..42454/0248.43-7 %0F143435:9950%093. N.97.3:089.248.O335:9950%093.N.O3 .209001434-7  2.2002.948.943.487089748.7:3..N..059.4348.74 .

1472  .

-4/ .

/77089748  92 -4/  55 .92 0248.03974/:.0./4800.:9..2.40748/.70.248:38./4:31472:.948 :3.248.4240808908.N.759  ./4.//*70 55 5:08.759 .74/43/070.

.

9 4.-/48:8/.574.4330...   '&$ 342-70  /70.4 7.2/- /.9*/.43  9001434  02.03/.8024870...43 9001434 02..0881472 3286*.489 7449  286*800.948 3  .  708:9286*6:07 86  0. 342-70 /70. 86$#%% .

-4/ .

94..8420.7.7:33:0...7..2-F3:8.438:9.7.390 5.70248..1:3.48.7089..759344.0746:0.430.74  !.92  424805:0/0.N.0-/01472:.7.5E3.7.759  92 -4/  55 1 03.:./ .36:0.42039.90723.3974/:.80N47.740 1..2485./47$" 547084030890..8.42-3.7:3.0.4/..//*70 55 08908.4708974 :9.4903/7.4247449 507454/7J.434.8./. 1:3.75955 03:38441..17.807 ./7424/1.9:.07:890/08  42-3.2..702485.O3 :3.77089748/0-024890307 5072845.248.6:074974:8:.7F  ..04030807...9..248.748. :3.7  .2:25479.7.54/07.506:0N.O3286*6:07 .43/01472:.8 :8.O3  .074/08...4308 08/0.07 5.7...

.

4330.574.    .9*/... 86$#%% .03/.0881472 3286*.2/- /. 342-70 /70.43 9001434 02.489 7449  286*800.9 4.

731472.35:9950%093.-/48:8/.43-7 %0F143435:9950%093.O3 .-7 35:9950$:-293..2002....//*70 55 42-7035:9950%093.2003.948 3 <080   14722094/5489.'&$ 342-70  /70.:0.209001434-7  2...20342-70-7 70.943.7.4 7..20/70.O335:9950%093.43  9001434  02.  708:9286*6:07 86  0..059.8024870..

1472  55 <.

.

03/1   .

-4/ .

$" !479.084/0-477.803903.39408.7&!%:9.948 574..4248:0  477.0/0:9.7596:0/.7 8446:003./024/1.7:370897408/039..7J..4./47089748/0  92 -4/  55 1 8809 /  .-.80/0/.248 %03.77089748/03:0897.92  477.

.

40-00850.0881472 3286*.03/.7:3 / 3 <  .9 4.574. 86%.1..2/- /.489 7449  286*800..9*/.4330.#//  708:9286*6:07 86  <080 0.

-4/ .

.0...07:38..94/4 .2/- 3  ..4330..759/43/08020.. .9 4.47547.248.9*/.894.894 424708:203/094/44.489 7449  286*800.4 424007..O3   92 -4/  55  3286*..3.4 48/04.O3/0-:8..4 3:0.47./47/0.89.92  #08:203/094/44.

.

948/01472:.2488024870.42574-..-/4/.74 03..7  1 03.7  .

.

9:.4#08974../45   .43 9001434 9001434 02. 02.-248:3/ 24/1.$%342-70 342-70 /70.248 834.$70. #// 0.../248:3708974 1 /  86&!%.03/.N.43 /70..

  0..//45 < . '&$   342-70  /70.43 9001434 02. 342-70 /70.43  9001434  02.4#08974N.<080 86$#%% .03/..

.

807.803903./47 708:9286*6:07 86  <0801 /0090  .248..$"..3.

.

03/.4#08974477.477.#// 708:9286*6:07 86  0.248:3708974 86%# ./45 <080 .

.

5.:9..7  .7908000.8340248570843.89./40-494303.

.

08/0.734.03248/0:31472:.74 1 /  .

.

*.24894/48487089748/03:0897.7  ..( 0.4897.701!!*$/ 274/(  /009008477.03/.77. 708:9286*6:07 $% # .43(    274%001434(   27402. 3  0 274286*109.4. 708:9  0.4274342-70(   274/70.

. 0.701!!*$/ 274/( 4/1.7.4..

-7 < < <   ! ./7:3708974..4!!*$N.701550.

.. ! 14722094/5489.943550.4!!*$ 55  1 /  .

.

43( 90014342749001434( 02.0/9.( .*.43274/70..03/.43.2480708974800.77. 708:9  /274/( 342-70274342-70( /70./4 86$% # ...27402.#// 708:9286*6:07 86  274286*109.

.

402.:0/ <   42-7035:9950%093.:0550..20/.2002.4342-70-7 70.2003.49001434-7 2..O335:9950%093.35:9950%093.7.:0550.O3 ..20342-70...70708974 0.2480/5.:03.209001434....4/70.43.54/070/9..-7 35:9950$:-293.20/70.7....43-7 %00143435:9950%093.435:9950//033..731472..:0550.03.:0550.

1472  55  <.

.

.3/11 03.7     .

-4/ .

.O3 /08.-0/089.7590306:08000.1:3.08:3.:0.0../70.:9.4339073..92 ./0!!6:0348/0.   .70:84/0!!*$ 089.

 .