36
1 Índice 6.1 Pasar variables por la URL................................................................................................. 3 6.2. Procesar variables de formularios .................................................................................... 4 6.3 Subir archivos ...................................................................................................................... 6 6.4 Validación de formularios. ................................................................................................. 7 6.5 Redirección de páginas ...................................................................................................... 7 6.6 Bases de datos Relacionales. ...........................................................................................13 6.7 Introducción a MySQL .......................................................................................................15 6.8 Interacción entre PHP y MySQL .......................................................................................26

Contenidos Unidad 6 - marubarrenechea.files.wordpress.com · Bucles y condiciones son muy útiles para procesar los datos dentro de un mismo script. Sin embargo, en un sitio Internet,

Embed Size (px)

Citation preview

1

Índice

6.1 Pasar variables por la URL................................................................................................. 3 6.2. Procesar variables de formularios .................................................................................... 4 6.3 Subir archivos ...................................................................................................................... 6 6.4 Validación de formularios. ................................................................................................. 7 6.5 Redirección de páginas ...................................................................................................... 7 6.6 Bases de datos Relacionales. ...........................................................................................13 6.7 Introducción a MySQL .......................................................................................................15 6.8 Interacción entre PHP y MySQL .......................................................................................26

2

Unidad 06

Formularios y Acceso a Base de Datos

Objetivo

Hasta ahora hemos visto como trabajar con PHP e interactuar con HTML, preferentemente somos capaces de crear páginas dinámicas y usar las distintas librerías que provee el lenguaje, ahora debemos introducir los conceptos básicos para familiarizarnos con MySQL.

Para lograr este objetivo haremos un breve repaso de los conceptos básicos de las bases de datos relacionales, para luego ver las principales características del motor de bases de datos de MySQL y su utilización en el ambiente de desarrollo de páginas Web, así como la interacción con el lenguaje PHP.

Esta unidad está compuesta de mucha ejercitación que deberás realizar teniendo como complemento las Unidades 2, 3, 4 y 5.

3

6.1 Pasar variables por la URL

Bucles y condiciones son muy útiles para procesar los datos dentro de un mismo script. Sin embargo, en un sitio Internet, las páginas vistas y los scripts utilizados son numerosos. Muy a menudo necesitamos que nuestros distintos scripts estén conectados unos con otros y que se sirvan de variables comunes. Por otro lado, el usuario interacciona por medio de formularios cuyos campos han de ser procesados para poder dar una respuesta. Todo este tipo de factores dinámicos han de ser eficazmente regulados por un lenguaje como PHP.

Es posible que ya te hayas percatado de que las variables de un script tienen una validez exclusiva para el script y que nos resulta imposible conservar su valor cuando ejecutamos otro archivo distinto aunque ambos estén enlazados. Existen varias formas de enviar las variables de una página a otra de manera a que la página destino reconozca el valor asignado por el script de origen:

Para pasar las variables de una página a otra lo podemos hacer introduciendo dicha variable dentro del enlace hipertexto de la página destino. La sintaxis sería la siguiente:

<a href="destino.php?variable1=valor1&variable2=valor2&...">Mi enlace</a>

Podemos observar que estas variables no poseen el símbolo $ delante. Esto es debido a que en realidad este modo de pasar variables no es específico de PHP sino que es utilizado por otros lenguajes. Ahora nuestra variable pertenece también al entorno de la página destino.php y está lista para su explotación.

Nota: No siempre se definen automáticamente las variables recibidas por parámetro en las páginas web, depende de una variable de configuración de PHP: register_globals, que tiene que estar activada para que así sea.

Para aclarar posibles dudas, veamos esto en forma de ejemplo. Tendremos pues dos páginas, origen.html (no es necesario darle extensión PHP puesto que no hay ningún tipo de código) y destino.php:

<HTML> <HEAD> <TITLE>origen.html</TITLE> </HEAD> <BODY> <a href="destino.php?saludo=hola&texto=Esto es una variable texto">Paso variables saludo y texto a la página destino.php</a> </BODY> </HTML>

<HTML> <HEAD>

4

<TITLE>destino.php</TITLE> </HEAD> <BODY> <? echo "Variable \$saludo: $saludo <br>\n"; echo "Variable \$texto: $texto <br>\n" ?> </BODY> </HTML>

6.2. Procesar variables de formularios

$HTTP_GET_VARS Es posible recopilar en una variable tipo array el conjunto de variables que han sido enviadas al script por este método a partir de la variable de sistema $HTTP_GET_VARS, que es un array asociativo. Utilizándolo quedaría así:

<? echo "Variable \$saludo: $HTTP_GET_VARS["saludo"] <br>\n"; echo "Variable \$texto: $HTTP_GET_VARS["texto"] <br>\n" ?>

Nota: Aunque podamos recoger variables con este array asociativo o utilizar directamente las variables que se definen en nuestra página, resulta más seguro utilizar $HTTP_GET_VARS por dos razones, la primera que así nos aseguramos que esa variable viene realmente de la URL y la segunda, que así nuestro código será más claro cuando lo volvamos a leer, porque quedará especificado que esa variable estamos recibiéndola por la URL.

$_GET A partir de la versión 4.1.0 de PHP se ha introducido el array asociativo $_GET, que es idéntico a $HTTP_GET_VARS, aunque un poco más corto de escribir.

Este tipo de transferencia es de gran utilidad ya que nos permite interaccionar directamente con el usuario.

El proceso es similar al explicado para las URLs. Primeramente, presentamos una primera página con el formulario clásico a rellenar y las variables son recogidas en una segunda página que las procesa:

<HTML> <HEAD> <TITLE>formulario.html</TITLE> </HEAD> <BODY> <FORM METHOD="GET" ACTION="destino2.php"> Nombre<br> <INPUT TYPE="TEXT" NAME="nombre"><br> Apellidos<br> <INPUT TYPE="TEXT" NAME="apellidos"><br>

5

<INPUT TYPE="SUBMIT"> </FORM> </BODY> </HTML>

<HTML> <HEAD> <TITLE>destino2.php</TITLE> </HEAD> <BODY> <? echo "Variable \$nombre: $nombre <br>\n"; echo "Variable \$apellidos: $apellidos <br>\n" ?> </BODY> </HTML>

$HTTP_POST_VARS es posible recopilar en una variable tipo array el conjunto de variables que han sido enviadas al script por este método a partir de la variable de sistema $HTTP_POST_VARS. echo "Variable \$nombre: " . $HTTP_POST_VARS["nombre"] . "<br>\n";

Nota: Aunque podamos recoger variables con este array asociativo o utilizar directamente las variables que se definen en nuestra página, resulta más seguro utilizar $HTTP_POST_VARS por dos razones, la primera que así nos aseguramos que esa varible viene realmente de un formulario y la segunda, que así nuestro código será más claro cuando lo volvamos a leer, porque quedará especificado que esa variable estamos recibiéndola por un formulario.

