Ik beheer momenteel een website van een toneelvereniging die door iemand anders is gemaakt.
het HTML gedeelte kom ik prima uit, maar ik heb nooit PHP geleerd dus ik zit met een probleem.
De website heeft een gastenboek die prima werkt alleen de laatste paar dagen hebben wij last van een spambot
die continue berichten plaatst met links naar adressen die je liever niet wilt bezoeken.
Nu wil ik een simpele captcha in het gastenboek hebben die ervoor zorgt dat het spam ophoudt.
zouden jullie mij willen helpen wat ik precies in de code moet zetten en waar. Het hoeft niet ingewikkeld te zijn, het liefst een simpele code die ik erin plak waarmee het probleem is opgelost.
dit is de bron code van onze gastenboek.php
Bedankt iedereen!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>toneelvereniging</title>
<link href="style.css" rel="stylesheet" type="text/css" media="screen" />
<script src="Scripts/r>AC_RunActiveContent.js" type="text/javascript"></script>
<style type="text/css">
<!--
.style3 {
font-size: 40px;
font-weight: bold;
}
.style5 {
font-size: 32px;
font-family: "Lucida Calligraphy";
color: #000099;
}
.style6 {
font-family: "Lucida Calligraphy";
color: #FFFFFF;
}
.style8 {font-size: 16px}
.style10 {font-size: 18px; }
.style14 {
font-size: 32px;
font-family: "Lucida Calligraphy";
font-weight: bold;
color: #000099;
}
.style16 {
font-family: "Lucida Calligraphy";
font-size: 18px;
color: #000099;
}
.style15 {
font-size: 25px
}
.style18 {color: #0000FF; font-family: "Lucida Calligraphy";}
.style20 {color: #000099; font-weight: bold; font-size: 36px; }
.style21 {font-family: "Lucida Calligraphy"}
.style22 {font-size: 30px}
.style23 {font-size: 36px; color: #000099;}-->
</style>
</head>
<body>
<!-- hitwebcounter Code START -->
<div id="menu">
<li class="current_page_item style10 style6"><a href="index.html" class="style10">Home</a></li>
<li class="current_page_item style10 style6 "><a href="spelers.html">Spelers</a></li>
<li class="current_page_item style10 style6"><span class="style8"><span class="style10"><a href="foto's.html">Foto's</a></span></span></li>
<li class="current_page_item style10 style6"><span class="style8"><span class="style10"><a href="films.html">Films</a></span></span></li>
<li class="current_page_item style10 style6 "><a href="toneelvoorstellingen.html">Toneelvoorstelling en Agenda</a></li>
<li class="current_page_item style10 style6 "><a href="gastenboek.php">Gastenboek</a></li>
<li class="current_page_item style10 style6 "><a href="contact.html">Contact</a></li>
<li></li>
</ul>
</div>
<!-- end #menu -->
<div id="banner"><center>
</center></div>
<!-- end #header -->
<div id="page">
<div class="featured-post">
<div id="content.1">
<br/>
<div class="post">
<body background="images/achtergrond/achtergrond.jpg">
<?
//------------------------//
// DATABASE CONFIGURATIE //
//------------------------//
$mysql_user = "Geheim"; // je mysql login naam
$mysql_pass = "Geheim"; // je mysql wachtwoord
$mysql_host = "sql35.hostingdiscounter.nl"; // de host van je mysql database (localhost is meestal wel oke)
$mysql_dbn = "de-eendagsvlie-nl"; // de naam van je database
/*
Hier maakt hij een database connectie
Hij selecteert de database $mysql_dbn
Deze heb je hierboven aangegeven.
Vervolgens gebruikt hij als tweede argument,
Dit is dus na de komma, de verbinding met de
database.
Hiervoor worden $mysql_host, $mysql_user en $mysql_pass
gebruikt. Ook deze heb je hierboven bij de database
configuratie aangegeven.
De @ voor de functie mysql_select_db() en mysql_connect(),
staat voor het verbergen van eventuele foutmeldingen
die hij geeft. Dit is gedaan zodat je een eigen foutmelding
kan creeren wanneer de database connectie mislukt is.
De regel hieronder betekent dus:
Als er GEEN verbinding kan worden gemaakt, doe dan:
*/
if (!@mysql_select_db($mysql_dbn, @mysql_connect($mysql_host, $mysql_user, $mysql_pass)))
{
//--- De verbinding is nu dus mislukt, geef hier een melding van
echo "database connectie mislukt!";
//--- Zorg ervoor dat het script stopt.
exit();
}
/*
De verbinding is nu dus wel gelukt. Nu kijken we
of het formulier verstuurd is d.m.v. de POST methode.
Als dit het geval is, dan is het formulier ingevuld en opgestuurd.
POST = via de server verstuurd.
GET = via het URL adres verstuurd (bijv.: index.php?naam=Bas)
Kijk ook of de velden naam, email en bericht zijn ingevuld.
Dit doe je door te kijken of ze niet leeg zijn dus: !empty($_POST['veld_naam'])
Kijk voor de zekerheid ook of er een apenstaartje (@) zit in het
e-mail adres. Dit is niet super veilig maar voldoet voor nu. Dit
gebeurt d.m.v. de functie strstr() (zie: www.php.net/strstr)
*/
if ($_SERVER['REQUEST_METHOD'] == "POST" && !empty($_POST['naam']) && !empty($_POST['bericht']) )
{
//--- De datum staat als DATETIME gedefineerd in de database
//--- Dit is dan het juiste 'formaat', bijv: 2006-11-27 12:03:53
$datum = date('Y-m-d H:i:s');
//--- Voeg het bericht toe aan de database
$sql = "INSERT INTO phphulp_gastenboek SET ";
$sql .= "id = ''";
$sql .= ", naam = '" . $_POST['naam'] . "'";
$sql .= ", bericht = '" . $_POST['bericht'] . "'";
$sql .= ", datum = '" . $datum . "'";
//--- Voor de SQL code uit
$res = mysql_query($sql);
//--- Als het goed is gegaan, is $res niet leeg
if (!empty($res))
{
?>
<center>
<br>
<br>
<?
echo "<h1>Bericht toegevoegd </h1>";
?>
<br>
<?
echo "<p><h4>Bedankt voor u bericht. Het bericht is toegevoegd. Ga nu naar <a href=\"" . $_SERVER['PHP_SELF'] . "\" title=\"Berichten overzicht\">het berichten overzicht</h4></a>.";
}
//--- Het bericht is niet toegevoegd, problemen met de database!
//--- Je ziet dat hier geen akkolades worden gebruikt (dus: { en }). Omdat er
//--- Slechts 1 regel onder de 'else' moet worden uitgevoerd is dit niet nodig.
else
echo "Bericht NIET toegevoegd. Er is iets misgegaan met het invoeren in de database.";
}
//-------------------------------
// Voeg een nieuw bericht toe
//-------------------------------
/*
Als het GET is, wordt het dus meegegeven in het URL adres
Hier staat dus:
Als show=add in het URL adres staat, volg dan dit stukje.
Bijvoorbeeld: index.php?show=add
*/
elseif ($_GET['show'] == "add" || $_POST['show'] == "add")
{
?>
<center>
<?
echo "<h1>Voeg een bericht toe</h1>";
echo "<h4><p>Toon mij <u><b><a href=\"" . $_SERVER['PHP_SELF'] . "\" title=\"Berichten in gastenboek\">alle berichten in het gastenboek</h4></u></b></a>.</p>";
// Als het formulier verstuurd is, dan ben je hier eerder geweest. De velden zijn dan niet juist ingevuld.
if ($_SERVER['REQUEST_METHOD'] == "POST")
echo "<p>Je bent enkele velden vergeten in te vullen of je hebt geen juist e-mail adres ingevuld.</p>";
/*
Laat het formulier zien
Hier zie je dus ook: method=POST. Dit betekent dus dat het server-side verstuurd wordt en niet via de URL.
*/
echo "<form method=\"POST\" action=\"" . $_SERVER['PHP_SELF'] . "\">";
echo "<p>";
echo "<input type=\"hidden\" name=\"show\" value=\"add\" />";
echo "Naam:<br />";
/*
Als het eerder verstuurd is, zet dan de value goed. De functie htmlentities() zorgt
ervoor dat hij speciale tekens die de opmaak van de pagina zouden kunnen beinvloeden,
of ervoor kunnen zorgen dat iemand kwade bedoelingen heeft omgezet worden in zogehete
htmlentities. Dus: < wordt < ?wordt é enzovoort. Zie: www.php.net/htmlentities
*/
echo "<input type=\background-color= pink \"text\" name=\"naam\" value=\"" . htmlentities($_POST['naam']) . "\"><br />";
echo "Bericht:<br />";
echo "<textarea name=\"bericht\" rows=\"10\" cols=\"50\">" . htmlentities($_POST['bericht']) . "</textarea><br />";
echo "<input type=\"submit\" name=\"submit\" value=\" Bericht plaatsen \"></p>";
echo "</form>";
}
//-------------------------------
// Voeg een nieuw bericht toe
//-------------------------------
else
{
?>
<center>
<span class="style23"><span class="style21"><span class="style18">Gastenboek</span></span></span>
<?
echo "<p><h4>Voeg een <u><b><a href=\"" . $_SERVER['PHP_SELF'] . "?show=add\">nieuw bericht</a></b></u> toe aan het gastenboek.</h4></p> ";
/*
Hier worden de berichten geselecteerd uit de database
DATE_FORMAT(datum, ...) is nodig omdat (zoals eerder geschreven)
de datum als volgt in de database staat: 2006-11-27 12:02:53. Om
dit op zijn Nederlands te weergeven, gebruiken we de MySQL functie DATE_FORMAT.
De %d staat voor de dag, %m voor de maand en %Y voor het jaar dus: 27.11.2007
*/
$sql = "SELECT id,naam,email,bericht,DATE_FORMAT(datum, '%d.%m.%Y') as show_datum FROM phphulp_gastenboek ORDER BY datum DESC";
// Voer SQL code uit
$res = mysql_query($sql);
// Kijk of er 1 of meerdere rijen gevonden zijn
if (mysql_num_rows($res) >= 1)
{
// Toon elke rij tot dat er geen rijen meer zijn
while ($row = mysql_fetch_array($res))
{
$row['naam'] = nl2br(htmlentities($row['naam']));
$row['bericht'] = nl2br(htmlentities($row['bericht']));
?>
<center>
<div id="content.3">
<table border="1" bgcolor="D2691E" width="400" height="75" cellpadding="15">
<tr>
<?
echo "<p><td><a href=\"mailto:" . $row['email'] . "\">" . $row['naam'] . "</a> schreef op <i>" . $row['show_datum'] . "</i>:<br />";
echo $row['bericht'] . "</td></p></br></br>";
?>
</tr>
</table>
<?
}
}
// Er zijn geen rijen gevonden, geef aan dat er nog geen berichten zijn toegevoegd
else
echo "<p>Er zijn nog geen gastenboek berichten toegevoegd.</p>";
}
?>
</div>
<div class="entry"></div>
</div>
</center>
</body>
</html>