4. programaciîn mediante lenguajes de servidor

15
4. PROGRAMACIÓN MEDIANTE LENGUAJES DE SERVIDOR MÓDULO PROFESIONAL: IMPLANTACIÓN DE APLICACIONES WEB CFGS ADMINISTRACIÓN DE SISTEMAS INFORMÁTICOS EN RED

Upload: others

Post on 31-Jan-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

4 . P R O G R A M A C I Ó N M E D I A N T E L E N G U A J E S

D E S E R V I D O R

M Ó D U L O P R O F E S I O N A L : I M P L A N TA C I Ó N D E A P L I C A C I O N E S

W E B

C F G S A D M I N I S T R A C I Ó N D E S I S T E M A S I N F O R M Á T I C O S E N R E D

¿QUÉ APRENDEREMOS EN ESTA UNIDAD?

Objetivos de la Unidad

• Conocer el lenguaje PHP

• Utilizar PHP para el desarrollo de aplicaciones web Resultados de Aprendizaje:

• Genera documentos Web utilizando lenguajes de guiones de servidor.

Criterios de Evaluación:

• Se ha reconocido la sintaxis básica de un lenguaje de guiones concreto.

• Se han utilizado estructuras de control del lenguaje.

• Se han definido y utilizado funciones.

• Se han utilizado formularios para introducir información.

• Se han establecido y utilizado mecanismos para asegurar la persistencia de la información entre distintos documentos Web relacionados.

• Se ha identificado y asegurado a los usuarios que acceden al documento Web.

• Se ha verificado el aislamiento del entorno específico de cada usuario.

PRESENTACIÓN

“La imaginación es la facultad del descubrimiento, preeminentemente. Es lo que penetra en los mundos nunca vistos a nuestro alrededor, los mundos de la ciencia.”. Ada Lovelace.

Ada Lovelace fue una matemática, informática y escritora británica, conocida principalmente por su trabajo con la máquina analítica de Babbage. En su trabajo, Ada diseñó el primer algoritmo para ser utilizado en una máquina, por lo que es considerada la primera programadora de la historia.

Los lenguajes de programación son la manera más efectiva y precisa de indicar a las máquinas qué acciones queremos que realicen por nosotros. Entenderlos, conocerlos y manejarlos con competencia es fundamental para explotar al máximo su potencia. Como hemos visto en los temas anteriores, son varios los lenguajes y las tecnologías que se unen para dar soporte al desarrollo de aplicaciones web. En este tema nos centraremos en el lenguaje PHP.

GEEK DE LA UNIDAD

Autor: José López Expósito

1. Integración con los Lenguajes de Marcas 1 ..............................................................................

2. Lenguaje PHP 1 ....................................................................................................................2.1. Sintaxis. Elementos del Lenguaje 1 ....................................................................................................................

2.2. Instrucciones de Control 3 ..................................................................................................................................

2.3. Funciones Integradas y de Usuario 5 ..................................................................................................................

2.4. Gestión de Errores 6 ...........................................................................................................................................

2.5. Mecanismos de Introducción de Información: Formularios 7 ..............................................................................

2.6. Autenticación de Usuarios y Control de Accesos 8 .............................................................................................

2.7. Sesiones 8 ...........................................................................................................................................................

Actividad 1: Ejercicios de PHP (Sintaxis y Elementos del Lenguaje) 1 ..............................................

Actividad 2: Ejercicios de PHP (Instrucciones de Control) 1 ...........................................................

Actividad 3: Ejercicios de PHP (Funciones de Sistema y de Usuario) 2 .............................................

Actividad 4: Ejercicios de PHP (Funciones y Gestión de Errores) 2 ..................................................

Práctica 1: Sintaxis, elementos del lenguaje e instrucciones de control de PHP 3 ..............................

Práctica 2: Formularios 3 ..........................................................................................................

Práctica 3: Control de Accesos y Sesiones 3 .................................................................................

Ejemplo Resuelto: La tienda de discos Kursaalify 4......................................................................

ÍNDICE

1. Integración con los Lenguajes de Marcas

Como vimos al final del tema anterior, la integración de PHP con HTML es inmediata. Cuando el fichero de extensión .php es solicitado al servidor, el intérprete ejecuta las sentencias PHP transformándolas en código HTML que luego será procesado por el navegador del cliente.

PHP no está limitado a ser usado junto con HTML, ya que puede ser usado en combinación de XHTML y cualquier tipo de ficheros XML. Es más, PHP es capaz de autogenerar estos archivos y guardarlos en el sistema de archivos en lugar de mostrarlos por pantalla.

2. Lenguaje PHP

Según la página oficial de PHP, el lenguaje PHP PHP (acrónimo recursivo de PHP: Hypertext Preprocessor) es un lenguaje de código abierto muy popular especialmente adecuado para el desarrollo web y que puede ser incrustado en HTML.

2.1. Sintaxis. Elementos del Lenguaje Un programa informático, debe estar construido de manera correcta sintáctica y lógicamente.

Lo primero hace referencia a que las palabras y estructuras utilizadas sean correctas, es decir, que estén bien escritas y formadas; y lo segundo, que nuestro programa realice correctamente las tareas para las que está diseñado.

Ya hemos visto anteriormente como incluir código de PHP dentro de HTML, pero nos falta conocer otras características propias del lenguaje; como, por ejemplo, que siempre debemos incluir el punto y coma para

finalizar una sentencia, por lo que a dicho carácter se le conoce como “Instrucción separador”. A este efecto sirve también el símbolo de cierre de bloque de PHP , el “?>”.

Otros elementos del lenguaje son:

