L'ho fatto adesso al volo, ma dovrebbe fare al caso tuo. Ovviamente la personalizzazione grafica spetta a te 
Codice PHP:
<script language="javascript">
<!--
function trim(str)
{
return str.replace(/^\s*|\s*$/g,"");
}
function chkGuest(form)
{
if(trim(form.titolo.value) == "" || trim(form.messaggio.value) == "" || trim(form.autore.value) == "")
{
alert("È necessario compilare tutti i campi");
return false;
}
else
{
return true;
}
}
-->
</script>
<?php
// file per lo storage
$guest_file = "guestbook.txt";
// numero di messaggi per ogni pagina
$nxpag = 5;
// range di apparizione degli indici (fondo pagina)
$nrg = 8;
// pagina attuale
$script = get_script();
// FUNZIONI
function get_script()
{
$s = array_pop(explode("/", $_SERVER['REQUEST_URI']));
if(strpos($s, "?"))
{
$s = substr($s, 0, strpos($s, "?"));
}
return $s;
}
function read_guest_file($file)
{
$rs = fopen($file, "r");
$a = file($file);
fclose($rs);
for($i=0;$i<count($a);$i++)
{
list($b[$i]['data'], $b[$i]['titolo'], $b[$i]['messaggio'], $b[$i]['autore'], $b[$i]['id']) = explode("::",$a[$i]);
}
return $b;
}
function add_message($file, $data, $titolo, $messaggio, $autore)
{
$a = file($file);
$rs = @fopen($file, "w+");
for($i=0;$i<count($a);$i++)
{
$rest .= $a[$i];
}
$cont = $data."::".$titolo."::".$messaggio."::".$autore."\n".$rest;
fwrite($rs, $cont);
fclose($rs);
print($cont);
}
// GUESTBOOK
if (!isset($_GET['act']))
{
print("<div>");
$row = read_guest_file($guest_file);
$num = count($row);
if(!isset($_GET['page'])) { $np = 1; }
else { $np = $_GET['page']; }
print("<div>");
if($num == 0)
{
print("<p align='center'>Al momento non ci sono messaggi
</p>");
}
else
{
for($i=0;$i<$num;$i++)
{
$min = ($np-1) * $nxpag;
$max = ($min + $nxpag) - 1;
if($i>=$min && $i<=$max)
{
print("<table width='100%' border='1' cellspacing='0' cellpadding='0' style='margin-bottom:50px;'>");
print("<tr>");
print("<td>");
print(stripslashes($row[$i]['titolo']));
print("</td>");
print("<td align='right' width='150'>");
print($row[$i]['data']);
print("</td>");
print("</tr>");
print("<tr>");
print("<td colspan='2'>");
print("<div>");
print(stripslashes($row[$i]['messaggio']));
print("</div>");
print("<div style='text-align:right;'>");
print("[b]scritto da: [/b]".$row[$i]['autore']);
print("</div>");
print("</td>");
print("</tr>");
print("</table>");
}
}
}
$npagine = ceil($num/$nxpag);
if($np > 1) { $prev = $np-1; }
else { $prev = 1; }
if($np < $npagine) { $next = $np+1; }
else { $next = $npagine; }
if($num > $nxpag)
{
print("<table align='center'><tr><td valign='middle'>");
if($np > $nrg)
{
print("[url='?page=1']<<[/url]");
}
print("[url='?page=".$prev."']<[/url]");
for($i=1;$i<=$npagine;$i++)
{
if($i < ($np+$nrg) && $i > ($np-$nrg))
{
if($i == $np)
{
print(" <font>".$i."</font> ");
}
else
{
print("[url='?page=".$i."']".$i."[/url] ");
}
}
}
print("[url='?page=".$next."']>[/url]");
if($np < ($npagine - $nrg))
{
print("[url='?page=".$npagine."']>>[/url]");
}
print("</td></tr></table>");
}
?>
<div style="border-top:1px solid #BBBBBB;"></div>
<div style="width:450px; text-align:left;">
<form action="?act=ins" method="post" onSubmit="return chkGuest(this)">
titolo:
<input type="text" name="titolo" size="70">
messaggio:
<textarea cols="53" rows="5" name="messaggio"></textarea>
autore:
<input type="text" name="autore" size="70">
<input type="submit" value="INSERISCI">
</form>
</div>
<?php
print("</div>");
}
else if ($_GET['act'] == "ins")
{
$titolo = htmlspecialchars($_POST['titolo']);
$messaggio = nl2br(htmlspecialchars($_POST['messaggio']));
$autore = htmlspecialchars($_POST['autore']);
$data = date("d/m/Y");
add_message($guest_file, $data, $titolo, $messaggio, $autore);
print("<script> window.location='".$script."'</script>");
}
?>