PHP

Page 1

INSTITUTO TECNOLÓGICO SUPERIOR “JUAN MONTALVO”

PROGRAMACIÓN EN PHP CURSO DE OPTATIVA DE PROGRAMACIÓN

Ing. Jacqueline López Alama

1[Escribir texto]

Página 1


2

Índice de Contenidos INTRODUCCION 1.1.

¿Qué es PHP?.................................................................................................................. 5

1.2.

Breve historia de PHP ...................................................................................................... 6

1.3.

¿Cómo funciona PHP? ..................................................................................................... 6

1.4.

¿Por qué PHP?................................................................................................................. 7

1.5.

Requisitos para instalar PHP ........................................................................................... 7

1.6.

XAMPP ............................................................................................................................. 8

1.6.1 ¿Qué es Xampp? ............................................................................................................ 8 1.6.2 Instalación y configuración de XAMPP .......................................................................... 8 1.6.3 El Panel de Control de XAMPP .................................................................................... 11 1.7.

Herramientas de desarrollo ............................................................................................ 14

1.7.1.

Netbeans ................................................................................................................. 14

1.8.

Plataforma Netbeans. ..................................................................................................... 14

1.9.

Lenguaje de Programación PHP.................................................................................... 14

1.10.

Tipos de datos............................................................................................................. 17

1.11.

Variables ..................................................................................................................... 18

1.12.

Constantes .................................................................................................................. 19

1.13.

Operadores ................................................................................................................. 19

1.14.

Estructuras de control ................................................................................................. 20

1.14.1 Estructura selectiva if-else.......................................................................................... 20 1.14.2 Estructura selectiva switch ......................................................................................... 21 1.14.3 Estructura repetitiva while .......................................................................................... 22 1.14.4 Estructura repetitiva for .............................................................................................. 23 1.15.

Funciones .................................................................................................................... 24

1.16.

Arreglos ....................................................................................................................... 25

1.17.

Biblioteca de funciones ............................................................................................... 26


3

1.17.1 Funciones de manipulación de cadenas .................................................................... 26 1.17.2 Funciones de fecha y hora ......................................................................................... 27 1.17.3 Funciones de arrays ................................................................................................... 27 FORMULARIOS 2.1. Acceso a formularios HTML desde PHP ............................................................................... 29 2.1.1 TEXT ................................................................................................................................. 30 2.1.2 RADIO ............................................................................................................................. 31 2.1.3 CHECKBOX .................................................................................................................... 31 2.1.4 BUTTON ......................................................................................................................... 32 2.1.5 FILE ................................................................................................................................ 32 2.1.6 HIDDEN .......................................................................................................................... 33 2.1.7 PASSWORD.................................................................................................................... 33 2.1.8 SUBMIT ............................................................................................................................ 34 2.1.9 SELECT simple ............................................................................................................... 34 2.1.10 SELECT múltiple .......................................................................................................... 35 2.1.11 TEXTAREA.................................................................................................................... 35 2.2 El formulario de PHP............................................................................................................... 36 2.3 Subida de ficheros al servidor................................................................................................. 36 2.4 Validación de los datos de un formulario ............................................................................... 38 ACCESO A BASES DE DATOS MYSQL EN PHP 3.1 Bases de datos en la Web ...................................................................................................... 41 3.2 Instalación y configuración de MySQL ................................................................................... 42 3.3 MySQL..................................................................................................................................... 43 3.3.1 Tipos de datos .................................................................................................................. 44 3.4 phpMyAdmin ........................................................................................................................... 48 3.5 Lenguaje SQL ......................................................................................................................... 49 3.6 Funciones de PHP para el acceso a bases de datos MySQL ............................................... 51 3.6.1 Conectar con el servidor de bases de datos: mysql_connect() ...................................... 51


4

3.6.2 Seleccionar una base de datos: mysql_select_db() ........................................................ 51 3.6.3 Enviar la instrucción SQL a la base de datos: mysql_query() ......................................... 52 3.6.4 Obtener y procesar los resultados: mysql_num_rows(), mysql_fetch_array() ............... 52 3.6.5 Cerrar la conexión con el servidor de bases de datos: mysql_close() ............................ 53 3.4 Consulta avanzada de tablas.................................................................................................. 53 3.4.1 Paginación de resultados ................................................................................................. 53 3.5 Filtrar resultados por columna ................................................................................................ 54 3.6 Actualizar los valores por columna ......................................................................................... 54 SESIONES E IMAGENES EN PHP 4.1 Sesiones en PHP .................................................................................................................... 59 4.2 Funciones para el manejo de sesiones .................................................................................. 59 4.2.1 session_start () ................................................................................................................. 60 4.2.2 session_destroy () ............................................................................................................ 60 4.3 Autenticación de usuarios ....................................................................................................... 60 4.4 Creación de Imágenes ............................................................................................................ 61 4.5 Creación de imágenes dinámicas........................................................................................... 61 4.6 Funciones para la creación de imágenes ............................................................................... 61


5

1 INTRODUCCIÓN En el presente documento pretendemos abordar la conceptualización y practicidad del lenguaje de programación PHP. Consecuencia de ello, se pretende resolver alguna de las preguntas comunes sobre esta herramienta, como: ¿Qué es esto?, ¿para qué sirve?, ¿existen tecnologías alternativas?, etc. Además explicaremos los diferentes pasos a seguir para la descarga e instalación de las herramientas de software necesarias para el presente cometido. Al finalizar este apartado usted estará listo para escribir su primer script en PHP.

1. INTRODUCCIÓN A PHP 1.1.

¿QUÉ ES PHP?

PHP es un lenguaje de script del lado del servidor escrito por y para desarrolladores Web. Otros lenguajes similares son ASP y JSP. PHP significa ―PHP: Hypertext Preprocessor‖. Los scripts PHP están incrustados en los documentos HTML y el servidor los interpreta y ejecuta antes de servir las páginas al cliente. El cliente no ve el código PHP sino los resultados que este produce.


6

1.2.

BREVE HISTORIA DE PHP

Creado por Rasmus Lerdorf para uso personal en 1994. Al año siguiente puso este código en un paquete llamado ―Personal Home Page Tools‖ (o PHP Construcción Kit) respondiendo a la demanda de los usuarios. Es un módulo que se añade al servidor web y fue concebido inicialmente para Apache. En su versión actual, PHP 5 implementa la funcionalidad para la programación orientada a objetos (POO), ofrece soporte para características como: interfaces, variables y métodos privados, polimorfismo y otras construcciones estándar de la POO. PHP se utiliza para la construcción de sitios de la más variada índole: sitios de marketing, de comercio electrónico, empresariales, personales, etc. Cada uno de estos sitios sirve millones de páginas al día y utiliza diversas funcionalidades (ocultas al usuario) proporcionadas por el lenguaje PHP.

1.3.

¿CÓMO FUNCIONA PHP?


7

Para funcionar PHP necesita su motor de scripting (script engine) que ejecuta las partes en código antes de que el servidor de la red envíe la página al usuario. Cuando un usuario solicita una página PHP, el motor ejecuta el código que está en esta página. Durante la ejecución, el código da unas informaciones en formato HTML. Finalmente se envía el archivo (completamente en formato HTML) al usuario. Si intentáis visualizar la fuente de una página en PHP podéis comprobar que no aparece ninguna línea del código PHP. La ventaja es precisamente ésta, ningún usuario externo, excluido el web máster, puede acceder al código y modificarlo. Para el usuario externo, la página en PHP es exactamente igual que una página cualquiera en HTML. Un consejo, para entender mejor este seminario y tener un instrumento útil para programar con eficacia nuestros script, es bajarse el Manual PHP del sitio http://php.net/manual/es/.

1.4.

¿POR QUÉ PHP?

A continuación se esgrimen algunas razones para utilizar PHP. Por sus ventajas:  Es potente, estable, fácil de aprender, de libre distribución (open source), permite el acceso a bases de datos, es compatible con todas las plataformas tecnológicas, posee un sinnúmero de extensiones, además de muchas funcionalidades orientadas a la red.  Dispone de abundante soporte y documentación en la Web.

1.5.

REQUISITOS PARA INSTALAR PHP

Antes de instalar PHP en cualquier plataforma se necesita:  Un servidor o estación de trabajo con suficiente memoria RAM para el sistema operativo (SO).  Un sistema operativo instalado: Linux, Mac OS X o Windows.  Una conexión a internet si se trata de un sitio en producción o instalarlo en una intranet si se trata de un sitio en construcción.


8

