Scripts
MySQL gastenboek + installer
Dit is een gastenboek script dat ik vandaag gemaakt heb, simpel maar effectief. Users kunnen eens per sessie posten en er is spam protectie dmv md5 hashes. Tevens wordt input altijd gecontroleerd voordat het de database ingaat. Er zit een installer script bij waardoor je zelf helemaal niets hoeft te doen qua mysql databases
mysql-gastenboek-installer
installer.php
[code]
<html>
<head>
<style type="text/css">
.body
{
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:11px;
}
</style>
<title>
Guestbook Installer
</title>
</head>
<body class="body">
Welkom bij de guestbook installer, vul hier onder uw gegevens in en klik op zend om de configuratie aan te passen en de nodige databases en tabellen te creeeren:<br><br>
<form action="<?PHP echo $_SERVER['PHP_SELF']; ?>" method="post">
<table class="body">
<tr>
<td>
MySQL server adres:
</td>
<td>
<input type="text" name="host"><br><br>
</td>
</tr>
<tr>
<td>
MySQL username:
</td>
<td>
<input type="text" name="user"><br><br>
</td>
</tr>
<tr>
<td>
MySQL wachtwoord:
</td>
<td>
<input type="password" name="pass"><br><br>
</td>
</tr>
<tr>
<td>
Maximum aantal posts per pagina:
</td>
<td>
<input type="text" name="posts_per_page"><br><br>
</td>
</tr>
<tr>
<td>
Maximum aantal paginas met posts:
</td>
<td>
<input type="text" name="maximum_paginas"><br><br>
</td>
</tr>
<tr>
<td>
<input type="submit" name="submit" value="zend"><br><br>
</td>
</tr>
</table>
</form>
<?PHP
if(isset($_POST["submit"]))
{
$mysql = mysql_connect($_POST["host"],$_POST["user"],$_POST["pass"]) or die("De door u ingegeven gegevens waren niet correct!");
$sql = "
CREATE DATABASE IF NOT EXISTS guestbook;
";
$result = mysql_query($sql);
if($result == 1)
{
echo "De database is succesvol gemaakt of bestond al....<br><br>";
mysql_select_db("guestbook",$mysql);
$sql = "
CREATE TABLE IF NOT EXISTS berichten (
`id` INT( 4 ) NOT NULL AUTO_INCREMENT ,
`time` VARCHAR( 20 ) NOT NULL ,
`name` VARCHAR( 50 ) NOT NULL ,
`email` VARCHAR( 50 ) NOT NULL ,
`bericht` VARCHAR( 50 ) NOT NULL ,
`md5` VARCHAR( 250 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB
";
$result = mysql_query($sql);
if($result == 1)
{
echo "De tabel is succesvol gemaakt of bestond al....<br><br>";
edit_config();
}
else
{
echo "Er ging iets fout bij het creeeren van de tabel, bent u gemachtigd?<br><br>";
echo mysql_error();
}
}
else
{
echo "Er ging iets fout bij het creeeren van de database, bent u gemachtigd?<br><br>";
}
}
function edit_config()
{
$pointer = fopen("index.php","r+");
$inhoud = fread($pointer,filesize("index.php"));
$old = array(
"\$host = \"x\";",
"\$user = \"x\";",
"\$pass = \"x\";",
"\$db = \"x\";",
"\$posts_per_page = \"x\";",
"\$maximum_paginas = \"x\";"
);
$new = array(
"\$host = \"".$_POST["host"]."\";",
"\$user = \"".$_POST["user"]."\";",
"\$pass = \"".$_POST["pass"]."\";",
"\$db = \"guestbook\";",
"\$posts_per_page = \"".$_POST["posts_per_page"]."\";",
"\$maximum_paginas = \"".$_POST["maximum_paginas"]."\";",
);
$inhoud_nieuw = str_replace($old, $new, $inhoud);
rewind($pointer);
fwrite($pointer,$inhoud_nieuw);
fclose($pointer);
echo "Variabelen aangepast in index.php, als u in het vervolg configuratie veranderingen wilt doorvoeren moet u dit handmatig doen in index.php!";
}
?>
</body>
</html>
[/code]
index.php
[code]
<?PHP
//Het adres van de mysql server, bijna altijd localhost
$host = "x";
//De mysql username
$user = "x";
//Het mysql wachtwoord
$pass = "x";
//De gewenste database
$db = "x";
//Het maximale aantal posts dat je per pagina wilt laten zien
$posts_per_page = "x";
//Het maximale aantal paginas dat je bereikbaar wilt maken
$maximum_paginas = "x";
if($host == "x" || $user == "x" || $pass == "x" || $db == "x" || $posts_per_page == "x" || $maximum_paginas == "x")
{
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
session_start();
//Legt een verbinding met mysql
$mysql = mysql_connect($host,$user,$pass) or die("Error connecting to mysql!");
//Verbind met de database
mysql_select_db($db) or die("Error selecting database!");
?>
<html>
<head>
<style type="text/css">
.body
{
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:11px;
}
</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>
Name:
</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="zend"><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
echo mysql_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();
mysql_close($mysql);
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
$result = mysql_query($sql);
//Echot de eventuele mysql error
echo mysql_error();
//Ga rij voor rij de query uitvoeren en sla de waarden op in de array $row
while($row = mysql_fetch_row($result))
{
//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\">";
echo "<tr>";
echo "<td bgcolor=\"#CCCCCC\" width=\"300\">";
//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>";
echo "</tr>";
echo "<tr>";
echo "<td bgcolor=\"edecec\">";
//Echo het in deze rij opgehaalde bericht
echo $bericht;
echo "</td>";
echo "</tr>";
echo "<table>";
echo "<br>";
}
}
//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
$result = mysql_query($sql);
//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
$result = mysql_query($sql);
//Dit telt het aantal gevonden rijen, en daarmee dus het totaal aantal posts
$num = mysql_num_rows($result);
//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
echo "Pagina: ";
//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
echo "<br><br>";
}
}
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
$result = mysql_query($sql);
//Echot een eventuele mysql error
echo mysql_error();
//Zet het aantal resultaten in $num
$num = mysql_num_rows($result);
//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
if(count($email) > 1)
{
//Herdeclereert mail maar dan met . als separator
$email = explode(".",$_POST["email"]);
//Als er meer dan 1 elementen in de array zitten
if(count($email) > 1)
{
//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>
[/code]
Reacties
0