Professional Documents
Culture Documents
En este punto, que es una de las partes más esperadas, veremos como realizar Reportes
de Ciudades mediante PHP extrayendo datos desde la Base de Datos MySQL.
Si bien el phpMyAdmin, puede ser una forma habitual por la cual Webmasters y
Programadores, ingresamos a las bases de datos a realizar modificaciones rápidas, esta
no es una forma que pueda utilizar un simple usuario, o visitante, debido a su
complejidad y lo peligroso que puede ser para nuestros datos.
Es por ello que debemos desarrollar en nuestro sitio, herramientas que permitan trabajar
con la información de manera fácil, a nuestros usuarios, para ello vamos a utilizar el
lenguaje PHP, que accederá a la base de datos MySQL y mostrará la información en el
navegador, en formato xHTML.
Lo primero que realizaremos será un Reporte de Ciudades, o sea mostrar una Lista de
las Ciudades ingresadas en nuestra Base de Datos. Para este reporte que se mostrara en
una página Web, vamos a utilizar lo que es hoy día la mejor forma de tabular datos, o
sea una tabla.
Las tablas son estructuras xHTML que muestran varias filas de datos, con información
en columnas, por ejemplo:
ID Ciudad Nombre
1 Madrid
2 Montevideo
3 México
4 Buenos Aires
El código xHTML de esta tabla sería:
<table>
<tr>
<td>ID Ciudad</td>
<td>Nombre</td>
</tr>
<tr>
<td>1 </td>
<td>Madrid</td>
</tr>
<tr>
<td>2 </td>
<td>Montevideo</td>
</tr>
<tr>
<td>3</td>
<td>México</td>
</tr>
<tr>
<td>4 </td>
<td>Buenos Aires</td>
</tr>
</table>
Para repasar el trabajo con tablas xHTML ver nuestro tutorial de Conceptos Básicos de
xHTML - Parte 2
Obviamente que en esa tabla las ciudades están puestas manualmente y si agregamos 1
o 2 en la tabla ciudades no aparecerán, esto es porque hasta ahora el ejemplo sigue
siendo Estático.
A la tabla estática con datos fijos, vamos a realizarla ahora Dinámica, esto quierer decir
que genere automáticamente una fila de la tabla por cada ciudad de la tabla ciudades.
Para realizar esto, vamos a utilizar PHP, mediante el vamos a hacer lo siguiente:
1. Conectarnos al MySQL
2. Seleccionar la base de datos
3. Seleccionar la tabla ciudades
4. Mostrar un renglón cada cuidad de la tabla ciudades
5. Cerrar la base de datos
PHP, tiene una orden para cada uno de estas 5 necesidades, estas órdenes o funciones
son:
mysql_query ejecuta una consulta SQL, como por ejemplo seleccionar una tabla (en
este caso ciudades)
Y nos esta faltando la manera de repetir esa lectura de registros para cada uno de los
elementos de la tabla ciudad.
Para esto utilizaremos while, que justamente lo que hace es repetir un bloque de ordenes
mientras se cumple una determinada condición.
<html>
<head>
<title>Reporte de Ciudades</title>
</head>
<body>
</body>
</html>
Ese código será la base de este reporte, <html> y </html> indican el comienzo y fin de
la página xHTML respectivamente. <head> y </head> indican el comienzo y fin de la
cabecera de la página, donde únicamente hemos definido el titulo, mediante la
declaración <title>Reporte de Ciudades</title> que hará que en nuestro navegador
arriba en la barra azul, diga “Reporte de Ciudades”, como se ve en la imágen.
Por ultimo dentro de <body> y </body> escribiremos todas las órdenes xHTML para
mostrar el Reporte de Ciudades, mediante una tabla xHTML, el código quedaría así:
<html>
<head>
<title>Reporte de Ciudades</title>
</head>
<body>
<h1>Reporte de Ciudades</h1>
<table>
<tr>
<td>ID Ciudad</td>
<td>Nombre</td>
</tr>
<tr>
<td>1 </td>
<td>Madrid</td>
</tr>
</table>
</body>
</html>
Observen que también he agregado un titulo que será visible en el navegador utilizando
las etiquetas de encabezado principal <h1>Reporte de Ciudades</h1>
Como ven, luego de titulo ID Ciudad y Nombre, se muestra solamente una ciudad que
es Madrid, esto es porque hemos creado solo una fila, aparte del titulo, la fila esa esta en
rojo para identificarla.
Esa fila es la que vamos a repetir tantas veces como ciudades tengámos en la Tabla
ciudades de nuestra Base de Datos, sean 2, 50 o 20.
Hasta ahora nuestro código es solo xHTML, agregaremos el PHP que trabajara con la
Base de Datos, vamos al código completo ya con el PHP (el PHP agregado se ve en
rojo), que seria así:
<html>
<head>
<title>Reporte de Ciudades</title>
</head>
<body>
<h1>Reporte de Ciudades</h1>
<table>
<tr>
<td>ID Ciudad</td>
<td>Nombre</td>
</tr>
<?php
$conexion = mysql_connect('localhost', 'usuariobase', 'topsecret');
mysql_select_db('inmobiliaria');
$tabla = mysql_query('SELECT * FROM ciudades');
while ($registro = mysql_fetch_array($tabla)) {
?>
<tr>
<td>1</td>
<td>Madrid</td>
</tr>
<?php
}
mysql_free_result($tabla);
mysql_close($conexion);
?>
</table>
</body>
</html>
mysql_select_db(‘inmobiliaria’);
Luego de Conectarse con el Servidor, tenemos que elegir cual de todas las Bases de
Datos queremos usar, en este caso usaremos inmobiliaria (capaz es la única que tienen)
que es la que habíamos creado en la Segunda Parte de este tutorial.
$tabla = mysql_query(‘SELECT * FROM ciudades’);
Luego de elegir la Base de Datos, tenemos que Seleccionar la Tabla y Registros con que
vamos a trabajar. La opción SELECT * FROM ciudades, seleccionar todos los
Campos (por eso asterisco *) de la Tabla ciudades. Con esto entonces vamos a poder
trabajar con las 10, 20, 3, o 100 ciudades ingresadas.
Pero a estas ciudades, las vamos a ir tomando una por una, por eso tenemos la siguiente
orden:
$registro = mysql_fetch_array($tabla)
Cuando llega al final de la Tabla, no se cumplirá mas la condición del while y dejara de
repetirse esa porción de código, por tanto si hay 3 ciudades obtiene 3 y muestra tres
veces el bloque, y si hay 10 lo repetirá 10 veces, Cual bloque de ordenes repite pues
este, que es el que esta entre llaves {}:
<tr>
<td>1 </td>
<td>Madrid</td>
</tr>
Vean que ese codigo es hasta ahora solo xHTML, no PHP porque vimos que antes del
<tr> cerramos la sección de PHP con ?> y la comenzamos luego del </tr> con <?php.
Por ultimo:
mysql_free_result($tabla);
Libera de la memoria los Registros Seleccionados de la Tabla (esto es para no recargar
el servidor ya que como hemos dicho puede estar recordando 2, 3, 50 o 100 ciudades)
mysql_close($conexion);
Cierra la base de datos, dejando libre esa conexión.
http://localhost/CursoWebBienesRaices/listadociudades.php
<table>
<table border=”1”>
No queda arto bonito pero al menos vemos cada fila, que corresponde a cada ciudad.
En este punto, otra cosa que llama la atención es que yo tengo 4 ciudades y ahí se repite
4 veces Madrid, porque sucede esto ¿?
<tr>
<td>1</td>
<td>Madrid</td>
</tr>
<?php
}
mysql_free_result($tabla);
mysql_close($conexion);
?>
...
Vemos que repite lo que hay en rojo, y justamente ahí solo dice 1 y Madrid. O sea que si
bien el numero de filas (ahora el mio son 4) corresponde a las 4 ciudades ingresadas, no
esta mostrando los cuatro ID y nombre de cada ciudad, esto pasa porque aun esa parte
es Estática y no Dinámica. Por eso, vamos a modificarla así:
Donde dice 1 vamos a sustituir por <?php echo $registro[‘id’]; ?> y donde dice Madrid,
vamos a sustituirlo por <?php echo $registro[‘nombre’]; ?>, el código de nuestra pagina
en ese punto quedara así:
...
<?php
$conexion = mysql_connect('localhost', 'usuariobase', 'topsecret');
mysql_select_db('inmobiliaria');
$tabla = mysql_query('SELECT * FROM ciudades');
while ($registro = mysql_fetch_array($tabla)) {
?>
<tr>
<td><?php echo $registro[‘id’]; ?></td>
<td><?php echo $registro[‘nombre’]; ?></td>
</tr>
<?php
}
mysql_free_result($tabla);
mysql_close($conexion);
?>
...
En rojo esta la modificacion, y ahora si vamos las ciudades como corresponde, tal como
se muestra en la imágen:
Analicemos esta ultima parte del código. Cuando hacemos el while en $registro queda
guardada la información de 1 registro de la tabla (por ejemplo el primero Madrid),
cada registro de ciudades tiene 2 campos id y nombre, que guardan el numero de
identificación de la ciudad y su nombre, respectivamente. Es por eso que luego usamos
así: $registro[‘id’] para obtener de ese registro solo el numero de ciudad o
$registro[‘nombre’] para obtener solo el nombre de esa ciudad.
Completamos la orden con un <?php y ?> para indicar que ahí no es xHTML si no
código PHP y por último, la orden echo muestra en una página un valor, en el ejemplo
vimos que primero muestra el id así:
Y el nombre así:
Ambos valores están dentro de las correspondientes <td> </td> para que salgan en cada
columna de la tabla, y esto se repite por cada ciudad, logrando de esa forma nuestro
Reporte de Ciudades.
En la próxima entrega veremos como hacer el Reporte de Propiedades y Enlazar las dos
Tablas al mismo, de manera que se muestre la ciudad a la cual corresponde.