Mostrando las firmas del libro de visitas

  • Por
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");

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

luis

06/11/2008
al realizar este script me salen dos errores en esta linea ---> while (($damefila=mysql_fetch_object($resultid)) && ($num_filas<10))

y esta otra ----> mysql_free_result($resultid);

podrian decirme a que se debe

glen

06/11/2008
tengo en mismo error en las lineas 44 y 79

ivan

05/11/2009
ayuda por favor
tengo el mismo error en las 2 mismas lineas..ayuda...
help me please...

conde

05/11/2009
ayudenmeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
si alguien sabe la respuesta de este error por favor ayudenme...

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:AppServwwwconde eg.php on line 55

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:AppServwwwconde eg.php on line 90

mi correo es conde.cs@hotmail.com

Silver

02/9/2010
Congrats!
Hola! felicitaciones por su pagina q Dios los bendiga!. Los invito a ver mi pagina web:
www.silver-peru.com, trabajo en la Joyeria peruana: kitapenas.com
GRACIAS!