Una vez cubiertos todos los requisitos anteriores se realiza la instalación de:  Servidor Web: Apache (disponible para descarga http://www.apache.org/dyn/closer.cgi).  Lenguaje de Programacion: PHP (disponible para descarga http://php.net/downloads.php).  Base de datos: MySQL (disponible para descarga http://www.mysql.com/downloads/)

en: en: en:

Sin embargo existe una versión integrada de estas herramientas bajo una sola plataforma llamada Xampp(XAMPP es una distribución de Apache completamente gratuita y fácil de instalar que contiene MySQL, PHP y Perl. El paquete de instalación de XAMPP ha sido diseñado para ser increíblemente fácil de instalar y usar. Disponible en: https://www.apachefriends.org/es/download.html ). Esta herramienta se abordara mas adelante.

1.6.

XAMPP

1.6.1 ¿QUÉ ES XAMPP? XAMPP es una distribución de Apache que incluye MySQL, PHP y otras herramientas para el desarrollo de aplicaciones web, como phpMyAdmin. XAMPP es gratuito y fácil de instalar: basta con descargar el archivo y extraerlo. XAMPP es multiplataforma: existen versiones para Windows, Linux y Mac OS. Precaución: la configuración por defecto de XAMPP no es segura y no es adecuada para un entorno de producción. El paquete incluye una herramienta para obtener una configuración más segura.

1.6.2

INSTALACIÓN Y CONFIGURACIÓN DE XAMPP

Pasos: A continuación se inicia el asistente de instalación. Para continuar, hay que hacer clic en el botón "Next".


9

Los componentes mínimos que instala XAMPP son el servidor Apache y el lenguaje PHP, pero XAMPP también instala otros elementos. En la pantalla de selección de componentes puede elegirse la instalación o no de estos componentes, para este curso se necesita al menos instalar MySQL y phpMyAdmin.

En la siguiente pantalla se puede elegir la carpeta de instalación de XAMPP. La carpeta de instalación predeterminada es C:\xampp. Si se quiere cambiar, hay que hacer clic en el icono de carpeta y seleccionar la carpeta donde se quiere instalar XAMPP. Para continuar la configuración de la instalación, hay que hacer clic en el botón "Next".


10

La siguiente pantalla nos ofrece información sobre los instaladores de aplicaciones para XAMPP creados por Bitnami. Para que no se abra la página web de Bitnami, habría que desmarcar la casilla correspondiente.

Para empezar la instalación de XAMPP, hay que hacer clic en el botón "Next" en la pantalla siguiente.

A continuación, se inicia el proceso de copia de archivos, que puede durar unos minutos.


11

Una vez terminada la copia de archivos, se muestra la pantalla que confirma que XAMPP ha sido instalado. Hay que hacer clic en el botón "Finish". Para no abrir a continuación el panel de control de XAMPP habría que desmarcar la casilla correspondiente.

1.6.3

EL PANEL DE CONTROL DE XAMPP

Abrir y cerrar el panel de control Al panel de control de XAMPP se puede acceder mediante el menú de inicio "Todos los programas > XAMPP > XAMPP Control Panel" o, si ya está iniciado, mediante el icono del área de notificación. El panel de control de XAMPP se divide en tres zonas:  La zona de módulos, que indica para cada uno de los módulos de XAMPP: si está instalado como servicio, su nombre, el identificador de proceso, el puerto utilizado e incluye unos botones para iniciar y detener los procesos, administrarlos, editar los archivos de configuración y abrir los archivos de registro de actividad.  La zona de notificación, en la que XAMPP informa del éxito o fracaso de las acciones realizadas.  La zona de utilidades, para acceder rápidamente.


12

Para cerrar el panel de control de XAMPP hay que hacer clic en el botón Quit (al cerrar el panel de control no se detienen los servidores):

El botón Cerrar en forma de aspa no cierra realmente el panel de control, sólo lo minimiza:

Si se ha minimizado el panel de control de XAMPP, se puede volver a mostrar haciendo doble clic en el icono de XAMPP del área de notificación.

Haciendo clic derecho en el icono de XAMPP del área de notificación se muestra un menú que permite mostrar u ocultar el panel de control, arrancar o detener servidores o cerrar el panel de control.


13

Se pueden abrir varios paneles de control simultáneamente y cualquiera de ellos puede iniciar o detener los servidores, pero no es aconsejable hacerlo ya que puede dar lugar a confusiones (por ejemplo, al detener un servidor desde un panel de control los otros paneles de control interpretan la detención como un fallo inesperado y muestran un mensaje de error). Si se ha iniciado el servidor Apache, para comprobar que todo funciona correctamente, hay que escribir en el navegador la dirección http://localhost. Al abrir la página por primera vez, XAMPP pedirá seleccionar el idioma:

Una vez elegido el idioma, se mostrará el panel de administración web de XAMPP:


14

1.7.

HERRAMIENTAS DE DESARROLLO

Para el desarrollo de sitios web en PHP será necesario utilizar varias herramientas adicionales, como:  NetBeans: es un entorno de desarrollo integrado libre, hecho principalmente para el lenguaje de programación Java. Disponible en: https://netbeans.org/downloads/  Gestor de bases de datos: phpMyAdmin (www.phpmyadmin.net). 1.7.1.

NETBEANS

Como se ha mencionado anteriormente, Netbeans es un entorno de desarrollo integrado, construido, por y para el lenguaje de programación Java. Existe además un número importante de módulos (porciones de programas que agregan funcionalidades) para extenderlo. NetBeans IDE (Entorno de Desarrollo Integrado) es un producto libre y gratuito sin restricciones de uso. NetBeans es un proyecto de código abierto (Open Sourse) de gran éxito con una gran base de usuarios, una comunidad en constante crecimiento y con cerca de 100 socios en todo el mundo. Sun MicroSystems fundó el proyecto de código abierto NetBeans en junio de 2000 y continúa siendo el patrocinador principal de los proyectos (Actualmente Sun Microsystems es administrado por Oracle Corporation). Netbeans proporciona medios por los cuales los programadores pueden desarrollar una variedad de aplicaciones, a partir de un conjunto de componentes de software llamados módulos. Un módulo, es un archivo que contiene un conjunto de clases escritas en java, listas para interactuar con las API (Application Programming Interface) de netbeas. Este tipo de aplicaciones tiene la ventaja de crecer en el tiempo (escalabilidad), esto se debe a que se pueden ir agregando nuevos módulos conforme crecen las necesidades de la aplicación.

1.8.

PLATAFORMA NETBEANS.

La plataforma ofrece servicios reusables comunes para las aplicaciones, permitiendo a los desarrolladores centrarse en la lógica de sus aplicaciones. Algunas de las características de la aplicación son:        

Gestión de la interfaz de usuario (menús y barras de herramientas). Gestión de configuración de usuario. Gestión de almacenamiento (guardar o cargar algún tipo de dato). Gestión de ventana. Marco Asistente (soporta diálogos para a paso). Librería visual de Netbeans. Herramientas de desarrollo integrado. NetBeans IDE es libre, código abierto, multiplataforma con soporte integrado para el lenguaje de programación Java.

1.9.

LENGUAJE DE PROGRAMACIÓN PHP

Como se ha mencionado anteriormente php, es un lenguaje de script y como tal necesita de un contenedor en donde pueda incrustarse. Como es de suponerse este código es incrustado dentro de etiquetas html.


15

Ejemplo: <html> <head> </head> <body> <h1>hola mundo</h1> <p>pagina web html</p> </body> </html>

Bien hora como podemos incrustar código php con las siguientes líneas: <?PHP ... ?> <?= expresión ?>

Ejemplos: A continuación mostramos dos ejemplos de códigos php incrustados en html: <html> <head> </head> <body> <h1>hola mundo</h1> <p>pagina web html</p> <?PHP echo ―Mensaje PHP‖; ?> </body> </html>

<html> <head> </head> <body> <h1>hola mundo</h1> <p>pagina web html</p> <? echo ―Mensaje PHP‖;?> </body> </html>

Sin embargo lo común es usar el ejemplo de la primera columna. Las instrucciones se separan con un ―;‖ Similar al lenguaje Java. Comentarios: Similar al lenguaje Java /* Comentario de varias líneas */ print ―hola‖; // Comentario de una línea

Para imprimir: echo y print  echo: muestra una o más cadenas echo cadena1 [, cadena2…]; echo ―Hola mundo‖; echo ―Hola ―, ―mundo‖;

 print: muestra una cadena print cadena; print ―Hola mundo‖; print ―Hola ― . ―mundo‖;

Ejemplo: <HTML> <HEAD>


16

<TITLE>Mi primer programa en PHP</TITLE> </HEAD> <BODY> <?PHP print (―<p>Hola mundo</p>‖); ?> </BODY> </HTML>

Uso de \n para generar código HTML legible: a) Sin \n Código PHP print (―<p>Parrafo uno</p>‖); print (―<p>Parrafo dos</p>‖); Código HTML <p>Parrafo uno</p> <p>Parrafo dos</p> Salida Parrafo uno Parrafo dos b) Con \n Código PHP print (―<p>Parrafo uno</p>\n‖); print (―<p>Parrafo dos</p>\n‖);

Código HTML <p>Parrafo uno</p> <p>Parrafo dos</p>

Salida Parrafo uno Parrafo dos

Inclusión de ficheros externos:  include()  require() Ambos incluyen y evalúan el fichero especificado. Diferencia: en caso de error include() produce un warning y require() un error fatal. Se utiliza require() si al producirse un error debe interrumpirse la carga de la página. Ejemplo: <HTML> <HEAD> <TITLE>Titulo</TITLE>


17

<?php // Incluir bibliotecas de : funciones require ("conecta.php"); require ("fecha.php"); require ("cadena.php"); require ("globals.php"); ?> </HEAD> <BODY> <?PHP include ("cabecera.html"); ?> // Código HTML + PHP ... <?PHP include ("pie.html"); ?> </BODY> </HTML>

1.10.

TIPOS DE DATOS

PHP soporta 8 tipos de datos primitivos: TIPOS DE DATOS integer

Float o double

string

boolean

DEFINICION Los integers, o enteros, pueden tener distintos valores numéricos enteros que se expresan con diferentes notaciones. $variable = 18; // Número entero positivo $variable = -18; // Número entero negativo $variable = 0x12; // Notación hexadecimal, en principio no la utilizaremos Este tipo de datos son los números de punto flotante a los que normalmente llamamos ―números decimales‖, por ejemplo, 9.876. Ambos tienen mucha precisión, pero double es el más preciso (con más decimales). La sintaxis para utilizarlos es bastante simple: $variable = 9.876; El tipo de datos string, también conocido como cadena de caracteres, se expresa con la siguiente sintaxis: $variable = "Yo soy una cadena"; Se trata de un tipo lógico. Sus posibles valores son true (verdadero) o false (falso). $variable = true; $variable = false;

El tipo de una variable no se suele especificar. Se decide en tiempo de ejecución en función del contexto y puede variar Ejemplos: $a = 9; print ‗a vale $a\n‘; // muestra a vale $a\n print ―a vale $a\n‖; // muestra a vale 9 y avanza una línea print ―<IMG SRC=‗logo.gif‘>‖; // muestra <IMG SRC=‗logo.gif‘> print ―<IMG SRC=\‖logo.gif\‖>‖; // muestra <IMG SRC=―logo.gif‖>

Para acceder a un caracter perteneciente a una cadena. La forma es: $inicial = $nombre{0}; Funciones de interés:  La función gettype() devuelve el tipo de una variable.


18

 Las funciones is_type comprueban si una variable es de un tipo dado: is_array(), is_bool(), is_float(), is_integer(), is_null(), is_numeric(), is_object(), is_resource(), is_scalar(), is_string().  La función var_dump() muestra el tipo y el valor de una variable. Es especialmente util con los arreglos (arrays).

1.11.

VARIABLES

Las variables siempre van precedidas de un $. El nombre es sensible a las mayúsculas. Deben comenzar con una letra o subrayado, seguido de letras, números o subrayado. Existen variables predefinidas, propias de PHP, como: $GLOBALS, $_SERVER, $_GET, $_POST, $_COOKIES, $_FILES, $_ENV, $_REQUEST, $_SESSION. El ámbito que poseen es global al fichero (excepto funciones) o locales a una función. Ejemplo: $valor = 5; print ―El valor es: ― . $valor . ―\n‖; print ―El valor es: $valor\n‖; // ojo: comillas dobles Resultado: El valor es: 5

Ejemplo de variables ―variables‖ página internacionalizada, muestra un mensaje en dos idiomas diferentes: <?PHP $mensaje_es="Hola"; $mensaje_en="Hello"; $idioma = "es"; $mensaje = "mensaje_" . $idioma; print $$mensaje; ?>

<?PHP $mensaje_es="Hola"; $mensaje_en="Hello"; $idioma = "en"; $mensaje = "mensaje_" . $idioma; print $$mensaje; ?>


