May
31
2008

Como hacer un libro de visitas sencillo, usando PHP y MySQL

Hoy les traigo otro ejemplo bien sencillo que nos puede servir de base para hacer cosas mas complicadas y de calidad. Esta vez es un libro de visitas y veras que fácil sera de realizar.

Para lograr nuestro objetivo final, tenemos que crear una base de datos (libro_visitas), la cual contendrá una tabla de nombre firmas y un archivo php, uno solo, al que llamaremos libro-visitas.php.

La base de datos MySQL:

La tabla que les pongo de ejemplo, solo tiene tres campos: (firma_ID, usuario y firma).

CREATE TABLE `firmar` (
`firma_ID` int(11) NOT NULL auto_increment,
`usuario` varchar(25) NOT NULL,
`firma` text NOT NULL,
PRIMARY KEY (`firma_ID`)
) ENGINE=MyISAM ;

NOTA: Como es lógico, puedes agregar mas campos, dependiendo de lo que quieras logras, por ejemplo e-mail, sitio web, fecha, hora y aprobado (si, no), pero ese ya es tu trabajo ;)

El archivo libro-visitas.php:

En este archvo, claro esta, tendremos un formulario HTML mediante el cual, el usuario registrara su firma en nuesto libro de visitas, lo validaremos para que no nos envien campos vacios e insertaremos los registros a la base de datos, y tambien mostraremos las firmas ya guardadas.

