Beveiliging gastenboek
Ik ben gister even bezig geweest met m'n gastenboek.. en hij is ook nog af xD edit.php en add.php zijn natuurlijk voor de admin.. Ik denk dat ik de admin weer ga beveiligen met het alleen toestaan van bepaalde ip's
Het script is in eerste instantie voor mijzelf, maar misschien dat ik het hier ook op PHPhulp ga zetten...
Er zitten al twee beveiligingen op tegen spam: captcha en antiflood..
Maar nog niet tegen sql injection.. daar heb ik nog niet erg veel verstand van en daarom vraag ik om jullie hulp!
Ik post hieronder mijn script,, welke beveiliging kan ik erbij doen? (misschien klein voorbeeldje erbij? :$)
Add.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<link href="style.css" rel="stylesheet" type="text/css">
<? include("antiflood.php"); ?> // gewoon antiflood ;)
<?php
include("config.php");
$tekst = ""; // standaard geen foutmelding ;)
$ip = $_SERVER['REMOTE_ADDR']; // even ip opvragen
if(!empty($_POST)){
if(empty($_POST["naam"])){
$tekst = "Er is geen naam ingevuld. <br>";
}
if(empty($_POST["email"])){
$tekst .= "Er is geen email ingevuld. <br>";
}
if(!eregi('^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3})?)$', $_POST["email"])) {
$tekst.= "Het ingevulde emailadres is niet geldig. <br>";
}
if(empty($_POST["bericht"])){
$tekst .= "Er is geen bericht ingevuld. <br>";
}
if (md5($_POST['norobot']) != $_SESSION['randomnr2']){
$tekst .= "Er is geen code ingevuld, of de code was verkeerd. <br>";
}
if(empty($tekst)){
$query = "INSERT gastenboek (id, naam, email, bericht, datum, tijd, ip)";
$query .= "VALUES ('', '";
$query .= $_POST["naam"] . "', '";
$query .= $_POST["email"] . "', '";
$query .= $_POST["bericht"] . "', '";
$query .= $_POST["datum"] . "', '";
$query .= $_POST["tijd"] . "', '";
$query .= $_POST["ip"] . "')";
if(!mysql_query($query)){
echo "Het toevoegen van het bericht is mislukt.";
mysql_close($db);
exit;
} else {
echo "Het bericht is toegevoegd! <br> U wordt na 5 seconden doorgestuurd naar het gastenboek. <br> Als dit niet gebeurt of als u geen geluld heeft, klik dan <a href='index.php'>hier</a>.";
mysql_close($db);
echo "<meta http-equiv='REFRESH' content='5; URL=index.php'>";
}
} else {
echo $tekst;
}
} else {
?>
<form name="gb" method="post" action="<? echo $_SERVER["PHP_SELF"]; ?>">
Naam: <input type="text" name="naam"> <br>
Email: <input type="text" name="email"> <br>
Bericht: <br> <textarea name="bericht"></textarea> <br>
Typ de volgende code over: <br>
<img src="captcha.php" style="margin-bottom: -6px;"> <input class="input" type="text" name="norobot"> <br><br>
<input type="hidden" name="datum" value="<? echo date("Y"); ?>">
<input type="hidden" name="tijd" value="<? echo date("M"); ?>">
<input type="hidden" name="ip" value="<? echo $ip ?>">
<input type="submit" value="Toevoegen">
<input type="reset" value="Leegmaken">
</form>
<? } ?>
<? include("antiflood.php"); ?> // gewoon antiflood ;)
<?php
include("config.php");
$tekst = ""; // standaard geen foutmelding ;)
$ip = $_SERVER['REMOTE_ADDR']; // even ip opvragen
if(!empty($_POST)){
if(empty($_POST["naam"])){
$tekst = "Er is geen naam ingevuld. <br>";
}
if(empty($_POST["email"])){
$tekst .= "Er is geen email ingevuld. <br>";
}
if(!eregi('^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3})?)$', $_POST["email"])) {
$tekst.= "Het ingevulde emailadres is niet geldig. <br>";
}
if(empty($_POST["bericht"])){
$tekst .= "Er is geen bericht ingevuld. <br>";
}
if (md5($_POST['norobot']) != $_SESSION['randomnr2']){
$tekst .= "Er is geen code ingevuld, of de code was verkeerd. <br>";
}
if(empty($tekst)){
$query = "INSERT gastenboek (id, naam, email, bericht, datum, tijd, ip)";
$query .= "VALUES ('', '";
$query .= $_POST["naam"] . "', '";
$query .= $_POST["email"] . "', '";
$query .= $_POST["bericht"] . "', '";
$query .= $_POST["datum"] . "', '";
$query .= $_POST["tijd"] . "', '";
$query .= $_POST["ip"] . "')";
if(!mysql_query($query)){
echo "Het toevoegen van het bericht is mislukt.";
mysql_close($db);
exit;
} else {
echo "Het bericht is toegevoegd! <br> U wordt na 5 seconden doorgestuurd naar het gastenboek. <br> Als dit niet gebeurt of als u geen geluld heeft, klik dan <a href='index.php'>hier</a>.";
mysql_close($db);
echo "<meta http-equiv='REFRESH' content='5; URL=index.php'>";
}
} else {
echo $tekst;
}
} else {
?>
<form name="gb" method="post" action="<? echo $_SERVER["PHP_SELF"]; ?>">
Naam: <input type="text" name="naam"> <br>
Email: <input type="text" name="email"> <br>
Bericht: <br> <textarea name="bericht"></textarea> <br>
Typ de volgende code over: <br>
<img src="captcha.php" style="margin-bottom: -6px;"> <input class="input" type="text" name="norobot"> <br><br>
<input type="hidden" name="datum" value="<? echo date("Y"); ?>">
<input type="hidden" name="tijd" value="<? echo date("M"); ?>">
<input type="hidden" name="ip" value="<? echo $ip ?>">
<input type="submit" value="Toevoegen">
<input type="reset" value="Leegmaken">
</form>
<? } ?>
delete.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
include("config.php");
if(isset($_POST["bevestiging"])){
$query = "DELETE FROM gastenboek WHERE id='" . $_POST["id"] ."'";
mysql_query($query);
echo "Het bericht is verwijderd.";
} else {
$query = "SELECT * FROM gastenboek WHERE id='" . $_GET["id"] . "'";
$resultaat = mysql_query($query);
?>
Wilt u het volgende bericht verwijderen? <br><br>
<?php
while(list($id, $naam, $email, $bericht, $datum, $tijd, $ip) = mysql_fetch_row($resultaat)){
echo "Naam: $naam <br>";
echo "Email: $email <br>";
echo "Bericht: $bericht <br><br>";
}
?>
<form action="<? echo $_SERVER["PHP_SELF"]; ?>" method="post">
<input type="hidden" name="bevestiging" value="1">
<input type="hidden" name="id" value="<? echo $_GET["id"]; ?>">
<input type="submit" value="Verwijderen">
<input type="button" value="Nee, terug" onclick="javascript:history.go(-1);">
</form>
<?php
}
?>
include("config.php");
if(isset($_POST["bevestiging"])){
$query = "DELETE FROM gastenboek WHERE id='" . $_POST["id"] ."'";
mysql_query($query);
echo "Het bericht is verwijderd.";
} else {
$query = "SELECT * FROM gastenboek WHERE id='" . $_GET["id"] . "'";
$resultaat = mysql_query($query);
?>
Wilt u het volgende bericht verwijderen? <br><br>
<?php
while(list($id, $naam, $email, $bericht, $datum, $tijd, $ip) = mysql_fetch_row($resultaat)){
echo "Naam: $naam <br>";
echo "Email: $email <br>";
echo "Bericht: $bericht <br><br>";
}
?>
<form action="<? echo $_SERVER["PHP_SELF"]; ?>" method="post">
<input type="hidden" name="bevestiging" value="1">
<input type="hidden" name="id" value="<? echo $_GET["id"]; ?>">
<input type="submit" value="Verwijderen">
<input type="button" value="Nee, terug" onclick="javascript:history.go(-1);">
</form>
<?php
}
?>
edit.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<link href="style.css" rel="stylesheet" type="text/css">
<?php
session_start();
include("config.php");
$tekst = "";
if(isset($_POST["bevestiging"])){
if(empty($_POST["naam"])){
$tekst = "Er is geen naam ingevuld. <br>";
}
if(empty($_POST["email"])){
$tekst .= "Er is geen email ingevuld. <br>";
}
if(!eregi('^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3})?)$', $_POST["email"])) {
$tekst.= "Het ingevulde emailadres is niet geldig. <br>";
}
if(empty($_POST["bericht"])){
$tekst .= "Er is geen bericht ingevuld. <br>";
}
if (md5($_POST['norobot']) != $_SESSION['randomnr2']){
$tekst .= "Er is geen code ingevuld, of de code was verkeerd. <br>";
}
if(empty($tekst)){
$query = "UPDATE gastenboek SET
naam = '". $_POST["naam"] ."',
email = '". $_POST["email"] ."',
bericht = '". $_POST["bericht"] ."'
WHERE id='". $_POST["id"] ."'";
if(!mysql_query($query)){
echo "Het wijzigen van het bericht is mislukt.";
mysql_close($db);
exit;
} else {
echo "Het bericht is gewijzigd!";
mysql_close($db);
}
} else {
echo $tekst;
}
} else {
$query = "SELECT * FROM gastenboek WHERE id='". $_GET["id"] ."'";
$resultaat = mysql_query($query);
while(list($id, $naam, $email, $bericht) = mysql_fetch_row($resultaat)){
$nm = $naam;
$el = $email;
$bt = $bericht;
}
?>
<h3>Wijzig een bericht</h3>
<form action="<? echo $_SERVER["PHP_SELF"]; ?>" method="post">
<input type="hidden" name="bevestiging" value="1">
<input type="hidden" name="id" value="<? echo $_GET["id"]; ?>">
Naam: <input type="text" name="naam" value="<? echo $nm; ?>"> <br>
Email: <input type="text" name="email" value="<? echo $el; ?>"> <br>
Bericht: <textarea name="bericht"><? echo $bt; ?></textarea> <br>
Typ de volgende code over: <br>
<img src="captcha.php" style="margin-bottom: -6px;"> <input class="input" type="text" name="norobot"> <br><br>
<input type="submit" value="Bijwerken">
<input type="button" value="Nee, terug" onclick="javascript:history.go(-1);">
</form>
<?php
}
?>
<?php
session_start();
include("config.php");
$tekst = "";
if(isset($_POST["bevestiging"])){
if(empty($_POST["naam"])){
$tekst = "Er is geen naam ingevuld. <br>";
}
if(empty($_POST["email"])){
$tekst .= "Er is geen email ingevuld. <br>";
}
if(!eregi('^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3})?)$', $_POST["email"])) {
$tekst.= "Het ingevulde emailadres is niet geldig. <br>";
}
if(empty($_POST["bericht"])){
$tekst .= "Er is geen bericht ingevuld. <br>";
}
if (md5($_POST['norobot']) != $_SESSION['randomnr2']){
$tekst .= "Er is geen code ingevuld, of de code was verkeerd. <br>";
}
if(empty($tekst)){
$query = "UPDATE gastenboek SET
naam = '". $_POST["naam"] ."',
email = '". $_POST["email"] ."',
bericht = '". $_POST["bericht"] ."'
WHERE id='". $_POST["id"] ."'";
if(!mysql_query($query)){
echo "Het wijzigen van het bericht is mislukt.";
mysql_close($db);
exit;
} else {
echo "Het bericht is gewijzigd!";
mysql_close($db);
}
} else {
echo $tekst;
}
} else {
$query = "SELECT * FROM gastenboek WHERE id='". $_GET["id"] ."'";
$resultaat = mysql_query($query);
while(list($id, $naam, $email, $bericht) = mysql_fetch_row($resultaat)){
$nm = $naam;
$el = $email;
$bt = $bericht;
}
?>
<h3>Wijzig een bericht</h3>
<form action="<? echo $_SERVER["PHP_SELF"]; ?>" method="post">
<input type="hidden" name="bevestiging" value="1">
<input type="hidden" name="id" value="<? echo $_GET["id"]; ?>">
Naam: <input type="text" name="naam" value="<? echo $nm; ?>"> <br>
Email: <input type="text" name="email" value="<? echo $el; ?>"> <br>
Bericht: <textarea name="bericht"><? echo $bt; ?></textarea> <br>
Typ de volgende code over: <br>
<img src="captcha.php" style="margin-bottom: -6px;"> <input class="input" type="text" name="norobot"> <br><br>
<input type="submit" value="Bijwerken">
<input type="button" value="Nee, terug" onclick="javascript:history.go(-1);">
</form>
<?php
}
?>
index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
include("config.php");
$query = "SELECT * FROM gastenboek";
$resultaat = mysql_query($query, $db);
mysql_close($db);
?>
<h3>Gastenboek</h3>
<?php
while(list($id, $naam, $email, $bericht, $datum, $tijd, $ip) = mysql_fetch_row($resultaat)){
echo "$naam <br>";
echo "$email <br>";
echo "$bericht <br>";
echo "<font color='grey'>Geschreven op $datum om $tijd</font>";
echo "<hr>";
}
?>
include("config.php");
$query = "SELECT * FROM gastenboek";
$resultaat = mysql_query($query, $db);
mysql_close($db);
?>
<h3>Gastenboek</h3>
<?php
while(list($id, $naam, $email, $bericht, $datum, $tijd, $ip) = mysql_fetch_row($resultaat)){
echo "$naam <br>";
echo "$email <br>";
echo "$bericht <br>";
echo "<font color='grey'>Geschreven op $datum om $tijd</font>";
echo "<hr>";
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Dick oo
mysql_real_escape_string() om $_GET en $_POST variabelen die een string bevatten. $_GET en $_POST variabelen die een integer bevatten, moet je casten:
Even over je script zelf:
- Je controleert of een formulier is verzonden op de volgende manier:
Niet met empty($_POST) of isset($_POST['submit']).
- Gebruik mysql_fetch_assoc() i.p.v mysql_fetch_row(). Veel sneller.
- Waarom dat?
- Om een getal hoeven geen quotes in een query. Die kunnen er gewoon zo in.
- Variabelen buiten quotes!
- Al dat mysql_close() is op zich overbodig...
- Waarom heb je bij edit.php session_start() staan? Je werkt helemaal niet met sessies...
- Je kunt beter $_SERVER['REQUEST_URI'] gebruiken i.p.v. $_SERVER['PHP_SELF'].
- Je kunt ook beter preg_match() gebruiken i.p.v. eregi(). Ereg_* functies gaan er met PHP6 uit, je kunt beter daar al voorbereid op zijn voordat je ineens al je scripts moet ombouwen.
- Gebruik geen <font>-tags! Daar is <span> voor. Font is verouderd en lelijk.
- Gebruik de tags volledig, geen shorttags. (<?php ?> i.p.v. <? ?>)
Nja er is op zich nog wel meer. Maar dat is voor nu nog niet zo belangrijk. Zorg eerst maar eens dat bovenstaande punten opgelost zijn.
Even over je script zelf:
- Je controleert of een formulier is verzonden op de volgende manier:
Niet met empty($_POST) of isset($_POST['submit']).
- Gebruik mysql_fetch_assoc() i.p.v mysql_fetch_row(). Veel sneller.
- Waarom dat?
- Om een getal hoeven geen quotes in een query. Die kunnen er gewoon zo in.
- Variabelen buiten quotes!
- Al dat mysql_close() is op zich overbodig...
- Waarom heb je bij edit.php session_start() staan? Je werkt helemaal niet met sessies...
- Je kunt beter $_SERVER['REQUEST_URI'] gebruiken i.p.v. $_SERVER['PHP_SELF'].
- Je kunt ook beter preg_match() gebruiken i.p.v. eregi(). Ereg_* functies gaan er met PHP6 uit, je kunt beter daar al voorbereid op zijn voordat je ineens al je scripts moet ombouwen.
- Gebruik geen <font>-tags! Daar is <span> voor. Font is verouderd en lelijk.
- Gebruik de tags volledig, geen shorttags. (<?php ?> i.p.v. <? ?>)
Nja er is op zich nog wel meer. Maar dat is voor nu nog niet zo belangrijk. Zorg eerst maar eens dat bovenstaande punten opgelost zijn.
Ik ga er vanmiddag even rustig voor zitten en even nakijken ;)
Ik gebruik wel sessies, met de captcha ;)
Én met de antiflood
Controleren of een form gepost is met $_SERVER['REQUEST_METHOD'].
Ereg is oud, gebruik liever preg_*.
Deze regel klopt niet: if (md5($_POST['norobot']) != $_SESSION['randomnr2']){ (regel 28).
Gebruik mysql_real_escape_string.
Selecteer niet *, maar alles wat je wilt hebben. * kan voor problemen zorgen, bovendien is het overzichtelijker om te zien wat je selecteerd.
Vervang echo "<meta http-equiv='REFRESH' content='5; URL=index.php'>"; door een header.
Waar is <html><head> en <body>?
delete.php
Zelfde manier form post controle als hierboven.
Selecteer niet *, maar alles wat je wilt hebben. * kan voor problemen zorgen, bovendien is het overzichtelijker om te zien wat je selecteerd.
Met mysql_fetch_assoc hoef je de data niet met list in vars stoppen, dan kan je de data gewoon als array benaderen.
Gebruik mysql_real_escape_string.
Variabelen buiten quotes.
Waar is <html><head> en <body>?
edit.php
Session_start moet voordat er enig data naar de browser is verstuurt worden aangeroepen (als je gebruik maakt van cookies).
De rest van Add.php is hier ook van toepassing.
index.php
Selecteer niet *, maar alles wat je wilt hebben. * kan voor problemen zorgen, bovendien is het overzichtelijker om te zien wat je selecteerd.
Waar is de foutafhandeling van de sql?
Variabelen buiten quotes.
Met mysql_fetch_assoc hoef je de data niet met list in vars stoppen, dan kan je de data gewoon als array benaderen.
Quote:
Ik gebruik wel sessies, met de captcha ;)
Én met de antiflood
Én met de antiflood
Waarom dan alleen in edit.php? Die moet dan toch overal terugkomen?
Nee dat hoeft niet, tis alleen beveiliging dat je niet zoveel berichten elke keer plaatst. Anders kan je bv maximaal 15 paginas zien in 1 minuut...
Doe ik het nu goed qua beveiliging?
Aan of opmerkingen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
## add.php
<?php
session_start(); // zorg ervoor dat dit helemaal bovenaan de pagina staat!
include_once("connect.php"); // vereist voor het verbinden met de MySQL database
$tekst = ""; // als er iets niet ingevuld is komt hier de foutmelding in staan
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(empty($_POST['naam'])){
$tekst .= "Geen naam ingevuld. <br>";
}
if(empty($_POST['email'])){
$tekst .= "Geen email ingevuld. <br>";
} else {
if(!preg_match('^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3})?)$^', $_POST["email"])) {
$tekst.= "Het ingevulde emailadres is niet geldig. <br>";
}
}
if(empty($_POST['bericht'])){
$tekst .= "Geen bericht ingevuld. <br>";
}
if(empty($_POST['norobot'])){
$tekst .= "Geen verificatiecode ingevuld. <br>";
} else {
if (md5($_POST['norobot']) != $_SESSION['randomnr2']){
$tekst .= "Verificatiecode is niet goed. <br>";
}
}
if(empty($tekst)){
$query = "INSERT berichten (id, naam, email, bericht, datum, tijd, verberg, ip) ";
$query .= "VALUES ('', '";
$query .= mysql_real_escape_string($_POST['naam']) . "', '";
$query .= mysql_real_escape_string($_POST['email']) . "', '";
$query .= mysql_real_escape_string($_POST['bericht']) ."', '";
$query .= $_POST['datum'] . "', '";
$query .= $_POST['tijd'] . "', '";
$query .= mysql_real_escape_string($_POST['verberg']) . "', '";
$query .= $_POST['ip'] . "')";
if(!mysql_query($query)){
// fout tijdens INSERT
echo "Je bericht kon niet toegevoegd worden. Er is een email gestuurd naar de administrator.";
exit;
} else {
header("location:" . $lezen);
}
} else {
echo $tekst;
}
} else {
?>
<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<input type="hidden" value="<?php echo date("H:i"); ?>" name="tijd">
<input type="hidden" value="<?php echo date("d-m-Y"); ?>" name="datum">
<input type="hidden" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" name="ip">
<table>
<tr>
<td><img src="images/naam.png"> Naam:</td> <td><input type="text" name="naam" class="button"></td>
</tr>
<tr>
<td><img src="images/email.png"> Email:</td> <td><input type="text" name="email" class="button"></td>
</tr>
<tr>
<td></td> <td><input type="checkbox" name="verberg" value="1" alt="Verberg mijn email"> <span style="color:grey;font-size:11px;">verberg email</span></td>
</tr>
<tr>
<td><img src="images/bericht.gif"> Bericht:</td> <td><textarea class="textarea" name="bericht"></textarea> </td>
</tr>
<tr>
<td><img src="images/key.png"> Verificatiecode:</td> <td><img src="captcha.php"> <input class="input" type="text" name="norobot"></td>
</tr>
<tr>
<td></td><td><input type="submit" value="Verzenden"> <input type="reset" value="Wissen"></td>
</td>
</table>
</form>
<?php } ?>
<?php
session_start(); // zorg ervoor dat dit helemaal bovenaan de pagina staat!
include_once("connect.php"); // vereist voor het verbinden met de MySQL database
$tekst = ""; // als er iets niet ingevuld is komt hier de foutmelding in staan
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(empty($_POST['naam'])){
$tekst .= "Geen naam ingevuld. <br>";
}
if(empty($_POST['email'])){
$tekst .= "Geen email ingevuld. <br>";
} else {
if(!preg_match('^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3})?)$^', $_POST["email"])) {
$tekst.= "Het ingevulde emailadres is niet geldig. <br>";
}
}
if(empty($_POST['bericht'])){
$tekst .= "Geen bericht ingevuld. <br>";
}
if(empty($_POST['norobot'])){
$tekst .= "Geen verificatiecode ingevuld. <br>";
} else {
if (md5($_POST['norobot']) != $_SESSION['randomnr2']){
$tekst .= "Verificatiecode is niet goed. <br>";
}
}
if(empty($tekst)){
$query = "INSERT berichten (id, naam, email, bericht, datum, tijd, verberg, ip) ";
$query .= "VALUES ('', '";
$query .= mysql_real_escape_string($_POST['naam']) . "', '";
$query .= mysql_real_escape_string($_POST['email']) . "', '";
$query .= mysql_real_escape_string($_POST['bericht']) ."', '";
$query .= $_POST['datum'] . "', '";
$query .= $_POST['tijd'] . "', '";
$query .= mysql_real_escape_string($_POST['verberg']) . "', '";
$query .= $_POST['ip'] . "')";
if(!mysql_query($query)){
// fout tijdens INSERT
echo "Je bericht kon niet toegevoegd worden. Er is een email gestuurd naar de administrator.";
exit;
} else {
header("location:" . $lezen);
}
} else {
echo $tekst;
}
} else {
?>
<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<input type="hidden" value="<?php echo date("H:i"); ?>" name="tijd">
<input type="hidden" value="<?php echo date("d-m-Y"); ?>" name="datum">
<input type="hidden" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" name="ip">
<table>
<tr>
<td><img src="images/naam.png"> Naam:</td> <td><input type="text" name="naam" class="button"></td>
</tr>
<tr>
<td><img src="images/email.png"> Email:</td> <td><input type="text" name="email" class="button"></td>
</tr>
<tr>
<td></td> <td><input type="checkbox" name="verberg" value="1" alt="Verberg mijn email"> <span style="color:grey;font-size:11px;">verberg email</span></td>
</tr>
<tr>
<td><img src="images/bericht.gif"> Bericht:</td> <td><textarea class="textarea" name="bericht"></textarea> </td>
</tr>
<tr>
<td><img src="images/key.png"> Verificatiecode:</td> <td><img src="captcha.php"> <input class="input" type="text" name="norobot"></td>
</tr>
<tr>
<td></td><td><input type="submit" value="Verzenden"> <input type="reset" value="Wissen"></td>
</td>
</table>
</form>
<?php } ?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## index.php
<?php
include_once("connect.php");
$query = mysql_query("SELECT naam,email,bericht,datum,tijd,verberg FROM berichten");
while($geg = mysql_fetch_assoc($query)){
if($geg['verberg'] == 0){
$poster = '<a href="mailto:' . $geg['email'] . '">' . $geg['naam'] . '</a>';
} else {
$poster = $geg['naam'];
}
echo "<p><div class=\"comments\" id=\"head\"><b>" . $poster . "</b> " . $geg['datum'] . " @ " . $geg['tijd'] . "<span style=\"float:right\"><a href=\"#\">Quote</a></span></div>
<div class=\"comments\" id=\"bericht\">" . $geg['bericht'] . "</div>
<div class=\"comments\" id=\"clear\"></div></p>";
}
echo "<a href=\"toevoegen.php\">Bericht toevoegen</a>";
?>
<?php
include_once("connect.php");
$query = mysql_query("SELECT naam,email,bericht,datum,tijd,verberg FROM berichten");
while($geg = mysql_fetch_assoc($query)){
if($geg['verberg'] == 0){
$poster = '<a href="mailto:' . $geg['email'] . '">' . $geg['naam'] . '</a>';
} else {
$poster = $geg['naam'];
}
echo "<p><div class=\"comments\" id=\"head\"><b>" . $poster . "</b> " . $geg['datum'] . " @ " . $geg['tijd'] . "<span style=\"float:right\"><a href=\"#\">Quote</a></span></div>
<div class=\"comments\" id=\"bericht\">" . $geg['bericht'] . "</div>
<div class=\"comments\" id=\"clear\"></div></p>";
}
echo "<a href=\"toevoegen.php\">Bericht toevoegen</a>";
?>
Gewijzigd op 01/01/1970 01:00:00 door dick oo
Je doet twee keer $datum, $tijd, $ip aanmaken, waarom? Bovendien kan je in de database een veld van het type datetime maken waarin je gewoon NOW() kan stoppen. (En je genereert die waarden met php dus hoeft er geen mysql_real_escape_string over.)
Wat is $lezen?
Je hebt nog steeds halve html pagina's.
Waarom staan die datum en tijd in een hidden input in de form?
Waar is de foutafhandeling van de sql?
Ik weet niet of iedereen d'r wel op zit te wachten dat je dat email adres gewoon met een mailto op je pagina's neer zet.
Twee keer t zelfde is een fout omdat ik erachter kwam dat iets niet werkte.
Ik wil er geen complete HTML pagina van gaan maken, want miss wil ik het publiceren en dan moet het gemakkelijk in te bouwen zijn.
$lezen is de pagina waar je heen gaat als je iets hebt geplaats, die staat ingesteld in connect.php ;)
En daarom kun je ook je email verbergen!
Met de hidden inputs vind ik het zo het makkelijkst. Misschien dat ik die hidden inputs weghaal en die in een string zet vlak voor de query. Dat wel goed?
Deels aangepast.
Waar moet ik nog foutafhandeling en hoe? Weer met "or die()"?
Gewijzigd op 01/01/1970 01:00:00 door dick oo
Ik post hieronder even de belangrijkste delen, de style enzo is niet nodig :P
Waar moet ik allemaal nog foutafhandeling dan? En hoe? Volgens mij heb ik al heeeeeeeeeeeel veeel.
Ik ben nog bezig HTML tags enzovoort toe te voegen, dat doe ik liever als laatste, 't makkelijkst ;P Ohja in connect.php staat wel doctype enzovoort, anders worden de berichten qua opmaak niet goed xD
* Beveiligd tegen mysql injection
* Captcha
* Lege velden controle
* Pagination
* Admin: berichten bewerken en verwijderen, tabel legen
ToDo:
* UBB functie
* Adminpagina beveiligen
* HTML opmaken
Hebben jullie ook nog ideeen om erin te doen?
Graag op-/aanmerkingen :)
add.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
session_start(); // zorg ervoor dat dit helemaal bovenaan de pagina staat!
require("connect.php"); // vereist voor het verbinden met de MySQL database
$tekst = ""; // als er iets niet ingevuld is komt hier de foutmelding in staan
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(empty($_POST['naam'])){
$tekst .= "Geen naam ingevuld. <br>";
}
if(empty($_POST['email'])){
$tekst .= "Geen email ingevuld.<br>";
} else {
if(!preg_match('^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3})?)$^', $_POST["email"])) {
$tekst.= "Het ingevulde emailadres is niet geldig. <br>";
}
}
if(empty($_POST['bericht'])){
$tekst .= "Geen bericht ingevuld.<br>";
}
if(empty($_POST['norobot'])){
$tekst .= "Geen verificatiecode ingevuld. <br>";
} else {
if (md5($_POST['norobot']) != $_SESSION['randomnr2']){
$tekst .= "Verificatiecode is niet goed. <br>";
}
}
if(empty($tekst)){
$datum = date("d-m-Y");
$tijd = date("H:i");
$ip = $_SERVER['REMOTE_ADDR'];
$query = "INSERT berichten (id, naam, email, bericht, datum, tijd, verberg, ip) ";
$query .= "VALUES ('', '";
$query .= mysql_real_escape_string($_POST['naam']) . "', '";
$query .= mysql_real_escape_string($_POST['email']) . "', '";
$query .= mysql_real_escape_string($_POST['bericht']) ."', '";
$query .= $datum . "', '";
$query .= $tijd . "', '";
$query .= mysql_real_escape_string($_POST['verberg']) . "', '";
$query .= $ip . "')";
if(!mysql_query($query)){
// fout tijdens INSERT
echo "Je bericht kon niet toegevoegd worden. Er is een email gestuurd naar de administrator.";
exit;
} else {
if($mail == 1){
mail($email, $onderwerp, $bericht, $header);
}
header("location:" . $lezen);
}
} else {
echo "<span style=\"color:red;\">" . $tekst . "</span>";
}
} else {
?>
<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<table>
<tr>
<td><img src="images/naam.png"> Naam:</td> <td><input type="text" name="naam" class="button"></td>
</tr>
<tr>
<td><img src="images/email.png"> Email:</td> <td><input type="text" name="email" class="button"></td>
</tr>
<tr>
<td></td> <td><input type="checkbox" name="verberg" value="1" alt="Verberg mijn email"> <span style="color:grey;font-size:11px;">verberg email</span></td>
</tr>
<tr>
<td><img src="images/bericht.gif"> Bericht:</td> <td><textarea class="textarea" name="bericht"></textarea> </td>
</tr>
<tr>
<td><img src="images/key.png"> Verificatiecode:</td> <td><img src="captcha.php"> <input class="input" type="text" name="norobot"></td>
</tr>
<tr>
<td></td><td><input type="submit" value="Verzenden"> <input type="reset" value="Wissen"></td>
</td>
</table>
</form>
<?php } ?>
session_start(); // zorg ervoor dat dit helemaal bovenaan de pagina staat!
require("connect.php"); // vereist voor het verbinden met de MySQL database
$tekst = ""; // als er iets niet ingevuld is komt hier de foutmelding in staan
if($_SERVER['REQUEST_METHOD'] == "POST") {
if(empty($_POST['naam'])){
$tekst .= "Geen naam ingevuld. <br>";
}
if(empty($_POST['email'])){
$tekst .= "Geen email ingevuld.<br>";
} else {
if(!preg_match('^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3})?)$^', $_POST["email"])) {
$tekst.= "Het ingevulde emailadres is niet geldig. <br>";
}
}
if(empty($_POST['bericht'])){
$tekst .= "Geen bericht ingevuld.<br>";
}
if(empty($_POST['norobot'])){
$tekst .= "Geen verificatiecode ingevuld. <br>";
} else {
if (md5($_POST['norobot']) != $_SESSION['randomnr2']){
$tekst .= "Verificatiecode is niet goed. <br>";
}
}
if(empty($tekst)){
$datum = date("d-m-Y");
$tijd = date("H:i");
$ip = $_SERVER['REMOTE_ADDR'];
$query = "INSERT berichten (id, naam, email, bericht, datum, tijd, verberg, ip) ";
$query .= "VALUES ('', '";
$query .= mysql_real_escape_string($_POST['naam']) . "', '";
$query .= mysql_real_escape_string($_POST['email']) . "', '";
$query .= mysql_real_escape_string($_POST['bericht']) ."', '";
$query .= $datum . "', '";
$query .= $tijd . "', '";
$query .= mysql_real_escape_string($_POST['verberg']) . "', '";
$query .= $ip . "')";
if(!mysql_query($query)){
// fout tijdens INSERT
echo "Je bericht kon niet toegevoegd worden. Er is een email gestuurd naar de administrator.";
exit;
} else {
if($mail == 1){
mail($email, $onderwerp, $bericht, $header);
}
header("location:" . $lezen);
}
} else {
echo "<span style=\"color:red;\">" . $tekst . "</span>";
}
} else {
?>
<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<table>
<tr>
<td><img src="images/naam.png"> Naam:</td> <td><input type="text" name="naam" class="button"></td>
</tr>
<tr>
<td><img src="images/email.png"> Email:</td> <td><input type="text" name="email" class="button"></td>
</tr>
<tr>
<td></td> <td><input type="checkbox" name="verberg" value="1" alt="Verberg mijn email"> <span style="color:grey;font-size:11px;">verberg email</span></td>
</tr>
<tr>
<td><img src="images/bericht.gif"> Bericht:</td> <td><textarea class="textarea" name="bericht"></textarea> </td>
</tr>
<tr>
<td><img src="images/key.png"> Verificatiecode:</td> <td><img src="captcha.php"> <input class="input" type="text" name="norobot"></td>
</tr>
<tr>
<td></td><td><input type="submit" value="Verzenden"> <input type="reset" value="Wissen"></td>
</td>
</table>
</form>
<?php } ?>
admin.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
<head>
<link type="text/css" rel="stylesheet" href="style_admin.css">
<title>Administrator Gastenboek © </title>
</head>
<body>
<?php
// Verbinden met de database
require("connect.php");
// Aantal entries in tabel tellen
$count = mysql_query("SELECT COUNT(id) FROM berichten");
$totaal = mysql_result($count, 0);
// Query om gegevens uit de tabel te halen
$query = mysql_query("SELECT id,naam,email,bericht,datum,tijd,ip FROM berichten");
// Datum in een array
$Maand = array("", "januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december");
$dag = date("d");
$maand = date("n");
$jaar = date("Y");
$tijd = date("H:i");
$beginjaar = 2007;
// Gegevens weergeven
echo "<div id=\"container\">";
echo "<h1 style=\"text-align: center;\"><a href=\"" . $admin . "\">Administrator</a></h1> <br>";
// Eventuele actie ophalen, anders gegevens weergeven
if($totaal == 0){
echo "Er zijn geen berichten.";
} else if(isset($_GET['action'])){
$action = $_GET['action'];
if($action == 'clearTable'){
echo "<h3>Tabel legen</h3>";
if($_SERVER['REQUEST_METHOD'] == "POST") {
mysql_query("TRUNCATE TABLE " . $tabel);
echo "De tabel is leeggemaakt. <br><br> Je wordt na 5 seconden teruggestuurd naar de adminpagina.";
header("Refresh: 5; URL=\"" . $admin . "\"");
} else {
?>
Weet je zeker dat je de hele tabel "<?php echo $tabel; ?>" wilt legen? <br><br>
Deze actie kan niet ongedaan worden.
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" name="clear" method="post"> <br>
<input type="submit" value="Legen"> <input type="button" value="Nee, terug" onClick="window.open('<?php echo $admin; ?>','_self')">
</form>
<?php
}
}
if($action == 'edit' && isset($_GET['id']) && is_numeric($_GET['id'])){
echo "<h3>Gegevens bewerken</h3><br>";
if($_SERVER['REQUEST_METHOD'] == "POST") {
$query = "UPDATE berichten SET
naam = '" . mysql_real_escape_string($_POST['naam']) . "',
email = '" . mysql_real_escape_string($_POST['email']) . "',
bericht = '" . mysql_real_escape_string($_POST['bericht']) . "'
WHERE id='" . $_GET["id"] . "'";
if(mysql_query($query)){
echo "Bericht gewijzigd. <br><br> Je wordt na 5 seconden teruggestuurd naar de adminpagina.";
header("Refresh: 5; URL=\"" . $admin . "\"");
} else {
echo "Het bericht kon niet gewijzigd worden, probeer het later opnieuw.";
header("Refresh: 5; URL=\"" . $admin . "\"");
}
} else {
$query = mysql_query("SELECT id,naam,email,bericht,datum,tijd,ip FROM berichten WHERE id='" . $_GET["id"] . "'");
while($edit = mysql_fetch_assoc($query)){
?>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" name="edit" method="post">
<img src="images/naam.png"> Naam: <input type="text" name="naam" class="button" value="<?php echo $edit['naam']; ?>"> <br><br>
<img src="images/email.png"> Email: <input type="text" name="email" class="button" value="<?php echo $edit['email']; ?>"> <br><br>
<img src="images/bericht.gif"> Bericht: <br><br>
<textarea class="textarea" name="bericht"><?php echo $edit['bericht']; ?></textarea> <br><br>
<input type="submit" value="Bewerken"> <input type="button" value="Nee, terug" onClick="window.open('<?php echo $admin; ?>','_self')">
</form>
<?php
}
}
}
if($action == 'delete' && isSet($_GET['id']) && is_numeric($_GET['id'])){
echo "<h3>Gegevens verwijderen</h3><br>";
if($_SERVER['REQUEST_METHOD'] == "POST") {
$query = "DELETE FROM berichten WHERE id='" . $_GET["id"] . "'";
if(mysql_query($query)){
echo "Het verwijderen is gelukt! <br><br> Je wordt na 5 seconden teruggestuurd naar de adminpagina.";
header("Refresh: 5; URL=\"" . $admin . "\"");
} else {
echo "Het bericht kon niet verwijderd worden, probeer het later opnieuw. <br><br> Je wordt na 5 seconden teruggestuurd naar de adminpagina.";
header("Refresh: 5; URL=\"" . $admin . "\"");
}
} else {
$query = mysql_query("SELECT id,naam,email,bericht,datum,tijd,ip FROM berichten WHERE id='" . $_GET["id"] . "'");
while($del = mysql_fetch_assoc($query)){
$del['naam'] = ucwords(strtolower($del['naam']));
$del['bericht'] = nl2br($del['bericht']);
?>
<!-- Gegevens die verwijderd moeten worden weergeven -->
<i><b>Bericht-id:</b></i> #<?php echo $del['id']; ?>
<br><br> <i><b>Naam:</b></i> <?php echo $del['naam']; ?>
<br><br> <i><b>Email:</b></i> <?php echo $del['email']; ?>
<br><br> <i><b>Bericht:</b></i> <br> <?php echo $del['bericht']; ?>
<br><br> <i><b>Datum & tijd:</b></i> <?php echo $del['datum']; ?> @ <?php echo $del['tijd']; ?>
<br><br> <i><b>IP:</b></i> <?php echo $del['ip']; ?>
<!-- Formulier daadwerkelijk weergeven -->
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" name="delete" method="post"> <br>
<input type="submit" value="Verwijderen"> <input type="button" value="Nee, terug" onClick="window.open('<?php echo $admin; ?>','_self')">
</form>
<?php
}
}
}
} else {
echo "<br> <table width=\"200%\" align=\"center\" style=\"text-align: center; font-weight:bold;\">
<tr>
<td width=\"5%\">ID</td>
<td width=\"10%\">Naam</td>
<td width=\"15%\">Email</td>
<td width=\"25%\">Bericht</td>
<td width=\"15%\">Datum / Tijd</td>
<td width=\"10%\">IP</td>
<td width=\"10%\">Bewerk</td>
<td width=\"10%\">Verwijder</td>
</table><hr>";
while($geg = mysql_fetch_assoc($query)){
$geg['naam'] = ucwords(strtolower($geg['naam']));
$geg['bericht'] = nl2br($geg['bericht']);
echo "<table width=\"200%\" align=\"center\" style=\"text-align: center\">
<tr>
<td width=\"5%\">#" . $geg['id'] . "</td>
<td width=\"10%\">" . $geg['naam'] . "</td>
<td width=\"15%\"><a href=\"mailto:" . $geg['email'] . "\">" . $geg['email'] . "</a></td>
<td width=\"25%\">" . $geg['bericht'] . "</td>
<td width=\"15%\">" . $geg['datum'] . " @ " . $geg['tijd'] . "</td>
<td width=\"10%\">" . $geg['ip'] . "</td>
<td width=\"10%\"><a href=\"?action=edit&id=" . $geg['id'] . "\"><img src=\"images/edit.png\" border=\"0\"></a></td>
<td width=\"10%\"><a href=\"?action=delete&id=" . $geg['id'] . "\"><img src=\"images/delete.png\" border=\"0\"></a></td>
</tr>
</table><hr>";
}
echo "<br><br><a href=\"?action=clearTable\">Wis</a> alle berichten uit de tabel.";
}
echo "<div id=\"main\" class=\"clearfix\"></div>";
echo "<div id=\"push\"></div>";
echo "</div>";
echo "<div id=\"footer\">
Copyright © " . $beginjaar . " - " . $jaar . " ~ Het is vandaag " . $dag . " " . $Maand[$maand] . " " . $jaar . " - " . $tijd . " ~ <a href=\"" . $lezen . "\">index</a> ~ <a href=\"" . $schrijven . "\">schrijven</a></div>";
?>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
<head>
<link type="text/css" rel="stylesheet" href="style_admin.css">
<title>Administrator Gastenboek © </title>
</head>
<body>
<?php
// Verbinden met de database
require("connect.php");
// Aantal entries in tabel tellen
$count = mysql_query("SELECT COUNT(id) FROM berichten");
$totaal = mysql_result($count, 0);
// Query om gegevens uit de tabel te halen
$query = mysql_query("SELECT id,naam,email,bericht,datum,tijd,ip FROM berichten");
// Datum in een array
$Maand = array("", "januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december");
$dag = date("d");
$maand = date("n");
$jaar = date("Y");
$tijd = date("H:i");
$beginjaar = 2007;
// Gegevens weergeven
echo "<div id=\"container\">";
echo "<h1 style=\"text-align: center;\"><a href=\"" . $admin . "\">Administrator</a></h1> <br>";
// Eventuele actie ophalen, anders gegevens weergeven
if($totaal == 0){
echo "Er zijn geen berichten.";
} else if(isset($_GET['action'])){
$action = $_GET['action'];
if($action == 'clearTable'){
echo "<h3>Tabel legen</h3>";
if($_SERVER['REQUEST_METHOD'] == "POST") {
mysql_query("TRUNCATE TABLE " . $tabel);
echo "De tabel is leeggemaakt. <br><br> Je wordt na 5 seconden teruggestuurd naar de adminpagina.";
header("Refresh: 5; URL=\"" . $admin . "\"");
} else {
?>
Weet je zeker dat je de hele tabel "<?php echo $tabel; ?>" wilt legen? <br><br>
Deze actie kan niet ongedaan worden.
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" name="clear" method="post"> <br>
<input type="submit" value="Legen"> <input type="button" value="Nee, terug" onClick="window.open('<?php echo $admin; ?>','_self')">
</form>
<?php
}
}
if($action == 'edit' && isset($_GET['id']) && is_numeric($_GET['id'])){
echo "<h3>Gegevens bewerken</h3><br>";
if($_SERVER['REQUEST_METHOD'] == "POST") {
$query = "UPDATE berichten SET
naam = '" . mysql_real_escape_string($_POST['naam']) . "',
email = '" . mysql_real_escape_string($_POST['email']) . "',
bericht = '" . mysql_real_escape_string($_POST['bericht']) . "'
WHERE id='" . $_GET["id"] . "'";
if(mysql_query($query)){
echo "Bericht gewijzigd. <br><br> Je wordt na 5 seconden teruggestuurd naar de adminpagina.";
header("Refresh: 5; URL=\"" . $admin . "\"");
} else {
echo "Het bericht kon niet gewijzigd worden, probeer het later opnieuw.";
header("Refresh: 5; URL=\"" . $admin . "\"");
}
} else {
$query = mysql_query("SELECT id,naam,email,bericht,datum,tijd,ip FROM berichten WHERE id='" . $_GET["id"] . "'");
while($edit = mysql_fetch_assoc($query)){
?>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" name="edit" method="post">
<img src="images/naam.png"> Naam: <input type="text" name="naam" class="button" value="<?php echo $edit['naam']; ?>"> <br><br>
<img src="images/email.png"> Email: <input type="text" name="email" class="button" value="<?php echo $edit['email']; ?>"> <br><br>
<img src="images/bericht.gif"> Bericht: <br><br>
<textarea class="textarea" name="bericht"><?php echo $edit['bericht']; ?></textarea> <br><br>
<input type="submit" value="Bewerken"> <input type="button" value="Nee, terug" onClick="window.open('<?php echo $admin; ?>','_self')">
</form>
<?php
}
}
}
if($action == 'delete' && isSet($_GET['id']) && is_numeric($_GET['id'])){
echo "<h3>Gegevens verwijderen</h3><br>";
if($_SERVER['REQUEST_METHOD'] == "POST") {
$query = "DELETE FROM berichten WHERE id='" . $_GET["id"] . "'";
if(mysql_query($query)){
echo "Het verwijderen is gelukt! <br><br> Je wordt na 5 seconden teruggestuurd naar de adminpagina.";
header("Refresh: 5; URL=\"" . $admin . "\"");
} else {
echo "Het bericht kon niet verwijderd worden, probeer het later opnieuw. <br><br> Je wordt na 5 seconden teruggestuurd naar de adminpagina.";
header("Refresh: 5; URL=\"" . $admin . "\"");
}
} else {
$query = mysql_query("SELECT id,naam,email,bericht,datum,tijd,ip FROM berichten WHERE id='" . $_GET["id"] . "'");
while($del = mysql_fetch_assoc($query)){
$del['naam'] = ucwords(strtolower($del['naam']));
$del['bericht'] = nl2br($del['bericht']);
?>
<!-- Gegevens die verwijderd moeten worden weergeven -->
<i><b>Bericht-id:</b></i> #<?php echo $del['id']; ?>
<br><br> <i><b>Naam:</b></i> <?php echo $del['naam']; ?>
<br><br> <i><b>Email:</b></i> <?php echo $del['email']; ?>
<br><br> <i><b>Bericht:</b></i> <br> <?php echo $del['bericht']; ?>
<br><br> <i><b>Datum & tijd:</b></i> <?php echo $del['datum']; ?> @ <?php echo $del['tijd']; ?>
<br><br> <i><b>IP:</b></i> <?php echo $del['ip']; ?>
<!-- Formulier daadwerkelijk weergeven -->
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" name="delete" method="post"> <br>
<input type="submit" value="Verwijderen"> <input type="button" value="Nee, terug" onClick="window.open('<?php echo $admin; ?>','_self')">
</form>
<?php
}
}
}
} else {
echo "<br> <table width=\"200%\" align=\"center\" style=\"text-align: center; font-weight:bold;\">
<tr>
<td width=\"5%\">ID</td>
<td width=\"10%\">Naam</td>
<td width=\"15%\">Email</td>
<td width=\"25%\">Bericht</td>
<td width=\"15%\">Datum / Tijd</td>
<td width=\"10%\">IP</td>
<td width=\"10%\">Bewerk</td>
<td width=\"10%\">Verwijder</td>
</table><hr>";
while($geg = mysql_fetch_assoc($query)){
$geg['naam'] = ucwords(strtolower($geg['naam']));
$geg['bericht'] = nl2br($geg['bericht']);
echo "<table width=\"200%\" align=\"center\" style=\"text-align: center\">
<tr>
<td width=\"5%\">#" . $geg['id'] . "</td>
<td width=\"10%\">" . $geg['naam'] . "</td>
<td width=\"15%\"><a href=\"mailto:" . $geg['email'] . "\">" . $geg['email'] . "</a></td>
<td width=\"25%\">" . $geg['bericht'] . "</td>
<td width=\"15%\">" . $geg['datum'] . " @ " . $geg['tijd'] . "</td>
<td width=\"10%\">" . $geg['ip'] . "</td>
<td width=\"10%\"><a href=\"?action=edit&id=" . $geg['id'] . "\"><img src=\"images/edit.png\" border=\"0\"></a></td>
<td width=\"10%\"><a href=\"?action=delete&id=" . $geg['id'] . "\"><img src=\"images/delete.png\" border=\"0\"></a></td>
</tr>
</table><hr>";
}
echo "<br><br><a href=\"?action=clearTable\">Wis</a> alle berichten uit de tabel.";
}
echo "<div id=\"main\" class=\"clearfix\"></div>";
echo "<div id=\"push\"></div>";
echo "</div>";
echo "<div id=\"footer\">
Copyright © " . $beginjaar . " - " . $jaar . " ~ Het is vandaag " . $dag . " " . $Maand[$maand] . " " . $jaar . " - " . $tijd . " ~ <a href=\"" . $lezen . "\">index</a> ~ <a href=\"" . $schrijven . "\">schrijven</a></div>";
?>
</body>
</html>
connect.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<link type="text/css" rel="stylesheet" href="style.css">
<?php
// MySQL server, 99% van de tijd "localhost"
$server = "localhost";
// Gebruikersnaam voor MySQL server
$gebruiker = "root";
// Wachtwoord voor MySQl server
$wachtwoord = "***";
// Database voor de entries
$database = "gastenboek";
// Tabel in $database
$tabel = "berichten";
// Pagina waar je de entries kan lezen
$lezen = "index.php";
// Pagina waar je een entry kan toevoegen
$schrijven = "add.php";
// Adminpagina
$admin = "admin.php";
// Naam (editen)
$naam = "de administrator";
// Email bij entry? TRUE voor ja, FALSE voor nee
$mail = false;
// Emailadres
$email = "[email protected]";
// Onderwerp
$onderwerp = "Nieuwe entry in je gastenboek!";
// Bericht
$bericht = "<html><head><title>" . $onderwerp . "</title></head><body>In je gastenboek is het volgende geplaatst: <br> blabla</body></html>";
// Headers, HTML email sturen
$header = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Headers, verander hier het emailadres en eventueel "Gastenboek"
$header .= 'From: Gastenboek <[email protected]>' . "\r\n";
$db = mysql_connect($server, $gebruiker, $wachtwoord) or die ('Kon geen verbinding maken met MySQL.');
mysql_select_db($database) or die ("Kon de database niet vinden.");
?>
<link type="text/css" rel="stylesheet" href="style.css">
<?php
// MySQL server, 99% van de tijd "localhost"
$server = "localhost";
// Gebruikersnaam voor MySQL server
$gebruiker = "root";
// Wachtwoord voor MySQl server
$wachtwoord = "***";
// Database voor de entries
$database = "gastenboek";
// Tabel in $database
$tabel = "berichten";
// Pagina waar je de entries kan lezen
$lezen = "index.php";
// Pagina waar je een entry kan toevoegen
$schrijven = "add.php";
// Adminpagina
$admin = "admin.php";
// Naam (editen)
$naam = "de administrator";
// Email bij entry? TRUE voor ja, FALSE voor nee
$mail = false;
// Emailadres
$email = "[email protected]";
// Onderwerp
$onderwerp = "Nieuwe entry in je gastenboek!";
// Bericht
$bericht = "<html><head><title>" . $onderwerp . "</title></head><body>In je gastenboek is het volgende geplaatst: <br> blabla</body></html>";
// Headers, HTML email sturen
$header = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Headers, verander hier het emailadres en eventueel "Gastenboek"
$header .= 'From: Gastenboek <[email protected]>' . "\r\n";
$db = mysql_connect($server, $gebruiker, $wachtwoord) or die ('Kon geen verbinding maken met MySQL.');
mysql_select_db($database) or die ("Kon de database niet vinden.");
?>
index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
// Vereist voor het verbinden met de database
require("connect.php");
// Aantal entries in tabel tellen
$count = mysql_query("SELECT COUNT(id) FROM berichten");
$totaal = mysql_result($count, 0);
// Aantal reacties per pagina showen
$aantalReacties = 2;
$aantalPaginas = ceil($totaal / $aantalReacties);
// Pagina opvragen, zoniet huidige pagina is 0
$pagina = 0;
if(isset($_GET['pagina']) && $_GET['pagina'] > 0 && $_GET['pagina'] <= $aantalPaginas && is_numeric($_GET['pagina'])){
$pagina = $_GET['pagina'];
}
// Gegevens voor huidige pagina
$reactiesPagina = $pagina * $aantalReacties;
$huidigePagina = mysql_query("SELECT id,naam,email,bericht,datum,tijd,verberg FROM berichten ORDER BY id DESC LIMIT " . $reactiesPagina.",".$aantalReacties);
// Gegevens voor huidige pagina showen
if($totaal == 0){
echo "Er zijn geen berichten, <a href=\"" . $schrijven . "\">plaats</a> als eerste een bericht!";
} else {
while($geg = mysql_fetch_assoc($huidigePagina)){
$geg['naam'] = ucwords(strtolower($geg['naam']));
if($geg['verberg'] == 0){
$poster = '<a href="mailto:' . $geg['email'] . '">' . $geg['naam'] . '</a>';
} else {
$poster = $geg['naam'];
}
echo "<p><div class=\"comments\" id=\"box\">
<div class=\"comments\" id=\"head\"><b>" . $poster . "</b> " . $geg['datum'] . " @ " . $geg['tijd'] . "<span style=\"float:right\"><a href=\"?q=" . $geg['id'] . "\">Quote</a></span></div>
<div class=\"comments\" id=\"bericht\"><p>" . $geg['bericht'] . "</p></div>
<div class=\"comments\" id=\"clear\"></div>
</div></p>";
}
echo "<br><a href=\"" . $schrijven . "\">Plaats</a> een bericht";
}
echo "<br><br>";
// Paginanummering
for($i = 0; $i < $aantalPaginas; $i++) {
if($pagina == $i) {
if($aantalPaginas == 1){
echo "";
} else {
echo "<b>".($i+1)."</b>";
}
} else {
echo "<a href=\"".$_SERVER['REQUEST_URI']."?pagina=".$i."\">".($i+1)."</a>";
}
if($i < $aantalPaginas - 1) {
echo " - ";
}
}
?>
// Vereist voor het verbinden met de database
require("connect.php");
// Aantal entries in tabel tellen
$count = mysql_query("SELECT COUNT(id) FROM berichten");
$totaal = mysql_result($count, 0);
// Aantal reacties per pagina showen
$aantalReacties = 2;
$aantalPaginas = ceil($totaal / $aantalReacties);
// Pagina opvragen, zoniet huidige pagina is 0
$pagina = 0;
if(isset($_GET['pagina']) && $_GET['pagina'] > 0 && $_GET['pagina'] <= $aantalPaginas && is_numeric($_GET['pagina'])){
$pagina = $_GET['pagina'];
}
// Gegevens voor huidige pagina
$reactiesPagina = $pagina * $aantalReacties;
$huidigePagina = mysql_query("SELECT id,naam,email,bericht,datum,tijd,verberg FROM berichten ORDER BY id DESC LIMIT " . $reactiesPagina.",".$aantalReacties);
// Gegevens voor huidige pagina showen
if($totaal == 0){
echo "Er zijn geen berichten, <a href=\"" . $schrijven . "\">plaats</a> als eerste een bericht!";
} else {
while($geg = mysql_fetch_assoc($huidigePagina)){
$geg['naam'] = ucwords(strtolower($geg['naam']));
if($geg['verberg'] == 0){
$poster = '<a href="mailto:' . $geg['email'] . '">' . $geg['naam'] . '</a>';
} else {
$poster = $geg['naam'];
}
echo "<p><div class=\"comments\" id=\"box\">
<div class=\"comments\" id=\"head\"><b>" . $poster . "</b> " . $geg['datum'] . " @ " . $geg['tijd'] . "<span style=\"float:right\"><a href=\"?q=" . $geg['id'] . "\">Quote</a></span></div>
<div class=\"comments\" id=\"bericht\"><p>" . $geg['bericht'] . "</p></div>
<div class=\"comments\" id=\"clear\"></div>
</div></p>";
}
echo "<br><a href=\"" . $schrijven . "\">Plaats</a> een bericht";
}
echo "<br><br>";
// Paginanummering
for($i = 0; $i < $aantalPaginas; $i++) {
if($pagina == $i) {
if($aantalPaginas == 1){
echo "";
} else {
echo "<b>".($i+1)."</b>";
}
} else {
echo "<a href=\"".$_SERVER['REQUEST_URI']."?pagina=".$i."\">".($i+1)."</a>";
}
if($i < $aantalPaginas - 1) {
echo " - ";
}
}
?>
Gewijzigd op 04/03/2013 15:06:59 door Joren de Wit
Nu heb ik nog wel eens de neiging - en met mij vele anderen - om nóg een keer op de submitbutton te drukken, als het laden lang duurt (gewoon, zeker zijn dat hij laadt). Het kan nu dus zijn dat het bericht er 2 keer staat.
Wat je hiertegen kunt doen:
Voor je het bericht insert in je database, controleer je of er een bericht is, dat precies hetzelfde is, de gebruiker hetzelfde is én ook de tijd tussen dat bericht en het 'nieuwe' bericht betrekkelijk kort is. Zo niet, dan aanmaken, zo wel dan heb je een dubbele.
Je uiteindelijke html zal niet echt W3C valid zijn.
Daarom doe ik de HTML ook op het laatst ;)
Ik heb alle outputs van de HTML door de validator, geen fouten meer :)
Ik zal de code vnaaf nog ff veranderen...
Gewijzigd op 01/01/1970 01:00:00 door dick oo