19

1.12.

CONSTANTES

Las constantes en PHP se definen de la forma siguiente: define (―CONSTANTE‖, ―hola‖); print CONSTANTE; Como se observa en el bloque de código, las constantes no llevan $ delante. Sólo se pueden definir constantes de los tipos escalares (boolean, integer, double, string).

1.13.

OPERADORES

Los operadores se clasifican en 6 grandes grupos así: Operador Operadores aritméticos:

Descripción +, -, *, /, %, ++, --

Operador de asignación:

= El operador de asignación se puede combinar con otros para simplificar el código, así:

Operadores de comparación: Operador de control de error @:

Operadores lógicos:

Operadores de cadena: Precedencia de operadores (ordenados de mayor a menor):

$a = 3; $a += 5; // a vale 8 $b = ―hola ‖; $b .= ―mundo‖; // b vale ―hola mundo‖ // Equivale a $b = $b . ―mundo‖; ==, !=, <, >, <=, >= y otros Antepuesto a una expresión, evita cualquier mensaje de error que pueda ser generado por la expresión. and (&&), or (||), no (!), xor Los operadores lógicos and (&&) y or (||) tienen diferentes prioridades.

concatenación: . (punto) asignación con concatenación: .= ++, -*, /, % +,<, <=, >, >= ==, != && || and or


20

1.14.

ESTRUCTURAS DE CONTROL

Las estructuras de control se clasifican en selectivas y repetitivas. A su vez cada uno de estos tipos contiene una serie de estructuras mostradas a continuación: Estructuras selectivas: Estructuras repetitivas:

If – else Switch While For Foreach

1.14.1 ESTRUCTURA SELECTIVA IF-ELSE

Tiene el mismo comportamiento que en C. Las sentencias compuestas (si hay más de una sentencia) se encierran entre llaves. Las palabras ―elseif‖ pueden escribirse juntas, sin espacio entre ellas. A continuación presentamos la conformación de esta estructura: if (condición)

if (condición 1)

sentencia;

sentencia 1;

if (condición)

else if (condición 2)

sentencia 1;

sentencia 2;

else sentencia 2;

... else if (condición n) sentencia n; else sentencia n+1;


21

Ejemplo de estructura selectiva if-else: <?php

$saludo = "Bienvenida, "; else $saludo = "Bienvenido, "; $saludo = $saludo . $nombre; print ($saludo); ?>

1.14.2 ESTRUCTURA SELECTIVA SWITCH Tiene el mismo comportamiento que en C, sólo que la expresión del case puede ser de tipo integer, float o string. switch (expresión) { case valor_1: sentencia 1; break; case valor_2: sentencia 2; break; … case valor_n: sentencia n break; default sentencia n+1 }

Ejemplo de estructura selectiva switch: switch ($extension) { case ("PDF"): $tipo = "Documento Adobe PDF"; break; case ("TXT"): $tipo = "Documento de texto"; break; case ("HTML"): case ("HTM"): $tipo = "Documento HTML"; break; default: $tipo = "Archivo " . $extension; } print ($tipo);


22

1.14.3 ESTRUCTURA REPETITIVA WHILE

Tiene el mismo comportamiento que en C. Las sentencias compuestas (si hay mรกs de una sentencia) se encierran entre llaves. while (condiciรณn) sentencia;

Ejemplo de estructura repetitiva while: <?php print ("<UL>\n"); $i=1; while ($i <= 5) { print ("<LI>Elemento $i</LI>\n"); $i++; } print ("</UL>\n"); ?>

while (condiciรณn) { sentencia 1; sentencia 2; ... sentencia n; }


23

1.14.4 ESTRUCTURA REPETITIVA FOR

Tiene el mismo comportamiento que en C. Las sentencias compuestas (si hay mรกs de una sentencia) se encierran entre llaves.


24

for (inicialización; condición; incremento) sentencia; for (inicialización; condición; incremento) { sentencia 1; sentencia 2; sentencia 3; ... sentencia n; }

Ejemplo de estructura repetitiva for: <?php print ("<UL>\n"); for ($i=1; $i<=5; $i++) print ("<LI>Elemento $i</LI>\n"); print ("</UL>\n"); ?>

1.15.

FUNCIONES

En PHP por defecto los parámetros se pasan por valor a una función definida. Ejemplo: function suma ($x, $y) { $s = $x + $y; return $s; } $a=1; $b=2; $c=suma ($a, $b); print $c

Para realizar el paso de parámetros por referencia se utiliza el operador ―&‖ (ampersand en inglés, et en español). Ejemplo: function incrementa (&$a) { $a = $a + 1; } $a=1; incrementa ($a); print $a; // Muestra un 2

Es posible declarar funciones cuyos argumentos sean valores por defecto. Ejemplo: function muestranombre ($titulo = "Sr.") { print "Estimado $titulo:\n";


25

} muestranombre (); muestranombre ("Prof.");

Salida: Estimado Sr.: Estimado Prof.: Los argumentos que tienen valores por defecto siempre se declaran al último: Function muestranombre ($nombre, $titulo= "Sr.") { print "Estimado $titulo $nombre:\n"; } muestranombre (―Fernández‖); muestranombre (―Fernández‖, "Prof.");

Salida: Estimado Sr. Fernández: Estimado Prof. Fernández:

1.16.

ARREGLOS

La forma de declarar un arreglo (tabla o array) en php es la siguiente: array ([clave =>] valor, ...);

La clave es una cadena o un entero no negativo. El valor puede ser de cualquier tipo válido en PHP, incluyendo otro arreglo. Ejemplos: $color = array (‗rojo‘=>101, ‗verde‘=>51, ‗azul‘=>255); $medidas = array (10, 25, 15);

Para acceder a uno de los elementos del arreglo se utiliza la clave incluida en la declaración. Ejemplo: $color[‗rojo‘]; // No olvidar las comillas $medidas[0];

Cuando no se declaran las claves explícitamente, éstas tienen valores numéricos secuenciales donde el primer elemento es el 0. La estructura de control foreach permite iterar sobre arreglos. Las sentencias compuestas (si hay más de una sentencia) se encierran entre llaves. La sintaxis es la siguiente: foreach (expresión_array as $valor) sentencia; foreach (expresión_array as $clave => $valor) sentencia; foreach (expresión_array as $valor) { sentencia 1; sentencia 2;


26

sentencia 3; ... sentencia n; } foreach (expresión_array as $clave => $valor) { sentencia 1; sentencia 2; sentencia 3; ... sentencia n; }

Ejemplos: foreach ($color as $valor) print ―Valor: $valor<BR>\n‖; foreach ($color as $clave => $valor) print ―Clave: $clave; Valor: $valor<BR>\n‖;

Salida: Valor: 101 Valor: 51 Valor: 255 Clave: rojo; Valor: 101 Clave: verde; Valor: 51 Clave: azul; Valor: 255

1.17.

BIBLIOTECA DE FUNCIONES

Existen muchas bibliotecas de funciones en PHP. Algunos ejemplos son los siguientes:       

Funciones de manipulación de cadenas Funciones de fecha y hora Funciones de arreglos Funciones de ficheros Funciones matemáticas Funciones de bases de datos Funciones de red

Algunas bibliotecas requieren la instalación de componentes adicionales. Todas las funciones de biblioteca están comentadas en la documentación oficial de PHP. 1.17.1 FUNCIONES DE MANIPULACIÓN DE CADENAS explode()