• Comentarios.

• Constantes.

• Variables.

• Tipos de datos.

• Funciones.

• Objetos. 2.1.1. Comentarios

Los comentarios son líneas de código ignoradas por el intérprete, y se emplean principalmente con dos motivos:

• Proporcionar determinada información sobre el código

• Deshabilitar una parte del mismo y evitar que se ejecute

Al comienzo del fichero se suelen escribir unas líneas de comentario, explicando aspectos generales de la funcionalidad del archivo, mientras que usado entre el código las líneas de comentario se emplean para aclarar pasos complejos o delimitar determinadas áreas dentro del archivo que faciliten su lectura.

Cuando se realiza una modificación en los ficheros afectados se comenta el código antiguo y se delimita donde comienza y termina la modificación, añadiendo una explicación sobre la actualización en las líneas de comentario en la cabecera del fichero.

En algunas ocasiones, el código comentado se elimina posteriormente y sólo se conservan los comentarios de la cabecera del documento que informan de la modificación.

En PHP se utilizan dos tipos de comentarios:

• Comentario de línea: son válidos sólo hasta el final de línea o del bloque de código PHP. ¿Cómo se crean? Empleando los símbolos: // y # , siendo más habitual usar el primero. NOTA: la etiqueta </script> no finaliza un bloque de código PHP, mientras que ?> si lo hace. Si está activada la directiva ASP_TAGS, la etiqueta %> funciona igual que ?>.

• Comentario de bloque: permite comentar varias líneas hasta que encuentra el símbolo de fin de comentario. Los símbolos utilizados son /* para iniciar el bloque y */ para finalizarlo.

2.1.2. Constantes

Una constante es un identificador, es decir un nombre, al que se le asigna un valor simple, de manera que cuando se emplea ese nombre se sustituye por el valor asignado. Lo habitual, por convención, es que el nombre de la constante esté en mayúsculas.

Integrar etiquetas en bloques de PHP

Código HTML directamente

<html><head></head><body><?phpecho “<h1>Hola mundo</h1>”;?></body>

<html><head></head><body><h1>Hola mundo</h1></body>

Varios bloques de PHP Uso exclusivo de PHP en un archivo

<html><head></head><body><?phpecho "<h1>Hola mundo</h1>”;?><p>hola</p><?php echo "<h2>Hola mundo 2</h2>”; ?></body>

<?phpecho “<html><head></head><body><h1>Hola mundo</h1></body>”;?>

PÁ G I N A �1

¿Cómo podemos definir una constante?

Empleando la sentencia DEFINE(). Un ejemplo sería:

define(“PI” 3.141592);

Una vez que se define una constante no se puede cambiar el valor que se le ha asociado y puede referenciarse desde cualquier punto del código.

Además de las constantes definidas por el programador, PHP cuenta con una lista de constantes predefinidas en el sistema que pueden ser utilizadas en cualquier instante.

2.1.3. Variables

Una variable es un espacio de memoria en el que se puede almacenar un dato para su uso posterior.

Por ejemplo: $mi_numero = 75; donde: mi_numero es el nombre de la variable, fíjate en que va precedido por el símbolo de dólar $, y 75 es el valor que almacenamos en la variable. Podemos cambiar el contenido de una variable todas las veces que sea necesario a lo largo del programa.

PHP cuenta con variables predefinidas, además de las variables que pueda definir el programador para que el script se ejecute de manera correcta. Estas variables predefinidas facilitan el trabajo de los programadores. De las más conocidas y empleadas son las variables $_POST[···] y $_GET[···], muy empleadas para la recuperación de valores desde formularios web.

Existe una regla para proporcionar el nombre a las variables y a las constantes. Un nombre válido comienza por un subguión o una letra, al que puede seguir otras letras, números o subguiones. Para las variables, el nombre siempre va precedido del signo dólar ($) y es sensible a mayúsculas.

Las principales diferencias que podemos establecer entre constantes y variables son:

• Las constantes no llevan el signo dólar ($) como prefijo.

• Las constantes sólo pueden ser definidas usando la función DEFINE() y no por asignación directa.

• Las constantes pueden ser definidas y accedidas desde cualquier sitio sin importar las reglas de acceso de variables.

• Las constantes no pueden ser redefinidas o eliminadas una vez se han definido.

• Las constantes, en principio, sólo deben contener valores escalares.

En la siguiente tabla tienes la lista de constantes y variables predefinidas por el lenguaje PHP:

2.1.4. Tipos de Datos

El tipo de dato indica cuál es la clase de información que se va a manejar. Es importante, porque en función del tipo de dato se pueden realizar unas operaciones u otras y también evitar posibles errores o resultados no deseados.

PHP no es un lenguaje fuertemente tipado, es decir, no es necesario asociar un tipo de dato a una variable al definirla, tal y como se hace en otros lenguajes de programación como C, Java o Pascal; sino que el tipo de la variable queda determinado por el tipo del dato que se asigna, por lo que si a la variable $a le asigno el valor 7, $a=7;, esta será una variable de tipo entero, y si a continuación le asigno “Hola”, $a=”Hola”;, $a se convertirá en una cadena de caracteres o string.

Esta forma de trabajar proporciona más flexibilidad al permitir que una variable pueda ser inicialmente de tipo numérico, y luego se transforme en otro tipo distinto, pero obliga al programador a tener un mayor control sobre los datos que se almacenan en las variables y las operaciones que se realizan con ellas.

Si se quiere forzar un tipo de dato específico a una variable, lo podemos hacer indicando delante de la variable el tipo que deseamos que tenga. Para ello se pone entre paréntesis el nombre del tipo de dato; por ejemplo:

$a = 75; // $a es de tipo entero al asignarle un número entero

$b = (string) $a; // $b es de tipo cadena al forzar el tipo. Es igual que hacer $b = “75”;

Los tipos de datos que hay en PHP son: https://www.php.net/manual/es/language.types.intro.php.

2.1.5. Expresiones y Operadores

Una expresión es una combinación de operadores, variables, constantes, y funciones que está formada correctamente, es decir, es válida sintácticamente, y que tiene sentido, o lo que es igual, es válida semánticamente. Toda expresión produce un valor al ser procesada. La mayor parte del código que realicemos en PHP van a ser expresiones.

Ejemplos de expresiones son: $a = 6;, o una más compleja: $b +3 == $a * 2

Un operador es un elemento, palabra o símbolo, que al aplicarlo sobre otros elementos, los operandos, proporciona un valor.

Según el tipo de operación que realizan, los operadores más utilizados se clasifican en:

• Aritméticos: son los operadores empleados en las operaciones aritméticas: suma, resta,...

Constantes Predefinidas

https://www.php.net/manual/es/language.constants.predefined.php

Variables Predefinidas

https://www.php.net/manual/es/reserved.variables.php

PÁ G I N A �2

• Asignación: se utilizan para almacenar un dato dentro de una variable, por ejemplo: $a = 6;.

• De bit: permiten evaluar y manipular bits determinados dentro de un entero.

• Comparación: como su nombre indica, comparan dos elementos.

• Lógicos: el resultado obtenido de estos operadores se valora a true o false, Cierto o Falso.

Esta es la lista de operadores de PHP: https://www.php.net/manual/es/language.operators.php.

Otra posible clasificación puede hacerse en función del número de operandos sobre los que actúan:

• Unarios: un solo operando, por ejemplo el operador incremento (++)

• Binarios: dos operandos. Son la mayoría, ejemplo la suma: 2 + 3

• Ternarios: tres operandos, como es el caso del operador condicional (?:), ejemplo $a ? $b : $c

La precedencia de operadores establece el orden de evaluación de las operaciones que forman una instrucción. Por ejemplo, 2 + 3 * 4 da como resultado 14 y no 20, porque la multiplicación es precedente, es decir, se opera antes, frente a la suma, por tanto equivale a la operación matemática 2 + ( 3 * 4 ). En el anterior enlace se establece el orden de precedencia de los operadores en PHP.

E S T U T U R N O : A C T I V I DA D 1

2.2. Instrucciones de Control A través de las instrucciones de control podemos establecer cuál es el flujo que debe seguir el programa, y de esta manera podemos dotarlo de mayor operatividad, pero también de mayor complejidad al proporcionar al programa “capacidad de decisión”.

Un programa en PHP, al igual que en cualquier lenguaje de programación estructurada, podráestar compuesto por los siguientes tipos de instrucciones:

• Secuenciales: La ejecución lógica de las sentencias coincide con el orden físico del programa.

• Condicionales: en función de los valores que toman una o varias variables, que forman la expresión que debe verificar la condición, se lleva a cabo la ejecución de una serie de sentencias u otras. Las estructuras que proporciona PHP para manejar condiciones son tres:

A. Simple: IF

B. Doble: IF - ELSE.

C. Múltiple: IF - ELSEIF - ELSE / SWITCH - CASE.

• Bucles: permiten la repetición, o iteración, de un bloque de código hasta que se cumpla la condición que pone fin al bucle. Es necesario determinar correctamente la condición de salida del bucle para que el programa no se quede atrapado y se ejecute indefinidamente. Para manejar bucles, PHP proporciona las siguientes estructuras:

C. FOR.

D. FOREACH.

E. WHILE.

F. DO - WHILE.

Además, existen dos comandos para salir de forma forzada de las estructuras anteriores, que no deben usarse de manera indiscriminada, por la complejidad que proporcionan al programa, y por incumplir con la filosofía de la programación estructurada:

A. BREAK.

B. CONTINUE. 2.2.1. Instrucciones Condicionales

IF permite la ejecución condicional de bloques de código. La construcción es:

IF (expresión) {sentencias}.

Expresión establece la condición que se debe evaluar, a un valor booleano, y en caso de verificarse se ejecutará la sentencia. Para ejecutar un bloque de sentencias, en lugar de una sola, metemos el bloque entre llaves. Cuando solo es una sentencia podemos prescindir de las llaves.

Podemos anidar sentencias IF, haciendo que para ejecutar un bloque de sentencias se tengan que cumplir varias expresiones:

 

 

Cuando queremos ejecutar otra sentencia cuando no se cumple la expresión del IF, se utiliza el ELSE.

 

IF (expresión1)

IF (expresión2)

sentencia

IF (expresión)

sentencia_1

ELSE

sentencia_2

PÁ G I N A �3

ELSEIF, o también ELSE IF, es una combinación de las sentencias anteriores. La manera de usarla es:

No hay que confundir los IF anidados con los ELSEIF. Los primeros exigen que la expresiones se cumplan en cascada, los segundos requieren que la expresión anterior no se verifique para ejecutar la sentencia de esa rama.

Para evaluar los posibles valores que puede tomar una variable es mejor usar: SWITCH - CASE que ir anidando condiciones semejantes en una sentencia IF - ELSEIF - ELSE. Su construcción es:

 

Con DEFAULT se recogen todos aquellos valores que no se hayan considerado explícitamente y es la última opción que se valora. Su uso no es obligatorio.

2.2.2. Instrucciones Repetitivas

