Está en la página 1de 8

24/11/13 Libro de visitas con PHP y MySQL - Manual completo

www.desarrolloweb.com/manuales/44/imprimir.php 1/8
Libro de visitas con PHP y
MySQL
Manual por: DesarrolloWeb.com
"Tu mejor ayuda para aprender a hacer webs"
Versin on-line:
http://www.desarrolloweb.com/manuales/44
Introduccin al libro de visitas con PHP y MySQL
Ante las numerosas peticiones de nuestros lectores de comentar un cdigo para hacer un libro de
visitas a lo largo de la vida de este sitio, nos hemos decidido a realizar este manual sobre la creacin
de un libro de visitas, programado en PHP y con base de datos MySQL.
Es un libro de visitas muy similar al que utilizamos en DesarrolloWeb, en la URL:
desarrolloweb.com/librovisitas/, simplificado un poco y con unos campos de formulario un poco ms
generales, para que pueda servir en el mayor nmero de sitios web de la temtica ms variada.
El resultado final de este ejercicio se puede ver funcionando en una pgina aparte. Es totalmente
funcional y se puede probar para hacerse una idea exacta del objetivo del manual.
Este ejercicio se puede seguir con unos conocimientos mnimos de PHP, de modo que est al
alcance de cualquier persona que se haya iniciado en este interesante lenguaje de programacin
de pginas de servidor. No obstante, antes de comenzar, merece la pena mostrar algunas
referencias a manuales que nos pueden ayudar a entender los scripts tratados.
Manual de PHP: http://www.desarrolloweb.com/manuales/12/
Con los temas ms bsicos sobre la tecnologa, que todos los lectores deberan conocer.
Taller de MySQL: http://www.desarrolloweb.com/manuales/34/
Con ayudas para trabajar con el gestor de base de datos utilizado en este ejemplo.
La informacin se complementa con la seccin PHP a Fondo, donde podemos encontrar enlaces a
todos los recursos PHP disponibles en DesarrolloWeb.com.
Esquema de funcionamiento del libro de visitas PHP
Veamos el diagrama de funcionamiento de la aplicacin de libro de visitas en PHP para hacernos una
idea inicial, que completaremos ms adelante con el cdigo de cada script.
Vamos a basar todo el trabajo en una misma pgina, que ser la encargada de mostrar todas las
firmas de los visitantes y recoger los datos venidos por el formulario de participacin para
introducirlos en la base de datos. Esto puede complicar un poco el cdigo del ejercicio final pero
veremos el script por partes para que resulte sencillo. Ahora tan slo tenemos que entender su
estructura general.
24/11/13 Libro de visitas con PHP y MySQL - Manual completo
www.desarrolloweb.com/manuales/44/imprimir.php 2/8
Explicacin
La pgina del libro de visitas puede o no recibir datos por un formulario y dependiendo de ello,
debera hacer unas u otras acciones. Por tanto, lo primero que vamos a hacer es averiguar si
recibimos o no datos por el formulario.
1) Si no recibe datos del formulario
Muestro las ltimas 10 firmas del libro de visitas. Esto lo conseguiremos con un acceso a la base
de datos y un bucle que recorre los resultados de la bsqueda.
En el caso de que no se reciba datos, despus de mostrar las ltimas firmas, debemos saber si
existen o no ms firmas en la base de datos para visualizar.
1.1) Si existen ms firmas, muestro el mensaje para verlas.
1.2) Si no existen ms firmas, no hago nada.
Por ltimo, coloco el formulario de firma para que los visitantes puedan participar.
2) Si recibo datos por el formulario
Esto quiere decir que el visitante ha rellenado el formulario de firma del libro y lo ha enviado.
Entonces debo registrar esta firma, aunque es muy importante que se realice una pequea
comprobacin y arreglo de los datos del formulario para evitar que un usuario malicioso intente
fastidiar el script insertando ciertos elementos susceptibles de arrojar errores como etiquetas
HTML o PHP. Entre las comprobaciones tambin nos aseguraremos, por ejemplo, de que el usuario
ha escrito algn dato en el formulario, pero veremos todas estas comprobaciones ms tarde.
2.1) Si los datos eran correctos
Si todas las comprobaciones fueron positivas, introduciremos los datos en el
formulario y daremos las gracias al visitante por firmar el libro
2.2) Si los datos no eran correctos
Advertiremos al visitante que debe rellenar los campos correctamente.
24/11/13 Libro de visitas con PHP y MySQL - Manual completo
www.desarrolloweb.com/manuales/44/imprimir.php 3/8
La base de datos MySQL del libro de visitas
Para el trabajo con el libro de visitas, como ya se ha apuntado, se requerir el uso de una base
de datos. Bueno, en realidad lo que necesitaremos es contar con una tabla adicional para la base
de datos que ya contenga tu sitio web.
Referencia: El trabajo con base de datos est relatado en el manual de Programacin en PHP. En el
mismo manual tambin disponemos de algunas indicaciones prcticas que explican como dar colocar
una base de datos en el servidor remoto.
Por ltimo, sealaremos que en el manual prctico del Sistema de Envo de Postales, tenemos ms
explicaciones sobre como crear una base de datos de manera prctica.
La tabla librovisitas_php
En este ejercicio deberemos crear una tabla con la informacin de las firmas. La llamaremos
librovisitas_php y contendr los siguientes campos:
Nombre del campo Tipo
Id_librovisitas_php int(11)
nombre varchar(150)
email varchar(100)
valoracion tinyint(4)
comentario text
El campo id_librovisitas_php ser un campo autonumrico, que ser la clave primaria de la tabla.
Los campos nombre y email sern de tipo cadena de texto, con 150 y 100 caracteres de tamao
mximo respectivamente. El campo valoracin guardar un nmero, en este caso de tamao
pequeo (tinyint) porque slo vamos a guardar nmeros del 1 al 5. Por ltimo el comentario, que
es una cadena de texto con longitud indeterminada.
La tabla la podremos crear en nuestro servidor de bases de datos con la siguiente sentencia
Crearte Table:
CREATE TABLE librovisitas_php (
id_librovisitas_php int(11) unsigned NOT NULL auto_increment,
nombre varchar(150) NOT NULL,
email varchar(100) NOT NULL,
valoracion tinyint(4),
comentario text,
PRIMARY KEY (id_librovisitas_php)
);
Mostrando las firmas del libro de visitas
Recordando la explicacin general de este ejercicio, nos acordaremos de que la pgina del libro de
visitas tena dos grandes bloques, que se decidan 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 evaluara con resultado positivo. Prestar
atencin a la negacin para entender la correcta evaluacin del if.
En este captulo vamos a relatar la parte del if en la que no se reciben datos por un formulario, es
24/11/13 Libro de visitas con PHP y MySQL - Manual completo
www.desarrolloweb.com/manuales/44/imprimir.php 4/8
decir, la evaluacin positiva del if.
Extraer las ltimas firmas
En este caso, lo primero a realizar es la extraccin 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 mostrarn las ltimas firmas, aunque habr un enlace en la parte de abajo que se podr pulsar para ver
ms 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 ms complicadas de ver.
Ser necesario un inciso para entender la parte en la que se evala 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 ms firmas de las que se hayan mostrado, se colocara un enlace
para ver ms firmas, que contendra una referencia a este propio libro de visitas con la variable
vermas igual al identificador de la prxima firma que haya que visualizar. Algo como
librovisitas/index.php?vermas=960
Si habamos 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. Adems se deben seleccionar tan
solo 10 firmas por pgina, aunque en la prctica seleccionaremos 11, aunque la ltima no se
mostrar, slo 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 lnea se ejecuta la sentencia SQL para extraer los datos.
Bucle While
Se realiza a continuacin 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 ms.
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 "Annimo"
if ($damefila->nombre == "-"){
echo "Annimo";
}elseif ($damefila->email != "-") {
echo '<a href="mailto:' . $damefila->email . '">' . $damefila->nombre . '</a>';
}else{
echo $damefila->nombre;
}
24/11/13 Libro de visitas con PHP y MySQL - Manual completo
www.desarrolloweb.com/manuales/44/imprimir.php 5/8
?></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 cdigo
en medio de tantas etiquetas HTML, pero no reviste ninguna complicacin especial.
Mostrar el enlace de vermas
Al final de la pgina, si haba ms 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 haba llegado al final de la lista de valores, entonces es que no hay
ms firmas que ver. Si por el contrario, el bucle finaliz y todava quedaba alguna firma en el
puntero es que hay que mostrar el enlace de vermas y colocar el ndice de la firma que tocara
visualizar a continuacin.
//si quedan ms valoraciones en el conjunto de resultados, muestro el enlace de "Ver ms"
if ($damefila)
echo "<div align=center><b><a href=\"index.php?vermas=$damefila->id_librovisitas_php\">Ver ms
mensajes</a></b></div><br>";
Mostrar el formulario de firma
Por ltimo se debera mostrar el formulario de la firma. Nosotros lo hemos separado en un fichero
aparte para que quede todo ms organizado. En el cdigo de nuestro ejercicio en esta seccin, lo
nico que encontraremos ser el include con el archivo HTML que contiene el formulario.
include ("formul_mensaje.html");
El formulario para firmar el libro de visitas
El cdigo del formulario para que los visitantes puedan incluir su firma en el libro de visitas es el
siguiente.
<form name=librovisitas action="index.php" method="post">
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td class=titcol> <b>Firma el Libro de Visitas</b></td>
</tr>
<tr>
<td class=fuente8> Djanos tu mensaje en el libro de visitas y danos tu opinin del sitio
<br>
<br>
</td>
</tr>
<tr>
<td>
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td class=fuente8 align="center">
Nombre
24/11/13 Libro de visitas con PHP y MySQL - Manual completo
www.desarrolloweb.com/manuales/44/imprimir.php 6/8
<br>
<input type="Text" name="nombre" size="20" maxlength="150">
<br>
<br>
Email
<br>
<input type="Text" name="email" size="20" maxlength="100">
<br>
<br>
Valoracin
<br>
<select name="valoracion">
<option value=1>Repelente
<option value=2>Mal
<option value=3 selected>Regular
<option value=4>Bien
<option value=5>Fantstica
</select>
</td>
<td ALIGN=CENTER class=fuente8 valign="middle">
Comentarios:
<br>
<textarea name="comentario" cols="30" rows="7"></textarea>
</td>
</tr>
<tr>
<td colspan=2 align=center class=fuente8>
<br>
<input type="submit" value=" Enviar la firma al libro de visitas ">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
No reviste ninguna complicacin para entenderlo. Simplemente deberemos conocer un poco la
forma de crear formularios HTML.
Comprobar si los datos recibidos son correctos
La otra parte del script del libro de visitas en PHP que nos queda por comentar contiene la
codificacin de las acciones a tomar en caso de que s se reciban datos del formulario. Dichas
acciones son bsicamente comprobar si los datos son correctos y, si as es, insertar la informacin
en la base de datos.
Las comprobaciones sirven para asegurarnos que la informacin introducida va a ser siempre
vlida, para que las firmas se muestren perfectamente. Determinadas informaciones podran dar
lugar a errores al introducir la informacin en la base de datos o a la hora de mostrar las firmas en
la pgina.
Eliminar las etiquetas HTML o PHP
Es muy importante borrar toda etiqueta HTML o PHP del texto de los campos introducidos por el
visitante. Si un visitante colocase este comentario:
Hola <b>Amigos</b>
Tendra como resultado que, al visualizar sui firma, se mostrase la palabra "Amigos" en negrita.
Esto no sera mucho problema, pero si se puede incluir una etiqueta as, tambin nos podran colar
enlaces, imgenes o determinados elementos que pudieran descolocar la pgina, cambiar nuestros
estilos habituales o incluir scripts que pudieran molestar a otros visitantes o a los administradores
del sitio web.
24/11/13 Libro de visitas con PHP y MySQL - Manual completo
www.desarrolloweb.com/manuales/44/imprimir.php 7/8
//eliminamos las etiquetas HTML y PHP de las cadenas de texto
$nombre = strip_tags($_POST["nombre"]);
$email = strip_tags($_POST["email"]);
$comentario = strip_tags($_POST["comentario"]);
Cortamos las cadenas demasiado largas
Para no intentar introducir textos en la base de datos que en realidad no caben, recorto los
textos hasta su tamao mximo.
//Cortamos las cadenas demasiado largas
$nombre=substr($nombre,0,150);
$email=substr($email,0,80);
Comprobamos que el visitante ha rellenado algo
Tambin debemos comprobar que todos los campos introducidos no estn vacos, porque en ese
caso querra decir que el usuario est tratando de firmar con ningn dato sobre su nombre o
comentarios del web y no deseamos que eso ocurra.
<?
if (strlen($nombre)==0 and strlen($email)==0 and strlen($comentario)==0)
{
?>
<div align="center"><b>Gracias por el envo</b>.<br><br>Te agradeceramos, no obstante y si no resulta
mucho esfuerzo, que rellenases alguno de los campos para dejar constancia de tu visita.</div>
<?
}
?>
Si no haba rellenado nada mostramos un mensaje advirtindolo. En el caso contrario, es decir, si
todo era correcto, inserto en la base de datos la informacin.
Inserto los datos en la base de datos
Si todas las comprobaciones fueron correctas, se introduce en la base de datos del libro de visitas la
informacin recibida como firma.
Pero antes se realizar un pequeo ajuste adicional de los datos a introducir.
//si alguno de los campos falta prefiero colocar un guin o "sin comentarios"
if (!$nombre)$nombre="-";
if (!$email) $email="-";
if (!$comentario) $comentario="Sin comentarios";
Simplemente se hace esto para comprobar si alguno de los datos faltaba, pues en ese caso
preferimos introducir un carcter o texto especial en lugar de introducir un string vaco.
Por cierto, la variable que guarda la valoracin de la pgina no hace falta comprobarla en teora,
porque siempre la recibiremos bien, ya que el formulario contiene este valor en un campo SELECT
de HTML, donde siempre se selecciona un valor vlido introducido por el usuario, entre los
posibles, que los define el programador de dicho campo SELECT.
Luego se debe de codificar una sentencia SQL con un INSERT con los datos del formulario. La
sentencia de insercin se realizar concatenando los datos del formulario con la propia sentencia
SQL.
Referencia: Puede ser interesante para personas sin experiencia repasar el artculo donde se
explican las inserciones en base de datos. Este artculo est englobado en el Manual de PHP de
DesarrolloWeb.com.
24/11/13 Libro de visitas con PHP y MySQL - Manual completo
www.desarrolloweb.com/manuales/44/imprimir.php 8/8
Asmismo, tambin queremos sealar que para iniciarse en el lenguaje SQL tenemos publicado un
Tutorial de SQL.
//Generamos la ssql e insertamos el registro
$ssql = "INSERT INTO librovisitas_php (nombre,email,valoracion,comentario) VALUES ('" . $nombre . "','" .
$email . "'," . $_POST["valoracion"] . ",'" . $comentario . "')";
mysql_query($ssql,$conn);
Por ltimo se muestra un mensaje dando las gracias al visitante que ha firmado el libro de visitas.
<div align="center"><b>Muchas gracias por tu participacin</b></div>
El cdigo completo del ejercicio se puede descargar aqu.
Se puede ver en marcha aqu.
Autores del manual:
Hay que agradecer a diversas personas la dedicacin prestada para la creacin de este manual.
Sus nombres junto con el nmero de artculos redactados por cada uno son los siguientes:
Miguel Angel Alvarez
Director de DesarrolloWeb.com y EscuelaIT
http://www.desarrolloweb.com
(7 captulos)
Todos los derechos de reproduccin y difusin reservados a Guiarte Multimedia S.L.
Volver