27

 Divide una cadena en subcadenas.  Definición: array explode (string separator, string string [, int limit]) rtrim(), ltrim(), trim()  Eliminan caracteres a la derecha, a la izquierda o por ambos lados de una cadena.  Definición: string rtrim ( string str [, string charlist]) strstr()  Busca la primera ocurrencia de una subcadena. strtolower() / strtoupper()  Convierte una cadena a minúscula / mayúscula strcmp() / strcasecmp()  Compara dos cadenas con/sin distinción de mayúsculas strlen()  Calcula la longitud de una cadena 1.17.2 FUNCIONES DE FECHA Y HORA date()  Formatea una fecha según un formato dado  Ejemplo: $fecha = date ("j/n/Y H:i"); print ("$fecha");  Resultado: 26/9/2005 17:36 strtotime()  Convierte una fecha en un timestamp de UNIX  Ejemplo: $fecha = date ("j/n/Y", strtotime(―5 april 2001")); print ("$fecha");  Resultado: 5/4/2001 1.17.3 FUNCIONES DE ARRAYS array_count_values()  Calcula la frecuencia de cada uno de los elementos de un array array_search()  Busca un elemento en un array count()  Cuenta los elementos de un array sort(), rsort()


28

 Ordena y reindexa un array (r=decreciente) ksort(), krsort()  Ordena por claves un array (r=decreciente) Autoevaluación 1. ¿Cuántas y cuáles son las formas de declarar un string en PHP? De un ejemplo de cada una. 2. ¿Un string puede indizarse o acceder a un caracter del string utilizando un índice numérico? 3. ¿Cuál es el operador de concatenación de strings? 4. Elabore una tabla que indique los operadores aritméticos utilizados en PHP. 5. Elabore una tabla que indique los operadores lógicos (o de comparación) utilizados en PHP. Actividades complementarias Ejercicio 1: Prueba de PHP Investiga cómo comprobar si la instalación de PHP se ha realizado satisfactoriamente utilizando código del lenguaje. Ejercicio 2: programa que muestra un mensaje Elabore un programa que muestre cómo incrustar código PHP en un documento HTML y cómo imprimir un mensaje desde PHP. Ejercicio 3: programa que calcula una tabla de multiplicar Escriba un programa que permita calcular la tabla de multiplicar (desde 1 hasta 12) de un número cualquiera. Este ejercicio ejemplifica cómo manejar variables y cómo usar bucles. Ejercicio 4: programa que muestra la fecha actual Elabore un programa que muestre la fecha actual del sistema. Este ejemplo muestra cómo usar comentarios, arreglos y funciones (propias y de biblioteca); también cómo usar el manual de PHP.


29

2 FORMULARIOS En esta unidad se estudia los formularios. A modo de introducción podemos indicar que los formularios son medios por los cuales los usuarios que usan las aplicaciones web pueden proporcionar datos hacia los archivos PHP para su procesamiento y presentación de resultados. PHP potencia la utilización de los formularios permitiendo la realización de procesos de forma automática. Para trabajar con formularos debemos conocer la sintaxis básica de un elemento html; para ejemplificar usaremos la etiqueta input. <input name=‖nombre‖ type=‖tipo‖ id=‖idelemento‖/> <input name=‖nombre‖ type=‖tipo‖ id=‖idelemento‖>…<input/>

Name: nombre del control. Type: Cajas de texto, casillas de verificación, cajas de password. Id: Identificador del control similar al nombre

2.1. ACCESO A FORMULARIOS HTML DESDE PHP Primero deberemos estudiar la etiqueta form (<form>). La etiqueta <form> encierra todos los contenidos del formulario (botones, cuadros de texto, listas desplegables) y la etiqueta <input> permite definir varios tipos diferentes de elementos (botones y cuadros de texto). Atributos action = "url" method = "POST o GET" enctype = "application/x-www-formurlencoded o multipart/form-data"

accept = "tipo_de_contenido"

- Indica la URL que se encarga de procesar los datos del formulario - Método HTTP empleado al enviar el formulario - Tipo de codificación empleada al enviar el formulario al servidor (sólo se indica de forma explícita en los formularios que permiten adjuntar archivos) - Lista separada por comas de todos los tipos de archivos aceptados por el servidor (sólo


30

para los formularios que permiten adjuntar archivos)

Desde PHP se puede acceder fácilmente a los datos introducidos desde un formulario HTML. Veámoslo con un ejemplo simple: Nombre del fichero: uno.html. A continuación se muestra su contenido: <HTML> <BODY> <FORM ACTION=‖dos.php‖ METHOD=‖POST‖> Edad: <INPUT TYPE=‖text‖ NAME=‖edad‖> <INPUT TYPE=‖submit‖ VALUE=‖aceptar‖> </FORM> </BODY> </HTML>

Nombre del fichero: dos.php. A continuación se muestra su contenido: <HTML> <BODY> <?PHP $edad = $_REQUEST[‗edad‘]; print (―La edad es: $edad‖); ?> </BODY> </HTML>

Utilizando PHP se tiene acceso a los diferentes tipos de elementos HTML de entrada de datos al formulario: Elemento Input

Select

Tipo Text Radio Checkbox Button File Hidden Password Submit Simple Multiple

Textarea

A continuación se presenta cada uno de estos elementos con el ejemplo respectivo.

2.1.1 TEXT Explicaremos su utilización con el siguiente ejemplo. Nombre del fichero: text.html. A continuación se muestra su contenido: <HTML>


31

<BODY> <FORM ACTION=‖text.php‖ METHOD=‖POST‖> Introduzca la cadena a buscar: <INPUT TYPE="text" NAME="cadena" VALUE="valor por defecto" SIZE="20"> </FORM> </BODY> </HTML>

Nombre del fichero: text.php. A continuación se muestra su contenido: <HTML> <BODY> <?php $cadena = $_REQUEST[‗cadena‘]; print ($cadena); ?> </BODY> </HTML>

2.1.2

RADIO

Explicaremos su utilización con el siguiente ejemplo. Nombre del fichero: radio.html. A continuación se muestra su contenido: <HTML> <BODY> <FORM ACTION=‖radio.php‖ METHOD=‖POST‖> Sexo: <INPUT TYPE="radio" NAME=―sexo" VALUE=―M― CHECKED>Mujer <INPUT TYPE="radio" NAME=―sexo" VALUE=―H">Hombre </FORM> </BODY> </HTML>

Nombre del fichero: radio.php. A continuación se muestra su contenido: <HTML> <BODY> <?php $sexo = $_REQUEST[‗sexo‘]; print ($sexo); ?> </BODY> </HTML>

2.1.3

CHECKBOX

Explicaremos su utilización con el siguiente ejemplo. Nombre del fichero: checkbox.html. A continuación se muestra su contenido: <HTML> <BODY> <FORM ACTION=―checkbox.php‖ METHOD=‖POST‖>


32

<INPUT TYPE="checkbox" NAME="extras[]" VALUE="garaje" CHECKED> Garaje <INPUT TYPE="checkbox" NAME="extras[]" VALUE="piscina">Piscina <INPUT TYPE="checkbox" NAME="extras[]" VALUE="jardin">Jardín </FORM> </BODY> </HTML>

Nombre del fichero: checkbox.php. A continuación se muestra su contenido: <HTML> <BODY> <?php $extras = $_REQUEST[‗extras‘]; foreach ($extras as $extra) print (―$extra<BR>\n‖); ?> </BODY> </HTML>

2.1.4

BUTTON

Explicaremos su utilización con el siguiente ejemplo. Nombre del fichero: button.html. A continuación se muestra su contenido: <HTML> <BODY> <FORM ACTION=―button.php‖ METHOD=‖POST‖> <INPUT TYPE="button" NAME=―actualizar" VALUE="Actualizar datos"> </FORM> </BODY> </HTML>

Nombre del fichero: button.php. A continuación se muestra su contenido: <HTML> <BODY> <?php $actualizar = $_REQUEST[‗actualizar‘]; if ($actualizar) print ("Se han actualizado los datos"); ?> </BODY> </HTML>

2.1.5

FILE

Explicaremos su utilización con el siguiente ejemplo. Nombre del fichero: file.html. A continuación se muestra su contenido: <HTML> <BODY>


33

<FORM ACTION="procesa.php" METHOD="post― ENCTYPE="multipart/form-data"> <INPUT TYPE="file" NAME="fichero"> </FORM> </FORM> </BODY> </HTML>

2.1.6

HIDDEN

Explicaremos su utilización con el siguiente ejemplo. Nombre del fichero: hidden.html. A continuación se muestra su contenido: <HTML> <BODY> <FORM ACTION=―hidden.php‖ METHOD=‖POST‖> <INPUT TYPE=‘hidden‘ NAME=‘username‘ VALUE=‘$usuario‘> </FORM> </BODY> </HTML>

Nombre del fichero: hidden.php. A continuación se muestra su contenido: <HTML> <BODY> <?php $username = $_REQUEST[‗username‘]; print ($username); ?> </BODY> </HTML>

2.1.7

PASSWORD

Explicaremos su utilización con el siguiente ejemplo. Nombre del fichero: password.html. A continuación se muestra su contenido: <HTML> <BODY> <FORM ACTION=―password.php‖ METHOD=‖POST‖> Contraseña: <INPUT TYPE="password" NAME="clave"> </FORM> </BODY> </HTML>

Nombre del fichero: password.php. A continuación se muestra su contenido: <HTML> <BODY> <?php $clave = $_REQUEST[‗clave‘]; print ($clave); ?>


34

</BODY> </HTML>

2.1.8 SUBMIT Explicaremos su utilización con el siguiente ejemplo. Nombre del fichero: submit.html. A continuación se muestra su contenido: <HTML> <BODY> <FORM ACTION=―submit.php‖ METHOD=‖POST‖> <INPUT TYPE="submit" NAME="enviar" VALUE="Enviar datos"> </FORM> </BODY> </HTML>

Nombre del fichero: submit.php. A continuación se muestra su contenido: <HTML> <BODY> <?php $enviar = $_REQUEST[‗enviar‘]; if ($enviar) print ("Se ha pulsado el botón de enviar"); ?> </BODY> </HTML>

2.1.9

SELECT SIMPLE

Explicaremos su utilización con el siguiente ejemplo. Nombre del fichero: selects.html. A continuación se muestra su contenido: <HTML> <BODY> <FORM ACTION=―selects.php‖ METHOD=‖POST‖> Color: <SELECT NAME=―color"> <OPTION VALUE=―rojo" SELECTED>Rojo <OPTION VALUE=―verde">Verde <OPTION VALUE=―azul">Azul </SELECT> </FORM> </BODY> </HTML>

Nombre del fichero: selects.php. A continuación se muestra su contenido: <HTML> <BODY> <?php $color = $_REQUEST[‗color‘];


35

print ($color); ?> </BODY> </HTML>

2.1.10

SELECT MÚLTIPLE

Explicaremos su utilización con el siguiente ejemplo. Nombre del fichero: selectm.html. A continuación se muestra su contenido: <HTML> <BODY> <FORM ACTION=―selectm.php‖ METHOD=‖POST‖> Idiomas: <SELECT MULTIPLE SIZE="3" NAME="idiomas[]"> <OPTION VALUE="ingles" SELECTED>Inglés <OPTION VALUE="frances">Francés <OPTION VALUE="aleman">Alemán <OPTION VALUE="holandes">Holandés </SELECT> </FORM> </BODY> </HTML>

Nombre del fichero: selectm.php. A continuación se muestra su contenido: <HTML> <BODY> <?php $idiomas = $_REQUEST[‗idiomas‘]; foreach ($idiomas as $idioma) print (―$idioma<BR>\n‖); ?> </BODY> </HTML>

2.1.11

TEXTAREA

Explicaremos su utilización con el siguiente ejemplo. Nombre del fichero: textarea.html. A continuación se muestra su contenido: <HTML> <BODY> <FORM ACTION=―textarea.php‖ METHOD=‖POST‖> Comentario: <TEXTAREA COLS=―50" ROWS=―4" NAME="comentario"> Este libro me parece ... </TEXTAREA> </FORM> </BODY> </HTML>


36

Nombre del fichero: textarea.php. A continuación se muestra su contenido: <HTML> <BODY> <?php $comentario = $_REQUEST[‗comentario‘]; print ($comentario); ?> </BODY> </HTML>

2.2 EL FORMULARIO DE PHP La forma habitual de trabajar con formularios en PHP es utilizar un único programa que lo procese o lo muestre según haya sido enviado o no; por lo general el proceso de envío comienza al pulsar el botón ―Enviar‖. Ventajas:  Disminuye el número de ficheros  Permite validar los datos del formulario en el propio formulario Proceso a seguir Expresado en seudocódigo el algoritmo para el procesamiento de un formulario es: si se ha enviado el formulario entonces Procesar formulario si no Mostrar formulario fin si

Considerando que: o o

La 1ª vez que se carga la página en el navegador se muestra el formulario vacío. La 2ª vez, pulsado el botón enviar, se procesa el formulario.

Para saber si se ha enviado el formulario se acude a la variable correspondiente al botón de envío. Como este botón aparece de la siguiente forma en el formulario HTML: <INPUT TYPE="SUBMIT" NAME="enviar― VALUE="procesar"> Entonces la condición mostrada en seudocódigo se transforma en: if (isset($enviar))

O bien if ($enviar == ―procesar‖)

2. 3 SUBIDA DE FICHEROS AL SERVIDOR


37

Para subir un fichero al servidor se utiliza el elemento de entrada FILE. Hay que tener en cuenta una serie de consideraciones importantes:  La etiqueta FORM debe tener el atributo ENCTYPE="multipart/form-data―.  El fichero tiene un límite en cuanto a su tamaño. Este límite se fija de dos formas diferentes: o En el fichero de configuración de PHP ―php.ini‖. o En el propio formulario  Debe darse al fichero un nombre que evite coincidencias con ficheros ya subidos. Por ello, y como norma general, debe descartarse el nombre original del fichero y crear uno nuevo que sea único.  El fichero subido se almacena en un directorio temporal y hemos de moverlo al directorio de destino usando la función ―move_upload_file()‖. Proceso a seguir Expresado en seudocódigo el algoritmo para subir archivos al servidor es: si se ha subido correctamente el archivo entonces Asignar un nombre al archivo Mover el archivo a su ubicación definitiva si no Mostrar un mensaje de error fin si

El código en HTML que debe contener la página web para permitir la subida de un archivo es: <INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="102400"> <INPUT TYPE="FILE" SIZE="44" NAME="imagen">

La variable $_FILES, propia de PHP, contiene toda la información del fichero subido, así:    

$_FILES['imagen']['name'] Nombre original del fichero en la máquina cliente. $_FILES['imagen']['type'] Tipo mime del fichero. Por ejemplo, "image/gif" $_FILES['imagen']['size'] Tamaño en bytes del fichero subido $_FILES['imagen']['tmp_name'] Nombre del fichero temporal en el que se almacena el fichero subido en el servidor  $_FILES*'imagen‘+*'error'+ Código de error asociado al fichero subido A continuación se presenta el código en PHP que implementa el algoritmo expresado en seudocódigo: if (is_uploaded_file ($_FILES['imagen']['tmp_name'])) { $nombreDirectorio = "img/"; $idUnico = time(); $nombreFichero = $idUnico . "-" . $_FILES['imagen']['name']; move_uploaded_file ($_FILES['imagen']['tmp_name'], $nombreDirectorio . $nombreFichero); } else print ("No se ha podido subir el archivo\n");


38

Una mejora necesaria al programa anterior es verificar si el archivo existe, así: if (is_uploaded_file ($_FILES['imagen']['tmp_name'])) { $nombreDirectorio = "img/"; $nombreFichero = $_FILES['imagen']['name']; $nombreCompleto = $nombreDirectorio . $nombreFichero; if (is_file($nombreCompleto)) { $idUnico = time(); $nombreFichero = $idUnico . "-" . $nombreFichero; } move_uploaded_file ($_FILES['imagen']['tmp_name'],$nombreDirectorio . $nombreFichero); } else print ("No se ha podido subir el archivo\n");

2.4 VALIDACIÓN DE LOS DATOS DE UN FORMULARIO Toda la información proveniente de un formulario debe considerarse por norma como contaminada, y hay que validarla antes de procesarla. Lo más eficiente es mostrar los errores sobre el propio formulario para facilitar su corrección. Proceso a seguir Expresado en seudocódigo el algoritmo para validar los datos de un formulario es: si se ha enviado el formulario entonces si hay errores entonces Mostrar formulario con errores si no Procesar formulario fin si si no Mostrar formulario fin si

Este procedimiento se puede resumir para que sólo haya que mostrar una vez el formulario, bien con los valores por defecto o con los valores introducidos y con los errores, así: si se ha enviado el formulario entonces validar datos fin si si se ha enviado el formulario y no hay errores entonces Procesar formulario si no Mostrar formulario con valores por defecto o ya enviados fin si

Se debe considerar que:  La 1ª vez que se carga la página se muestra el formulario.  La 2ª y sucesivas veces se validan los datos.


39

o o

Si hay errores, se muestra de nuevo el formulario con los errores. Si no hay errores, se procesa el formulario.

Autoevaluación 1. Al utilizar un formulario, ¿Cuántos y cuáles son los atributos mínimos necesarios para pasar uno o varios argumentos al script de PHP? 2. ¿Para qué sirve el método POST que acompaña a un formulario HTML? 3. ¿Cuáles son las ventajas y las desventajas al utilizar el método POST? 4. Realice una tabla que muestre los elementos HTML que pueden utilizarse en un formulario. Actividades complementarias Ejercicio 1: formulario simple Realice un formulario simple que permita buscar canciones. Este formulario debe contener un campo para ingresar el nombre de la canción; tres radio button para escoger entre las opciones de búsqueda por título de la canción, por el nombre del álbum y por los dos anteriores al mismo tiempo; un campo para seleccionar el género musical de entre los siguientes: todos, acústica, banda sonora, blues, electrónica, folk, jazz, new age, pop, rock; finalmente un botón que permita enviar los datos del formulario al archivo php para su procesamiento. Este ejercicio ilustra cómo acceder a los valores introducidos desde un formulario HTML. Ejercicio 2: programa que muestra los datos introducidos desde un formulario Escriba un programa que ejemplifique todos y cada uno de los elementos HTML que pueden conformar un formulario. Este ejemplo ilustra cómo acceder a los valores introducidos desde todos los tipos de elementos de entrada de un formulario, con excepción de los tipos BUTTON y FILE, que se tratan en ejercicios posteriores. Ejercicio 3: formulario de PHP Reescriba el programa de búsqueda de canciones (ejercicio 1) para que no sólo presente sino el formulario sino que también incluya el código PHP para su procesamiento. Este ejercicio Ilustra cómo crear páginas multipropósito que sirven tanto para mostrar un formulario como para procesarlo. Ejercicio 4: subida de un fichero al servidor Realice un programa para insertar noticias en un blog. El formulario debe contener campos para ingresar el título y el texto de la noticia; otro para escoger el tipo de noticia: local, nacional o internacional; otro para almacenar un archivo de imagen de hasta 1MB; y, finalmente un botón para procesar los datos. Recuerde que todos estos datos deben ser ingresados de forma obligatoria. Este ejemplo ilustra cómo subir ficheros a un servidor, cómo controlar su tamaño, cómo crear un nombre único para el fichero y cómo almacenarlo en el lugar deseado


40

Ejercicio 5: validación de los datos introducidos en un formulario Reescriba el programa de búsqueda de canciones (ejercicio 1) para que valide todos y cada uno de los datos ingresados en el formulario. Este ejercicio ilustra cómo realizar una validación de los datos introducidos en un formulario en el propio formulario.


41

3 ACCESO A BASES DE DATOS MYSQL EN PHP En toda aplicación de software siempre es necesario incluir medios para el almacenamiento de información, específicamente base de datos. La construcción de páginas web no es ajena a esta situación. Este tema contiene una breve introducción a MySQL y a la forma de trabajo entre MySQL y PHP. Se realiza un estudio detallado sobre las funciones de PHP que permiten trabajar con bases de datos con un enfoque práctico hacia el estudiante.

3. 1 BASES DE DATOS EN LA WEB Las bases de datos permiten almacenar de forma estructurada y eficiente toda la información de un sitio web. Ventajas:     

Proporcionar información actualizada Facilitar la realización de búsquedas Disminuir los costes de mantenimiento Implementar sistemas de control de acceso Almacenar preferencias de los usuarios

A continuación se presente un esquema básico de un sitio web soportado por bases de datos:


42

3.2 INSTALACIÓN Y CONFIGURACIÓN DE MYSQL El proceso de instalación y configuración de MySQL es el siguiente: Descargar    

Conectarse a la página web de MySQL, http://www.mysql.com/downloads/ Seleccionar la pestaña Developer Zone y dentro de ella la sección Downloads. Elegir la versión estable más reciente de MySQL Community Server. Seleccionar la plataforma Windows y descargar el archivo a una carpeta temporal.

Descomprimir e instalar  Descomprimir el archivo descargado en una carpeta temporal  Ejecutar el archivo setup.exe y seguir las indicaciones: o Seleccionar instalación típica o Aceptar la carpeta de instalación por defecto  Pulsar el botón Finish para terminar la instalación y pasar a la configuración del servidor Configurar Al finalizar la instalación se ejecuta el asistente para la configuración del servidor. Seguir sus indicaciones:  Elegir la configuración estándar.  Seleccionar la instalación como servicio Windows y Marcar la casilla para lanzar el servidor automáticamente al arrancar el sistema.  Establecer una contraseña para el administrador (root).  Pulsar el botón Execute para realizar la configuración.  Pulsar el botón Finish para finalizar el asistente.


43

Arrancar Si se indicó el arranque automático en la configuración, el servidor se inicia de forma automática al arrancar el sistema. Conectar con el servidor Formas de establecer la conexión con el servidor:  Desde la línea de órdenes con Inicio > Programas > MySQL>MySQL Server 5.1 > MySQL Command Line Client Enter password: ******** mysql> … mysql> exit  Mediante alguna herramienta que proporcione una interfaz gráfica como phpMyAdmin.  Desde una página web mediante la interfaz que proporciona MySQL. Es lo que haremos con la biblioteca de funciones de MySQL que posee PHP. Para conectar con el servidor hay que crear antes una cuenta de usuario y asignarle los correspondientes permisos de acceso. En general para una base de datos es conveniente definir al menos dos usuarios:  Un usuario anónimo que tenga permisos de lectura sobre las tablas que se estime adecuado.  Un usuario administrador que tenga permisos para insertar, modificar o eliminar elementos de las tablas de la base de datos En cada conexión hay que indicar el nombre del usuario, su contraseña y la máquina desde la que se realiza la conexión (localhost si es la propia máquina donde reside el servidor, que es lo habitual en el acceso desde la Web) Instalar la extensión para MySQL de PHP En PHP 5 no se instala por defecto la extensión para el acceso a bases de datos MySQL y hay que hacerlo manualmente. Se hace de la siguiente manera:  Editar el fichero php.ini y habilitar la extensión: ―extension=php_mysql.dll‖.  Añadir la ruta c:\php al PATH del sistema (ver las instrucciones para hacerlo en el fichero install.txt que hay en la carpeta c:\php).

3.3 MYSQL MySQL es un sistema de administración de bases de datos (Database Management System, DBMS) para bases de datos relacionales. Así, MySQL no es más que una aplicación que permite gestionar archivos llamados de bases de datos.


44

Existen muchos tipos de bases de datos, desde un simple archivo hasta sistemas relacionales orientados a objetos. MySQL, como base de datos relacional, utiliza múltiples tablas para almacenar y organizar la información. MySQL fue escrito en C y C++ y destaca por su gran adaptación a diferentes entornos de desarrollo, permitiendo su interactuación con los lenguajes de programación más utilizados como PHP, Perl y Java y su integración en distintos sistemas operativos. También es muy destacable, la condición de open source de MySQL, que hace que su utilización sea gratuita e incluso se pueda modificar con total libertad, pudiendo descargar su código fuente. Esto ha favorecido muy positivamente en su desarrollo y continuas actualizaciones, para hacer de MySQL una de las herramientas más utilizadas por los programadores orientados a Internet.

3.3.1 TIPOS DE DATOS Los tipos de datos que puede haber en un campo, se pueden agrupar en tres grandes grupos:  Numéricos o tinyint, smallint, mediumint, int, integer, bigint o decimal, float, numeric Tipo de Campo

Tamaño de Almacenamiento

TINYINT

1 byte

SMALLINT

2 bytes

MEDIUMINT

3 bytes

INT

4 bytes

INTEGER

4 bytes

BIGINT

8 bytes

FLOAT(X)

4 ú 8 bytes

FLOAT

4 bytes

DOUBLE

8 bytes

DOUBLE PRECISION

8 bytes

REAL

8 bytes

DECIMAL(M,D

M+2 bytes sí D > 0, M+1 bytes sí D = 0

NUMERIC(M,D)

M+2 bytes if D > 0, M+1 bytes if D=0

 Fecha y hora o date, time, datetime, year, timestamp Tamaño

Formato


45

14

AñoMesDiaHoraMinutoSegundo aaaammddhhmmss

12

AñoMesDiaHoraMinutoSegundo aammddhhmmss

8

AñoMesDia Aaaammdd

6

AñoMesDia Aammdd

4

AñoMes Aamm

2

Año Aa

 Cadena o char, varchar o tinytext, text, mediumtext, longtext o tinyblob, blob, mediumblob, longblob o enum, set Tipo de campo

Tamaño de Almacenamiento

CHAR(n)

n bytes

VARCHAR(n)

n +1 bytes

TINYBLOB, TINYTEXT

Longitud+1 bytes

BLOB, TEXT

Longitud +2 bytes

MEDIUMBLOB,

Longitud +3 bytes

MEDIUMTEXT LONGBLOB, LONGTEXT

Longitud +4 bytes

ENUM('value1','value2',...)

1 ó dos bytes dependiendo del número de valores

SET('value1','value2',...)

1, 2, 3, 4 ó 8 bytes, dependiendo del número de valores

Debe elegirse adecuadamente el tipo y el tamaño de cada campo. Operadores Aritmeticos

+, -, *, /

Comparacion

=, !=, <=, <, >=, >, IS NULL, IS NOT NULL


46

Logicos

not (!), and (&&), or (||), xor

Funciones MySQL posee las siguientes funciones predefinidas: Funciones cadena

de

Ord (caracter): Retorna el código ASCII para el carácter enviado como argumento char(x,..): retorna una cadena con los caracteres en código ASCII de los enteros enviados como argumentos. concat(cadena1,cadena2,...): devuelve la cadena resultado de concatenar los argumentos. concat_ws(separador,cadena1,cadena2,...): "ws" son las iniciales de "with separator". El primer argumento especifica el separador que utiliza para los demás argumentos; el separador se agrega entre las cadenas a concatenar. find_in_set(cadena,lista de cadenas): devuelve un valor entre de 0 a n (correspondiente a la posición), si la cadena envidada como primer argumento está presente en la lista de cadenas enviadas como segundo argumento. La lista de cadenas enviada como segundo argumento es una cadena formada por subcadenas separadas por comas. Devuelve 0 si no encuentra "cadena" en la "lista de cadenas". -length(cadena): retorna la longitud de la cadena enviada como argumento. locate(subcadena,cadena): retorna la posición de la primera ocurrencia de la subcadena en la cadena enviadas como argumentos. Devuelve "0" si la subcadena no se encuentra en la cadena. position(subcadena in cadena): funciona como "locate()". Devuelve "0" si la subcadena no se encuentra en la cadena. lpad(cadena,longitud,cadenarelleno): retorna la cadena enviada como primer argumento, rellenada por la izquierda con la cadena enviada como tercer argumento hasta que la cadena retornada tenga la longitud especificada como segundo argumento. Si la cadena es más larga, la corta. rpad(cadena,longitud,cadenarelleno): igual que "lpad" excepto que rellena por la derecha. left(cadena,longitud): retorna la cantidad (longitud) de caracteres de la cadena comenzando desde la inquierda, primer caracter. substring(cadena,posicion,longitud): retorna una subcadena de tantos caracteres de longitud como especifica en tercer argumento, de la cadena enviada como primer argumento, empezando desde la posición especificada en el segundo argumento. mid(cadena,posicion,longitud): igual que "substring(cadena,posicion,longitud)". trim([[both|leading|trailing] [subcadena] from] cadena): retorna una cadena igual a la enviada pero eliminando la subcadena prefijo y/o sufijo. Si no se indica ningún especificador (both, leading o trailing) se asume "both" (ambos). Si no se especifica prefijos o sufijos elimina los espacios. replace(cadena,cadenareemplazo,cadenareemplazar): retorna la cadena con todas las ocurrencias de la subcadena reemplazo por la subcadena a reemplazar. repeat(cadena,cantidad): devuelve una cadena consistente en la cadena repetida la cantidad de veces especificada. Si "cantidad" es menor o igual a cero, retorna una cadena vacía.


47

insert(cadena,posicion,longitud,nuevacadena): retorna la cadena con la nueva cadena colocándola en la posición indicada por "posicion" y elimina la cantidad de caracteres indicados por "longitud". strcmp(cadena1,cadena2): retorna 0 si las cadenas son iguales, -1 si la primera es menor que la segunda y 1 si la primera es mayor que la segunda. Funciones comparación cadenas

de de

= Igual a > Mayor que >= Mayor que o igual a < Menor que <= Menor que o igual a <>, != Diferente a IS booleano Es 1,0 o NULL IS NULL Es nulo BETWEEN Entre dos valores (inclusive) IN Lista de valores LIKE Se ajusta a un patrón REGEXP, RLIKE Se ajusta a un patrón (expresiones regulares) GREATEST Mayor argumento LEAST Menor argumento STRCMP Compara dos cadenas abs(x): retorna el valor absoluto del argumento "x". ceiling(x): redondea hacia arriba el argumento "x". floor(x): redondea hacia abajo el argumento "x". greatest(x,y,..): retorna el argumento de máximo valor. least(x,y,...): con dos o más argumentos, retorna el argumento más pequeño. mod(n,m): significa "módulo aritmético"; retorna el resto de "n" dividido en "m". %: %: devuelve el resto de una división. -power(x,y): retorna el valor de "x" elevado a la "y" potencia. rand(): retorna un valor de coma flotante aleatorio dentro del rango 0 a 1.0. round(x): retorna el argumento "x" redondeado al entero más cercano. srqt(): devuelve la raiz cuadrada del valor enviado como argumento. truncate(x,d): retorna el número "x", truncado a "d" decimales. Si "d" es 0, el resultado no tendrá parte fraccionaria.

de

adddate(fecha, interval expresion): retorna la fecha agregándole el intervalo especificado. current_date: retorna la fecha de hoy con formato "YYYY-MM-DD" o "YYYYMMDD". current_time: retorna la hora actual con formato "HH:MM:SS" o "HHMMSS". datediff(fecha1,fecha2): retorna la cantidad de días entre fecha1 y fecha2. dayname(fecha): retorna el nombre del día de la semana de la fecha. dayofmonth(fecha): retorna el día del mes para la fecha dada, dentro del rango 1 a 31. dayofweek(fecha): retorna el índice del día de semana para la fecha pasada como argumento. Los valores de los índices son: 1=domingo, 2=lunes,... 7=sábado). dayofyear(fecha): retorna el día del año para la fecha dada, dentro del rango 1 a 366. -extract(tipo from fecha): extrae partes de una fecha.

Funciones numéricas

Funciones fecha y hora


48

hour(hora): retorna la hora para el dato dado, en el rango de 0 a 23. minute(hora): retorna los minutos de la hora dada, en el rango de 0 a 59. monthname(fecha): retorna el nombre del mes de la fecha dada. month(fecha): retorna el mes de la fecha dada, en el rango de 1 a 12. now() y sysdate(): retornan la fecha y hora actuales. second(hora): retorna los segundos para la hora dada, en el rango de 0 a 59. sec_to_time(segundos): retorna el argumento "segundos" convertido a horas, minutos y segundos. Ejemplo: sec_to_time(90) retorna "1:30". timediff(hora1,hora2): retorna la cantidad de horas, minutos y segundos entre hora1 y hora2. time_to_sec(hora): retorna el argumento "hora" convertido en segundos. to_days(fecha): retorna el número de día (el número de día desde el año 0). weekday(fecha): retorna el índice del día de la semana para la fecha pasada como argumento. Los índices son: 0=lunes, 1=martes,... 6=domingo). year(fecha): retorna el año de la fecha dada, en el rango de 1000 a 9999. Funciones agregado

de

Avg: Calcula la media aritmética de un conjunto de valores contenidos en un campo especificado de una consulta. count: Calcula el número de registros devueltos por una consulta Max, min: Devuelven el mínimo o el máximo de un conjunto de valores contenidos en un campo específico de una consulta. StDev, StDevP: Devuelve estimaciones de la desviación estándar para la población (el total de los registros de la tabla) o una muestra de la población representada (muestra aleatoria). Sum: Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Var, VarP: Devuelve una estimación de la varianza de una población (sobre el total de los registros) o una muestra de la población (muestra aleatoria de registros) sobre los valores de un campo.

3.4 PHPMYADMIN phpMyAdmin es una herramienta para la administración del servidor de bases de datos MySQL. Dispone de una interfaz gráfica y es de libre distribución. Permite al usuario realizar todo tipo de operaciones sobre bases de datos, así:    

Crear, borrar y modificar tablas Consultar, insertar, modificar y eliminar datos Definir usuarios y asignar permisos Realizar copias de seguridad, etc

Está escrita en php y se ejecuta desde el navegador. Si está instalada en la carpeta phpmyadmin, se ejecuta escribiendo en la barra de direcciones del navegador la url http://localhost/phpmyadmin/. Puede administrar bases de datos locales y remotas. Normalmente la instalación de phpMyAdmin viene incluida con la instalación de Xampp descrito anteriormente. A continuación se muestra la ventana principal de phpMyAdmin.


49

3.5 LENGUAJE SQL SQL (Structured Query Language) es el lenguaje que se utiliza para comunicarse con la base de datos. El procedimiento de comunicación con la base de datos se ilustra a continuación:

Las instrucciones más habituales son SELECT, INSERT, UPDATE y DELETE. Revisemos su sintaxis básica y algunos ejemplos de uso. Para ello utilizaremos una tabla noticias con cinco campos: un identificador único de la noticia, el título de la noticia, el texto de la noticia, la categoría de la noticia y la fecha de publicación de la noticia, así: noticias Ii Titulo Texto categoría Fecha SELECT Sintaxis: SELECT expresión FROM tabla


50

[WHERE condición] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] [LIMIT [offset,] row_count | row_count OFFSET offset]

