PHP MySQL Tutorial
Learn PHP and MySQL

Creating A Guestbook Using PHP and MySQL

66% of people found this useful
Creating A Guestbook Using PHP and MySQL

You've seen it at least once right? Guestbook is one of the most common thing to find in a website. In this tutorial we'll create a guestbook using PHP and MySQL.

I have split this tutorial into two section, each covering a specific feature of the guestbook.

  • Creating The Sign-Guestbook Form
    This part will cover creating the database tables, the guestbook form and the process of saving the entry to database
  • Viewing The Entries
    You want to see the guestbook entries of course. This section covers fetching the entries from database and put int into an HTML table. You will also learn to show the entries in multiple pages using MySQL paging.
  • <!--li> Guestbook Admin
    This is the page where you can delete unwanted entries.</li-->

I think you should take a quick look what the finished guestbook look like. Just click here to see it.

 

Creating The Sign-Guestbook Form

We start by creating the table to store the data, guestbook. There are six fields in the guestbook table:

1. id : the unique identifier for an entry in the guestbook
2. name : the visitor's name
3. email : visitor's email address
4. url : visitor's website url, if she has one
5. message : the message
6. entry_date : when did this entry added

 

I have put the SQL query needed to create the table in guestbook.txt.

Below is the HTML form code. It's pretty simple, we have text box for name, email and url plus a textarea to hold the message. The submit button is attached with a javascript function because we want to check the input values before the page is submitted.

Example :guestbook.php
Source code : guestbook.phps, guestbook.txt

<form method="post" name="guestform">
<table width="550" border="0" cellpadding="2" cellspacing="1">
<tr>
<td width="100">Name *</td> <td>
<input name="txtName" type="text" size="30" maxlength="30"></td>
</tr>
<tr>
<td width="100">Email</td>
<td>
<input name="txtEmail" type="text" size="30" maxlength="50"></td>
</tr>
<tr>
<td width="100">Website URL</td>
<td>
<input name="txtUrl" type="text" value="http://" size="30" maxlength="50"></td>
</tr>
<tr>
<td width="100">Message *</td> <td>
<textarea name="mtxMessage" cols="80" rows="5"></textarea></td>
</tr>
<tr>
<td width="100">&nbsp;</td>
<td>
<input name="btnSign" type="submit" value="Sign Guestbook" onClick="return checkForm();"></td>
</tr>
</table>
</form>

Below is the javascript code to check the input form. The checkForm() function is called when the "Sign Guestbook" button is clicked.

The mandatory fields are name and message so if either is empty we pop an alert box to tell the visitor to enter the name and message. Email is not a mandatory field so we only check if in an email address is entered but we won't complain if there's none .

function checkForm()
{
   // the variables below are assigned to each
   // form input
   var gname, gemail, gurl, gmessage;

   with(window.document.guestform)
   {
      gname    = txtName;
      gemail   = txtEmail;
      gurl     = txtUrl;
      gmessage = mtxMessage;
   }

   // if name is empty alert the visitor
   if(trim(gname.value) == '')
   {
      alert('Please enter your name');
      gname.focus();
      return false;
   }
   // alert the visitor if email is empty or
   // if the format is not correct
   else if(trim(gemail.value) != '' && !isEmail(trim(gemail.value)))
   {
      alert('Please enter a valid email address or leave it blank');
      gemail.focus();
      return false;
   }
   // alert the visitor if message is empty
   else if(trim(gmessage.value) == '')
   {
      alert('Please enter your message');
      gmessage.focus();
      return false;
   }
   else
   {
      // when all input are correct
      // return true so the form will submit
      return true;
   }
}

/*
Strip whitespace from the beginning and end of a string
*/
function trim(str)
{
   return str.replace(/^\s+|\s+$/g,'');
}

/*
   Check if a string is in valid email format.
*/
function isEmail(str)
{
var regex = /^[-_.a-z0-9]+@(([-a-z0-9]+\.)+(ad|ae|aero|af|ag|
ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|
bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|
ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|
ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|
gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|
il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|
kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|
ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|
ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|
pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|
si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|
tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|
vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2]
[0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2]
[0-4][0-9]|[2][5][0-5]))$/i;
return regex.test(str);
}

 

After the form is submitted our job turns to saving the input into the database.

In the code below I include config.php and opendb.php which contain the database configuration and the code needed to open a connection to MySQL. It's a good practice to put these actions in separate file. That way everytime you need to connect to MySQL you can include these files instead of rewriting the code. Also you can change the database information from just one file instead of changing it in every file that use MySQL. To see what the content of config.php, opendb.php and closedb.php go to : Connecting to MySQL database

