Nieuws systeem
Met dit script kun je makkelijk zelf nieuws toevoegen op je website, en dan kunnen de bezoekers ook nog eens een reactie toevoegen. (Eenmaal per dag)
Beveiliging:
- SQL Injection;
- XSS Injection;
- Velden niet ingevuld;
- Spam interval
Via het voorbeeld kun je zelf ook een update toevoegen, door naar ?x=toevoegen te gaan, en als wachtwoord admin te gebruiken.
Veranderingen
9 april 2009:
- UBB Codes
- Naam veranderd naar Nieuws systeem
Commentaar is altijd welkom.
Enjoy :)
De SQL:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
`id` int(11) NOT NULL auto_increment,
`titel` varchar(50) NOT NULL default '',
`bericht` text NOT NULL,
`datum` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
CREATE TABLE `updatereacties` (
`id` int(11) NOT NULL auto_increment,
`updateid` int(11) NOT NULL default '0',
`naam` varchar(16) NOT NULL default '',
`bericht` text NOT NULL,
`ip` varchar(30) NOT NULL default '',
`datum` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
De Code:
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
<head>
<title>Nieuws systeem - Gemaakt door Roel</title>
</head><?php
// Verbinding & algemene configuratie
$host = ""; // De host
$user = ""; // De MySQL gebruikersnaam
$pass = ""; // Het MySQL wachtwoord
$datb = ""; // De database
$password = "admin"; // Het wachtwoord om updates toe te voegen, aan te roepen via ?x=toevoegen
// Verbinding maken
mysql_connect($host, $user, $pass) or die ("Er kan geen verbinding worden gemaakt");
mysql_select_db($datb) or die ("Er kan geen verbinding worden gemaakt met de database");
// UBB codes aanmaken
function ubb($string) {
$string = stripslashes($string);
$string = htmlspecialchars($string);
$string = nl2br($string);
$string = preg_replace("#\[b\](.+?)\[/b\]#is", "<b>\\1</b>", $string); // [b][/b] -> <b></b>
$string = preg_replace("#\[i\](.+?)\[/i\]#is", "<i>\\1</i>", $string); // [b][/b] -> <b></b>
$string = preg_replace("#\[s\](.+?)\[/s\]#is", "<s>\\1</s>", $string); // [b][/b] -> <b></b>
$string = preg_replace("#\[u\](.+?)\[/u\]#is", "<u>\\1</u>", $string); // [b][/b] -> <b></b>
return $string;
}
if ($_GET['id']) {
echo '<a href="'.$_SERVER['PHP_SELF'].'">Nieuws overzicht</a>';
// Gegevens ophalen waarbij de id overeenkomt met een id uit de database
$sql = mysql_query("SELECT * FROM updates WHERE id = '".mysql_real_escape_string($_GET['id'])."'");
if (mysql_num_rows($sql) == 0) {
echo 'Dit nieuws bestaat niet!';
} else {
while($data = mysql_fetch_assoc($sql)) {
echo '<h1>'.htmlspecialchars(stripslashes($data['titel'])).'</h1><br>';
echo '<i>'.htmlspecialchars(stripslashes($data['datum'])).'</i><br><br>';
echo nl2br(htmlspecialchars(stripslashes($data['bericht'])));
echo '<hr><b>Reacties op het nieuws \''.htmlspecialchars(stripslashes($data['titel'])).'\'</b><br><br>';
}
$sql = mysql_query("SELECT * FROM updatereacties WHERE ip = '".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."' AND updateid = '".mysql_real_escape_string($_GET['id'])."' AND datum >= NOW() - INTERVAL 1 DAY");
if (mysql_num_rows($sql) == 0) {
// Reactie plaatsen
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['naam']) || empty($_POST['bericht'])) {
echo '<span style="color:red"><b>Je hebt niet alle velden ingevuld!</b></span><br><br>';
} else {
mysql_query("INSERT INTO updatereacties (naam, bericht, updateid, datum, ip) VALUES ('".mysql_real_escape_string($_POST['naam'])."', '".mysql_real_escape_string($_POST['bericht'])."', '".mysql_real_escape_string($_GET['id'])."', NOW(), '".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."')") or die (mysql_error());
echo '<span style="color:green"><b>Je reactie is succesvol toegevoegd!</b></span><br><br>';
}
}
echo '<form method="post" target="_self">';
echo 'Naam:<br><input type="text" name="naam"><br><br>';
echo 'Bericht:<br><textarea name="bericht" rows="6" cols="37"></textarea><br><br>';
echo '<input type="submit" value="Toevoegen" onclick="this.value=\'Reactie wordt geplaatst...\';"> <input type="reset" value="Wis velden">';
'</form>';
echo '<br><br>';
} else {
echo 'Je hebt vandaag al een reactie geplaatst bij deze update! Morgen kun je weer een nieuwe plaatsen.<br><br>';
}
$sql = mysql_query("SELECT * FROM updatereacties WHERE updateid = '".mysql_real_escape_string($_GET['id'])."' ORDER BY id DESC") or die (mysql_error());
if (mysql_num_rows($sql) == 0) {
echo 'Dit nieuws heeft nog geen reacties!';
} else {
while($bericht = mysql_fetch_assoc($sql)) {
echo '<b>Naam:</b> '.htmlspecialchars(stripslashes($bericht['naam'])).'<br>';
echo '<b>Datum:</b> '.htmlspecialchars(stripslashes($bericht['datum'])).'<br>';
echo '<b>Bericht:</b><br>'.ubb($bericht['bericht']).'<br><br>';
}
}
}
} elseif($_GET['x'] == 'toevoegen') {
// Administrator paneel om updates toe te voegen
echo '<a href="'.$_SERVER['PHP_SELF'].'">Nieuws overzicht</a>';
echo '<h1>Nieuws toevoegen</h1>';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (empty($_POST['titel']) || empty($_POST['bericht'])) {
echo '<span style="color:red"><b>Niet alle velden zijn ingevuld!</b></span>';
} elseif ($_POST['wachtwoord'] != $password) {
echo '<span style="color:red"><b>Je bent geen administrator, dus kun je geen updates toevoegen!</b></span>';
} else {
mysql_query("INSERT INTO updates (titel, bericht, datum) VALUES ('".mysql_real_escape_string($_POST['titel'])."', '".mysql_real_escape_string($_POST['bericht'])."', NOW())") or die (mysql_error());
echo '<span style="color:green"><b>Het nieuws is succesvol toegevoegd!</b></span>';
}
}
echo '<form method="post" target="_self">';
echo 'Titel:<br><input type="text" name="titel"><br>';
echo 'Bericht:<br><textarea name="bericht" rows="6" cols="37"></textarea><br>';
echo 'Wachtwoord:<br><input type="password" name="wachtwoord"><br><br>';
echo '<input type="submit" value="Toevoegen" onclick="this.value=\'Nieuws wordt geplaatst...\';"> <input type="reset" value="Wis velden">';
echo '</form>';
} else {
// Updates ophalen en sorteren op id
echo '<h1>Nieuws overzicht</h1>';
$sql = mysql_query("SELECT * FROM updates ORDER BY id DESC");
if (mysql_num_rows($sql) == 0) {
echo 'Er zijn nog geen updates!';
} else {
while($data = mysql_fetch_assoc($sql)) {
echo '<b>'.htmlspecialchars(stripslashes($data['titel'])).'</b><br>';
echo '<i>'.htmlspecialchars(stripslashes($data['datum'])).'</i><br><br>';
echo ubb($data['bericht']).'<br><br>';
$aantal = mysql_query("SELECT * FROM updatereacties WHERE updateid = '".$data['id']."'");
echo '<u>Dit nieuws heeft <b>'.mysql_num_rows($aantal).'</b> ';
if (mysql_num_rows($aantal) == 1) {
// Als er maar 1 reactie is, staat er "reactie", bij meerdere reacties staat er "reacties"
echo 'reactie';
} else {
echo 'reacties';
}
echo '. <a href="'.$_SERVER['PHP_SELF'].'?id='.$data['id'].'">Klik hier om een reactie toe te voegen.</a></u><hr>';
}
}
}
?>
</html>
Voorbeeld: http://phphulp.rlsoftware.nl/updatesysteem
Gesponsorde koppelingen
PHP script bestanden
Er zijn 45 reacties op 'Nieuws systeem'
Om te reageren heb je een account nodig en je moet ingelogd zijn.
PHP hulp
0 seconden vanaf nu