<?php
/* conexion ****************/
// conectamos al servidor MySQL
$link = mysql_connect('localhost', 'root', '');
if(!$link) {
die("Error al intentar conectar: ".mysql_error());
}
// seleccionamos la base de datos
$db_link = mysql_select_db('libro_visitas', $link);
if(!$db_link) {
die("Error al intentar seleccionar la base de datos". mysql_error());
}
/* fin conexion ************/
/* prosesamiento de los datos */
// verificamos si ha sido enviado el formulario
if(isset($_POST['enviar']) && $_POST['enviar'] == 'Enviar'){
// verificamos que el formulario
// no venga vacio
if(!empty($_POST['usuario']) && !empty($_POST['firma'])){
// creamos las variables a usar en la consulta
// y le asignamos sus valores
$usuario = htmlentities(trim($_POST['usuario']));
$firma = htmlentities(trim($_POST['firma']));
// la consulta INSERT
$sqlInsert = mysql_query("INSERT INTO firmar (usuario, firma)
VALUES ('$usuario', '$firma')", $link)
or die(mysql_error());
}else{
echo "Debe llenar todos los campos";
}
}
/* fin del proseso de datos */
/* mostrando los registros (firmas) */
$sqlQuery = mysql_query("SELECT * FROM firmar", $link)
or die(mysql_error());
$totalFirmas = mysql_num_rows($sqlQuery);
// verificamos si hay
// alguna firma registrada,
// de lo contrario enviamos un mensaje
if($totalFirmas == 0){
echo "Nadie se ha animado a firmar este libro :(";
}
// si hay firmas registradas
// las mostramos
else{
while($row = mysql_fetch_array($sqlQuery)){
echo "<p><b>$row[usuario]</b> dijo:<br />". nl2br($row['firma']) ."</p><hr />";
}
}
?>
<!-- el formulario -->
<form name="html" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<p>
Usuario:<br />
<input type="text" name="usuario" />
</p>
<p>
Firma:<br />
<textarea name="firma" cols="35" rows="7"></textarea>
</p>
<input type="submit" name="enviar" value="Enviar" />
</form>

NOTA: Fijense bien en el uso de las funciones de cadena htmlentities y de trim, con ellas evitamos que nos inserten codigo HTML y nos dejen espacios en blanco al comienzo y final de las cadenas de texto enviadas por los usuarios.

Para terminar:

Espero que este ejemplo les sirva para sus trabajos y de impulso a quienes se inician. Siempre trato de no complicar mucho los códigos, para que se puedan entender bien los objetivos finales (además, que no me da pa mucho mas lo que se :/). Queda de parte de los lectores crecerce en base a esto y esforsarce para lograr un producto final mucho mejor, yo solo quiero darles una idea, una referencia y creo que lo he logrado.

A ver si se me ocurre alguna otra cosa en los próximos dias.

Saludos y Suerte

Post relacionados

Escrito por rogertm en: Tutoriales | Tags: , , , ,

52 Comentarios »

  • Esto es el campo de prueba para el codigo de arriba? no entiendo mucho, aver provemos!

    Comment | June 23, 2008
  • nestor

    haber como es esto

    Comment | June 25, 2008
  • Me gusta el funcionamiento de este libro de visitas es muy practico y atractivo visualmente.
    Espero ayudar a enriquecerlo. Mucha Suerte.

    Comment | June 25, 2008
  • Hola @Oscar Marquez, cualquier aporte siempre será bien recibido ;-)

    Saludos y Suerte

    Comment | June 26, 2008
  • angie anrea

    esta super pero le falta un poco mas de texto bay

    Comment | July 1, 2008
  • OLI

    hola el diseño de su sitio esta bien

    Comment | July 2, 2008
  • marco joni

    hola este ejemplo esta muy bueno, espero que…

    Comment | July 2, 2008
  • ola, muy bueno eso, aunke no entiendo ni maizzz…

    oie no sabes de un buen curso de php y mysql ke ande por la red??

    eske kiero aprender..

    :D:D:D

    Comment | July 11, 2008
  • Uge

    Cuando empieza el cole

    Comment | July 15, 2008
  • @Uge, la escuela comienza en Septiembre, claro… o esto es spam? :\

    Comment | July 15, 2008
  • Haber si funcionaaaaaa!!!!!!!!!!

    Comment | July 16, 2008
  • Hola, muy bueno eso, sabes como hacer para que se vean las fotos? como en metroflog o myspace

    Comment | July 29, 2008
  • NO ENTIENDO NADA DE COMO ASER EL LIBRO DE VISITA AYUDEME PORFABOR MSN luiskaler@hotmail.com

    Comment | August 8, 2008
  • estoy probando el libro gracias por la ayuda

    Comment | September 5, 2008
  • luis

    esta muy bien diseñado

    Comment | September 16, 2008
  • Ayuda , my sale error
    Parse error: syntax error, unexpected T_STRING in /home/www/marcelotaripha.atwebpages.com/172851_taripha.html on line 6

    Comment | October 8, 2008
  • Hola @taripha, debes revisar las conillas, por ahi debe estar el error ;-)

    Comment | October 9, 2008
  • Pablo

    Hola, el código está buenísimo. Sólo tengo dos dudas. Cómo puedo hacer para que sólo almacene 100 comentarios la base de datos (para que no se haga muy pesado cada vez que cargo la página) y por último, cómo valido tildes, letra ñ, y demases??? Un saludo y gracias

    Comment | October 12, 2008
  • Hola @Pablo. Para que te almacene solo 100 comentarios, creo que debes crear un Cron Job en tu servidor y que se ejecute un script que elimine los registros cuando estos excedan los 100.

    Para validar de la forma que quieres, me parece que seria correcto usar expresiones regulares

    Saludos y gracias por visitar mi Blog ;)

    Comment | October 13, 2008
  • muy bueno, el tuto q presentaaa, muchas gracias

    Comment | October 17, 2008
  • alberto

    hola

    Comment | October 20, 2008
  • @alberto eh… que tal?

    Comment | October 21, 2008
  • pako.O

    ahm!!! algun codigo para que, nose… cuando alla 10 firmas genere paginas.

    Comment | November 5, 2008
  • @pako.O puedes usar PHPPaging (Recomendado)

    Comment | November 6, 2008
  • jonathan

    Disculpa pana creando la tabla me sale:

    CREATE TABLE `libro_visitas` (

    `firma_id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
    `usuario` VARCHAR( 25 ) NOT NULL ,
    `firma` TEXT NOT NULL ,
    PRIMARY KEY ( `firma` )
    ) ENGINE = MYISAM

    MySQL ha dicho:

    #1170 - BLOB/TEXT column ‘firma’ used in key specification without a key length

    …….que aho viejo? te agradezco tu respuesta

    Comment | November 28, 2008
  • @jonathan fíjate que tienes mal esa línea, donde dice PRIMARY KEY ( `firma` ) debe ser PRIMARY KEY ( `firma_id` )

    saludos y suerte

    Comment | December 2, 2008
  • Hola  rogertm,
    he visto este libro de visitas y lo he hecho sin ningún problema. Te agradezco que lo hayas publicado.

    Me gustaría insertar la fecha en la que se hace la firma en el libro de visitas, cómo puedo hacerlo?

    Gracias por tu atención.

    Comment | January 31, 2009
  • Hola @maria jose, lo puedes hacer creando un nuevo campo en tu base de datos con nombre fecha, pones esto en el codigo de creacion de la BD: `fecha` timestamp NOT NULL default CURRENT_TIMESTAMP,.

    En este caso uso tiemstamp para que registre automáticamente fecha y hora, luego lo muestras en tu código PHP como mismo haces con los demas campos

    Saludos y suerte con eso

    Comment | February 2, 2009
  • Y para que no salga la hora minutos y segundos que debo hacer.

    Gracias por tu atención

    Comment | February 6, 2009
  • Solo asi: <?php echo “$row[fecha]” ?>

    Comment | February 6, 2009
  • Deiby

    Esta excelente el libro, es perfecto, asi es q me gustan los php, felicitaciones… sobre todo para q uno mismo los ponga en sus paginas con el diseño q uno quiera, y mejor aun, lo trabaje uno mismo y aprenda de manera muy chevere….

    seria bueno q hicieras unos articulos refentes a este, donde explicaras como se podrian agregar mas campos (principalmente para esto) pero q se viera como una continuacion o un añadido de este,…bueno, realmente espero algo tan claro y tan sencillo pero tam bacano como esto para agregarle mas campos y quizas mas funciones (pero lo idel es q esten en articulos separados creo yo)
     en fin muchas gracias y de nuevo felicitaciones… y q pena si me paso de exigente… jejee hasta pronto…

    Comment | February 20, 2009
  • juancho

    Lo pruebo y te aviso, esta super interesante para mi que estoy en mis primeros pasos con php, gracias!!

    Comment | April 14, 2009
  • Hola rogertm: He usado tu script como base para hacer el libro de visitas de mi página y ha quedado muy bien. Gracias por poner tus conocimientos al servicio de todos. 
    Saludos.
          

    Comment | April 17, 2009
  • este codigo esta bien chido carnal hechale ganas todo bien

    Comment | May 5, 2009
  • cesar

    todo bien hermano el codigo esta de lo mejor saludos

    Comment | May 5, 2009
  • pedro

    Prueba de correo

    Comment | June 8, 2009
  • Hola Roger, me gustaría hacer algo para que mi usuarios puedan comentar el artículo, analisis o lo que sea. Me gustaría saber si esto valdría.
    Saludos

    Comment | June 25, 2009
  • hola que tal roger, sabes tus ejemplos me han servido bastante, sobre todo los he logrado montar en las webs que he hecho, explicas muy bien, te lo agradesco mucho. Ahora te vengo con una duda,  en el libro de visitas cuando en el textarea escribo letras continuas por ejemplo asi: gggggggggggggggggggggggggggggggggggg si se escriben muchas asi se desborda la pagina, como puedo evitar eso, agradeceria que me ayudaras.

    Comment | July 16, 2009
  • @koferito eso lo resuelves con una linea de CSS, asi:

    textarea{overflow: auto;}

    Saludos y gracias por leer mi Blog :)

    Comment | July 17, 2009
  • hola roger, respecto a lo que te comente anteriormente, yo lo tengo de esta manera en el textarea: style=”overflow: auto;” pero yo decia que si alguien escribe muchos caracteres juntos: ggggggggggggg etc y le da enviar, se muestra pero desborda la pagina , el texto se sale de la estructura y desacomoda el diseño, no se si se corrija con codigo php, espero me puedas ayudar, estoy agradecido por tus prontas respuestas, gracias.

    Comment | July 17, 2009
  • oliver

    Hola este sistema esta muy bueno sirve perfectamente porque realmente he visto algunos otros y complican mucho las cosas esto es ejemplo de que se pueden hacer grandes cosas con poco codigo supongo muy bueno hermano te FELICITO sirve perfecto =)

    Comment | July 25, 2009
  • Jesus

    hola amigo la verdad soy muy novato en esto y solo se crear el formulario incluso ya aprendi a crear la base de datos y las tablas pero no se como unir el formulario a la tabla y sigo tus instrucciones pero cuando mando lo escrito me dice que no encuentra  una pagina en el servidor en fin como veras disculpa pero soy my pero muy novato en esto. Saludos

    Comment | July 29, 2009
  • Querido amigo me da el siguiente error, las cosas que tuve que variar fue que el servidor de Cpanel me asigna la base cuyo nombre comienza por corazon por lo tanto quedo corazon_visitas y no libro_visitas pero eso yo lo cambie en el codigo ademas otra cosa le aplique una plantilla a la pagina pero no creo que eso importe

    este es el error:

    Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘root’@'localhost’ (using password: NO) in /home/corazon/public_html/libro-visitas.php on line 248
    Error al intentar conectar: Access denied for user ‘root’@'localhost’ (using password: NO)

    Comment | August 24, 2009
  • facon

    Pues que si escribo ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg pues desajusta todo. Como evitarlo?

    Comment | November 1, 2009
  • ulises

    es una prueba de comentario

    Comment | November 2, 2009
  • exelente amigo era justo lo que buscaba ya lo tengo instalado y tambien el buscador  que buena pagina!

    Comment | November 12, 2009
  • gj,gh,gh,gh,f

    Comment | November 19, 2009
  • hola estoy probando esto

    Comment | November 25, 2009
  • qw

    qw

    Comment | December 15, 2009
  • hola a ver que tal
     

    Comment | December 29, 2009
  • seva

    hola esta muy, lo hice y anda re bien, el tema es que cuando hago un recargar en la pagina se carga el mensaje que habia puesto anteriomente. pero bueno no importa mi pregunta es como hago para que tenga la barra como esa, osea que tenga negrita, cursiba y todo eso que tiene esto? gracias

    Comment | February 2, 2010
  • Muy buen ejemplo para lo que estamos empezando.

    Gracias

    Comment | February 19, 2010

RSS feed para comentarios en este post. TrackBack URL

Comentar

Kilómetro Cero - RogerTM @ Bloggers Cuba
Powered by WordPress. Theme: TheBuckmaker. Insolvenz Konkurs, Autor werden
Modificado por: RogerTM para Kilómetro Cero

Kilómetro Cero es un Blog muy Cool para Internet Explorer