
Simpel GastenboekIn deze tutorial wil ik ingaan op het maken van een gastenboek. Het is geen uitgebreid script en er zijn vast veel betere scripts te vinden op het internet. Het doel is om te leren denken in grote structuren. Iets wat niet altijd even makkelijk is en waar ik zelf ook nog steeds tegen aan loop. Want waar begin je nu?
Allereerst bedenk je wat je wilt bereiken. In dit geval een gastenboek. Dit wil je gaan doen met PHP en met MySQL. Deze technieken ken je al en je wilt wat grotere projecten gaan aanpakken. Het gastenboek moet een aantal aspecten omvatten. Allereerst moet de bezoeker berichten kunnen lezen. Dit is toch de essentie van een gastenboek. Daarnaast moet de bezoeker een bericht achter kunnen laten. Dit houdt in dat de bezoeker de kans krijgt een bericht te plaatsen in je database. Moet de bezoeker daar dan voor inloggen of mag elke willekeurige bezoeker een bericht plaatsen? In dit geval mag elke willekeurige bezoeker een bericht plaatsen.
Een idee om later uit te werken kan zijn dat de bezoeker maar een keer iets mag schrijven gedurende een bepaalde periode. Een gastenboek is niet een forum en het is niet de bedoeling dat mensen discussies met elkaar gaan voeren via het gastenboek. Verder kun je erover nadenken hoe je wilt voorkomen dat er schuttingtaal gebruikt wordt in je gastenboek. Dit zijn echter allemaal problemen voor later. Eerst de grote lijnen maar eens opstellen.
Ik ga beginnen met het uitdenken van de database structuur. Als je niet eerder een database hebt uitgedacht verwijs ik je naar de tutorials onder SQL. Daar wordt nader ingegaan op het maken van een juiste database en waar een juiste database aan moet voldoen. Voorlopig houd ik het bij een zeer simpele structuur.
Create Table Guestbook (
ID int(10) NOT NULL auto_increment,
Name Varchar(50) NOT NULL,
Email Varchar(50) NOT NULL,
Message Text NOT NULL,
PRIMARY KEY (ID)
) TYPE=MyISAM;
In dit schema staan de meest elementaire gegevens voor een gastenboek. De naam van een persoon, het e-mail adres en het bericht dat achter wordt gelaten. Dit kan natuurlijk altijd uitgebreider worden in de loop van de tijd. Voorlopig is dit meer dan genoeg. Nu ga ik verder met het uitdenken van de benodigde pagina's voor de site. Je moet een pagina hebben om de berichten te lezen, te plaatsen en te verwijderen. Dit laatste mag alleen de beheerder doen. Dit moet dus in een afgeschermd deel komen.
verbinding.php
<?php
$dbhost = "localhost";
$db = "database";
$username = "gebruiker";
$dbww = "wachtwoord";
?>
Allereerst maak ik een pagina met de gegevens over de database. Inmiddels moet dit bekend zijn. Doel is dat als je de scripts verplaatst naar een andere server, je alleen deze pagina moet aanpassen om het script te kunnen draaien. Vervolgens kan ik de pagina met het tonen van de berichten gaan maken.
toon.php
<?php
include("verbinding.php");
mysql_connect("$dbhost","$username","$dbww");
mysql_select_db("$db");
$query = "SELECT Name, Email, Message FROM Guestbook ORDER BY ID Desc";
$result = mysql_query($query) or die ("Mislukt!");
while($obj=mysql_fetch_object($result)){
$name = "$obj->Name";
$email = "$obj->Email";
$msg = "$obj->Message";
?>
<table>
<tr><td>Geplaatst door:</td>
<td><?php echo "$name;"?></td></tr>
<tr><td>Bericht:</td>
<td><?php echo "$msg;"?></td></tr>
</table>
<?php } ?>
<a href="toevoeg.php">Voeg een bericht toe...</a>
De berichten kunnen nu gelezen worden door de bezoekers van de site. Nu moet er nog een pagina komen waar de bezoeker de mogelijkheid krijgt om een bericht toe te voegen.
toevoeg.php
<?php
include("verbinding.php");
if ($_POST["submit"]) {
mysql_connect("$dbhost","$username","$dbww");
mysql_select_db("$db");
$_POST['naam'];
$_POST['email'];
$_POST['msg'];
$naam = htmlspecialchars($naam);
$email = htmlspecialchars($email);
$msg = htmlspecialchars($msg);
$naam = strip_tags($naam);
$email = strip_tags($email);
$msg = strip_tags($msg);
$msg = addslashes($msg);
$msg = eregi_replace('klote','***',$msg);
$msg = eregi_replace('kut','***',$msg);
$msg = nl2br($msg);
$sql = "INSERT INTO Guestbook SET Name='$naam', Email='$email', Message='$msg'";
$query = mysql_query($sql) or die("bericht niet geplaatst!");
echo "DB bijgewerkt, <a href=\"toon.php\">Ga naar gastenboek terug...</a>";
} else { ?>
<form method="post" action="<?php echo $PHP_SELF;?>">
Naam: <input type="text" name="naam"><br>
Email: <input type="text" name="email"><br>
Bericht: <textarea name="msg" rows="10" cols="10"></textarea><br>
<input type="submit" name="submit" value="submit">
</form>
<?php } ?>
Goed, nu zijn de belangrijkste pagina's klaar om een gastenboek te realiseren. Er is echter geen aandacht aan vormgeving gegeven. Ook heb ik nog geen admin pagina gemaakt voor het gastenboek. Daar zal ik in een later stadium op terug komen. Wel is het iets uitgebreider geworden dan ik in het begin in gedachte had. Ik heb een scheldwoordenfilter toegepast. De eregi_replace functie geeft de mogelijkheden bepaalde patronen uit een string te halen en te vervangen door een ander patroon. In dit geval worden er woorden gezocht met mogelijke scheldfunctie in zich. Deze woorden worden vervangen door ***. Natuurlijk kun je zelf het filter uitbreiden.
Naast een scheldwoorden filter worden ook alle mogelijke tags uitgeschakeld en worden mogelijke tekens binnen html omgezet in entiteitsnamen. Hiervoor zorgen de functie strip_tags en de functie htmlspecialchars. Daardoor wordt het de bezoeker erg moeilijk gemaakt om de boel te saboteren. Schadelijke javascript krijgt zo nooit een kans. Of het nu echt heel veilig is te noemen, wie zal het zeggen....
Een voorbeeld van dit gastenboek staat op deze site. Zie hierboven. Zo kun je een idee op doen om je gastenboek aan te kleden.
|