Código para mostrar las firmas que nuestro libro de visitas haya registrado.
Recordando la explicación general de este ejercicio, nos acordaremos de que la página del libro de visitas tenía dos grandes bloques, que se decidían comprobando si se recibe o no algo por el formulario. Para ello podemos utilizar un enunciado if como este:
if (!$HTTP_POST_VARS)
En caso de no recibir datos por el formulario este if se evaluaría con resultado positivo. Prestar atención a la negación para entender la correcta evaluación del if.
En este capítulo vamos a relatar la parte del if en la que no se reciben datos por un formulario, es decir, la evaluación positiva del if.
Extraer las últimas firmas
En este caso, lo primero a realizar es la extracción de las últimas firmas de la base de datos. Para ello debemos construir una sentencia SQL que seleccione de la base de datos dichas firmas.
//si no recibo nada por el formulario de firma del libro, muestro las firmas del libro
//construyo la sentencia SQL
$ssql = "SELECT * FROM librovisitas_php";
//se mostrarán las últimas firmas, aunque habrá un enlace en la parte de abajo que se podrá pulsar para ver más firmas
if (isset($_GET["vermas"]))
$ssql .= " where id_librovisitas_php<=" . $vermas;
//ordeno la sentencia y limito el numero de resultados
$ssql .= " ORDER BY id_librovisitas_php desc limit 11";
//tomo el juego de resultados
$resultid = mysql_query($ssql,$conn);
Esta sentencia se construye en varias partes. Primero se crea la primera parte del select y luego otras partes más complicadas de ver.
Será necesario un inciso para entender la parte en la que se evalúa si existe o no la variable vermas, recibida por URL ($_GET["vermas"]). Esto viene porque en la parte de debajo de las firmas, en caso de que existan más firmas de las que se hayan mostrado, se colocaría un enlace para ver más firmas, que contendría una referencia a este propio libro de visitas con la variable vermas igual al identificador de la próxima firma que haya que visualizar. Algo como librovisitas/index.php?vermas=960
Si habíamos recibido la variable vermas, seleccionamos tan solo las firmas que tengan el identificador menor o igual que el índice recibido en vermas.
Las firmas se deben ver en orden descendente, para que se muestren primero las últimas firmas insertadas. Es lo que se indica en la parte que pone ORDER BY. Además se deben seleccionar tan solo 10 firmas por página, aunque en la práctica seleccionaremos 11, aunque la última no se mostrará, sólo se extrae para saber el índice que tiene y utilizarlo para construir el enlace vermas, en caso de que existan otras firmas por visualizar.
En la última línea se ejecuta la sentencia SQL para extraer los datos.
Bucle While
Se realiza a continuación un bucle para recorrer los resultados. Es un sencillo recorrido por un conjunto de resultados de una consulta a base de datos. Tiene la particularidad de que se cuentan los resultados mostrados para, en caso de que se hayan mostrado ya 10, no seguir mostrando más.
while (($damefila=mysql_fetch_object($resultid)) && ($num_filas<10))
{
?>
<table align="center" width="100%" cellspacing="2" cellpadding="0" border="0">
<tr>
<td valign="top" class=fuente8><b>
<? //si el visitante no introdujo nombre muestro como nombre "Anónimo"
if ($damefila->nombre == "-"){
echo "Anónimo";
}elseif ($damefila->email != "-") {
echo '<a href="mailto:' . $damefila->email . '">' . $damefila->nombre . '</a>';
}else{
echo $damefila->nombre;
}
?></b>:<br>
</td></tr>
<tr><td bgcolor=cccccc colspan="2"><img src="images/pixeltrans.gif" width=1 height=1 border="0"></td></tr>
<td class=fuente8 valign="top">
<?echo strip_tags($damefila->comentario)?>
<td valign="top" align="right" nowrap class=fuente8>
Valoracion: <?echo $damefila->valoracion?>
</td>
</tr>
</table>
<br>
<?
$num_filas++;
} //termina el bucle while
Los resultados se muestran en una tabla, por eso puede quedar un poco embarullado este código en medio de tantas etiquetas HTML, pero no reviste ninguna complicación especial.
Mostrar el enlace de vermas
Al final de la página, si había más firmas por ver, hay que mostrar el enlace de vermas. Para ello simplemente evaluamos la variable que contiene el puntero al registro actual. Si el bucle anterior finalizó porque dicho puntero había llegado al final de la lista de valores, entonces es que no hay más firmas que ver. Si por el contrario, el bucle finalizó y todavía quedaba alguna firma en el puntero es que hay que mostrar el enlace de vermas y colocar el índice de la firma que tocaría visualizar a continuación.
//si quedan más valoraciones en el conjunto de resultados, muestro el enlace de "Ver más"
if ($damefila)
echo "<div align=center><b><a href=\"index.php?vermas=$damefila->id_librovisitas_php\">Ver más mensajes</a></b></div><br>";
Mostrar el formulario de firma
Por último se debería mostrar el formulario de la firma. Nosotros lo hemos separado en un fichero aparte para que quede todo más organizado. En el código de nuestro ejercicio en esta sección, lo único que encontraremos será el include con el archivo HTML que contiene el formulario.
include ("formul_mensaje.html");
if (!$HTTP_POST_VARS)
En caso de no recibir datos por el formulario este if se evaluaría con resultado positivo. Prestar atención a la negación para entender la correcta evaluación del if.
En este capítulo vamos a relatar la parte del if en la que no se reciben datos por un formulario, es decir, la evaluación positiva del if.
Extraer las últimas firmas
En este caso, lo primero a realizar es la extracción de las últimas firmas de la base de datos. Para ello debemos construir una sentencia SQL que seleccione de la base de datos dichas firmas.
//si no recibo nada por el formulario de firma del libro, muestro las firmas del libro
//construyo la sentencia SQL
$ssql = "SELECT * FROM librovisitas_php";
//se mostrarán las últimas firmas, aunque habrá un enlace en la parte de abajo que se podrá pulsar para ver más firmas
if (isset($_GET["vermas"]))
$ssql .= " where id_librovisitas_php<=" . $vermas;
//ordeno la sentencia y limito el numero de resultados
$ssql .= " ORDER BY id_librovisitas_php desc limit 11";
//tomo el juego de resultados
$resultid = mysql_query($ssql,$conn);
Esta sentencia se construye en varias partes. Primero se crea la primera parte del select y luego otras partes más complicadas de ver.
Será necesario un inciso para entender la parte en la que se evalúa si existe o no la variable vermas, recibida por URL ($_GET["vermas"]). Esto viene porque en la parte de debajo de las firmas, en caso de que existan más firmas de las que se hayan mostrado, se colocaría un enlace para ver más firmas, que contendría una referencia a este propio libro de visitas con la variable vermas igual al identificador de la próxima firma que haya que visualizar. Algo como librovisitas/index.php?vermas=960
Si habíamos recibido la variable vermas, seleccionamos tan solo las firmas que tengan el identificador menor o igual que el índice recibido en vermas.
Las firmas se deben ver en orden descendente, para que se muestren primero las últimas firmas insertadas. Es lo que se indica en la parte que pone ORDER BY. Además se deben seleccionar tan solo 10 firmas por página, aunque en la práctica seleccionaremos 11, aunque la última no se mostrará, sólo se extrae para saber el índice que tiene y utilizarlo para construir el enlace vermas, en caso de que existan otras firmas por visualizar.
En la última línea se ejecuta la sentencia SQL para extraer los datos.
Bucle While
Se realiza a continuación un bucle para recorrer los resultados. Es un sencillo recorrido por un conjunto de resultados de una consulta a base de datos. Tiene la particularidad de que se cuentan los resultados mostrados para, en caso de que se hayan mostrado ya 10, no seguir mostrando más.
while (($damefila=mysql_fetch_object($resultid)) && ($num_filas<10))
{
?>
<table align="center" width="100%" cellspacing="2" cellpadding="0" border="0">
<tr>
<td valign="top" class=fuente8><b>
<? //si el visitante no introdujo nombre muestro como nombre "Anónimo"
if ($damefila->nombre == "-"){
echo "Anónimo";
}elseif ($damefila->email != "-") {
echo '<a href="mailto:' . $damefila->email . '">' . $damefila->nombre . '</a>';
}else{
echo $damefila->nombre;
}
?></b>:<br>
</td></tr>
<tr><td bgcolor=cccccc colspan="2"><img src="images/pixeltrans.gif" width=1 height=1 border="0"></td></tr>
<td class=fuente8 valign="top">
<?echo strip_tags($damefila->comentario)?>
<td valign="top" align="right" nowrap class=fuente8>
Valoracion: <?echo $damefila->valoracion?>
</td>
</tr>
</table>
<br>
<?
$num_filas++;
} //termina el bucle while
Los resultados se muestran en una tabla, por eso puede quedar un poco embarullado este código en medio de tantas etiquetas HTML, pero no reviste ninguna complicación especial.
Mostrar el enlace de vermas
Al final de la página, si había más firmas por ver, hay que mostrar el enlace de vermas. Para ello simplemente evaluamos la variable que contiene el puntero al registro actual. Si el bucle anterior finalizó porque dicho puntero había llegado al final de la lista de valores, entonces es que no hay más firmas que ver. Si por el contrario, el bucle finalizó y todavía quedaba alguna firma en el puntero es que hay que mostrar el enlace de vermas y colocar el índice de la firma que tocaría visualizar a continuación.
//si quedan más valoraciones en el conjunto de resultados, muestro el enlace de "Ver más"
if ($damefila)
echo "<div align=center><b><a href=\"index.php?vermas=$damefila->id_librovisitas_php\">Ver más mensajes</a></b></div><br>";
Mostrar el formulario de firma
Por último se debería mostrar el formulario de la firma. Nosotros lo hemos separado en un fichero aparte para que quede todo más organizado. En el código de nuestro ejercicio en esta sección, lo único que encontraremos será el include con el archivo HTML que contiene el formulario.
include ("formul_mensaje.html");
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...