This course will become read-only in the near future. Tell us at community.p2pu.org if that is a problem.

Despliega los mensajes [Feb. 13, 2012, 12:46 p.m.]



En la tarea anterior logramos almacenar mensajes en nuestra base de datos. En esta tarea vamos a ver cómo desplegar esos mensajes para que se muestren en nuestra página. 

Agrega el siguiente código debajo de tu formulario:
 
<?php

// Datos para la conexion
$host = 'mysql_host';
$database = 'mysql_database';
$username = 'mysql_user';
$password = 'mysql_pd';

// Conectarse a MySQL
$link = mysql_connect($host, $username, $password);
if (!$link) {
    die('Error al conectarse a mysql: ' . mysql_error());
}

// Seleccionar nuestra base de datos
$db_selected = mysql_select_db($database, $link);
if (!$db_selected) {
    die ('Error al abrir la base de datos: ' . mysql_error());
}

// Buscar todos los comentarios ordenados por fecha de manera descendiente
$query = "SELECT * from guestbook ORDER BY fecha_publicacion DESC";
$result = mysql_query($query);
if (!$result) {
  die('Query invalido: ' . mysql_error());
}

// Desplegar cada comentario como HTML
while ($fila = mysql_fetch_assoc($result)) {
  echo sprintf('
    <div class="mensaje">
      <p><span class="autor">%s:</span> %s</p>
      <p class="fecha">%s</p>
    </div>',
    htmlspecialchars($fila['nombre']), 
    htmlspecialchars($fila['mensaje']), 
    $fila['fecha_publicacion']
	);
}

?>
(Recuerda que debes cambiar los datos de conexión para usar los valores de tu hosting.)
 
Si vuelves a entrar a tu página debes ver algo como como esto (puedes usar CSS para darle estilo a los comentarios).
 
 
Analicemos el ejemplo
 
La primera parte del código es igual a la que hemos estado usando en las tareas anteriores: colocar los datos de conexión, conectarse a MySQL y seleccionar nuestra base de datos.
 
El pedazo interesante empieza con esta línea:
 
$query = "SELECT * from guestbook ORDER BY fecha_publicacion DESC";
 
Con este query le estamos diciendo a MySQL: "Busca todos los registros en la tabla guestbook y ordénalos de manera descendiente en base a la columna fecha_publicacion."
 
Después de ejecutar el query y verificar que no hubo errores, nos encontramos con esta línea:
 
while ($fila = mysql_fetch_assoc($result)) {
 

Para entender esta sintaxis (que es muy común en PHP) debemos tener algunos conceptos claros:

  1. En este momento, la variable $result tiene almacenados todos los registros de la tabla guestbook. Sin embargo, los tiene almacenados en un formato binario, que no puede ser manipulado por PHP.
     
  2. Mediante la función mysql_fetch_assoc() podemos agarrar esos registros y convertirlos a lo que se conoce como un arreglo asociativo en PHP. Eso nos va a permitir manipular los registros con PHP y desplegarlos como queramos. Sin embargo, mysql_fetch_array() solo busca 1 registro a la vez.
     
  3. Para buscar todos los registros y convertirlos en arreglos asociativos, debemos envolver mysql_fetch_array() en un ciclo while.

 

En resumen, con esta línea le estamos diciendo a PHP lo siguiente:

"Quiero que agarres los registros que están almacenados en la variable $result y los conviertas en arreglos asociativos, pero quiero que lo hagas uno a uno.

Cada vez que conviertas un registro en arreglo, quiero que lo guardes en la variable $fila y que ejecutes el código que está dentro de los corchetes."

El código entre corchetes es el siguiente:

echo sprintf('

  <div class="mensaje">
    <p><span class="autor">%s:</span> %s</p>
    <p class="fecha">%s</p>
  </div>',

  htmlspecialchars($fila['nombre']), 
  htmlspecialchars($fila['mensaje']), 
  $fila['fecha_publicacion']

);
 
Lo que estamos haciendo aquí es imprimir un pequeño código HTML, pero reemplazando cada ocurrencia de %s con los valores de la variable $fila.
 
Lo último que debemos notar es que estamos utilizando la función htmlspecialchars() para evitar un ataque que se conoce como XSS o Cross Side Scripting.