La construcción de la sentencia WHILE es muy sencilla:

 

Para que se ejecuten las instrucciones la evaluación de la expresión debe dar como resultado TRUE.

DO - WHILE trabaja de la misma manera , la única diferencia es que en este último caso la evaluación de la expresión se realiza al final y las sentencias siempre se ejecutarán al menos una vez.

 

La estructura de un bucle FOR es más compleja. En lugar de emplear una expresión usa tres, construyéndose la instrucción de la siguiente manera:

El sentido de cada una de ellas es el siguiente:

• expresión 1: es ejecutada siempre al comienzo del bucle y sólo una vez.

• expresión 2: es evaluada antes de realizar cada iteración y provoca la salida del bucle en cuanto su resultado no es TRUE.

• expresión 3: es ejecutada al final de cada iteración.

En PHP existe otra estructura de repetición que no está definida en todos los lenguajes de programación. Se trata de FOREACH, que proporciona una manera rápida de iterar sobre arrays. La construcción de esta instrucción es:

Donde expresión tiene dos formas posibles:

array as $valor: recorre el array almacenando el elemento correspondiente en la variable $valor.

IF (expresión_1)

sentencia_1

ELSEIF (expresión_2)

sentencia_2

•••••••••••••••••••••••

ELSEIF (expresión_n)

sentencia_n

ELSE

sentencia_p

SWITCH (variable) {

CASE valor_1:

sentencia

••••••••••••••••

CASE valor_n:

sentencia

DEFAULT:

sentencia

}

WHILE (expresión) {

instrucción 1;

••••••••••••••••••

instrucción n;

}

DO {

instrucción 1;

•••••••••••••••••••••

instrucción n;

} WHILE (expresión);

FOR (expresión1; expresión2; expresión3) {

instrucción 1;

••••••••••••••••••••••••

instrucción n;

}

FOREACH (expresión) {

instrucción 1;

••••••••••••••••••••••••

instrucción n;

}

PÁ G I N A �4

array as $indice => $valor: además de almacenar el elemento en $valor, guarda la clave del mismo en $indice.

2.2.3. Instrucciones Espagueti

Se trata de las instrucciones Break y Continue. Se utilizan para controlar la ejecución dentro de las sentencias en las que se encuentra el programa. Como norma general, debe evitarse el abuso en su utilización.

Para salir de una estructura de control condicional o iterativa puede usarse BREAK o CONTINUE.

Ambas se emplean de una forma análoga, con la diferencia de que mientras BREAK finaliza totalmente la ejecución del bucle; CONTINUE hace que se salte a la siguiente iteración.

Admiten un número como argumento, que indica el número de estructuras anidadas de las que debe salir. Cuando no se indica argumento alguno se asume que su valor es, por defecto, igual a 1.

Al utilizar la estructura condicional SWITCH CASE es necesario emplear siempre una de estas sentencias, habitualmente BREAK; ya que de no interrumpir la ejecución de la sentencia del CASE por el que entró el flujo del código, continúa ejecutando los demás CASE que haya por debajo aunque no verifiquen la condición. Esto se debe a que el SWITCH ejecuta las sentencias de una en una cuando se encuentra una CASE coincidente. Por tanto, la estructura SWITCH - CASE queda finalmente como sigue:

E S T U T U R N O : A C T I V I DA D 2

2.3. Funciones Integradas y de Usuario Una función es un fragmento de código que realiza una tarea concreta. Como resultado de su acción, es habitual

que devuelva un valor, y sólo uno, o ninguno. Ten en cuenta que un array se considera un único valor.

Además, a una función se le pueden proporcionar una serie de valores, que se denominan parámetros, que necesita para llevar a cabo su tarea.

Para codificar una función debemos empezar usando la palabra reservada function, seguida del nombre y de paréntesis entre los que se especifica la lista de parámetros. En el cuerpo de la función, delimitado por las llaves, se incluyen las líneas de código y se escribe al final del mismo la palabra return, que determina el valor que devuelve la función. Si se omite, la función devuelve el valor NULL.

Para nombrar funciones se siguen las mismas reglas que para las variables y las constantes.

A la hora de llamar a una función debemos tener presente si devuelve algún valor, cuál es el tipo de valor que devuelve. Si no es una función construida por nosotros esta información se encuentra en el prototipo.

Para llamar a una función que devuelve un valor utilizamos: $a = mifuncion(); o mifuncion(); dependiendo de si deseamos recoger el valor devuelto por ella en una variable o no. Si no devuelve ningún valor usamos el segundo tipo de llamada.

Dado que el nombre de una función es insensible al cambio de mayúsculas–minúsculas, se recomienda invocarlas empleando su nombre, tal y como aparece en su prototipo.

Además de las definidas por el programador, PHP incorpora una colección de funciones predefinidas que sirven para realizar diversas tareas. Para poder utilizarlas algunas de ellas necesitan que se hayan incluido extensiones específicas, como es el caso de las funciones para conectar y gestionar bases de datos MySQL, sino devolverá un error "Undefined Function".

Por último, añadir que el ámbito de actuación de una función es global y es independiente de donde haya sido definida. Se puede invocar antes de donde ha sido declarada, es decir, puedes llamar a la función al

SWITCH (variable) {

CASE valor_1:

sentencias_1

break;

················

CASE valor_n:

sentencias_n

break;

DEFAULT:

sentencias_p

}

function prueba($param_1, ···, $param_n) {

echo "Aquí las líneas de código.\n"; //Esta función saca este mensaje.

$valor_devuelto = 0;

return $valor_devuelto; //Además devuelve el valor en $valor_devuelto.

}

