Nieuws systeem
Door Roel PHP, 5 jaar geleden, 8.071x bekeken
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE TABLE `updates` (
`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 ;
`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:
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
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
<html>
<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>
<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
45 reacties op 'Nieuws systeem'
Om te reageren heb je een account nodig en je moet ingelogd zijn.


PHP hulp
0 seconden vanaf nu