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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 ;


De Code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<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

BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  

PHP script bestanden

  1. nieuws-systeem

 

28 reacties op 'Nieuws systeem'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Crispijn -
Crispijn -
3 jaar geleden
 
0 +1 -0 -1
Wat update je dan precies? Beetje ongelukkige titel gekozen voor je script. Verder een beetje ongelukkige scheiding tussen de opmaak en het script.

Probeer je aan te wennen alles uit te voeren en te verwerken en daarna voor de output te zorgen.
Phpgast v W
phpgast v W
3 jaar geleden
 
0 +1 -0 -1
goed script (heb het nog no helemaal gekeken), misschien nog een lay-out? Wat crispijn al zegt, naam is en beetje ongelukkig, misschien iets van "update-logboeksysteem"? Verder goed, goede beveiliging.
Lars Groot
Lars Groot
3 jaar geleden
 
0 +1 -0 -1
Leuk systeem! Ik ga hem denk ik wel gebruiken!!!
Rik geen
Rik geen
3 jaar geleden
 
0 +1 -0 -1
$_SERVER['PHP_SELF'] deze is ook niet veilig toch?
Rienk
Rienk
3 jaar geleden
 
0 +1 -0 -1
Ik vind het knap, ik ben zelf net begonnen met Mysql en over een jaartje zou ik nog eens weer kijken of ik dan wel ander commentaar heb. Goed gedaan man.
Luuk Schakenraad
Luuk Schakenraad
3 jaar geleden
 
0 +1 -0 -1
Waarom ga je alle HTML echoën? Dit moet PHP allemaal verwerken en dus doet PHP langer over je pagina.
Midas
Midas
3 jaar geleden
 
0 +1 -0 -1
Werkt zo te zien wel, maar wat verschrikkelijk onoverzichtelijk gecoded.
Hans
hans
3 jaar geleden
 
0 +1 -0 -1
Hij heeft ze moeite gedaan.
Roel van de Water
Roel van de Water
3 jaar geleden
 
0 +1 -0 -1
Ja ik zit hier niet te niksen ;)
Jurgen
Jurgen
3 jaar geleden
 
0 +1 -0 -1
Toch ben ik meer voor een gescheiden aanpak, eerst PHP en vervolgens HTML of zelfs helemaal apart zoals ik altijd doe.
The Ultimate
The Ultimate
3 jaar geleden
 
0 +1 -0 -1
Waarom heet dit 'update toevoegen systeem'. Wellicht dat ik iets over het hoofd zie, maar dit is toch gewoon een nieuwssysteem?

En waarom kunnen bezoekers slechts 1 keer per dag een reactie toevoegen? Lijkt me niet handig.
Roel van de Water
Roel van de Water
3 jaar geleden
 
0 +1 -0 -1
@Bart; je hebt waarschijnlijk m'n gastenboek niet gezien. Hier werd veel gezegd over spam interval. Bij dit script heb ik die er gelijk ingebouwd. :)
Daan Onbekend
Daan Onbekend
3 jaar geleden
 
0 +1 -0 -1
Ik zie nog een bug:

Deze update heeft 1 reacties
dit kan netter.
Roel van de Water
Roel van de Water
3 jaar geleden
 
0 +1 -0 -1
Ja daar erger ik mezelf ook altijd aan, ik zal het zo fixen.
The Ultimate
The Ultimate
3 jaar geleden
 
0 +1 -0 -1
@Roel:
Waarom bouw je dan niet een captcha in ipv reacties te weigeren? Op deze manier ben ik waarschijnlijk niet echt lang op de website te vinden.
Niborx Trump
Niborx Trump
3 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$host
= ""; // De host
$user = ""; // De MySQL gebruikersnaam
$pass = ""; // Het MySQL wachtwoord
$datb = ""; // De database

mysql_connect($host, $user, $pass) or die (mysql_error());
?>


Naar:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$db
[host] = '';
$db[user] = '';
$db[pass] = '';
$db[data] = '';

mysql_connect($db[host], $db[user], $db[pass]) or die (mysql_error());
mysql_select_db($db[data]) or die (mysql_error());
unset($db);
?>
Roel van de Water
Roel van de Water
3 jaar geleden
 
0 +1 -0 -1
Wat veranderd dat aan het huidige systeem Niborx?
Arwin van der Velden
Arwin van der Velden
3 jaar geleden
 
0 +1 -0 -1
Mooi script!
Jan Haesen
Jan Haesen
2 jaar geleden
 
0 +1 -0 -1
Ziet er goed uit, er overzichtelijk gecodeerd vindt ik juist, maar dat is iedere programmeur zijn eigen wens. Ik zou wel adviseren een config.php bestandje te maken ofzo en daar je connectie in te zetten. Ik weet niet of je het doet hoor, maar encrypt je ook de wachtwoorden? En ik ben nieuw met sql injectie heb jij toevallig iets voor me waar ik een beetje uitleg kan krijgen? En ik zou forms gewoon in je html houden en niet laten echoen, dit wordt gauw sloom, kan averechts werken. Maar verder heel goed script ;)
Stan Van langen
Stan Van langen
1 jaar geleden
 
0 +1 -0 -1
Bedankt, Ik et zeker gebruiken ;)

MvG,
Stan
Kenny vw
kenny vw
10 maanden geleden
 
0 +1 -0 -1
Mooi script echt goed gedaan

ik vind het alleen jammer dat je maar 1 keer per dag kan reageren.

mvg kenny
B Mulder
B Mulder
6 maanden geleden
 
0 +1 -0 -1
wauw great man! zelf de opmaak doen en het ziet er geweldig uit! tnx!
Stan Kiggen
Stan Kiggen
3 weken geleden
 
0 +1 -0 -1
Als ik deze maak, krijg ik nergens een administrator paneeltje! Kan iemand mij helpen?
Roel van de Water
Roel van de Water
3 weken geleden
 
0 +1 -0 -1
?x=toevoegen. Meer opties heb je niet.
Stan Kiggen
Stan Kiggen
3 weken geleden
 
0 +1 -0 -1
Maar hoe kom ik dan bij het paneeltje? Moet ik dan iets doen ofzo? Ik snap het niet helemaal.
Roel van de Water
Roel van de Water
3 weken geleden
 
0 +1 -0 -1
Er is geen paneel. Je kunt alleen nieuws toevoegen, meer niet.
Stan Kiggen
Stan Kiggen
3 weken geleden
 
0 +1 -0 -1
Nee maar ik bedoel: Hoe voeg je die berichten toe? Wat moet je dan met dat ?x = toevoegen doen? Want ik zie in het script het ww staan (admin), maar wat moet je hiermee doen?

Om te reageren heb je een account nodig en je moet ingelogd zijn.

  • Labels
  • Geen tags toegevoegd.