PÁ G I N A �5

comienzo del fichero y haberla codificado al final del mismo.

2.3.1. Ámbito de las Variables

El ámbito de una variable es la zona de actuación para esa variable.

El ámbito de una variable dentro de un script cubre al propio fichero y a aquellos que sean incorporados a él a través de las funciones internas include() o require(). A este ámbito se le conoce como ámbito global.

Según su ámbito podemos clasificar a las variables del siguiente modo:

• Locales: son las que se crean por defecto. Cuando se definen dentro de una función sólo son accesibles desde esa función en la que están definidas.

• Globales: se definen usando la palabra reservada global. De este modo, la variable puede ser empleada desde cualquier punto del código dentro del fichero en el que ha sido definida, pero no puede ser empleada desde otros ficheros.

• Estática: se definen utilizando la palabra reservada static. El ámbito de este tipo de variables es la función en la que está creada. En ese caso ¿las variables locales son estáticas? No, las locales pierden el valor cuando el control del programa sale de la función mientras que las estáticas mantienen su valor aunque el control del flujo de programa haya salido de la función.

• Superglobal: son variables accesibles desde cualquier lugar, tanto del fichero en el que ha sido creada como en otros ficheros del sitio web. Sólo hay una serie de variables definidas de este modo, pero son de tipo array por lo que podemos dar a sus elementos los valores de la variables superglobales que necesitemos. Más abajo tienes un enlace al listado de variables superglobales de PHP. Un ejemplo de uso sería, por ejemplo, añadir el código de usuario al array de variables de sesión. Vamos a suponer que hemos recogido el código de usuario en una variable llamada $usuario, que la almacenamos como variable de sesión, para registrar las acciones que realice mientras visita nuestro sitio web, para lo que creamos la variable $_SESSION['cusuario'] en el array de variables de sesión $_SESSION. La sentencia de creación de la variable de sesión y asignación del valor sería:

$_SESSION['cusuario'] = $usuario;

2.3.2. Paso de Parámetros

Anteriormente hemos comentado que podemos proporcionar datos de entrada a las funciones pasándolos a través de los parámetros de la función, aunque no hemos explicado el modo de hacerlo.

La manera de proporcionarla es mediante una lista de identificadores separada por comas. Podemos diferenciar dos modos diferenciados de pasar parámetros a una función:

• Por valor: es el método usado por defecto. Consiste en pasar el valor de la variable para que la función trabaje con él, pero esta no puede modificar el valor de dicha variable en memoria. ¿Y eso significa que al pasar una

variable por valor a una función la estamos convirtiendo en constante? No, el parámetro puede cambiar de valor

mientras se ejecuta la función, pero cuando el control de la ejecución sale de esta, la variable vuelve a recuperar el valor que tenía antes de entrar en la

función. El siguiente ejemplo muestra el modo de pasar a una

función n parámetros por valor.

function mifun($par_1, $par_2, …, $par_n)

• Por referencia: en este caso, en lugar de pasar el valor de la variable se envía la dirección de memoria que ocupa la variable, por lo que este dato puede ser modificado. Para pasar un argumento por referencia basta con anteponer el símbolo ampersand (&) delante de la variable que se pasa por referencia en la lista de parámetros. El siguiente ejemplo muestra el modo de pasar a una función n parámetros por valor y p por referencia.

function mifun($parVal_1, $parVal_2, …, $parVal_n, &$parRef_1, &$parRef_2, …, &$parRef_p)

Es posible asignar un valor predeterminado a una variable. De esta manera a la hora de realizar la llamada a la función es posible no especificar un valor. Si se desea pasar un valor a la función empleando ese parámetro, este último tiene preferencia sobre el valor predeterminado.

Las variables a las que se asigna un valor por defecto se escriben en la lista de parámetros a la derecha de las que no lo tienen. El siguiente ejemplo muestra el modo de pasar a una función dos parámetros por valor, uno por referencia, y dos con un valor definido por defecto:

function mifun($parVal_1, $parVal_2, &$parRef_1, $parDef_1="valor_1", $parDef_2="valor_2")

E S T U T U R N O : A C T I V I DA D 3

2.4. Gestión de Errores La gestión de errores, también llamada de excepciones, es la manera que tenemos como programadores de evitar una terminación anormal del script que se está ejecutando, y darle una salida más controlada que una pantalla con el mensaje de que algo no ha funcionado como debía.

PÁ G I N A �6

Una manera rápida de terminar con la ejecución de un script al no cumplirse una condición, es finalizar la ejecución del mismo empleando las funciones exit() o die(), añadiendo un mensaje para el usuario.

Por ejemplo, para finalizar un script por generarse un error al no poder conectar con la base de datos haremos:

$conexion = mysqli_connect("localhost", "alumno", "") or die("No se pudo conectar con la base de datos");

En PHP una excepción puede ser lanzada, usando la palabra reservada throw, o capturada mediante el uso de catch. La construcción try ··· catch permite la captura y tratamiento de los errores. Cada bloque try debe tener al menos un bloque catch. La estructura de uso es:

Las líneas anteriores suelen estar dentro de una función.

El funcionamiento es el siguiente: si se produce algún error en las sentencias del bloque try, se lanza una excepción que será capturada, si corresponde el tipo, por el bloque catch; ejecutándose entonces las sentencias para tratar el error producido.

2.5. Mecanismos de Introducción de Información: Formularios

Los formularios permiten la comunicación con los visitantes de nuestro sitio web. Con ellos podemos realizar encuestas, cuestionarios y recoger todos aquellos datos que deseemos almacenar.