$_POST A partir de PHP 4.1.0 se pueden recoger las variables de formulario utilizando también el array asociativo $_POST, que es el mismo que $HTTP_POST_VARS, pero más corto de escribir.

Ejemplo de restricción de acceso por edad

Para continuar aportando ejemplos al uso de formularios vamos a realizar una página que solicita la edad del visitante y, dependiendo de dicha edad, permita o no visualizar el contenido de la Web. A los mayores de 18 años se les permite ver la página y a los menores no.

El ejemplo es muy sencillo y no valdría tal cual está para utilizarlo a modo de una verdadera restricción de acceso. Únicamente nos sirve para saber cómo obtener datos de un formulario y como tratarlos para realizar una u otra acción, dependiendo de su valor.

La página del formulario, que hemos llamado edad.php tendría esta forma:

<html> <head> <title>Restringir por edad</title> </head>

6

<body> <form action="edad2.php" method="post"> Escribe tu edad: <input type="text" name="edad" size="2"> <input type="submit" value="Entrar"> </form> </body> </html>

Esta es una página sin ningún código PHP, simplemente tiene un formulario. Fijémonos en el action del formulario, que está dirigido hacia una página llamada edad2.php, que es la que recibirá el dato de la edad y mostrará un contenido u otro dependiendo de ese valor. Su código es el siguiente:

<html> <head> <title>Restringir por edad</title> </head> <body> <? $edad = $_POST["edad"]; echo "Tu edad: $edad<p>"; if ($edad < 18) { echo "No puedes entrar"; }else{ echo "Bienvenido"; } ?> </body> </html>

Esperamos que este otro código tampoco resulte extraño. Simplemente se recibe la edad, utilizando el array $_POST. Luego se muestra la edad y se ejecuta una expresión condicional en función de que la edad sea menor que 18. En caso positivo (edad menor que 18), se muestra un mensaje que informa de que no se deja acceder al página. En caso negativo (mayor o igual a 18) se muestra un mensaje de bienvenida.

6.3 Subir archivos

Se utiliza el tags HTML input del tipo file, para subir archivos.

Para manejar archivos desde PHP _ array $_FILES.

Cada elemento en $_FILES brinda información sobre el archivo subido.

Ejemplos:

• name: nombre definido en el navegador.

• size: Tamaño del archivo subido.

• tmp_name: Nombre del archivo temporal en el servidor que mantiene el archivo original.

• is_uploaded_file(): Chequea si un archivo fue correctamente subido al servidor.

7

• is_uploaded_file($_FILES[‘miArch’][‘tmp_name’]);

• move_uploaded_file(): Mueve un archivo desde una ubicación a otra.

• move_uploaded_file($_FILES[‘miArch’][‘tmp_name’],’/dest’);

6.4 Validación de formularios.

Validación lado del cliente: JavaScript

– Problemas si se desactiva su uso en el navegador.

– Problemas si el navegador no lo soporta.

– Validación no confiable.

Validación lado del servidor: PHP

$nombre = $_POST[‘nombre’];

$bandera = $_POST[‘bandera’];

if (!is_null($bandera))

If (empty($nombre))

echo “<p> Ingrese valor </p>”

else

// procesar

else // Crear formulario

6.5 Redirección de páginas En general no es necesario modificar el header de una respuesta del servidor.

Se lo modifica cuando se desea definir un tiempo de expiración de la página, redirigir el navegador del cliente, generar un error específico de HTTP.

El header debe definirse antes de cualquier parte del body sea generada.

o La llamada a header() debe hacerse en la primer línea del archivo y antes del tag <html>

Redirección

o Enviar el navegador a una nueva URL.

