Version: 1.0
Type: Full Script
Category: BBS/Discussion
License: GNU General Public License
Description: This guestbook uses only one file that includes both signing and viewing guestbook in one single page. Feature: Checking for an empty post, Checking for duplicates, Striping HTML Tags, Javascript Scrolling UP, DOWN & PAGING on viewing guestbook, Admin database, and more
FOLLOW THESE STEPS (there are 4 steps):
STEP I. Save this bellow as "guestbook.php"
===========================================
<h4><a href="guestbook.php">GUESTBOOK</a> | <a href="adm_guestbook.php">ADMIN</a></h4>
<?
// *** CONFIGURATION VARIABLES
$dbhost="localhost";
$dbusername="xxx";
$dbpassword="xxx";
$dbname="xxx";
$conn=mysql_connect($dbhost,$dbusername,$dbpassword) or die ("can't connect to server");
@mysql_select_db($dbname) or die ("can't select database");
$allow_html="no"; /* "" or "yes" to allow HTML TAGS */
if (empty($page)){ $page="Sign"; }
// *** INSERTING DATA
if ($btsend=="Send"){
$fpostdate=time();
if ($allow_html=="no"){
$fnama=strip_tags($fnama);
$femail=strip_tags($femail);
$fcomment=strip_tags($fcomment);
}
if ((!empty($fnama)) and (!empty($fcomment))){
$double=@mysql_num_rows(@mysql_query("select * from guestbook where nama='$fnama' and email='$femail' and comment='$fcomment'"));
if ($double>0){
// *** DO NOTHING *** //
} else {
@mysql_query("insert into guestbook (id,nama,email,show_my_email,comment,postdate) values ('','$fnama','$femail','$show_my_email','$fcomment','$fpostdate')");
}
}
}
?>
<style><!--
BODY {font-family:verdana;font-size:8pt}
TD {font-family:verdana;font-size:8pt}
.entri {font-family:verdana;font-size:8pt;border: 1px solid #666666;}
.tombol {font-family:verdana;font-size:8pt}
.navart {color:#FF0000; text-decoration:none}
--></style>
<body bgcolor=#D5D5FF>
<?
$arpage=array("Sign","View");
echo "<table border=0 cellpadding=0 cellspacing=0 width=300>";
echo "<tr><td background='gbimg/sm_empty.gif' width=50%> </td>";
for ($i=0;$i<count($arpage);$i++){
if ($page==$arpage[$i]){ $img="on"; $fc="#000000"; } else { $img="off"; $fc="#666666"; }
echo "<td><img border=0 src='gbimg/sm".$img."_left.gif' width=12 height=20></td>\n";
echo "<td background='gbimg/sm".$img."_mid.gif' nowrap>";
echo "<a style='font-weight:bold;text-decoration:none;color=$fc' href='$PHP_SELF?page=$arpage[$i]'>$arpage[$i] Guestbook</a></td>";
echo "<td>\n";
echo "<td><img border=0 src='gbimg/sm".$img."_right.gif' width=12 height=20></td>\n";
}
echo "<td background='gbimg/sm_empty.gif' width=50%> </td>";
echo "</tr>";
echo "</table>";
?>
<TABLE bgcolor=#FFFFFF BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH=300><TR><TD WIDTH=1 BGCOLOR=#666666><IMG SRC='gbimg/trans.gif' WIDTH=1 BORDER=0 HEIGHT=1></TD><TD>
<? if ($page=="Sign"){ ?>
<!-- (start) PAGE : Sign -->
<script language="javascript">
<!--
function jumlahKata(form)
{ with (form)
{ sisa.value = 150-fcomment.value.length;
if (parseInt(sisa.value)<0) { sisa.value = '0'; }
fcomment.value = fcomment.value.substr(0,150);
}
return;
}
function cek(form)
{ with (form)
{ if (fnama.value.length==0)
{ alert("Please fill your name");
fnama.focus();
return false;
}
if (femail.value.length==0)
{ alert("Please fill your email");
femail.focus();
return false;
}
if (fcomment.value.length==0)
{ alert("Please fill your comments");
fcomment.focus();
return false;
}
}
return;
}
//-->
</script>
<?php
echo "<form name=pesan action='".$PHP_SELF."' method='post' onSubmit='return cek(this)'>";
echo "<table border=0 cellspacing=4 cellpadding=0 width=100%>";
echo "<tr><td align=right>Name:</td><td><input name='fnama' size=30 class=entri></td></tr>";
echo "<tr><td valign=top align=right>Email:</td><td><input name='femail' size=30 class=entri>";
echo "<br><input type='checkbox' name='show_my_email' checked value='y'>Show My Email</td></tr>";
echo "<tr><td align=right valign=top>Comments:</td><td><textarea name='fcomment' cols=30 rows=5 class=entri onKeyup='jumlahKata(document.pesan);' RAP></textarea>";
echo "<br>Max Chars : 150, Chars left : <input type='text' size=3 name=sisa maxlength=3 value='150' class=entri></td></tr>";
echo "<tr><td colspan=2 align=center>";
echo "<input type='hidden' name='page' value='View'>";
echo "<input type='submit' name='btsend' value='Send' class=tombol> <input type='reset' value='Clear' class=tombol>";
echo "</td></tr>";
echo "</table>";
echo "</form>";
?>
<!-- (end) PAGE : Sign -->
<? } ?>
<? if ($page=="View"){ ?>
<!-- (start) PAGE : VIEW -->
<script language="JavaScript">
<!--
function MM_displayStatusMsg(msgStr) { //v1.0
status=msgStr;
document.MM_returnValue = true;
}
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_findObj(n, d) { //v3.0
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}
function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
MM_preloadImages("gbimg/bt_up_on.gif","gbimg/bt_down_on.gif");
//-->
</script>
<!--- SCRIPT UNTUK SCROLL -->
<style><!--
#divUpControl{position:relative; width:14; left:0; top:0; z-index:1; text-align: right}
#divDownControl{position:relative; width:14; left:0; top:0; z-index:1; text-align: right}
#divContainer{position:relative; width:298; height:150; overflow:hidden; top:0; left:0; clip:rect(0,700,290,0); visibility:hidden}
#divContent{position:relative; top:0; left:0}
--></style>
<script language="JavaScript">
<!--
// begin absolutely positioned scrollable area object scripts
function verifyCompatibleBrowser(){
this.ver=navigator.appVersion
this.dom=document.getElementById?1:0
this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
this.ie4=(document.all && !this.dom)?1:0;
this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
this.ns4=(document.layers && !this.dom)?1:0;
this.bw=(this.ie5 || this.ie4 || this.ns4 || this.ns5)
return this
}
bw=new verifyCompatibleBrowser()
var speed=50
var loop, timer
function ConstructObject(obj,nest){
nest=(!nest) ? '':'document.'+nest+'.'
this.el=bw.dom?document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+'document.'+obj):0;
this.css=bw.dom?document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+'document.'+obj):0;
this.scrollHeight=bw.ns4?this.css.document.height:this.el.offsetHeight
this.clipHeight=bw.ns4?this.css.clip.height:this.el.offsetHeight
this.up=MoveAreaUp;this.down=MoveAreaDown;
this.MoveArea=MoveArea; this.x; this.y;
this.obj = obj + "Object"
eval(this.obj + "=this")
return this
}
function MoveArea(x,y){
this.x=x;this.y=y
this.css.left=this.x
this.css.top=this.y
}
function MoveAreaDown(move){
if(this.y>-this.scrollHeight+objContainer.clipHeight){
this.MoveArea(0,this.y-move)
if(loop) setTimeout(this.obj+".down("+move+")",speed)
}
}
function MoveAreaUp(move){
if(this.y<0){
this.MoveArea(0,this.y-move)
if(loop) setTimeout(this.obj+".up("+move+")",speed)
}
}
function PerformScroll(speed){
if(initialised){
loop=true;
if(speed>0) objScroller.down(speed)
else objScroller.up(speed)
}
}
function CeaseScroll(){
loop=false
if(timer) clearTimeout(timer)
}
var initialised;
function InitialiseScrollableArea(){
objContainer=new ConstructObject('divContainer')
objScroller=new ConstructObject('divContent','divContainer')
objScroller.MoveArea(0,0)
objContainer.css.visibility='visible'
initialised=true;
}
// end absolutely positioned scrollable area object scripts
//-->
</script>
<?
// *** (start) PAGING
if (empty($start)){
$start=0;
}
$recperpage=10;
$totrec=@mysql_num_rows(@mysql_query("select id from guestbook"));
if ($totrec>$recperpage){
$prev=$start-$recperpage;
$next=$start+$recperpage;
echo "<div><b>Page : <font color=#666666>";
if (!$start==0){
echo "<a href='$PHP_SELF?start=$prev&page=View' class=navart></a> ";
} else {
echo " ";
}
$countlp=ceil($totrec/$recperpage);
if ($countlp>20){ $lastpage=20; } else { $lastpage=$countlp; }
for ($i=1; $i<=$lastpage;$i++){
if ((($start/$recperpage)+1)==$i){
echo $i." ";
} else {
$startval=($i-1)*$recperpage;
echo "<a href='$PHP_SELF?start=$startval&page=View' class=navart>".$i."</a> ";
}
}
if ($start<($totrec-$recperpage)){
echo "<a href='$PHP_SELF?start=$next&page=View' class=navart></a>";
} else {
echo "";
}
echo "</font></b></div>";
}
// *** (end) PAGING
$rs = mysql_query("select * from guestbook order by postdate desc limit $start,$recperpage");
$ada=@mysql_num_rows($rs);
if ($ada>0){
?>
<a
href="javascript:;" onMouseOver="PerformScroll(-7);MM_swapImage('content_up','','gbimg/bt_up_on.gif',1);return document.MM_returnValue"
onMouseOut="CeaseScroll();MM_swapImgRestore()" style='text-decoration:none;color:#FF0000'><IMG
alt=Up border=0 name=content_up
src="gbimg/img_up.gif" width=12 height=16> [<i>scroll up</i>]</a>
<!-- start SCROLLER -->
<body onload="InitialiseScrollableArea();">
<div id="divContainer">
<div id="divContent">
<!-- start contents -->
<?
echo "<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor=#DFE4CD>";
while ($row=@mysql_fetch_array($rs)){
echo "<tr><td bgcolor=#CCCCCC><img src='gbimg/line_hor.gif' border=0 width=4 height=1></td></tr>";
echo "<tr><td><font color=#666600>";
echo date('j F Y - H:i',$row[postdate]);
echo "</font><br><b>From: ".$row[nama];
if ($row[show_my_email]=="y"){
echo " - (<a href='mailto:".$row[email]."' class=hitam>".$row[email]."</a>)";
}
echo "</b><br>".$row[comment]."</td></tr>";
}
echo "</table>";
?>
</div>
</div>
<!-- end SCROLLER -->
<a
href="javascript:;"
onMouseOver="PerformScroll(7);MM_swapImage('content_down','','gbimg/bt_down_on.gif',1);return document.MM_returnValue"
onMouseOut="CeaseScroll();MM_swapImgRestore()" style='text-decoration:none;color:#FF0000'
><IMG
alt=Down border=0 name=content_down
src="gbimg/img_down.gif" width=12 height=16> [<i>scroll down</i>]</a>
<?
} else {
echo "<p><b>No record(s) founds</b></p>";
}
?>
<!-- (end) PAGE : VIEW -->
<? } ?>
</TD><TD WIDTH=1 BGCOLOR=#666666><IMG SRC='gbimg/trans.gif' WIDTH=1 BORDER=0 HEIGHT=1></TD></TR>
<TR><TD COLSPAN=3 BGCOLOR=#666666><IMG SRC='gbimg/trans.gif' WIDTH=1 BORDER=0 HEIGHT=1></TD></TR>
</TABLE>
STEP II. Save this bellow script as "adm_guestbook.php"
======================================================
<h4><a href="guestbook.php">GUESTBOOK</a> | <a href="adm_guestbook.php">ADMIN</a></h4>
<?php
$dbhost="localhost";
$dbusername="xxx";
$dbpassword="xxx";
$dbname="xxx";
$conn=mysql_connect($dbhost,$dbusername,$dbpassword) or die ("can't connect to server");
@mysql_select_db($dbname) or die ("can't select database");
?>
<style><!--
BODY {font-family:verdana;font-size:8pt}
TD {font-family:verdana;font-size:8pt}
--></style>
<?
echo "<h3> • Admin Guestbook</h3>";
if ($btedit=="EDIT"){
$arrday=explode("/",$fpostdate1);
$arrtime=explode(":",$fpostdate2);
$fpostdate=mktime($arrtime[0],$arrtime[1],0,$arrday[0],$arrday[1],$arrday[2]);
@mysql_query("update guestbook set nama='$fnama', email='$femail', show_my_email='$fshow_my_email', comment='$fcomment', postdate='$fpostdate' where id='$fid'");
}
if ($btdelete=="DELETE"){
@mysql_query("delete from guestbook where id='$fid'");
if (($sisa==1) and ($page>1)){
$page=$page-1;
}
}
// *** (start) PAGING
if (empty($start)){
$start=0;
}
$recperpage=10;
$totrec=@mysql_num_rows(@mysql_query("select id from guestbook"));
if ($totrec>$recperpage){
$prev=$start-$recperpage;
$next=$start+$recperpage;
echo "<b>Page : </b>";
if (!$start==0){
echo "<a href='".$PHP_SELF."?start=".$prev."' class=navart></a> ";
} else {
echo "<b></b> ";
}
for ($i=1; $i<=ceil($totrec/$recperpage);$i++){
if ((($start/$recperpage)+1)==$i){
echo "<b>".$i."</b> ";
} else {
$startval=($i-1)*$recperpage;
echo "<a href='".$PHP_SELF."?start=".$startval."' class=navart>".$i."</a> ";
}
}
if ($start<($totrec-$recperpage)){
echo "<a href='".$PHP_SELF."?start=".$next."' class=navart></a>";
} else {
echo "<b></b>";
}
}
// *** (end) PAGING
$t=@mysql_query("select * from guestbook order by postdate desc limit $start,$recperpage");
$ada=@mysql_num_rows($t);
if ($t>0){
echo "<table border=0 cellspacing=1 cellpading=0 bgcolor=#CCEDFF width=100%>";
$i=0;
while ($row=@mysql_fetch_array($t)){
$i++;
if (($i%2)==0){
$tdcol="#FFFFFF";
} else {
$tdcol="#CCEDFF";
}
if ($act==$row[id]){
echo "<tr><td bgcolor='".$tdcol."'>";
echo "<form action='".$PHP_SELF."' method='post'>";
echo "<a name=view><i>Name</i> : ";
echo "<input name='fnama' value='".$row[nama]."' class='entri'>";
echo "<br><i>Email</i> : <input name='femail' value='".$row[email]."' class='entri'>";
echo " <input type=checkbox name='fshow_my_email' value='y'";
if ($row[show_my_email]=="y"){ echo " checked"; }
echo ">show email ";
echo "<br><i>Postdate</i> : ";
echo "<input name='fpostdate1' value='".date('m/j/Y',$row[postdate])."' class='entri' size=10>(mm/dd/yyyy)";
echo "<input name='fpostdate2' value='".date('H:i',$row[postdate])."' class='entri' size=5>(hh:mm)";
echo "<br><i>Comments</i> : ";
echo "<textarea name='fcomment' class='entri' rows=3 cols=40>".$row[comment]."</textarea>";
echo "<input type='hidden' name='fid' value='".$row[id]."'>";
echo "<input type='hidden' name='page' value='".$page."'>";
// *** untuk lihat sisa last page (kalau=1 --> page-1)
$sisa = $ada % $disppage;
echo "<input type='hidden' name='sisa' value='$sisa'>";
echo "<br><input type='submit' name='btedit' value='EDIT' class='tombol'>";
echo "<input type='submit' name='btdelete' value='DELETE' class='tombol'>";
echo "<input type='submit' name='btcancel' value='CANCEL' class='tombol'>";
echo "</form>";
echo "</td></tr>";
} else {
echo "<tr><td bgcolor='".$tdcol."'>";
echo "<i>Name</i> : ".$row[nama]." - (";
if ($row[show_my_email]=="y") {
echo $row[email];
} else {
echo "<strike>".$row[email]."</strike>";
}
echo ")";
echo " - <i>Postdate</i> : ".date('j F Y - H:i',$row[postdate]);
echo "<br>".$row[comment];
echo "<br><a href='".$PHP_SELF."?act=".$row[id]."&start=".$start."#view' class='tdkclpth'>MODIFY</a>";
echo "</td></tr>";
}
}
echo "</table>";
} else {
echo "<p><b>No record(s) founds</b></p>";
}
?>
STEP III. Dump this MySQL query :
=================================
CREATE TABLE guestbook (
id int(11) NOT NULL auto_increment,
nama varchar(50) default NULL,
email varchar(50) default NULL,
show_my_email char(1) default NULL,
comment text,
postdate int(11) default NULL,
PRIMARY KEY (id),
KEY id (id)
) TYPE=MyISAM;
STEP IV. CHANGE DATABASE CONFIGURATION AT TOP OF PAGE
=====================================================
ON FILEs "guestbook.php" & "adm_guestbook.php"
$dbhost="localhost";
$dbusername="xxx";
$dbpassword="xxx";
$dbname="xxx";