Ejemplo: SELECT * from noticias WHERE fecha=CURDATE() LIMIT 10 ORDER BY fecha DESC

Obtiene las noticias del día con un tope máximo de 10, ordenadas de la más reciente a la más antigua. INSERT Sintaxis: INSERT [INTO] nombre_tabla [(nombre_columna,...)] VALUES ((expresión | DEFAULT),...), (...),... INSERT [INTO] nombre_tabla SET nombre_columna=(expresión | DEFAULT), ...

Ejemplo: INSERT INTO noticias (id, titulo, texto, categoria, fecha) VALUES(37, ―Nueva promoción en Nervión‖, ―145 viviendas de lujo enurbanización ajardinada situadas en un entorno privilegiado‖,―promociones‖, CURDATE())

Inserta una noticia con los valores indicados, entre ellos la fecha actual (CURDATE), UPDATE Sintaxis: UPDATE nombre_tabla SET nombre_columna1=expr1 [, nombre_columna2=expr2 ...] [WHERE condición] [ORDER BY ...] [LIMIT row_count]

Ejemplo: UPDATE noticias SET categoria = ―ofertas‖ WHERE id=37

Modifica la categoría de la noticia con id=37 de la tabla. DELETE Sintaxis: DELETE FROM nombre_tabla [WHERE condición] [ORDER BY ...] [LIMIT row_count]