header(‘Location: http://www.algunsitio.com’);

Autollamada de páginas

Al incluir un formulario en una página se debe indicar, a través del atributo action, el nombre del archivo PHP al que enviaremos los datos escritos en el formulario. De este modo, para un esquema de envío de datos por formulario, pueden participar dos páginas: una que contiene el formulario y otra que recibe los datos de dicho formulario.

8

Lo mismo ocurre cuando enviamos variables por una URL. Tenemos una página que contendrá el enlace y otra página que recibirá y tratará esos datos para mostrar unos resultados. Vamos a ver cómo se puede enviar y recibir datos de un formulario con una única página. Asimismo, veremos como en la misma página podemos tener enlaces con paso de variables por URL y además, podemos recoger y tratar esos datos con la misma página. A este efecto podemos llamarte "autollamada de páginas", también se le suele llamar como "Formularios reentrantes" o términos similares. Es muy interesante conocer el modo de funcionamiento de estos scripts, porque serán muy habituales en nuestras páginas PHP y ayudan mucho a tener los códigos ordenados.

En ambos casos, para formularios o envío de datos por la URL, se debe seguir un esquema como este:

- Comprobar si recibo datos por URL o por formulario

- Si no recibo datos

- Muestro el formulario o los enlaces que pasan variables.

- Si recibo datos

- Entonces tengo que procesar el formulario o las variables de la URL

Para un formulario Veamos a continuación como sería el código de un formulario reentrante.

<html> <head> <title>Me llamo a mi mismo...</title> </head> <body> <? if (!$_POST){ ?> <form action="auto-llamada.php" method="post"> Nombre: <input type="text" name="nombre" size="30"> <br> Empresa: <input type="text" name="empresa" size="30"> <br> Telefono: <input type="text" name="telefono" size=14 value="+34 " > <br> <input type="submit" value="Enviar"> </form> <? }else{ echo "<br>Su nombre: " . $_POST["nombre"]; echo "<br>Su empresa: " . $_POST["empresa"]; echo "<br>Su Teléfono: " . $_POST["telefono"]; } ?> </body> </html>

9

En el ejemplo, el primer paso es conocer si se están recibiendo o no datos por un formulario. Para ello se comprueba con un enunciado if si existe o no una variable $_POST.

En concreto if (!$_POST) querría decir algo como "Si no existen datos venidos de un formulario". En caso de que no existan, muestro el formulario. En caso de que sí existan, recojo los datos y los imprimo en la página.

Para paso de variables por URL

La idea es la misma. Comprobar con un enunciado if si se reciben o no datos desde una URL. Veamos el código a continuación. Se trata de una página que muestra una serie de enlaces para ver las tablas de multiplicar del 1 hasta el 10. Cada uno de los enlaces muestra una tabla de multiplicar. Pulsando el primer enlace podemos ver la tabla del 1, pulsando el segundo la tabla del 2, etc.

Recordemos que la página se llama a si misma.

<html> <head> <title>Tablas de multiplicar</title> </head> <body> <? if (!$_GET){ for ($i=1;$i<=10;$i++){ echo "<br><a href='ver_tabla.php?tabla=$i'>Ver la tabla del $i</a>\n"; } } else { $tabla=$_GET["tabla"]; ?> <table align=center border=1 cellpadding="1"> <? for ($i=0;$i<=10;$i++){ echo "<tr><td>$tabla X $i</td><td>=</td><td>" . $tabla * $i . "</td></tr>\n"; } ?> </table> <? } ?> </body> </html>

Este código es un poco más complicado, porque hace un poco más de cosas que el anterior, pero para el asunto que nos ocupa que es la autollamada de páginas, todo sigue igual de simple. Hay que fijarse en el if que comprueba si se reciben o no datos por URL: if (!$_GET), que querría decir algo como "Si no se reciben variables por la URL".

En caso positivo (no se reciben datos por URL) se muestran los enlaces para ver cada una de las tablas y en caso de que sí se reciban datos, se muestra la tabla de multiplicar del número que se está recibiendo en la URL.

10

Utilización de las cookies

Sin duda este término resultara familiar para muchos. Algunos lo habrán leído u oído pero no saben de qué se trata. Otros sin embargo sabrán que las cookies son unas informaciones almacenadas por un sitio web en el disco duro del usuario. Esta información es almacenada en un archivo tipo texto que se guarda cuando el navegador accede al sitio web.

Es posible, por supuesto, ver estos archivos. Para abrirlos hay que ir al directorio C:\Windows\Cookies para los usuarios de IE 4+ o a C:\...\Netscape\Users\defaultuser para usuarios de Netscape. Como podréis comprobar, en la mayoría de los casos la información que se puede obtener es indescifrable.

La utilidad principal de las cookies es la de poder identificar al navegador una vez éste visita el sitio por segunda vez y así, en función del perfil del cliente dado en su primera visita, el sitio puede adaptarse dinámicamente a sus preferencias (lengua utilizada, colores de pantalla, formularios rellenados total o parcialmente, redirección a determinadas páginas...).

Para crear un archivo cookies, modificar o generar una nueva cookie lo podemos hacer a partir de la función SetCookie:

setcookie("nombre_de_la_cookie",valor,expiracion);

Pongamos un ejemplo sencillo. Imaginemos que queremos introducir en una variable cookie el nombre del visitante. El nombre ha podido ser previamente recogido por un formulario tal y como hemos visto:

setcookie("persona",$nombre,time()+86400*365);

De este modo hemos creado una cookie llamada persona que tiene como valor el contenido de la variable $nombre y tendrá una duración de 1 año a partir de su creación (el tiempo time() actual en segundos sumado a un año en segundos).

Es importante que la creación de la cookie sea previa a la apertura del documento HTML. En otras palabras, las llamadas a la función setcookie() deben ser colocadas antes de la etiqueta HTML. Por otra parte, es interesante señalar que el hecho de que definir una cookie ya existente implica el borrado de la antigua. Del mismo modo, el crear una primera cookie conlleva la generación automática del archivo texto.

Para utilizar el valor de la cookie en nuestros scripts tan sólo tendremos que llamar la variable que define la cookie. ¡Realmente sencillo!

Hay que tener cuidado sin embargo de no definir variables en nuestro script con el mismo nombre que las cookies puesto que PHP privilegiará el contenido de la variable local con respecto a la cookie y no dará un mensaje de error. Esto nos puede conducir a errores realmente difíciles de detectar.

11

Recordamos que es posible recopilar en una variable tipo array el conjunto de cookies almacenadas en el disco duro del internauta mediante la variable de servidor $HTTP_COOKIE_VARS Las cookies son una herramienta fantástica para personalizar nuestra página pero hay que ser cautos ya que, por una parte, no todos los navegadores las aceptan y por otra, se puede deliberadamente impedir al navegador la creación de cookies. Es por ello que resultan un complemento y no una fuente de variables infalible para nuestro sitio.

Sesiones I

En los programas que hemos visto hasta ahora, hemos utilizado variables que sólo existían en el archivo que era ejecutado. Cuando cargábamos otra página distinta, los valores de estas variables se perdían a menos que nos tomásemos la molestia de pasarlos por la URL o inscribirlos en las cookies o en un formulario para su posterior explotación. Estos métodos, aunque útiles, no son todo lo prácticos que podrían en determinados casos en los que la variable que queremos conservar ha de ser utilizada en varios scripts diferentes y distantes los unos de los otros.

Podríamos pensar que ese problema puede quedar resuelto con las cookies ya que se trata de variables que pueden ser invocadas en cualquier momento. El problema, ya lo hemos dicho, es que las cookies no son aceptadas ni por la totalidad de los usuarios ni por la totalidad de los navegadores lo cual implica que una aplicación que se sirviera de las cookies para pasar variables de un archivo a otro no sería 100% infalible. Es importante a veces pensar en "la inmensa minoría", sobre todo en aplicaciones de comercio electrónico donde debemos captar la mayor cantidad de clientes posibles y nuestros scripts deben estar preparados ante cualquier eventual deficiencia del navegador del cliente.

Nos resulta pues necesario el poder declarar ciertas variables que puedan ser reutilizadas tantas veces como queramos dentro de una misma sesión. Imaginemos un sitio multilingüe en el que cada vez que queremos imprimir un mensaje en cualquier página necesitamos saber en qué idioma debe hacerse. Podríamos introducir un script identificador de la lengua del navegador en cada uno de los archivos o bien declarar una variable que fuese valida para toda la sesión y que tuviese como valor el idioma reconocido en un primer momento.

Pensemos también en un carrito de la compra de una tienda virtual donde el cliente va navegando por las páginas del sitio y añadiendo los artículos que quiere comprar a un carrito. Este carrito podría ser perfectamente una variable de tipo array (tabla) que almacena para cada referencia la cantidad de artículos contenidos en el carrito. Esta variable debería ser obviamente conservada continuamente a lo largo de todos los scripts.

Este tipo de situaciones son solventadas a partir de las variables de sesión. Una sesión es considerada como el intervalo de tiempo empleado por un usuario en recorrer nuestras páginas hasta que abandona nuestro sitio o deja de actuar sobre él durante un tiempo prolongado o bien, sencillamente, cierra el navegador.

PHP nos permite almacenar variables llamadas de sesión que, una vez definidas, podrán ser utilizadas durante este lapso de tiempo por cualquiera de los scripts de nuestro sitio. Estas variables serán especificas del usuario de modo que varias variables sesión del mismo tipo con distintos valores pueden estar coexistiendo para cada una de las sesiones que están teniendo

12

lugar simultáneamente. Estas sesiones tienen además su propio identificador de sesión que será único y específico.

Algunas mejoras referentes al empleo de sesiones han sido introducidas con PHP4. Es a esta nueva versión a la que haremos referencia a la hora de explicar las funciones disponibles y la forma de operar.

Sesiones II

Hemos dicho en la sección anterior que la variables de sesión se diferencian de las variables clásicas en que éstas residen en el servidor, son especificas de un solo usuario definido por un identificador y pueden ser utilizadas en la globalidad de nuestras páginas.

Para iniciar una sesión podemos hacerlo de dos formas distintas:

-Declaramos abiertamente la apertura de sesión por medio de la función session_start(). Esta función crea una nueva sesión para un nuevo visitante o bien recupera la que está siendo llevada a cabo.

-Declaramos una variable de sesión por medio de la función session_register('variable'). Esta función, además de crear o recuperar la sesión para la página en la que se incluye también sirve para introducir una nueva variable de tipo sesión.

Las sesiones han de ser iniciadas al principio de nuestro script. Antes de abrir cualquier etiqueta o de imprimir cualquier cosa. En caso contrario recibiremos un error.

Con lo visto, vamos a proponer el ejemplo clásico de utilización de una sesión: un contador. Este contador deberá aumentar de una unidad cada vez que recargamos la página o apretamos al enlace:

<? session_register('contador'); ?> <HTML> <HEAD> <TITLE>contador.php</TITLE> </HEAD> <BODY> <? If (isset($contador)==0) {$contador=0;} ++$contador; echo "<a href=\"contador.php\">Has recargado esta página $contador veces</a>"; ?> </BODY> </HTML>

La condición if tiene en cuenta la posibilidad de que la variable $contador no haya sido todavía inicializada. La función isset se encarga de dar un valor cero cuando una variable no ha sido inicializada.

13

Otras funciones útiles para la gestión de sesiones son:

Función Descripción

Session_id() Nos devuelve el identificador de la sesión

Session_destroy() Da por abandonada la sesión eliminando variables e

identificador.

Session_unregister('variable') Abandona una variable sesión

6.6 Bases de datos Relacionales.

Una base de datos, es una colección estructurada de datos.

Por ahora nos enmarcamos en las bases de datos basadas en tablas.

Una tabla esta compuesta por una serie de registros que podríamos identificar como filas y donde cada fila esta compuesta de una o más columnas que nosotros llamaremos campos de la tabla.

Repasemos lo que acabamos de decir, una base cuenta de filas y columnas, cada columna contiene datos, por lo que cada fila representa a cada elemento de la tabla.

Veámoslo gráficamente

Figura1: Representación gráfica de una tabla.

Como vemos en la figura 1, claramente identificamos que cada fila identifica un elemento distinto, en este caso, personas diferentes, y cada columna corresponde a un campo diferente, que si pensamos un poco en cuales son o deberían ser los campos de una tabla, sin dudar tendrían que responder que cada campo representaría un atributo de una entidad o relación.

14

Ahora pensemos en varias tablas relacionadas entre sí, es decir podríamos tener para nuestro ejemplo de personas, otra tabla de que refleje a los empleados de una empresa, seria información repetida si ingresáramos los nombres y apellidos nuevamente de cada uno, es decir si contamos ya con una tabla de personas, bastaría con generar la tabla de empleados, indicando solo los atributos que son representativos de esta última y un indicador que relacione a cada fila de la tabla de empleados con una persona, por ejemplo, pensemos en la siguiente estructura:

Empleado (Id_empleado, Apellido, Nombres, sueldo, carga_horaria)

Vemos que Apellido y Nombres, ya se encuentran dentro de la tabla persona, es un dato repetido y para evitar la redundancia de datos, normalizamos las tablas teniendo como resultado la siguiente estructura de los datos:

Empleado (Id_empleado, Id_persona, sueldo, carga_horaria)

Las bases de datos mantienen agrupados los datos en distintas tablas evitando que se duplique la información y manteniendo una estructura mas organizada, además, la información se puede representar en forma gráfica para tener a simple vista la organización general de toda la base, veamos como sería el gráfico hasta el momento.

Figura 2: Estructura gráfica de una relación

Es de esta forma mediante la cual nosotros tenemos una visión clara de lo que realmente queremos significar en cada base de datos y las correspondientes relaciones. Ahora, podemos definir lo que es una base de datos relacional teniendo en cuenta todo lo que hemos visto hasta el momento.

Una base de datos relacional es un conjunto de tablas separadas conectadas por relaciones, esto hace posible que las consultas se hagan desde varias tablas para obtener alguna respuesta. Almacenar datos en tablas separadas en lugar de una sola agrega velocidad y performance.

Sabemos que no es fácil realizar los diseños a simple vista, pero ya nos iremos acostumbrando a diseñar las bases y tablas hasta hacerlo un habito en nuestras vidas, basta con lograr que nuestros pensamientos enfoquen los conceptos indicados logrando obtener las tablas lo más normalizadas posibles.

15

6.7 Introducción a MySQL

Bien, ahora estamos en condiciones de empezar con el estudio de MySQL, para ello empezamos preguntándonos ¿qué necesitamos para poder agregar, acceder y almacenar datos a una base de datos?

La respuesta es simple, para empezar necesitamos un sistema administrador de base de datos tal como MySQL. Desde que las computadoras manipulan grandes cantidades de datos, los sistemas de administración de bases de datos, juegan un papel realmente importante en la computación, como utilidad independiente, o como parte de alguna aplicación.

¿Qué es el MySQL?

MySQL, es la más popular base de datos SQL, es desarrollada y provista por MySQL AB. MySQL AB es la compañía comercial que la creó y provee servicios acerca de la base de datos y SQL.

MySQL es un administrador de un sistema de base de datos relacional y es ejecutado en el servidor, es decir nosotros enviamos una consulta a una base de datos mediante Internet, el administrador de la base de datos (MySQL) procesa la consulta en el mismo servidor y envía la respuesta a quien hizo la petición.

Información general de MySQL

• Es muy rápido.

• Es multi tarea.

• Es multi usuario.

• Es un robusto Servidor de base de datos SQL.

• MySQL es proyectado para misiones críticas, sistemas de lecturas pesadas e interactuar con distintos tipos de software.

• MySQL Pertenece a la marca registrada de MySQL AB.

• MySQL posee dos licencias, ustedes pueden usar el MySQL libre o comprar la distribución GNU GENERAL.

SQL: Structured Query Lenguaje Lenguaje Estructurado de Consulta.

El sitio de MySQL es http://www.mysql.com

Antes que empecemos a introducir conceptos, vamos a necesitar que quienes estén junto a sus computadoras, la enciendan y ejecuten los servidores apache y mysql para que podamos interactuar.

Reporte de errores

Los reportes de errores (también llamados Bugs), deben ser enviados por email a [email protected], ellos se encargan de depurarlos y realizar las mejoras pertinentes para versiones posteriores.

16

¿Por qué usar MySQL?

MySQL es muy rápido, confiable y fácil de usar, fue originalmente desarrollado para manejo de grandes bases de datos teniendo en cuenta que se necesitaba rapidez para encontrar soluciones y disponer de un exitoso uso ante las demandas de producción en el transcurso de los años. Aunque bajo constante desarrollo, MySQL hoy en día es un rico y útil conjunto de funciones. La conectividad, rapidez y seguridad que genera MySQL lo hace altamente satisfactorio para acceso a bases de datos mediante Internet punto muy importante para nosotros por los tiempos de respuestas de las consultas.

Principales características del MySQL

Queremos que ustedes sepan de las principales características con las que nos enfrentamos al usar MySQL.

MySQL internamente

• Esta escrito en C y C++. Probado con un gran rango de compiladores diferentes.

• No desperdicia memoria.

• Trabaja en diferentes plataformas.

• Completamente multitarea. Esto significa que puede usar fácilmente usar múltiples procesadores si es necesario.

• Utiliza el algoritmo de árbol B en el disco para índices de tablas.

• Las funciones SQL son implementadas a través de librerías de clase altamente optimizadas y deben ser lo más rápidas posibles.

Tipos de datos de MySQL

MySQL soporta un número de tipos de datos, los cuales pueden ser agrupados en tres categorías: tipos de fecha y hora, tipos numéricos y tipos de cadenas de caracteres.

Usaremos códigos que nos indicarán una descripción en particular:

M indica la longitud máxima.

D se aplica a los datos de tipo Float e indica el número de dígitos que le siguen al punto decimal.

Tipos Numéricos:

TINYINT

• Es un entero muy chico.

• El rango del signo es -128 a 127.

17

• El rango sin signo es de 0 a 255.

SMALLINT

• Es un entero chico.

• EL rango con signo es de -32768 a 32767.

• Rango sin signo es de 0 a 65535.

MEDIUMINT

• Es un entero de tamaño medio.

• El rango con signo es de -8388608 a 8388607.

• El rango sin signo es de 0 a 16777215.

INT

• Es un entero de tamaño normal.

• El rango con signo es de -2147483648 a 2147483647.

• El rango sin signo es de 0 a 4294967295.

BIGINT

• Es un entero largo.

• El rango con signo es de -9223372036854775808 a 9223372036854775807.

• El rango sin signo es de 0 a 18446744073709551615.

FLOAT

• Es un decimal chico.

• No tiene identificador de signo.

• El M indica la cantidad de dígitos de la parte entera y D indica la parte decimal con una precisión de 24 dígitos decimales.

DOUBLE

• Es un decimal de tamaño normal.

• No posee identificador de signo.

• La M indica la cantidad de dígitos de la parte entera y D es el número de decimales.

• La precisión de los números DOUBLE son de 25 <= X <= 53.

DECIMAL

• Es un descendiente de los números del tipo Float.

• No posee identificador de signo.

• Se comporta como un caracter, almacena los decimales como una cadena de caracteres

18

Tipos de Fecha y Hora:

DATE

• Es una fecha.

• El rango que soporta es desde '1000-01-01' a '9999-12-31'.

• MySQL almacena los datos de la fecha con el formato 'AAAA-MM-DD', pero pueden ser formateados para mostrarlo en tipo día, mes y año.

DATETIME

• Este es una combinación de fecha y hora.

• El rango soportado es de '1000-01-01 00:00:00' a '9999-12-31 23:59:59'.

• MySQL guarda los valores con el formato 'AAAA-MM-DD

• HH:MM:SS', pero puede formatearse la forma en que se desea mostrar el dato con comando específicos que veremos mas adelante.

TIMESTAMP

• Es una fecha y hora con menor rango.

• El rango de este es de '1970-01-01 00:00:00' hasta cualquier fecha del año 2037. MySQL muestra el formato YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, o YYMMDD, dependiendo de M si es de 14, 12, 8, 6 caracteres.

TIME

• Es una hora.

• El rango de la hora es de '-838:59:59' a '838:59:59'.

• MySQL almacena los datos en el formato 'HH:MM:SS', pero puede formatearse la salida por línea de comandos, que veremos mas adelante.

YEAR

• Es un tipo año, y posee 2 o 4 dígitos, por defecto está seteado en 4.

• Los valores admitidos van desde 1901 a 2155, en 4 dígitos y desde 1970-2069 se usa formato de 2 dígitos (70-69).

Tipos de cadenas de caracteres:

CHAR

• Es una cadena de caracteres con una longitud específica de caracteres.

• El rango de datos es de 0 a 255 caracteres. Los espacios en blanco son removidos a la hora de contar la longitud

VARCHAR

• Representa una cadena de caracteres pero de longitud variable, es decir se expresa la longitud máxima de caracteres y si ocupa menos internamente almacena

19

los bytes necesarios para almacenar lo que ocupa, vemos una comparación con char en una tabla:

TINYBLOB y TINYTEXT

• Sea un tipo BLOB o TEXT posee una longitud máxima de 255 (2^8 - 1) caracteres.

BLOB y TEXT

• EL tipo LOB o TEXT tiene un máximo de 65535 (2^16 - 1) caracteres.

MEDIUMBLOB y MEDIUMTEXT

• Sea del tipo BLOB o TEXT poseen una longitud máxima de 16777215 (2^24 - 1) caracteres.

LONGBLOB y LONGTEXT

• Sea del tipo BLOB o TEXT posee un máximo de 4294967295 (2^32 - 1) caracteres.

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

• Es del tipo enumerado.

• Es una cadena de valores, este tipo solo acepta valores de los que se han predefinido en al enumerar (‘valor1’,’valor2’,....,’valor_n’), nótese que NULL o la cadena especial "" da como resultado un valor erróneo.

• Un ENUM puede tener un máximo de 65535 valores distintos.

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

• Es del tipo conjunto.

• Guarda cadenas que pueden ser de 0 o mas datos, cada uno de estos puede ser elegido de una lista de valores 'value1', 'value2', ...

• Un conjunto puede tener un máximo de 64 elementos.

Comandos y Funciones

MySQL mejora día a día en este aspecto, las últimas versiones de MySQL tienen soporte de integridad referencial pero que aún están a prueba, por ahora de eso nos tenemos que encargar nosotros los programadores.

Ahora veamos cuales son las características de los comandos y funciones que soporta el MySQL:

20

• Máximos operadores y funciones soportados en el SELECT y el WHERE de las consultas, por ejemplo:

SELECT CONCAT(primer_nombre, " ", apellido)

FROM tbl_name

WHERE sueldo > 10000 AND edad > 30;

• Máximo soporte para las cláusulas GROUP BY y ORDER BY de MySQL. Para el GROUP soporta las funciones (COUNT(), COUNT (DISTINCT...), AVG(), STD(), SUM(), MAX() y MIN()).

• Soporte de LEFT OUTER JOIN y RIGHT OUTER JOIN con sintaxis ANSI SQL y ODBC.

• Soporta Alias sobre las tablas y las columnas basadas sobre SQL92 standard.

• DELETE, INSERT, REPLACE, y UPDATE retornan el número de columnas que fueron afectadas con lo que facilita el control a la hora de programar.

• Los nombres de funciones no hacen conflicto con los nombres de las columnas, por ejemplo, ABS es válido como columna, mas allá que ABS es la función para obtener el valor absoluto Ustedes pueden mezclar tablas desde diferentes bases de datos en una consulta.

Seguridad

MySql cuenta con un servicio de privilegios y password muy seguro y permite host basados en verificación.

Las password son seguras pues viajan encryptadas cuando se realiza una conexión mediante un algoritmo de encryptación propio del MySQL.

Límites

MySQL puede manejar grandes bases de datos.

Permite más de 32 índices por tabla. Cada índice puede consistir de 1 a 16 columnas o partes de columnas. El ancho máximo de los índices es de 500 bytes (este puede ser cambiado cuando MySQL esta compilando).

Conectividad

Los clientes pueden conectarse al servidor MySQL usando el protocolo TCP/IP o por ODBC (Open-DataBase-Connectivity) con soporte para Win32.

Soporta todas las funciones ODBC 2.5 y otras.

Localización de errores

El servidor puede proveer mensajes de error al cliente en algún lenguaje en particular.

21

Posee un soporte completo de un conjunto de diferentes caracteres raros, incluyendo ISO 8859-1 (Latin1), german, big5, ujis, y más.

El ordenamiento de la base es acorde al conjunto de caracteres elegido.

¿Qué tan estable es el MySQL?

Ahora tenemos que hacernos en realidad dos preguntas, una, es qué tan estable es el MySQL? y la otra que surge de la primera es si yo en realidad puedo depender de MySQL, es decir puedo confiarme?...

Mediante estudios minuciosos y comparaciones con otros servidores de bases de datos, se ha encontrado al MySQL como un servidor muy estable sobre todo corriendo sobre sistemas operativos estables como es Linux.

MySQL provee varios módulos para replicación de datos, los cuales por razones de complejidad no son presentados en este curso pero que invitamos a investigar sobre el tema.

¿Qué tan grandes pueden ser las tablas de MySQL?

En la Versión 3.22 de MySQL, soporta un límite de 4Gb como tamaño máximo de una tabla pero en versiones más recientes soporta un tamaño máximo de 8 millón terabytes (2 ^ 63 bytes), es decir el soporte es realmente grande.

Su utilización en el ambiente de desarrollo de páginas Web, así como la interacción con el lenguaje PHP.

Contexto de MySQL en la WEB e Interacción con PHP

MySQL se ha convertido en la base de datos más utilizada en los últimos años en desarrollos de sitios Web, por su fácil manipulación e interacción con PHP hacen de ésta una gran herramienta para generar sistemas WEB.

Como ya sabemos PHP es un lenguaje que nos permite incluir HTML y programación en nuestras páginas, ahora veamos como podemos hacer que incluya también conectividad con las bases de datos.

Anteriormente estuvimos hablando de la facilidad de conexión de que provee el MySQL, veamos como realizar conexiones mediante PHP. Previamente a esto queremos presentar una herramienta para la administración de las Bases de Datos, la misma se llama MySQL Query Browser que no es mas que una aplicación mediante la cual nosotros vamos a poder crear, modificar y borrar nuestras propias bases de datos y tablas.

Una vez instalada la abrimos.

Recordamos que para ello ahora sí debemos tener corriendo los dos servidores, es decir el apache (servidor PHP) y el MySQL.

22

Figura 3: Pantalla de inicio del administrador de MySQL, MySql Query Browser.

Analicemos ahora la figura 3 observamos que tenemos 3 partes bien definidas, en una vemos un frame que contiene las bases de datos que residen actualmente en el MySQL, del otro lado vemos un cuadro de texto: SQL Query Area y debajo tenemos otro frame: Query Result Area donde podemos ver los resultados obtenidos al ejecutar las consultas/sentencias.

Hagamos una recorrida sobre las operaciones principales para creación, modificación y eliminación de bases de datos y tablas.

Crear una base de Datos

SI vemos en la figura 3, del lado derecho tenemos un cuadro de texto donde se muestran todas las Bases de Datos actualmente creadas. En el cuadro de Texto de la izquierda: SQL Query Area, colocamos la siguiente sentencia:

create database ejemplo;

y presionamos luego sobre el botón “execute” y luego vamos al lado derecho y presionamos boton derecho del Mouse y refresh.

Inmediatamente vemos que del lado derecho del frame aparecerá el nombre de la base de datos que acabamos de crear, para nuestro caso ejemplo.

23

Figura 4: Pantalla del MySQL Quero Browser después de crear una Base de Datos nueva.

Creación de tablas

Hacemos clic derecho en la base de datos ejemplo, seleccionamos la opcion crear nueva tabla (create new table), allí colocamos el nombre de la tabla que quisiéramos crear, por ejemplo “clientes” y los campos que contendrá, suponiendo que la nuestra almacenará el nombre y el teléfono y además le vamos a dar un identificador único: id para poder diferenciar unívocamente unos de otros, luego presionamos el botón aplicar cambios (apply changes) y luego cerrar (close). O bien podemos crear la tabla usando las siguientes sentencias:

-Seleccionaremos la base ejemplo como la base a utilizar:

use ejemplo;

-Crearemos a continuación la tabla clientes a partir de la siguiente sentencia:

create table clientes ( nombre varchar(100),

24

telefono varchar(100) );

Figura 5: Parte de pantalla para creación de tablas

Cabe destacar que debemos respetar los nombres de las variables (campos), es decir, mysql hace diferencia entre mayúsculas y minúsculas, también vemos que en caso de que los campos sean del tipo cadena de caracteres, en realidad lo ponemos como varchar, que si leímos con atención, sabemos que almacena solo el espacio necesario para cada entrada.

25

Figura 6

Miremos ahora la figura 6, vemos que en la columna extra para el campo id, seleccionamos la opción autoincrement y colocamos el tilde en el check de la columna de primaria, esto quiere decir que la clave será del tipo autoincremental y además va a ser nuestra clave primaria.

Debajo, una vez llenadas todas las opciones, vemos que hay un campo para agregar un comentario a la tabla, este no es obligatorio.

Terminado este proceso, presionamos el botón Apply Changes para que se cree la tabla.

Ahora ya tenemos nuestra tabla, juntos hagamos la inserción de los siguientes datos para realizar luego las pruebas pertinentes.

Trabajemos juntos, ahora ingresemos datos en la tabla para insertar utilizamos las siguientes sentencias:

26

Figura 7: Pantalla que muestra luego de presionar la inserción.

Importante: para el caso del id podemos dejarlo en blanco en cada inserción pues al ser autoincremental, no hace falta que lo llenemos con ningún valor.

6.8 Interacción entre PHP y MySQL

La relación entre PHP y bases de datos, especialmente MySQL, es muy estrecha y beneficiosa. De hecho, cuando se habla de Web y PHP, es muy difícil que no se mencione también a una base de datos. Después de todo, Internet está pensado para almacenar y permitir acceder a enormes cantidades de información.

Mientras mayor sea la cantidad de información y más alta la frecuencia de actualización de un sitio web, mayor es su valor y sus ventajas sobre otros medios.

Tal vez la mayor ventaja de PHP es la integración con los sistemas de bases de datos y el soporte nativo a las distintas bases de datos existentes, libres y comerciales.

Las razones principales para usar una base de datos son:

• Evitar redundancias.

• Evitar programas complicados.

27

• Búsquedas.

• Seguridad.

Funciones Básicas de PHP/MySQL

Conexión a la base de datos

Si se quiere acceder a una base de datos desde PHP, primero debemos conectarnos al servidor MySQL, la sintaxis es la siguiente si utilizamos variables:

$enlace = mysql_connect($hostname, $user, $password);

o si utilizamos constantes

$enlace = mysql_connect('localhost', 'master', 'laclave');

Los argumentos son opcionales, si no se especifican se supone "localhost" para el servidor, el mismo usuario que el servidor web para el usuario y clave vacía.

La función mysql_connect retorna una conexión o enlace (link) a la base de datos que luego será usado para ejecutar los comandos SQL. El uso y almacenamiento de dicho valor es opcional, ya que la mayoría de las funciones de MySQL usan por defecto la última conexión.

Podemos utilizar la opción or die para mostrar un mensaje si la conexión tuvo algún problema.

En caso de que se tengan varios enlaces o conexiones, hay que especificar cuál usar.

El enlace al servidor será cerrado tan pronto como la ejecución del script finalice, a menos que se cierre antes explícitamente llamando a mysql_close().

Ejemplo 1:

<?

$servidor=”localhost”;

$usuario=”root”;

$clave=” root”;

$enlace=mysql_connect($servidor,$usuario,$clave)

or die (“No se puede conectar”);

mysql_close($enlace);

?>

Nota: Recuerda que debes colocar el usuario y clave que colocaste en tu base de datos, si no colocaste ninguno de estos datos intentá conectarte con mysql_connect() o con mysql_connect(“localhost”,””,””)

28

Conexiones Persistentes

Cada vez que un usuario solicita una página PHP que se conectará a una base de datos, el proceso del servidor Apache que lo ejecuta debe establecer la conexión al momento que se ejecuta el mysql_connect.

Esta operación normalmente involucra arrancar un nuevo proceso del servidor MySQL, por lo que se produce un retardo (latencia) en la ejecución y visualización de la página.

Para evitar que se arranque un nuevo proceso por cada conexión a la base de datos, el MySQL del PHP permite especificar conexiones persistentes.

En este tipo de conexiones, la conexión se mantiene abierta y podrá ser reutilizada más tarde en otra ejecución. Por lo tanto el servidor MySQL no acaba, sino que espera por nuevas peticiones, lo que acelera muchísimo la ejecución de los programas. Para ello no hay nada más que usar la función equivalente mysql_pconnect:

$enlace = mysql_pconnect($hostname, $user, $password);

Seleccionando la base de datos.

Luego de establecida la conexión hay que seleccionar una base de datos con la cuál se va a trabajar, recordemos que el servidor MySQL puede tener más de una base alojada en él.

Utilizando variables podemos seleccionarla de la siguiente manera:

mysql_select_db($database);

o si utilizamos un nombre constante:

mysql_select_db(“base”);

Veamos un ejemplo en donde seleccionamos la base de datos Mis_tablas.

Ejemplo 2:

<?

$servidor=”localhost”;

$usuario=” root”;

$clave=” root”;

$base=”Mis_tablas”;

$enlace=mysql_connect($servidor,$usuario,$clave)

or die (“No se puede conectar”);

mysql_select_db($base);

?>

29

Listar el contenido de una tabla

Para listar el contenido de una tabla es necesario trabajar con ciertas funciones, además de las vistas hasta ahora.

mysql_query: Ejecuta un consulta SQL y retorna un resultado que mantiene la información necesaria para "recorrer" el conjunto de filas que cumplen con la condición especificada en el SELECT. Si el comando se ejecuta correctamente (la sintaxis es correcta, las tablas y columnas existen y tenemos permiso para hacer un SELECT) devuelve TRUE, caso contrario devuelve FALSE.

mysql_num_rows: Esta función nos devuelve la cantidad de filas seleccionadas con el comando anterior.

mysql_fetch_array: Esta es una función que recupera de la base de datos la siguiente fila que nos interesa y pone todos los datos en un array que puede ser accedido de dos formas: con un índice numérico como un array normal, o como un array asociativo usando los nombres de las columnas especificados en el SELECT: En el siguiente ejemplo lo usamos como un array asociativo con los nombres de las columnas "Apellido" y "Nombres".

Ejemplo 3:

<?

$servidor=”localhost”;

$usuario=” root”;

$clave=” root”;

$base=”Mis_tablas”;

$enlace=mysql_connect($servidor,$usuario,$clave)

or die (“No se puede conectar”);

mysql_select_db($base)

or die("No puedo acceder a la base de datos");

echo "Seleccionando datos de Agenda<br><hr>";

$consulta=mysql_query("select * from agenda");

$cantidad = mysql_num_rows($consulta);

echo "Número de filas: $cantidad <p>";

while( $fila=mysql_fetch_array($consulta) )

{

echo $fila["Apellido"] . ", " . $fila["Nombres"] . "<p>";

}

mysql_close($enlace);

?>

30

Nota: Observar que al incluir la función mysql_fetch_array como condición del while,

automáticamente recorrerá todos los registros almacenados en $consulta.

Modificar registros de una tabla

Para modificar los registros de una tabla podemos utilizar las funciones DELETE, UPDATE o INSERT de SQL, aplicándolas como vimos con la función mysql_query.

Ahora bien, cuando nosotros realizamos alguna de estas consultas no podemos visualizar resultados, pero si podemos saber cuantos registros fueron modificados con la función mysql_affected_rows().

Ejemplo 4

<?

$servidor=”localhost”;

$usuario=” root”;

$clave=” root”;

$base=”Mis_tablas”;

$enlace=mysql_connect($servidor,$usuario,$clave)

or die (“No se puede conectar”);

mysql_select_db($base)

or die("No puedo acceder a la base de datos");

$consulta=mysql_query(“DELETE FROM agenda where ID_agenda=2”);

$cantidad=mysql_affected_rows($enlace);

echo "Se eliminaron :”.$cantidad.”registros”;

?>

El ejemplo es válido también si queremos insertar o actualizar un registro.

Tener en cuenta que la función mysql_affected_rows tiene como argumento el enlace que tenemos a la base de datos.

CASO ESPECIAL

mysql_affected_rows devolverá 0 (cero) cuando la consulta de modificación no tenga una sentencia WHERE por ejemplo “DELETE FROM agenda”.

31

Insertar filas desde un formulario

En el siguiente ejemplo mostramos como definir un formulario sencillo y luego insertar los valores del formulario en una tabla. En el ejemplo lo que hacemos es permitir insertar campos a la tabla "agenda".

Como se puede observar, no empleamos ninguna función nueva, sino que hacemos uso de la consulta de SQL, INSERT en la función mysql_query ya usada en el ejemplo anterior.

El funcionamiento del script es muy sencillo, define un formulario con los campos Nombre y Apellidos y la acción del formulario es el mismo script PHP.

Al principio del programa verificamos si la llamada es desde el formulario (mediante la verificación de la variable $submit), si es así, insertamos el valor de las variables en una nueva fila de la tabla "agenda".

Notar que no colocamos el valor de algunos campos que si están en la tabla como Direccion, pero al colocar en la tabla la posibilidad de que este sea nulo no tendremos problemas.

También no colocamos el valor de "Id_agenda", ya que este valor es generado automáticamente por el MySQL al haberlo definido como autoincremental.

Ejemplo 5:

<?

if ($submit) {

$enlace = mysql_connect()

or die("Error de conección");

mysql_select_db("Mis_tablas");

$consulta = "INSERT INTO agenda

(ID_agenda,Apellido,Nombres,Direccion,Telefono,Email)

VALUES ('','$apellido','$nombres','')";

echo $consulta;exit;

$result = mysql_query($consulta)

or die("Error en la consulta");

echo "La información correspondiente

a ".$nombres.",".$apellido."fue introducida.\n";

} else{

?>

<form method="post" action="<?php echo $PHP_SELF?>">

Nombre:<input type="Text" name="nombres"><br>

Apellidos:<input type="Text" name="apellido"><br>

<input type="Submit" name="submit" value="Ingresar Datos">

</form>

32

<?php

}

?>

Para completar este ejemplo, deberías agregarle los campos que faltan al formulario y cargar todos los datos en la base. A trabajar!!!

PHP_SELF

Esta variable predefinida de PHP almacena el nombre del archivo que contiene el script que se esta ejecutando, relativo al directorio raíz de los documentos.

Ejemplo Final

Ahora vamos a realizar para completar nuestros conocimientos sobre PHP y MySQL un ejemplo final pero trabajando en este caso mediante una base de datos.

Comenzemos con el desarrollo.

El archivo HTML llamado ejemplo.html, será el mismo que utilizamos anteriormente.

ejemplo.html

<HTML>

<HEAD>

<TITLE> Ejemplo Final </TITLE>

</HEAD>

<frameset rows="60%,*">

<frameset cols="40%,*">

<frame name=izquierda src="enviar_datos.php">

<frame name=derecha src="datos.php">

</frameset>

<frame name=abajo src="buscar.php">

</frameset>

</HTML>

Bien ahora los archivos que cambiarán serán: enviar_datos.php, datos.php y buscar.php.

Pero antes de continuar vamos a crear un archivo llamado conectar.php que utilizaremos en todos los scripts para conectarnos a la base de datos.

conectar.php

<?

$servidor="";//Nombre o direccion IP del servidor

$usuario=""; //Nombre del usuario con el que se va a conectar a la base

33

$clave="";//Clave del usuario

$enlace=mysql_connect($servidor,$usuario,$clave)

mysql_select_db("Mis_tablas")

or die ("Error al seleccionar la Base");

?>

Ahora sí crearemos el archivo enviar_datos.php, que se encargará de mostrar la lista de todos las personas que tenemos cargadas en nuestra agenda.

enviar_datos.php

<?

include("conectar.php");

$consulta=mysql_query("SELECT Apellido, Nombres, ID_agenda AS id FROM agenda ORDER BY Apellido") or die("Consulta Erronea");

?>

<html>

<head>

<title></title>

</head>

<body >

<div align="right">

<font size=-1>Hay un total de <?echo mysql_num_rows($consulta);?>

personas en su agenda</font>

</div>

<center>

<font color="#990000" size=5><b>Agenda</b></font><hr>

<table border=1 bordercolor="990000" width=250 cellpadding=5>

<tr>

<td valign=top bgcolor=#FFFF99><center><font color="#3333CC"

size=4><b>Selección de Personas</b></font></center>

</td></tr>

<tr><td valign=top >

<?

while($fila=mysql_fetch_array($consulta))

{?>

<a href="datos.php?id=<? echo $fila["id"];?>" target="derecha"><? echo

34

$fila[Apellido].", ".$fila[Nombres]?></a>

<br>

<?

};

mysql_close();

?>

</td></tr>

</center>

</body>

</html>

Creemos ahora datos.php que nos mostrará los datos de la persona que seleccionemos de enviar_datos.php.

datos.php

<html>

<head>

<title>Datos de la Persona</title>

</head>

<body >

<?

if (!$id){

echo "<center><font color=990000 size=5><b>Agenda

Personal</b></font><hr></center>";

}

else

{

include("conectar.php");

$consulta=mysql_query("SELECT * FROM agenda Where ID_agenda=$id");

$fila=mysql_fetch_array($consulta);

?>

<CENTER><font color="#990000" size=5><b>Datos de la

Persona:</b></font><hr>

</CENTER>

<table border=1 bordercolor="990000" width=250 cellpadding=5 align=left>

<tr><td valign=top colspan=2 bgcolor=#96ABFE><center><font

35

color="black" size=4><b><?echo $fila[Nombres]."

".$fila[Apellido];?></b></font></center>

</td></tr>

<tr>

<td valign=top ><B>Dirección:</B></td>

<td valign=top ><? echo $fila[Direccion];?></td>

</tr>

<tr>

<td valign=top ><B>Teléfono:</B></td>

<td valign=top ><? echo $fila[Telefono];?></td>

</tr>

<tr>

<td valign=top ><B>E-mail:</B></td>

<td valign=top ><a href="mailto:<? echo $fila[Email];?>"><? echo

$fila[Email];?></a></td>

</tr>

</table>

<?

};

?>

</body>

</html>

Ahora veamos la opción de buscar. Recordemos el código del formulario para buscar.

buscar.php

<html>

<head>

<title></title>

</head>

<body >

<font color="#3333CC"><b>Datos de la Persona</b></font><br><br>

<form action="buscar_datos.php" method=post>

Nombre:<INPUT TYPE="text" NAME="criterio">

<INPUT TYPE="submit" value=Buscar>

36

</form>

</body>

</html>

Es muy importante que realices este ejemplo y que le agregues variantes como modificar datos o eliminar registros.

Creemos el archivo buscar_datos.php que se encargará de la búsqueda en los campos de Apellido y Nombres de la tabla agenda.

buscar_datos.php

<? include("conectar.php");

$criterio=$HTTP_POST_VARS["criterio"];

$consulta=mysql_query("SELECT * FROM agenda WHERE Apellido LIKE

'%$criterio%' OR Nombres LIKE '%$criterio%' ORDER BY Apellido");

$cantidad=mysql_num_rows($consulta);

if ($cantidad==0)

{

echo "No se encontró ninguna persona los términos de su búsqueda.<br>";

echo "<a href=buscar.php>Intentelo nuevamente</a>";

}

else

{

while ($fila=mysql_fetch_array($consulta))

{?>

<a href="datos.php?id=<?echo $fila[ID_agenda];?>" target="derecha">

<? echo $fila[Apellido].", ".$fila[Nombres]."<br>";?>

</a>

<? };

echo "<p><a href=buscar.php>Buscar nuevamente</a></p>";

};

?>