<?php

include 'library/config.php';
include 'library/opendb.php';

if(isset($_POST['btnSign']))
{
   include 'library/config.php';
   include 'library/opendb.php';


   $name    = trim($_POST['txtName']);
   $email   = trim($_POST['txtEmail']);
   $url     = trim($_POST['txtUrl']);
   $message = trim($_POST['mtxMessage']);

   if(!get_magic_quotes_gpc())
   {
      $message = addslashes($message);
   }


   // if the visitor do not enter the url
   // set $url to an empty string
   if ($url == 'http://')
   {
      $url = '';
   }

   $query = "INSERT INTO guestbook (name,
                                    email,
                                    url,
                                    message,
                                    entry_date)
             VALUES ('$name',
                     '$email',
                     '$url',
                     '$message',
                     current_date
)";

   mysql_query($query) or die('Error, query failed');

   header('Location: ' . $_SERVER['REQUEST_URI']);
   exit;
}
?>

The script check if the $_POST['btnSign'] variable is set. If it is then the "Sign Guestbook" button must have been clicked and now we can read name, email, url and message from the $_POST global variable. After that we create an INSERT query string and execute the query using mysql_query().

Sometimes a message can contain single quotes, we need to escape these single quotes ( replacing it with \' ) otherwise MySQL will think that it's the end of a string and the query will fail. We use the addslashes() function to escape the string.

Unfortunately some web hosts set the magic_quotes_gpc setting on. This will make values containing single-quotes in $_GET, $_POST and $_COOKIE will be automatically escaped. If we use addslashes() when the string is already escaped the result would be a mess.

To check if magic_quotes_gpc is On use get_magic_quotes_gpc(). If it returns true then we don't have to call addslashes().

Ok, now affter all input is ready we can build the query string to enter the name, email, url, message and entry date. Note that for the entry_date field we use current_date. This is not a PHP variable or function, it's a built in MySQL function that returns ( guess what? ) the current date.

You also see that I didn't explicitly insert the value of id field. This is because id is set as auto_increment so when we insert a new row into the table a new value for id is automatically generated ( incremented for each new row).

After inserting the new guestbook entry the next thing we do is redirect back to current page using header('Location: ' . $_SERVER['REQUEST_URI']);

Why?

The redirect is just to prevent double submission. Suppose we don't use the redirect and the visitor hit the refresh button after signing up the guestbook then the form will be submitted again.

Note : If you get this kind of error message

Warning: Cannot modify header information - headers already sent by (output started at C:\webroot\guestbook\library\config.php:7) in C:\webroot\guestbook\guestbook.php on line 43

this mean the redirect failed because you already sent something to the browser. I got the error message above because i "accidentally" have a space right after the closing tag ( ?> ) in config.php. By removing this space the error is fixed.

This kind of errror is actually very common to see when your code is sending headers and fixing it is easy like the example above. Just check the file pointed by the error message and see if you accidentally sent ( print ) anyhing to the browser.

Recent Comments

By: Agen Bola Posted on 10-19-2015 11:20 PM

Agen Bola Terpercaya

http://tempatbet.com/

Agen Bola | Judi Bola | Casino SBOBET

http://mahkotabola.net/

By: herman87 Posted on 10-27-2015 10:13 AM

167.114.18.192/.../prediksi-skor-liverpool-vs-bournemouth-29-oktober-2015

167.114.18.192/.../prediksi-skor-manchester-city-vs-crystal-palace-29-oktober-2015

167.114.18.192/.../prediksi-skor-southampton-vs-aston-villa-29-oktober-2015

167.114.18.192/.../prediksi-skor-manchester-united-vs-middlesbrough-29-oktober-2015

167.114.18.192/.../prediksi-skor-ac-milan-vs-chievo-29-oktober-2015

167.114.18.192/.../prediksi-skor-atalanta-vs-lazio-29-oktober-2015

167.114.18.192/.../prediksi-skor-hellas-verona-vs-fiorentina-29-oktober-2015

hoki999.com/prediksi-liverpool-vs-bournemouth-bandar-bola

hoki999.com/prediksi-manchester-city-vs-crystal-palace-agen-ibcbet

hoki999.com/prediksi-southampton-vs-aston-villa-bursa-judi-bola

hoki999.com/prediksi-manchester-united-vs-middlesbrough-agen-338a

hoki999.com/prediksi-ac-milan-vs-chievo-master-agen-betting

hoki999.com/prediksi-atalanta-vs-lazio-bandar-judi

hoki999.com/prediksi-hellas-verona-vs-fiorentina-agen-asiapoker77

hoki999.com/prediksi-villanovense-vs-barcelona-agen-taruhan

agent88bet.net/prediksi-liverpool-vs-bournemouth-agen-betting

agent88bet.net/prediksi-manchester-city-vs-crystal-palace-bursa-bola

agent88bet.net/prediksi-southampton-vs-aston-villa-agen-judi-online

agent88bet.net/prediksi-manchester-united-vs-middlesbrough-bandar-bola

agent88bet.net/prediksi-ac-milan-vs-chievo-agen-asiapoker77

agent88bet.net/prediksi-atalanta-vs-lazio-agen-338a

agent88bet.net/prediksi-hellas-verona-vs-fiorentina-casino-sbobet

win88bet.com/prediksi-liverpool-vs-bournemouth-agen-asiapoker77

win88bet.com/prediksi-manchester-city-vs-crystal-palace-agen-bola

win88bet.com/prediksi-southampton-vs-aston-villa-bandar-bola

win88bet.com/prediksi-manchester-united-vs-middlesbrough-agen-judi

win88bet.com/prediksi-ac-milan-vs-chievo-bandar-bola

win88bet.com/prediksi-atalanta-vs-lazio-master-agen-betting

win88bet.com/prediksi-hellas-verona-vs-fiorentina-agen-taruhan

167.114.18.207/.../prediksi-skor-as-roma-vs-udinese-agen-ibcbet

167.114.18.207/.../prediksi-skor-napoli-vs-palermo-agen-casino

167.114.18.207/.../prediksi-skor-sassuolo-vs-juventus-bursa-judi-bola

167.114.18.207/.../prediksi-skor-villanovense-vs-barcelona-master-agen-betting

167.114.18.207/.../prediksi-skor-borussia-dortmund-vs-paderborn-agen-338a

167.114.18.207/.../prediksi-skor-freiburg-vs-augsburg-agen-asiapoker77

167.114.18.207/.../prediksi-skor-schalke-04-vs-moenchengladbach-agen-sportsbook

167.114.18.207/.../prediksi-skor-werder-bremen-vs-fc-koln-agen-judi-online

828bet.info/prediksi-as-roma-vs-udinese-agen-sbobet

828bet.info/prediksi-napoli-vs-palermo-agen-casino

828bet.info/prediksi-sassuolo-vs-juventus-agen-338a

828bet.info/prediksi-villanovense-vs-barcelona-bursa-bola-online

828bet.info/prediksi-borussia-dortmund-vs-paderborn-agen-bola

828bet.info/prediksi-freiburg-vs-augsburg-bandar-bola

828bet.info/prediksi-schalke-04-vs-monchengladbach-bandar-taruhan

828bet.info/prediksi-werder-bremen-vs-fc-koln-agen-klik4d

828bet.biz/prediksi-liverpool-vs-bournemouth-agen-338a

828bet.biz/prediksi-manchester-city-vs-crystal-palace-agen-taruhan

828bet.biz/prediksi-southampton-vs-aston-villa-master-agen-betting

828bet.biz/prediksi-manchester-united-vs-middlesbrough-agen-sbobet

828bet.biz/prediksi-ac-milan-vs-chievo-agen-casino

828bet.biz/prediksi-atalanta-vs-lazio-bandar-bola

828bet.biz/prediksi-hellas-verona-vs-fiorentina-bursa-bola

828bet.biz/prediksi-villanovense-vs-barcelona-agen-asiapoker77

By: herman87 Posted on 10-30-2015 2:57 AM

win88bet.net/prediksi-chelsea-vs-liverpool-agen-bola

win88bet.net/prediksi-crystal-palace-vs-manchester-united-agen-betting

win88bet.net/prediksi-manchester-city-vs-norwich-city-agen-ibcbet

win88bet.net/prediksi-newcastle-united-vs-stoke-city-agen-sbobet

win88bet.net/prediksi-swansea-city-vs-arsenal-agen-klik4d

win88bet.net/prediksi-watford-vs-west-ham-bursa-bola

win88bet.net/prediksi-west-brom-vs-leicester-city-agen-sportsbook

win88bet.com/prediksi-real-madrid-vs-las-palmas-agen-asia8bet

win88bet.com/prediksi-augsburg-vs-mainz-05-bursa-bola

win88bet.com/prediksi-deportivo-vs-atletico-madrid-agen-338a

win88bet.com/prediksi-eintracht-frankfurt-vs-bayern-munchen-bandar-bola

win88bet.com/prediksi-hertha-berlin-vs-monchengladbach-agen-asiapoker77

win88bet.com/prediksi-schalke-04-vs-ingolstadt-agen-casino

win88bet.com/prediksi-werder-bremen-vs-borussia-dortmund-agen-judi

agent88bet.net/prediksi-chelsea-vs-liverpool-agen-asiapoker77

agent88bet.net/prediksi-crystal-palace-vs-manchester-united-agen-338a

agent88bet.net/prediksi-manchester-city-vs-norwich-city-agen-casino

agent88bet.net/prediksi-newcastle-united-vs-stoke-city-agen-betting

agent88bet.net/prediksi-swansea-city-vs-arsenal-agen-bola

agent88bet.net/prediksi-watford-vs-west-ham-agen-klik4d

agent88bet.net/prediksi-west-brom-vs-leicester-city-agen-338a

167.114.18.192/.../prediksi-real-madrid-vs-las-palmas-agen-338a

167.114.18.192/.../prediksi-augsburg-vs-mainz-05-agen-sbobet

167.114.18.192/.../prediksi-deportivo-vs-atletico-madrid-master-agen-betting

167.114.18.192/.../prediksi-eintracht-frankfurt-vs-bayern-munchen-agen-bola

167.114.18.192/.../prediksi-hertha-berlin-vs-moenchengladbach-bandar-bola

167.114.18.192/.../prediksi-schalke-04-vs-ingolstadt-agen-asiapoker77

167.114.18.192/.../prediksi-werder-bremen-vs-borussia-dortmund-agen-taruhan

828bet.info/prediksi-chelsea-vs-liverpool-agen-sbobet

828bet.info/prediksi-crystal-palace-vs-manchester-united-agen-casino

828bet.info/prediksi-manchester-city-vs-norwich-city-agen-bola

828bet.info/prediksi-newcastle-united-vs-stoke-city-agen-ibcbet

828bet.info/prediksi-swansea-city-vs-arsenal-agen-betting

828bet.info/prediksi-deportivo-vs-atletico-madrid-agen-taruhan

828bet.info/prediksi-eintracht-frankfurt-vs-bayern-munchen-bursa-bola

828bet.info/prediksi-werder-bremen-vs-borussia-dortmund-agen-casino

hoki999.com/prediksi-chelsea-vs-liverpool-bursa-bola

hoki999.com/prediksi-crystal-palace-vs-manchester-united-agen-taruhan

hoki999.com/prediksi-manchester-city-vs-norwich-city-bandar-betting

hoki999.com/prediksi-newcastle-united-vs-stoke-city-agen-asia8bet

hoki999.com/prediksi-swansea-city-vs-arsenal-agen-338a

hoki999.com/prediksi-deportivo-vs-atletico-madrid-master-agen-betting

hoki999.com/prediksi-eintracht-frankfurt-vs-bayern-munchen-agen-judi

hoki999.com/prediksi-werder-bremen-vs-borussia-dortmund-agen-asiapoker77

167.114.18.207/.../prediksi-skor-real-madrid-vs-las-palmas-agen-judi

167.114.18.207/.../prediksi-skor-augsburg-vs-mainz-05-bursa-bola

167.114.18.207/.../prediksi-skor-deportivo-vs-atletico-madrid-agen-ibcbet

167.114.18.207/.../prediksi-skor-eintracht-frankfurt-vs-bayern-munchen-agen-betting

167.114.18.207/.../prediksi-skor-hertha-berlin-vs-moenchengladbach-agen-bola

167.114.18.207/.../prediksi-skor-schalke-04-vs-ingolstadt-agen-338a

167.114.18.207/.../prediksi-skor-werder-bremen-vs-borussia-dortmund-bandar-judi

828bet.biz/prediksi-chelsea-vs-liverpool-master-agen-betting

828bet.biz/prediksi-crystal-palace-vs-manchester-united-bandar-bola

828bet.biz/prediksi-manchester-city-vs-norwich-city-bursa-bola

828bet.biz/prediksi-newcastle-united-vs-stoke-city-agen-bola

828bet.biz/prediksi-swansea-city-vs-arsenal-agen-taruhan

828bet.biz/prediksi-watford-vs-west-ham-agen-judi

828bet.biz/prediksi-west-brom-vs-leicester-city-agen-ibcbet

By: herman87 Posted on 11-03-2015 12:30 AM

828bet.biz/prediksi-leeds-united-vs-cardiff-city-4-november-2015

828bet.biz/prediksi-ipswich-town-vs-bolton-4-november-2015

828bet.biz/prediksi-derby-county-vs-qpr-4-november-2015

828bet.biz/prediksi-burnley-vs-fulham-4-november-2015

828bet.biz/prediksi-bristol-city-vs-wolverhampton-4-november-2015

828bet.biz/prediksi-brentford-vs-hull-city-4-november-2015

828bet.biz/prediksi-birmingham-city-vs-blackburn-rovers-4-november-2015

win88bet.com/prediksi-leeds-united-vs-cardiff-city-4-november-2015

win88bet.com/prediksi-ipswich-town-vs-bolton-4-november-2015

win88bet.com/prediksi-derby-county-vs-qpr-4-november-2015

win88bet.com/prediksi-burnley-vs-fulham-4-november-2015

win88bet.com/prediksi-bristol-city-vs-wolverhampton-4-november-2015

win88bet.com/prediksi-brentford-vs-hull-city-4-november-2015

win88bet.com/prediksi-birmingham-city-vs-blackburn-rovers-4-november-2015

167.114.18.207/.../prediksi-skor-leeds-united-vs-cardiff-city-4-november-2015

167.114.18.207/.../prediksi-skor-ipswich-town-vs-bolton-4-november-2015

167.114.18.207/.../prediksi-skor-derby-county-vs-qpr-4-november-2015

167.114.18.207/.../prediksi-skor-burnley-vs-fulham-4-november-2015

167.114.18.207/.../prediksi-skor-bristol-city-vs-wolverhampton-4-november-2015

167.114.18.207/.../prediksi-skor-brentford-vs-hull-city-4-november-2015

167.114.18.207/.../prediksi-skor-birmingham-city-vs-blackburn-4-november-2015

828bet.info/prediksi-benfica-vs-galatasaray-4-november-2015

828bet.info/prediksi-psv-eindhoven-vs-wolfsburg-4-november-2015

828bet.info/prediksi-manchester-united-vs-cska-moscow-4-november-2015

828bet.info/prediksi-shakhtar-donetsk-vs-malmoe-ff-4-november-2015

828bet.info/prediksi-real-madrid-vs-psg-4-november-2015

agent88bet.net/prediksi-real-madrid-vs-psg-4-november-2015

agent88bet.net/prediksi-shakhtar-donetsk-vs-malmoe-ff-4-november-2015

agent88bet.net/prediksi-manchester-united-vs-cska-moscow-4-november-2015

agent88bet.net/prediksi-psv-eindhoven-vs-wolfsburg-4-november-2015

agent88bet.net/prediksi-benfica-vs-galatasaray-4-november-2015

agent88bet.net/prediksi-borussia-moenchengladbach-vs-juventus-4-november-2015

agent88bet.net/prediksi-sevilla-vs-manchester-city-4-november-2015

hoki999.com/prediksi-real-madrid-vs-psg-4-november-2015

hoki999.com/prediksi-shakhtar-donetsk-vs-malmoe-ff-4-november-2015

hoki999.com/prediksi-manchester-united-vs-cska-moscow-4-november-2015

hoki999.com/prediksi-psv-eindhoven-vs-wolfsburg-4-november-2015

hoki999.com/prediksi-benfica-vs-galatasaray-4-november-2015

hoki999.com/prediksi-borussia-moenchengladbach-vs-juventus-4-november-2015

hoki999.com/prediksi-sevilla-vs-manchester-city-4-november-2015

167.114.18.192/.../prediksi-real-madrid-vs-psg-4-november-2015

167.114.18.192/.../prediksi-shakhtar-donetsk-vs-malmoe-ff-4-november-2015

167.114.18.192/.../prediksi-manchester-united-vs-cska-moscow-4-november-2015

167.114.18.192/.../prediksi-psv-eindhoven-vs-wolfsburg-4-november-2015

167.114.18.192/.../prediksi-benfica-vs-galatasaray-4-november-2015

167.114.18.192/.../prediksi-borussia-moenchengladbach-vs-juventus-4-november-2015

167.114.18.192/.../prediksi-sevilla-vs-manchester-city-4-november-2015

win88bet.net/prediksi-real-madrid-vs-psg-4-november-2015

win88bet.net/prediksi-shakhtar-donetsk-vs-malmo-ff-4-november-2015

win88bet.net/prediksi-manchester-united-vs-cska-moscow-4-november-2015

win88bet.net/prediksi-psv-eindhoven-vs-wolfsburg-4-november-2015

win88bet.net/prediksi-benfica-vs-galatasaray-4-november-2015

win88bet.net/prediksi-borussia-monchengladbach-vs-juventus-4-november-2015

win88bet.net/prediksi-sevilla-vs-manchester-city-4-november-2015

Powered by Community Server (Non-Commercial Edition), by Telligent Systems