<?PHP
//Het adres van de mysql server, bijna altijd localhost
$host = "localhost";
//De mysql username
$user = "...";
//Het mysql wachtwoord
$pass = "....";
//De gewenste database
$db = "....";
//Het maximale aantal posts dat je per pagina wilt laten zien
$posts_per_page = "15";
//Het maximale aantal paginas dat je bereikbaar wilt maken
$maximum_paginas = "5";
if($host == "" || $user == "" || $pass == "" || $db == "" || $posts_per_page == "" || $maximum_paginas == "")
{
die("Niet alle configuratie instellingen zijn juist geset, draai installer.php of voer ze handmatig in aan de bovenkant van index.php!"); }
?>
<?PHP
//Start een sessie om bijvoorbeeld flooding te voorkomen
//Legt een verbinding met mysql
//Verbind met de database
?>
<html>
<head>
<style type="text/css">
.body
{
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
text-align: center;
list-style-position: inside;
}
</style>
<title>
Guestbook
</title>
</head>
<body class="body" link="#000000" alink="#000000" vlink="#000000">
<?PHP
//Als de sessie variabele post niet bestaat of false is, includeer dan het formulier
if(!isset($_SESSION["post"]) || $_SESSION["post"] = false) {
//Includeer het formulier
?>
<form action="
<?PHP echo $_SERVER['PHP_SELF']; ?>" method="post">
<table class="body">
<tr>
<td>
Naam:
</td>
<td>
<input type="text" name="name"><br><br>
</td>
</tr>
<tr>
<td>
Email:
</td>
<td>
<input type="text" name="email"><br><br>
</td>
</tr>
<tr>
<td>
Bericht:
</td>
<td>
<textarea name="bericht" cols="30" rows="5"></textarea><br><br>
</td>
</tr>
<tr>
<td>
<input type="submit" name="submit" value="verzend"><br><br>
</td>
</tr>
</table>
</form>
<?php
}
//Controleer of de submit knop is ingedrukt
if(isset($_POST["submit"])) {
//Controleer of alle velden zijn ingevuld
if(isset($_POST["name"]) && !empty($_POST["name"]) && isset($_POST["email"]) && !empty($_POST["email"]) && isset($_POST["bericht"]) && !empty($_POST["bericht"])) {
//Checkt of er niet al gepost is dmv de sessie variabele
if(!isset($_SESSION["post"]) || $_SESSION["post"] = false) {
if(validate() == true)
{
//Checkt of ditzelfde bericht niet al eens gepost is dmv hash
if(check_hash() == true)
{
//Voeg de post in via de insert_post() functie en sla de return waarde op in $result
$result = insert_post();
//Als de return waarde 1 was, en het dus goed gegaan is
if($result == 1)
{
//Echo het bericht dat alles is goed gegaan
echo "Het bericht is toegevoegd!<br><br>";
//Stelt de sessie variabele in die er voor zorgt dat er maar 1 keer gepost kan worden
$_SESSION["post"] = true;
}
//Als de return waarde iets anders dan 1 was, en er dus iets fout ging
else
{
//Echo het bericht dat er iets fout ging
echo "Het bericht is niet toegevoegd!<br><br>";
//En echo de eventuele mysql query error
}
}
//Als het wel al gepost is
elseif(check_hash() == false)
{
//Laat de gebruiker weten dat het bericht al bestaat
echo "Exact ditzelfde bericht is al eens gepost, het is dus niet meer nodig!<br><br>"; }
}
else
{
echo "Het door u ingevulde email adres was niet correct!<br><br>"; }
}
//Als er al gepost is
else
{
//Echo dat er al gepost is
echo "U heeft al gepost in deze sessie, dit is een gastenboek, geen spamboek!<br><br>"; }
}
//Als niet alle velden waren ingevuld
else
{
//Echo dat niet alle velden waren ingevuld
echo "Niet alle velden waren ingevuld!<br><br>"; }
}
//Roep de functie aan die hyperlinks naar beschikbare paginas zal tonen
show_pages();
//Roep de functie aan die er voor zorgt dat de posts van de huidige pagina getoond worden
show_posts();
function show_posts()
{
//Deze functie laat de posts van de huidige pagina zien
//Includeer de benodigde configuratie variabelen
global $posts_per_page, $maximum_paginas;
//Als de page variabele in de url niet is geset
if(!isset($_GET["page"])) {
//Geef $page de default waarde 1
$page = 1;
}
//Als de page variabele in de url wel is geset
else
{
//Verkort de variabele
$page = $_GET["page"];
}
//Als de waarde van page kleiner is of gelijk is aan het maximum aantal toegestane paginas wordt de rest uitgevoerd
if($page <= $maximum_paginas)
{
//Vermenigvuldigt de gewenste pagina met het gewenste aantal posts om de limit waarden vast te stellen
$limit_start = ($page - 1) * $posts_per_page;
$limit = $limit_start.", ".$posts_per_page;
//Declareert de mysql query die nodig is om de juiste berichten uit de database te selecteren
$sql = "
SELECT time, name, email, bericht FROM berichten ORDER BY time DESC LIMIT ".$limit.";
";
//Slaat de return waarde van de mysql quer op in result
//Echot de eventuele mysql error
//Ga rij voor rij de query uitvoeren en sla de waarden op in de array $row
{
//Verkort de variabelen om te verduidelijken wat wat is
$time = $row['0'];
$name = $row['1'];
$email = $row['2'];
$bericht = $row['3'];
//Echo een tabel voor iedere rij
echo "<table class=\"body\" cellspacing=\"0\" border-radius=\"5px\">";
echo "<td bgcolor=\"#FF8000\" width=\"500\">"; //Zorg er voor dat men kan mailen naar de poster door op de naam te klikken
echo "<a href=\"mailto:".$email."\">".$name."</a> schreef op ".$time;
echo "<td bgcolor=\"F3F781\">"; //Echo het in deze rij opgehaalde bericht
}
}
//Als blijkt dat de waarde van page hoger is dan die van het maximum toegestane paginas
elseif($page > $maximum_paginas)
{
//Echo dat dit aantal paginas niet is toegestaan door de beheerder
//Deze situatie kan niet voorkomen wanneer er gewoon op links wordt geklikt, maar alleen door een "hack" poging
echo "Het maximum aantal paginas is door de beheerder ingesteld op ".$maximum_paginas."!"; }
}
function insert_post()
{
//Deze functie injecteerd de zojuist ingevulde waarden in de database
//Dit stelt het formaat van tijd vast
$time = date("d-m-y H:i:s");
//Dit declareert $hashed
$hashed = md5($_POST["bericht"]);
//Dit declareert de query die gebruikt wordt om de ingevulde waarden te injecteren in berichten
$sql = "
INSERT INTO berichten
(time, name, email, bericht, md5)
VALUES
('".$time."',
'".$_POST["name"]."',
'".$_POST["email"]."',
'".$_POST["bericht"]."',
'".$hashed."');
";
//Dit slaat de return waarde op in result
//Dit retourneert de return waarde van de MySQL query
return $result;
}
function show_pages()
{
//Deze functie laat hyperlinks naar de beschikbare paginas zien
//Dit includeert de benodigde configuratie instellingen
global $posts_per_page, $maximum_paginas;
//Dit declareert de query die gebruikt wordt om het huidige aantal berichten vast te stellen
$sql = "
SELECT id FROM berichten;
";
//Dit slaat de return waarde van de query op in result
//Dit telt het aantal gevonden rijen, en daarmee dus het totaal aantal posts
//Als het aantal posts hoger is dan het aantal toegestane posts per pagina
if($num > $posts_per_page)
{
//Deel dan het een door het ander en rond af naar boven om het benodigde aantal paginas vast te stellen
$paginas = ceil($num/$posts_per_page);
//Als de waarde van paginas na de deling hoger is dan die van het ingestelde maximum
if($paginas > $maximum_paginas)
{
//Verander de waarde van paginas dan in die van het maximum toegestane aantal
$paginas = $maximum_paginas;
}
//Laat de tekst Pagina: zien om duidelijk te maken dat er hier naar andere paginas gegaan kan worden
//Voer dit net zo vaak uit als de waarde van $paginas
for($i=1;$i<=$paginas;$i++)
{
//Geef een link weer met het getal van het huidige pagina nummer
echo "<a href=\"index.php?page=".$i."\">".$i."</a> "; }
//Print 2 witregels voor het overzicht
}
}
function check_hash()
{
//Deze functie vergelijkt de hash van het huidige bericht met dat van alle voorgaande berichten, om spam te voorkomen
//Declereert hashed
$hashed = md5($_POST["bericht"]);
//Declareert de query die gebruikt wordt om te kijken of er al een row is met dezelfde md5 value
$sql = "
SELECT * FROM berichten WHERE md5 = '".$hashed."';
";
//Slaat de resultaten op in $result
//Echot een eventuele mysql error
//Zet het aantal resultaten in $num
//Als er resultaten zijn
if($num > 0)
{
//Return false
return false;
}
//Als er geen resultaten zijn
else
{
//Return true
return true;
}
}
function validate()
{
//Deze functie controleerde de integriteit van de ingevulde gegevens
//Maakt de array email aan met als separator @
$email = explode("@",$_POST["email"]);
//Als er meer dan 1 elementen in de array zitten
{
//Herdeclereert mail maar dan met . als separator
$email = explode(".",$_POST["email"]);
//Als er meer dan 1 elementen in de array zitten
{
//Zet de waarde van $mail op true
$mail = true;
}
//Zoniet
else
{
//Zet de waarde van mail op false
$mail = false;
}
}
//Zoniet
else
{
//Zet de waarde van mail op false
$mail = false;
}
//Als de waarde van mail true is
if($mail == true)
{
//Haal rare tekens uit name
$_POST["name"] = ereg_replace("[^A-Za-z0-9 ]", "", $_POST["name"]);
//Haal rare tekens uit bericht
$_POST["bericht"] = ereg_replace("[^A-Za-z0-9 ]", "", $_POST["bericht"]);
//Retourneer true
return true;
}
//Als de waarde van mail niet true is
else
{
//Retourneer false
return false;
}
}
?>
</body>
</html>