Libro de visitas con PHP y MySQLManual por: DesarrolloWeb.com"Tu mejor ayuda para aprender a hacer webs"Introducción al li...
Esquema de funcionamiento del libro de visitas PHPVeamos el diagrama de funcionamiento de la aplicación de libro de visita...
enviado. Entonces debo registrar esta firma, aunque es muy importante que se realiceuna pequeña comprobación y arreglo de ...
la tabla. Los campos nombre y email serán de tipo cadena de texto, con 150 y 100caracteres de tamaño máximo respectivament...
Esta sentencia se construye en varias partes. Primero se crea la primera parte del select yluego otras partes más complica...
Los resultados se muestran en una tabla, por eso puede quedar un poco embarullado estecódigo en medio de tantas etiquetas ...
<br>     <input type="Text" name="email" size="20" maxlength="100">     <br>     <br>     Valoración     <br>     <select ...
Tendría como resultado que, al visualizar sui firma, se mostrase la palabra "Amigos" ennegrita. Esto no sería mucho proble...
Simplemente se hace esto para comprobar si alguno de los datos faltaba, pues en esecaso preferimos introducir un carácter ...
Próxima SlideShare
Cargando en…5
×

ubiPHP

1.497 visualizaciones

Publicado el

manual de php y mysq, manual completo

Publicado en: Educación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
1.497
En SlideShare
0
De insertados
0
Número de insertados
7
Acciones
Compartido
0
Descargas
0
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