51

Ejemplo: DELETE FROM noticias WHERE fecha < CURDATE()-10

Borra las noticias con más de 10 días de antigüedad.

3.6 FUNCIONES DE PHP PARA EL ACCESO A BASES DE DATOS MYSQL Los pasos para acceder desde PHP a una base de datos se detallan a continuación:     

Conectar con el servidor de bases de datos Seleccionar una base de datos Enviar la instrucción SQL a la base de datos Obtener y procesar los resultados Cerrar la conexión con el servidor de bases de datos

Las funciones concretas de PHP que realizan estas operaciones son:     

Conectar con el servidor de bases de datos: mysql_connect() Seleccionar una base de datos: mysql_select_db() Enviar la instrucción SQL a la base de datos: mysql_query() Obtener y procesar los resultados: mysql_num_rows() y mysql_fetch_array() Cerrar la conexión con el servidor de bases de datos: mysql_close()

3.6.1 CONECTAR CON EL SERVIDOR MYSQL_CONNECT()

DE BASES DE DATOS:

Devuelve un identificador de la conexión en caso de éxito y false en caso contrario. Sintaxis: $conexion = mysql_connect (servidor, username, password);

Ejemplo: $conexion = mysql_connect (―localhost‖, ―cursophp‖, ―‖) or die (―No se puede conectar con el servidor‖); $conexion = mysql_connect (―localhost‖, ―cursophp-ad‖, ―php.hph‖) or die (―No se puede conectar con el servidor‖);