Un formulario se define con la etiqueta <form> y se compone de diferentes campos que recogerán la información introducida en el formulario denominados inputs (etiqueta <input>). Las etiquetas input pueden ser de diferentes tipos, lo que nos permite dar riqueza al tipo

de información que se puede introducir en nuestros sitios web. Los tipos del input, que se definen con el atributo type son:

• Text

• Password

• Checkbox

• Radiobutton

• Submit

• Reset

• File

• Hidden

• Image

• Button

Además del atributo type, los imputs pueden definir los siguientes atributos:

• name = "texto" - Asigna un nombre al control (es imprescindible para que el servidor pueda procesar el formulario)

• value = "texto" - Valor inicial del control

• size = "unidad_de_medida" - Tamaño inicial del control (para los campos de texto y de password se refiere al número de caracteres, en el resto de controles se refiere a su tamaño en píxel)

• maxlength = "numero" - Máximo número de caracteres para los controles de texto y de password

• checked = "checked" - Para los controles checkbox y radiobutton permite indicar qué opción aparece preseleccionada

• disabled = "disabled" - El control aparece deshabilitado y su valor no se envía al servidor junto con el resto de datos

• readonly = "readonly" - El contenido del control no se puede modificar

• src = "url" - Para el control que permite crear botones con imágenes, indica la URL de la imagen que se emplea como botón de formulario

• alt = "texto" - Descripción del control

Además también se puede añadir un elemento textarea.

Su procesamiento en PHP es muy sencillo, ya que el intérprete convierte automáticamente en variables todos los campos que constan en el formulario al enviarlo. Sólo es necesario especificar el atributo name, con el valor correspondiente que queramos darle, en las etiquetas HTML que estemos empleando: input, textarea, botón de radio, etc... El nombre de la variable será el valor que hayamos asignado al atributo name.

if (Condicion del Error) { //Condición que detecta la excepción.

throw new Exception(); //Lanzamiento. Entre paréntesis puede ir un mensaje.

} else {

sentencias_1; //Si se produce la excepción no se ejecutarán estas sentencias.

}

try {

sentencias_2; //Se llama a la función que contiene las líneas anteriores.

} catch (Exception e) {

sentencias que gestionan la excepción;

}

PÁ G I N A �7

Es importante, definir también los esiguiente atributos en la etiqueta form:

• name: nombre que se asigna al formulario. Es opcional.

• method: en él especificamos el método por el que vamos a enviar los datos. Hay dos valores posibles: POST y GET. En base a este valor tomamos los valores enviados por el formulario del array $_POST o del $_GET. Por seguridad se recomienda emplear POST en vez de GET, ya que este último pasa los valores en la URL.

• action: tipo de acción que realizará el formulario. Puede ser el nombre del fichero PHP que procesará los datos recogidos. Si se deja en blanco o se consigna $PHP_SELF toma el propio fichero donde está el formulario como fichero de recogida y procesamiento. En el caso de que dejemos que la acción actúe sobre el propio fichero que contiene el formulario, hay que gestionar el flujo de la página web para que la ejecución del mismo sea correcta.

E S T U T U R N O : A C T I V I DA D 4

2.6. Autenticación de Usuarios y Control de Accesos

Entre las utilidades que proporcionan los formularios en las páginas web está el filtrar el acceso a la misma o a partes de ella.

De este modo podemos controlar mediante un código de usuario, o login, y su contraseña asociada la identidad de un visitante registrado. Para proporcionar un mayor grado de seguridad las contraseñas se almacenan encriptadas, y se emplean etiquetas input de HTML de tipo password para que no sea visible el dato tecleado. Es importante que las contraseñas sean encintadas, para ello, PHP proporciona una serie de funciones.

Para poder contrastar la veracidad de la identidad de un usuario a través de su par: login-contraseña, necesitamos disponer de un lugar donde poder contrastar esos datos. Lo más habitual es utilizar una base de datos en donde estén almacenados esos valores. Cómo utilizar bases de datos con PHP es un tema que trataremos en la próxima unidad.

Otro método para identificar a los usuarios es a través de servicios de autenticación como Kerberos o Radius. Si estás interesado en profundizar sobre este aspecto, visita este enlace: https://www.php.net/manual/es/refs.remote.auth.php.

A la hora de escribir un script siempre debemos tener en cuenta el uso que puede hacerse del mismo, que puede ser muy distinto del que nosotros hayamos previsto inicialmente. Por ello debemos controlar los datos de las variables que nos pasen los usuarios.

2.7. Sesiones Una sesión es información que se mantiene entre solicitudes de página cuando alguien navega dentro de un sitio web. Permiten guardar y pasar datos dentro de los distintos ficheros que forman el sitio, con lo que podemos personalizar la web para cada usuario. Además, este paso de datos de usuario se realiza de forma segura para el usuario si se implementa junto con una pasarela de seguridad con el protocolo SSL.

El soporte de sesiones está instalado por defecto en PHP.

La única constante predefinida con la que cuentan las sesiones es el identificador de sesiones o SID. Para recuperar este valor se emplea la función session_id(). Para conservar la sesión y sus variables es necesario propagar el SID de un fichero a otro del sitio web.

Para crear otras variables de sesión y así poder pasarlas, se utiliza el array $_SESSION.

A la hora de querer destruir una variable de sesión en concreto, debemos especificar claramente esa variable mediante: unset($_SESSION['variable_destruir']);. Si en lugar de especificarla, lo hacemos de manera genérica con: unset($_SESSION);, lo que estamos haciendo es destruir el array completo lo que imposibilitará seguir trabajando con sesiones.