ubiPHP

  1. 1. Libro de visitas con PHP y MySQLManual por: DesarrolloWeb.com"Tu mejor ayuda para aprender a hacer webs"Introducción al libro de visitas con PHP y MySQLAnte las numerosas peticiones de nuestros lectores de comentar un código para hacer unlibro de visitas a lo largo de la vida de este sitio, nos hemos decidido a realizar estemanual sobre la creación de un libro de visitas, programado en PHP y con base de datosMySQL.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 unpoco más generales, para que pueda servir en el mayor número de sitios web de latemática más variada.El resultado final de este ejercicio se puede ver funcionando en una página aparte. Estotalmente funcional y se puede probar para hacerse una idea exacta del objetivo delmanual.Este ejercicio se puede seguir con unos conocimientos mínimos de PHP, de modo que estáal alcance de cualquier persona que se haya iniciado en este interesante lenguaje deprogramación de páginas de servidor. No obstante, antes de comenzar, merece la penamostrar algunas referencias a manuales que nos pueden ayudar a entender los scriptstratados.Manual de PHP: http://www.desarrolloweb.com/manuales/12/Con los temas más básicos sobre la tecnología, que todos los lectores deberían 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 información se complementa con la sección PHP a Fondo, donde podemos encontrarenlaces a todos los recursos PHP disponibles en DesarrolloWeb.com.Descarga del códigoTambién ponemos a disposición del lector el código completo del ejercicio para utilizarlolibremente en sus desarrollos.Informe de Miguel Angel AlvarezDirector DesarrolloWeb.comMail: miguel@desarrolloweb.com
  2. 2. Esquema de funcionamiento del libro de visitas PHPVeamos el diagrama de funcionamiento de la aplicación de libro de visitas en PHP parahacernos una idea inicial, que completaremos más adelante con el código de cada script.Vamos a basar todo el trabajo en una misma página, que será la encargada de mostrartodas las firmas de los visitantes y recoger los datos venidos por el formulario departicipación para introducirlos en la base de datos. Esto puede complicar un poco elcódigo del ejercicio final pero veremos el script por partes para que resulte sencillo. Ahoratan sólo tenemos que entender su estructura general.ExplicaciónLa página del libro de visitas puede o no recibir datos por un formulario y dependiendo deello, debería hacer unas u otras acciones. Por tanto, lo primero que vamos a hacer esaveriguar si recibimos o no datos por el formulario.1) Si no recibe datos del formularioMuestro las últimas 10 firmas del libro de visitas. Esto lo conseguiremos con un acceso ala base de datos y un bucle que recorre los resultados de la búsqueda.En el caso de que no se reciba datos, después de mostrar las últimas firmas, debemossaber si existen o no más firmas en la base de datos para visualizar. 1.1) Si existen más firmas, muestro el mensaje para verlas. 1.2) Si no existen más firmas, no hago nada.Por último, coloco el formulario de firma para que los visitantes puedan participar.2) Si recibo datos por el formularioEsto quiere decir que el visitante ha rellenado el formulario de firma del libro y lo ha
  3. 3. enviado. Entonces debo registrar esta firma, aunque es muy importante que se realiceuna pequeña comprobación y arreglo de los datos del formulario para evitar que unusuario malicioso intente fastidiar el script insertando ciertos elementos susceptibles dearrojar errores como etiquetas HTML o PHP. Entre las comprobaciones también nosaseguraremos, por ejemplo, de que el usuario ha escrito algún dato en el formulario, peroveremos todas estas comprobaciones más 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.Informe de Miguel Angel AlvarezDirector DesarrolloWeb.comMail: miguel@desarrolloweb.comLa base de datos MySQL del libro de visitasPara el trabajo con el libro de visitas, como ya se ha apuntado, se requerirá el uso de unabase de datos. Bueno, en realidad lo que necesitaremos es contar con una tabla adicionalpara la base de datos que ya contenga tu sitio web. Referencia: El trabajo con base de datos está relatado en el manual de Programación en PHP. En el mismo manual también disponemos de algunas indicaciones prácticas que explican como dar colocar una base de datos en el servidor remoto. Por último, señalaremos que en el manual práctico del Sistema de Envío de Postales, tenemos más explicaciones sobre como crear una base de datos de manera práctica.La tabla librovisitas_phpEn este ejercicio deberemos crear una tabla con la información de las firmas. Lallamaremos 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 textEl campo id_librovisitas_php será un campo autonumérico, que será la clave primaria de
  4. 4. la tabla. Los campos nombre y email serán de tipo cadena de texto, con 150 y 100caracteres de tamaño máximo respectivamente. El campo valoración guardará unnúmero, en este caso de tamaño pequeño (tinyint) porque sólo vamos a guardar númerosdel 1 al 5. Por último el comentario, que es una cadena de texto con longitudindeterminada.La tabla la podremos crear en nuestro servidor de bases de datos con la siguientesentencia 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));Informe de Miguel Angel AlvarezDirector DesarrolloWeb.comMail: miguel@desarrolloweb.comMostrando las firmas del libro de visitasRecordando la explicación general de este ejercicio, nos acordaremos de que la página dellibro de visitas tenía dos grandes bloques, que se decidían comprobando si se recibe o noalgo 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 unformulario, es decir, la evaluación positiva del if.Extraer las últimas firmasEn este caso, lo primero a realizar es la extracción de las últimas firmas de la base dedatos. Para ello debemos construir una sentencia SQL que seleccione de la base de datosdichas 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 vermás firmasif (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);
  5. 5. Esta sentencia se construye en varias partes. Primero se crea la primera parte del select yluego 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 lavariable vermas, recibida por URL ($_GET["vermas"]). Esto viene porque en la parte dedebajo 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 propiolibro de visitas con la variable vermas igual al identificador de la próxima firma que hayaque visualizar. Algo como librovisitas/index.php?vermas=960Si habíamos recibido la variable vermas, seleccionamos tan solo las firmas que tengan elidentificador menor o igual que el índice recibido en vermas.Las firmas se deben ver en orden descendente, para que se muestren primero las últimasfirmas insertadas. Es lo que se indica en la parte que pone ORDER BY. Además se debenseleccionar 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 utilizarlopara 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 WhileSe realiza a continuación un bucle para recorrer los resultados. Es un sencillo recorridopor un conjunto de resultados de una consulta a base de datos. Tiene la particularidad deque 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
  6. 6. Los resultados se muestran en una tabla, por eso puede quedar un poco embarullado estecódigo en medio de tantas etiquetas HTML, pero no reviste ninguna complicación especial.Mostrar el enlace de vermasAl 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. Siel 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íaquedaba alguna firma en el puntero es que hay que mostrar el enlace de vermas ycolocar 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ásmensajes</a></b></div><br>";Mostrar el formulario de firmaPor último se debería mostrar el formulario de la firma. Nosotros lo hemos separado enun fichero aparte para que quede todo más organizado. En el código de nuestro ejercicioen esta sección, lo único que encontraremos será el include con el archivo HTML quecontiene el formulario.include ("formul_mensaje.html");Informe de Miguel Angel AlvarezDirector DesarrolloWeb.comMail: miguel@desarrolloweb.comEl formulario para firmar el libro de visitasEl código del formulario para que los visitantes puedan incluir su firma en el libro devisitas 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> Déjanos tu mensaje en el libro de visitas y danos tu opinión del sitio <br> <br> </td></tr><tr> <td> <table width="100%" cellspacing="0" cellpadding="0" border="0"> <tr> <td class=fuente8 align="center"> Nombre <br> <input type="Text" name="nombre" size="20" maxlength="150"> <br> <br> Email
  7. 7. <br> <input type="Text" name="email" size="20" maxlength="100"> <br> <br> Valoración <br> <select name="valoracion"> <option value=1>Repelente <option value=2>Mal <option value=3 selected>Regular <option value=4>Bien <option value=5>Fantástica </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 complicación para entenderlo. Simplemente deberemos conocer unpoco la forma de crear formularios HTML.Informe de Miguel Angel AlvarezDirector DesarrolloWeb.comMail: miguel@desarrolloweb.comComprobar si los datos recibidos son correctosLa otra parte del script del libro de visitas en PHP que nos queda por comentar contiene lacodificación de las acciones a tomar en caso de que sí se reciban datos del formulario.Dichas acciones son básicamente comprobar si los datos son correctos y, si así es,insertar la información en la base de datos.Las comprobaciones sirven para asegurarnos que la información introducida va a sersiempre válida, para que las firmas se muestren perfectamente. Determinadasinformaciones podrían dar lugar a errores al introducir la información en la base de datoso a la hora de mostrar las firmas en la página.Eliminar las etiquetas HTML o PHPEs muy importante borrar toda etiqueta HTML o PHP del texto de los campos introducidospor el visitante. Si un visitante colocase este comentario:Hola <b>Amigos</b>
  8. 8. Tendría como resultado que, al visualizar sui firma, se mostrase la palabra "Amigos" ennegrita. Esto no sería mucho problema, pero si se puede incluir una etiqueta así, tambiénnos podrían colar enlaces, imágenes o determinados elementos que pudieran descolocarla página, cambiar nuestros estilos habituales o incluir scripts que pudieran molestar aotros visitantes o a los administradores del sitio web.//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 largasPara no intentar introducir textos en la base de datos que en realidad no caben, recortolos textos hasta su tamaño máximo.//Cortamos las cadenas demasiado largas$nombre=substr($nombre,0,150);$email=substr($email,0,80);Comprobamos que el visitante ha rellenado algoTambién debemos comprobar que todos los campos introducidos no están vacíos, porqueen ese caso querría decir que el usuario está tratando de firmar con ningún dato sobre sunombre 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 envío</b>.<br><br>Te agradeceríamos, no obstante y si no resultamucho esfuerzo, que rellenases alguno de los campos para dejar constancia de tu visita.</div><?}?>Si no había rellenado nada mostramos un mensaje advirtiéndolo. En el caso contrario, esdecir, si todo era correcto, inserto en la base de datos la información.Informe de Miguel Angel AlvarezDirector DesarrolloWeb.comMail: miguel@desarrolloweb.comInserto los datos en la base de datosSi todas las comprobaciones fueron correctas, se introduce en la base de datos del librode visitas la información recibida como firma.Pero antes se realizará un pequeño ajuste adicional de los datos a introducir.//si alguno de los campos falta prefiero colocar un guión o "sin comentarios"if (!$nombre)$nombre="-";if (!$email) $email="-";if (!$comentario) $comentario="Sin comentarios";
  9. 9. Simplemente se hace esto para comprobar si alguno de los datos faltaba, pues en esecaso preferimos introducir un carácter o texto especial en lugar de introducir un stringvacío.Por cierto, la variable que guarda la valoración de la página no hace falta comprobarla enteoría, porque siempre la recibiremos bien, ya que el formulario contiene este valor en uncampo SELECT de HTML, donde siempre se selecciona un valor válido introducido por elusuario, 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 delformulario. La sentencia de inserción se realizará concatenando los datos del formulariocon la propia sentencia SQL. Referencia: Puede ser interesante para personas sin experiencia repasar el artículo donde se explican las inserciones en base de datos. Este artículo está englobado en el Manual de PHP de DesarrolloWeb.com. Asímismo, también queremos señalar 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 librode visitas.<div align="center"><b>Muchas gracias por tu participación</b></div>El código completo del ejercicio se puede descargar aquí.Se puede ver en marcha aquí.Informe de Miguel Angel AlvarezDirector DesarrolloWeb.comMail: miguel@desarrolloweb.com

×