3.6.2 SELECCIONAR UNA BASE DE DATOS: MYSQL_SELECT_DB() Devuelve true en caso de éxito y false en caso contrario. Sintaxis: mysql_select_db (database);

Ejemplo: mysql_select_db (―lindavista‖) or die (―No se puede seleccionar la base de datos‖);


52

3.6.3 ENVIAR LA MYSQL_QUERY()

INSTRUCCIÓN

SQL A

LA

BASE DE DATOS:

Devuelve un identificador o true (dependiendo de la instrucción) si la instrucción se ejecuta correctamente y false en caso contrario. Sintaxis: $consulta = mysql_query (instrucción, $conexion);

Ejemplo: $consulta = mysql_query (―select * from noticias‖, $conexion) or die (―Fallo en la consulta‖);

3.6.4 OBTENER Y PROCESAR LOS MYSQL_NUM_ROWS(), MYSQL_FETCH_ARRAY()

RESULTADOS:

En el caso de que la instrucción enviada produzca unos resultados, mysql_query() devuelve las filas de la tabla afectadas por la instrucción. mysql_num_rows() devuelve el número de filas afectadas. Para obtener las distintas filas del resultado se utiliza la función mysql_fetch_array(), que obtiene una fila del resultado en un arreglo asociativo cada vez que se invoca. Sintaxis: $nfilas = mysql_num_rows ($consulta); $fila = mysql_fetch_array ($consulta);

Ejemplo: Para ejemplificar estas funciones utilizaremos la tabla siguiente: Noticias 1 2 3 4 5

Titulo 1 Titulo 2 Titulo 3 Titulo 4 Titulo 5

Texto 1 Texto 2 Texto 3 Texto 4 Texto 5

Ofertas Promociones Promociones Costos Promociones

05/10/2014 05/10/2014 06/10/2014 06/10/2014 07/09/2014

La instrucción para obtener todas las noticias pertenecientes a la categoría promociones es la siguiente: select * from noticias where categoria=―promociones‖

Esta instrucción obtiene de la tabla los siguientes registros: Noticias 2 3 5

Titulo 2 Titulo 3 Titulo 5

Texto 2 Texto 3 Texto 5

Promociones Promociones Promociones

05/10/2014 06/10/2014 07/09/2014

