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>&nbsp;";
			}
		
		//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]