PÁ G I N A �8

Actividad 1: Ejercicios de PHP (Sintaxis y Elementos del Lenguaje) Haciendo uso de esta plantilla, debes completar los siguientes ejercicios:

- mi_nombre.php: Almacenar tu nombre en una variable y mostrar un mensaje de saludo que incluya tu nombre a través de esa variable - variables_get.php: Pasa como parámetros por la URL las variables que consideres, y muestra sus valores con la instrucción echo. Usa var_dump para ver el valor de todas las variables. - valor_euro_dolar.php: Define dos constantes, una con el valor de la conversión euro-dólar y otra con el valor de la conversión dólar-euro. - convertir_euro_dolar.php [OPCIONAL]: A partir del programa anterior, realiza las acciones para que se puedan introducir cantidades en euros o dólares a través de variables por la URL ($_GET) y se realice la conversión correcta y se muestre. - dias_semana.php: Almacena en un array los días de la semana y muéstralos a través de var_dump o print_r. - operaciones_aritmeticas.php: Toma dos valores tomados a través de la URL llamados a y b, y muestra el resultado de su suma, resta, multiplicación y división - operaciones_relacionales.php: Modifica el programa anterior para mostrar el resultado de comparar ambos resultados (<, <=, >, >=, ==, !=). - operaciones_logicas.php: Define tres variables llamadas a, b y c con tres valores, y muestra el resultado de realizar las siguientes operaciones lógicas: (a>b) Y (b>c); (a=b)O(a=c); (a!=b). Notas:

- Añade comentarios en las líneas que consideres necesarias. Añade comentarios al principio de tu archivo PHP con tu nombre, y descripción breve de lo que hace el ejercicio. - Deberás entregar un archivo PHP por cada ejercicio, cuyo nombre sea el que os especifico - Debes enviar todos vuestros archivos compridmidos en un único archivo en formato .ZIP con vuestro nombre a través de Moodle.

Actividad 2: Ejercicios de PHP (Instrucciones de Control) Haciendo uso de esta plantilla, debes completar los siguientes ejercicios:

- aleatorio.php: Generar un valor aleatorio entre 1 y 5 con la función rand. Debes mostrar si el número generado es mayor, o menor o igual que 3 - aleatorio2.php: Generar un valor aleatorio entre 1 y 5 con la función rand. Luego imprimir en castellano el número (Ej. Si se genera el 3, mostrar en la pagina el string “tres”). Debes usar instrucciones if - else - aleatorio3.php: Modificar el programa anterior para que se haga con instrucciones switch-case. - tabla_for.php: Muestra la tabla del 2 con un bucle for - tabla_while.php: Muestra la tabla del 2 con un bucle while - tabla_do.php: Muestra la tabla del 2 con un bucle do-while - tabla_aleatoria.php [OPCIONAL]: Genera un número aleatorio entre 1 y 9 y muestra su tabla de multiplicar. - sorteo.php [OPCIONAL]: generar números aleatorios del 1 al 9 sin que se repitan.

PÁ G I N A �1

PRACTICAMOS“No basta con alcanzar la sabiduría, es necesario saber utilizarla”. Cicerón.

Notas:

- Añade comentarios en las líneas que consideres necesarias. Añade comentarios al principio de tu archivo PHP con tu nombre, y descripción breve de lo que hace el ejercicio. - Deberás entregar un archivo PHP por cada ejercicio, cuyo nombre sea el que os especifico - Debes enviar todos vuestros archivos compridmidos en un único archivo en formato .ZIP con vuestro nombre a través de Moodle.

Actividad 3: Ejercicios de PHP (Funciones de Sistema y de Usuario) Haciendo uso de esta plantilla, debes completar los siguientes ejercicios:

- Operaciones_aritmeticas.php: Crear 4 funciones que permitan realizar las 4 operaciones artiméticas básicas (suma, resta, multiplicación y división) de dos números que se pasen como parámetros. Realiza varias llamadas a las funciones que has creado para comprobar que funcionan correctamente. - Funcion_parametros.php: Crear una función que calcule el precio al aplicar un descuento. La función podrá tomar dos parámetos. El primero será el precio al que aplicar el descuento. El segundo será el descuento a aplicar, que tomará por defecto el valor 0.1. Probar la función llamándola para calcular el descuento de un precio de 100€. Úsala con el valor por defecto y con otros valores. - Funciones_de_sistema.php: Utiliza el enlace que te adjunto a esta tarea, y haz uso de las siguientes funciones para mostrar cómo funcionan: isset(), in_array(), is_numeric(), sizeof(), - Funcion_mixta.php [OPCIONAL]: Crear una función a la que se le pase por valor una variable que sea el porcentaje de ganancia de un bar por bebida, otra variable por referencia con el precio base de esa bebida y una tercera que guarde una cadena de texto que describa una bebida y tenga como valor predeterminado "café". La función devolverá la frase: "El precio de la bebida: b, es de p euros."; siendo b y p los valores contenidos respectivamente en las variables que guardan el precio de una bebida y la descripción de una bebida. Tras llamar a la función se sacarán los valores de las variables porcentaje y precio para comprobar si se han alterado sus valores o no. NOTA: El valor del porcentaje que paso a la función es un valor entero. Para calcular un porcentaje: porcentaje = porcentaje / 100 y precio = (1+porcentaje) * precio. Notas:

- Añade comentarios en las líneas que consideres necesarias. Añade comentarios al principio de tu archivo PHP con tu nombre, y descripción breve de lo que hace el ejercicio. - Deberás entregar un archivo PHP por cada ejercicio, cuyo nombre sea el que os especifico - Debes enviar todos vuestros archivos compridmidos en un único archivo en formato .ZIP con vuestro nombre a través de Moodle.