Para tener acceso a cada uno de los registros (filas) se utiliza el siguiente código: $nfilas = mysql_num_rows ($consulta); if ($nfilas > 0) {


53

for ($i=0; $i<$nfilas; $i++) { $fila = mysql_fetch_array ($consulta); //procesar fila i-ésima de los resultados print_r($fila); //imprime la fila } }

Si lo que se desea es acceder a un campo determinado de un registro (fila) se usa el código siguiente: $nfilas = mysql_num_rows ($consulta); for ($i=0; $i<$nfilas; $i++) { $fila = mysql_fetch_array ($consulta); print ―Título: ― . $fila[―titulo‖]; print ―Fecha: ― . $fila[―fecha‖]; }

3.6.5 CERRAR LA CONEXIÓN CON EL SERVIDOR DE BASES DE DATOS: MYSQL_CLOSE() Sintaxis: mysql_close ($conexion);

Ejemplo: mysql_close ($conexion);

3.4 CONSULTA AVANZADA DE TABLAS A continuación se presenta una serie de casos de estudio que permitirán al estudiante adquirir los conocimientos y habilidades necesarias para la programación de sitios web con conexión a una base de datos.

3.4.1 PAGINACIÓN DE RESULTADOS Objetivo: Mostrar los resultados de la consulta divididos en bloques de un número determinado de elementos (por ejemplo, de 5 en 5). Requisitos:  Recuperar un número limitado de elementos de la tabla.  Implementar un mecanismo de navegación que permita avanzar al siguiente o volver al anterior bloque de elementos. Desarrollo: Para recuperar un número fijo de elementos de una tabla se utiliza la opción LIMIT de la orden SELECT. Así, por ejemplo la instrucción:


54

SELECT * from noticias LIMIT 0, 5;

Recupera los 5 primeros elementos de la tabla. Y en general, SELECT * from noticias LIMIT $comienzo, $num;

Recupera $num elementos a partir de la posición $comienzo. La variable $num tendrá un valor constante (en este caso 5), mientras que la variable $comienzo se incrementará o disminuirá en 5 unidades al pasar a la página siguiente o anterior. Para ello se pasará la variable como parámetro en el enlace asociado al botón correspondiente. Por ejemplo, el código para el botón siguiente será: "<A HREF='" . $_SERVER['PHP_SELF'] . "?comienzo=" . ($comienzo + $num) . "'>Siguiente</A>"

Habrá que comprobar previamente que el nuevo valor de comienzo es válido, es decir, que se encuentra dentro de los límites de la tabla devuelta por la consulta.

3.5 FILTRAR RESULTADOS POR COLUMNA Objetivo: Mostrar los resultados de una consulta de manera que se puedan filtrar en función del valor de una determinada columna de la tabla. Requisitos:  Recuperar de una tabla los elementos que cumplan una determinada condición.  Permitir seleccionar un valor de entre los valores posibles de una columna. Desarrollo: Para recuperar los elementos de una tabla que cumplen una condición se utiliza la opción WHERE de la orden SELECT. Por ejemplo, la instrucción: SELECT * from noticias WHERE categoria=‘ofertas‘;

Recupera las noticias que pertenecen a la categoría ―ofertas‖. Y en general, SELECT * from noticias WHERE categoria =‘$categoria‘;

Recupera las noticias cuya categoría tiene el valor dado por la variable $categoria. La variable $categoria se obtendrá de un elemento SELECT.

3.6 ACTUALIZAR LOS VALORES POR COLUMNA Objetivo: Modificar el ejercicio anterior para que los resultados se actualicen de forma automática al seleccionar un nuevo valor para la columna.


55

Requisitos:  Obtener automáticamente los valores de una columna de tipo enumerado a partir de la tabla.  Utilizar código JavaScript para detectar un cambio en la opción seleccionada de un elemento de tipo SELECT. Desarrollo: La función JavaScript que actualiza una página en función de la opción seleccionada en el elemento SELECT de nombre‗categoria‘ del formulario de nombre ‗selecciona‘: <SCRIPT LANGUAGE='JavaScript'> <!— function actualizaPagina () { i = document.forms.selecciona.categoria.selectedIndex; categoria = document.forms.selecciona.categoria.options[i].value; window.location = ‗muestra_noticias.php?categoria=' + categoria; } // --> </SCRIPT>

Para ejecutar la función JavaScript es preciso asociarla al elemento SELECT a través del evento ONCHANGE, que se activa cuando se modifica la opción seleccionada: <SELECT NAME='categoria' ONCHANGE='actualizaPagina()'>

Es conveniente que la opción seleccionada aparezca marcada por defecto al actualizar la página. Para ello es preciso generar las opciones del elemento SELECT de forma automática. De esta manera se puede comparar cada una de las opciones con el valor proveniente del formulario y colocar el atributo SELECTED a la que corresponda. En el formulario del ejercicio anterior los valores de los campos de tipo enumerado (ENUM) están escritos directamente en el propio código. Así, para la categoría de noticia se tiene: <SELECT NAME=―categoria"> <OPTION VALUE=―promociones">promociones <OPTION VALUE=―ofertas" SELECTED>ofertas <OPTION VALUE=―costas">costas </SELECT>

Este hecho no es muy deseable ya que si se modifican los valores de la categoría en la tabla hay que modificar también el código del formulario. Lo ideal es tomar los valores automáticamente de la tabla en lugar de escribirlos ‗a mano‘ en el código. Para ello se utiliza la siguiente instrucción SQL: SHOW columns FROM noticias LIKE ‗categoria‗;

Devuelve una tabla con las propiedades del campo ‗categoria‘. El elemento *1+ de esta tabla contiene lo siguiente: enum(―promociones",―ofertas",―costas")


56

A partir de esta información podemos obtener los valores del tipo enumerado y generar las opciones del elemento SELECT. Sólo queda marcar con SELECTED la opción que estaba seleccionada en caso de haberse enviado el formulario. Autoevaluación 1. Mediante un ejemplo indique las funciones de PHP que permiten conectarse a una base de datos MySQL. 2. Escriba un ejemplo que permita ejecutar una consulta en una base de datos MySQL y mostrar los resultados en el navegador. (Utilice la estructura básica de una consulta SQL: select, from, where y order by). 3. ¿Se puede crear una base de datos desde PHP? Si la respuesta es afirmativa escriba un programa que permita crear una base datos, seleccionarla y ejecutar una consulta. 4. Realice una tabla que contenga todos los tipos de datos existentes en MySQL; incluya una breve descripción de cada una de ellas. 5. Realice una tabla que contenga todas las funciones PHP, con una breve descripción de cada una, que permiten trabajar con MySQL. Actividades complementarias Ejercicio 1: consulta de noticias Escriba un programa que muestre el contenido de la tabla noticias. Este ejercicio simple de acceso a una tabla de una base de datos. Ilustra cómo conectar con una base de datos, enviar una consulta, recuperar los resultados y mostrarlos en pantalla.  Pasos previos:  Crear la base de datos lindavista.  Crear la tabla noticias en la base de datos lindavista (la estructura se muestra en el apartado 5).  Crear el usuario ‗cursophp‘ (sin contraseña).  Dar al usuario ‗cursophp‘ permiso SELECT sobre la tabla noticias de la base de datos lindavista. Ejercicio 2: encuesta En este ejercicio debe mostrar una encuesta de una sola pregunta (¿Cree usted que el precio de la vivienda seguirá subiendo al ritmo actual?), permitir que el usuario registre su voto, insertar la información en la base de datos (presentando un mensaje al usuario de que su voto ha sido registrado), y mostrar los resultados totales de la encuesta mediante un gráfico de barras horizontales. Ilustra cómo actualizar una tabla y cómo generar gráficos simples.


57

Pasos previos:  Crear la tabla votos en la base de datos lindavista.

Votos Id Votos1 Votos2

 Dar al usuario ‗cursophp‘ permisos SELECT y UPDATE sobre la tabla votos de la base de datos lindavista. Ejercicio 3: inserción de noticias Se creará un formulario para insertar las noticias en la base de datos. Para este ejercicio se utilizará el formulario desarrollado en el ―ejercicio 4: subida de un fichero al servidor‖ de la unidad anterior, modificándolo para que los datos se guarden en la tabla noticias de la base de datos.

Pasos previos:  Crear el usuario cursophp-ad (contraseña: php.hph).  Dar al usuario ‗cursophp-ad‘ permisos SELECT e INSERT sobre la tabla noticias de la base de datos lindavista. Ejercicio 4: eliminación de noticias


58

Se creará un formulario para eliminar noticias de la base de datos. Primero se seleccionarán las noticias a eliminar de entre todas las existentes y a continuación se eliminarán.

Paso previo:  Dar al usuario ‗cursophp-ad‘ permiso DELETE sobre la tabla noticias de la base de datos lindavista Ejercicio 5: consulta de noticias con paginado de resultados Ejercicio que ilustra cómo dividir los resultados de una consulta en varias páginas (5 filas de la tabla noticias por página) y permitir desplazarse entre ellas. Ejercicio 6: consulta de noticias con filtrado de resultados Ejercicio que ilustra cómo mostrar los resultados de una consulta filtrados en función de la categoría con actualización manual al pulsar un botón.

Ejercicio 7: consulta de noticias con filtrado de resultados Ejercicio que ilustra cómo mostrar los resultados de una consulta filtrados en función de la categoría con actualización automática a través de JavaScript


59

4 SESIONES E IMÁGENES EN PHP Las sesiones nos permiten almacenar y consultar información sobre un visitante sin necesidad de estar enviándola a través de formularios. Usted podría decir "eso ya lo hago con las cookies", pero el uso de las cookies es cada vez más limitado. Muchos navegadores las deshabilitan por omisión pues guardan información en la computadora del usuario y esto las hace inseguras (existen varios programas para extraer contraseñas guardadas en las cookies). Una de las peculiaridades que PHP nos presenta con respecto a otros lenguajes dinámicos es la utilización de la biblioteca GD. Esta biblioteca no es más que un conjunto de funciones que tienen como objeto la creación de imágenes.

4.1 SESIONES EN PHP Al desarrollar una aplicación a veces es necesario mantener el estado de una conexión entre distintas páginas o entre distintas visitas a un mismo sitio. Ejemplos: aplicaciones personalizadas, carrito de la compra, control de acceso, etc. El problema es que HTTP es un protocolo sin estado, cada conexión entre el cliente y el servidor es independiente de las demás. Para mantener el estado entre diferentes conexiones hay que establecer lo que se conoce como una sesión. Las sesiones permiten disponer de variables con valores persistentes durante toda la conexión del usuario. Estas variables pueden almacenarse en el cliente mediante cookies o en el servidor. PHP dispone de una biblioteca de funciones completa para la gestión de sesiones.

4. 2 FUNCIONES PARA EL MANEJO DE SESIONES Las funciones de PHP para el manejo de sesiones de usuario son las siguientes:  session_start (): inicializa una sesión y le asigna un identificador único. Si la sesión ya está iniciada, carga todas las variables de sesión.  session_register (variable): registra una variable de sesión.  session_unregister (variable): elimina una variable de sesión.  session_is_registered (variable): comprueba si una variable está registrada. Devuelve true encaso afirmativo y false en caso contrario.


60

 session_destroy (): cierra una sesión. El manejo de las sesiones se realiza de la siguiente forma:  Todas las páginas deben realizar una llamada a session_start() para cargar las variables de la sesión.  Esta llamada debe estar colocada antes de cualquier código HTML.  Conviene llamar a session_destroy() para cerrar la sesión.

4.2.1 SESSION_START () Crea una sesión y le asigna un identificador de sesión único. Si la sesión ya está iniciada, carga todas las variables de sesión. Esta función devuelve true si la sesión fue iniciada satisfactoriamente, si no, devuelve false. session_start(); $_SESSION[‗nombre‘] = valor; //registra una variable de sesión unset ($_SESSION[‗nombre‘]); //elimina la variable especificada if (isset($_SESSION[‗nombre‘])) //comprueba si una variable está registrada. Devuelve true en caso afirmativo y false en caso contrario

4.2.2 SESSION_DESTROY () Destruye toda la información registrada de una sesión. Devuelve true en caso de éxito o false en caso de error. session_destroy():

4.3 AUTENTICACIÓN DE USUARIOS Una cuestión frecuente en un sitio web es controlar el acceso de los usuarios a una zona determinada del mismo. La autenticación de usuarios puede realizarse en el propio servidor web. Así, en Apache los ficheros .htaccess permiten limitar el acceso a un determinado recurso del servidor. Una alternativa más compleja pero más flexible es utilizar PHP junto con una base de datos para controlar el acceso de los usuarios. Para ello se utilizan las sesiones. Esquema de una página que utiliza sesiones para autenticar usuarios: <?php session_start (); ?> <HTML LANG="es"> <HEAD> ... </HEAD> <BODY> <?php if (isset($_SESSION["usuario_valido"])) // Código para usuarios autorizados else


61

// Mensaje de acceso no autorizado ?> </BODY> </HTML>

4.4 CREACIÓN DE IMÁGENES PHP dispone de una biblioteca de funciones para la generación dinámica de imágenes. Estas funciones son particularmente interesantes para generar gráficos estadísticos actualizados al instante. Los formatos de imágenes reconocidos son: GIF, PNG, JPEG. Para configurar la librería gd es necesario realizar lo siguiente:  Requiere el uso de la librería php_gd2.dll (Windows) o gd.so (Unix, Linux).  Debe activarse la extensión correspondiente en el fichero php.ini: o extension = php_gd2.dll o extension = gd.so

4.5 CREACIÓN DE IMÁGENES DINÁMICAS A continuación se detalla el procedimiento general para crear una imagen utilizando el lenguaje de programación PHP. Código del archivo imagen.php: <?php header (―Content-type: image/png‖); $imagen = imagecreate (300, 200); // ancho x alto // instrucciones gráficas imagepng ($imagen); imagedestroy ($imagen); ?>

La inclusión de la imagen creada en un archivo HTML se realiza de la siguiente forma: <IMG SRC=―imagen.php‖>

4.6 FUNCIONES PARA LA CREACIÓN DE IMÁGENES  Utilización de colores: $color = imagecolorallocate ($imagen, R, G, B);

 Creación de formas geométricas: imagerectangle ($imagen, x0, y0, x1, y1, $color); imagefilledrectangle; imagearc ($imagen, xc, yc, ancho, alto, gi, gf, $color); imagefilledarc;


62

 Fondos: $imagen = imagecreatefrompng (―imagen.png‖); $imagen = imagecreatefromjpeg (―imagen.jpg‖);

 Creación de texto: imagestring ($imagen, tamaño, x, y, $texto, $color);

 Guardar las imágenes creadas: imagepng ($imagen, ―imagen.png‖); imagejpeg ($imagen, ―imagen.jpg‖);

Autoevaluación 1. Escriba la definición (en sus propias palabras) de sesión. 2. ¿Cómo funcionan? 3. Enumere las funciones para el manejo de sesiones en PHP. 4. Enumere las funciones para creación de imágenes en PHP. Actividades complementarias Ejercicio 1: ejemplo simple de sesiones Ilustra cómo registrar variables, acceder a ellas y posteriormente eliminarlas. Los pasos a seguir para el desarrollo de este ejercicio son:  Paso 1: se crea la variable de sesión y se almacena.  Paso 2: se accede a la variable de sesión almacenada y se destruye.  Paso 3: verificar si la variable ya ha sido destruida y si su valor se ha perdido. Ejercicio 2: autenticación de usuarios Para nuestro sistema de gestión de noticias se va a restringir el acceso a las operaciones a unos usuarios identificados por un nombre y una contraseña. La información de los usuarios autorizados se almacenará en una tabla de la base de datos con la estructura siguiente:

Usuarios Id Usuario Clave Las contraseñas de los usuarios se almacenarán en forma encriptada utilizando la propiedad MD5 de MySQL. El formulario tendrá la forma siguiente:


63

Ejercicio 3: creación de imágenes simples Ilustra cómo crear un gráfico de tarta.

Ejercicio 4: encuesta Ilustra cómo utilizar un gráfico de tarta para mostrar los resultados de una encuesta. Para desarrollar esta tarea modifique el programa desarrollado en el ―ejercicio 2: encuesta‖ de la unidad anterior para que los resultados se presenten en una imagen de tarta generada automáticamente.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.