Actividad 4: Ejercicios de PHP (Funciones y Gestión de Errores) Haciendo uso de esta plantilla, debes completar los siguientes ejercicios:

- Crear una función que se llame raiz_cuadrada que devuelva la raiz cuadrada de un número que se le pase como parámetro. Para calcular la raiz cuadrada, utilizar la función de sistema sqrt. Lanzar una excepción con un mensaje de error si el número es menor que 0. - Crear una función que se llame inversa que devuelva la inversa (1/x) de un número que se le pase como parámetro. Lanzar una excepción con un mensaje de error si el número es igual que 0. - Tomar como parámetros por la URL dos valores mediante $_GET (uno para la raiz, y otro para la inversa). - Mostrar el resultado de la raiz y de la inversa de cada uno de los valores pasados por la URL - Capturar de manera apropiada las excepciones y comprobar que tanto las operaciones como la captura de las excepciones se hacen de manera correcta - [OPCIONAL] Comprobar que se introducen los valores por la URL, en caso contrario mostrar un mensaje solicitando al

usuario que se introduzcan. Podéis usar la función isset de PHP. - Calculadora [OPCIONAL]: Vamos a realizar una calculadora con un formulario HTML y con PHP, pasando los parámetros

con el método POST, y procesando el cálculo en el propio fichero.

PÁ G I N A �2

Notas:

- Añade comentarios en las líneas que consideres necesarias. Añade comentarios al principio de tu archivo PHP con tu nombre, y descripción breve de lo que hace el ejercicio. - Deberás entregar un archivo PHP por cada ejercicio, cuyo nombre sea el que os especifico - Debes enviar todos vuestros archivos compridmidos en un único archivo en formato .ZIP con vuestro nombre a través de Moodle.

Práctica 1: Sintaxis, elementos del lenguaje e instrucciones de control de PHP

Seguimos trabajando como el equipo de desarrollo de la empresa de desarrollo software. Partiendo de la Práctica 2 de la unidad anterior, realiza las siguientes modificaciones a la página web que desarrollaste:

- Crearemos un nuevo archivo llamado ofertas.php - En ese archivo introduciremos el código HTML necesario para aplicar los estilos y el javascript de la práctica anterior - Pondremos como Título y como H1 "Ofertas" - Crearemos un array de cadenas de caracteres con las ofertas de nuestro restaurante - Crearemos otro array de números del mismo tamaño que el anterior con los precios de cada una de las ofertas. - Definir una constante llamada DESCUENTO con el valor 0.10 - Mostrar el mensaje: "Hoy tenemos hasta un 10% de descuento. Estas son nuestras ofertas:" - A partir de un bucle for, mostrar una tabla con una fila para cada producto, y dos celdas en cada fila (una con el nombre, y otra con el precio). Las filas pares de la tabla tendrán color oscuro y las impares color claro. - El precio que se muestre será el de aplicar el descuento al precio que tenemos en el array de precios - Mediante un bucle while, calcular la suma total de los precios de las ofertas. - Utilizar una estructura switch-case para indicar si la suma total de los precios de las ofertas es mayor de 50, mayor de

100 o mayor de 300 euros.

¿Cómo realizar tu entrega?

- Debes entregar todos los archivos y carpetas con la estructura adecuada comprimidas en un archivo .ZIP con vuestro nombre. Ejemplo: José_López_Expósito.zip

- Realiza tu entrega a través de Moodle.

Práctica 2: Formularios

Vamos a continuar ampliando la página web del restaurante:

- Codifica dos ficheros: pedido.html y gestion_pedido.php. El primero contendrá un formulario que recoja el nombre, la dirección, el teléfono, correo electrónico y pedido de un cliente y tendrá un botón para enviar el pedido. El segundo recogerá esos datos y los mostrará por pantalla. Aplica los estilos de la práctica original.

Práctica 3: Control de Accesos y Sesiones

Crea un archivo llamado acceso.html que tenga un formulario que pida usuario y contraseña. El control del acceso estará en un fichero llamado gestion_acceso.php. Para ello, guardarás en un array un usuario y una contraseña (o varios) que serán los que den el acceso correcto. Si el acceso es correcto, crear una variable de sesión que se llame user, y que almacene el usuario. Muestra un mensaje indicando si los datos de acceso son correctos o no.

PÁ G I N A �3

Ejemplo Resuelto: La tienda de discos Kursaalify

Aquí tienes ejemplo completo en el que se tocan todos los puntos que hemos visto en la unidad 4. Se trata de una tienda de discos online llamada Kursaalify en la que los clientes pueden comprar discos de los Beatles. Mira todos los archivos, prueba a hacer cambios y tocar cosas, y no dudéis en preguntar lo que necesites a través de Moodle o en clase.

En la prueba práctica, tendréis una estructura de un proyecto parecido a este, en el que tendrás que hacer modificaciones, y añadir cosas para agregar o modificar funcionalidades según se os pida, así que es importante que entiendas todo este código. Dispones de bastantes comentarios para que sea más fácil su comprensión.

Por ejemplo, uno de los puntos del examen podría ser: Os doy la función aplicaDescuento sin su estructura (Su código y sus parámetros), y la tenéis que rellenar vosotros.

Otro ejemplo: Os dejo el fichero salir.php sin ningún contenido y lo tenéis que rellenar vosotros.

Otro ejemplo: Os digo líneas de código en las que hay errores y los tenéis que corregir.

Etcétera.

PÁ G I N A �4