Automatisch resetten shoutboxjes
Ik ben sinds 2 maanden bezig met een site en hij is bijna af. Ik vroeg me af of er een script of dergelijke bestaat waarbij shoutboxjes om de 10 minuten bijvoorbeeld automatisch resetten.
Dit is mijn shout.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
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
<?php
$datfile = "shout.txt";
$MAX_LENGTH = 51; //Zet hierhoe lang de berichten maximaal mogen zijn (Doe deze altijd 1 meer als in de input form op de normale pagina, anders kan hij errors aangeven als je dus 50 tekens hebt.
$NUM_COMMENTS = 1; //Zet hier de hoeveelheid berichten hij maximaal mag weergeven.
if (!$name)
{ $name = "$REMOTE_ADDR:"; } //Als je geen naam invoert, verschijnt je IP als naam.
else $name .= ":";
$shout = preg_replace("/</","<",$shout);
$shout = preg_replace("/>/",">",$shout);
$comfile = file($datfile);
if ($shout != "") {
if (strlen($shout) < $MAX_LENGTH) {
$fd = fopen ($datfile, "w");
$shout = stripslashes($shout);
$date_time = date('d-m-Y/H:i:s'); //Even simpele timestamp invoeren.
fwrite ($fd, "<div style='overflow:hidden'><b>[$date_time]</b> <b><i>$name</i></b> $shout</div>\n");
for ($i = 0; $i < $NUM_COMMENTS; $i++) {
fwrite ($fd, $comfile[$i]);
}
}
fclose($fd);
}
Header("Location: $HTTP_REFERER"); //Dit zorgt ervoor dat je weer terug gaat naar de normale pagina.
?>
$datfile = "shout.txt";
$MAX_LENGTH = 51; //Zet hierhoe lang de berichten maximaal mogen zijn (Doe deze altijd 1 meer als in de input form op de normale pagina, anders kan hij errors aangeven als je dus 50 tekens hebt.
$NUM_COMMENTS = 1; //Zet hier de hoeveelheid berichten hij maximaal mag weergeven.
if (!$name)
{ $name = "$REMOTE_ADDR:"; } //Als je geen naam invoert, verschijnt je IP als naam.
else $name .= ":";
$shout = preg_replace("/</","<",$shout);
$shout = preg_replace("/>/",">",$shout);
$comfile = file($datfile);
if ($shout != "") {
if (strlen($shout) < $MAX_LENGTH) {
$fd = fopen ($datfile, "w");
$shout = stripslashes($shout);
$date_time = date('d-m-Y/H:i:s'); //Even simpele timestamp invoeren.
fwrite ($fd, "<div style='overflow:hidden'><b>[$date_time]</b> <b><i>$name</i></b> $shout</div>\n");
for ($i = 0; $i < $NUM_COMMENTS; $i++) {
fwrite ($fd, $comfile[$i]);
}
}
fclose($fd);
}
Header("Location: $HTTP_REFERER"); //Dit zorgt ervoor dat je weer terug gaat naar de normale pagina.
?>
Dit moet ik invoegen in het html-bestand om de balkjes te laten verschijnen:
<form method="POST" action="shout.php">
<p align="center">
name:
<br>
<input size="15" maxlength="20" type="text" name="name"> //Hier zet je hoe lang de naam mag zijn (maxlength="20")
<br>
shout:
<br>
<input size="15" maxlength="50" type="text" name="shout"> //Hier zet je hoe lang het bericht mag zijn (maxlength="50")
<br>
<center><input type="submit" value="Shout">
</center>
</form>
Verder is er nog een include-scriptje om shout.php te includen en een shout.txt voor het opslaan van de berichtjes.
Verder is er nog een include-scriptje om shout.php te includen en een shout.txt voor het opslaan van de berichtjes.
GRAAG JULLIE HULP!
Als eerste kan ik je aanraden om bovenstaand script direct weg te gooien, het is behoorlijk verouderd. Het verbaast me dat het waarschijnlijk nog werkt.
Ook raad ik aan om MySQL te gaan gebruiken, dat maakt alles in ieder geval zeker stukken beheerbaarder.
Gewijzigd op 02/03/2011 22:44:22 door - Ariën -
- Gebruik geen textfiles, maar een database of xml. Tekstbestanden zijn niet handig in beheer.
- $MAX_LENGTH en $NUM_COMMENTS moeten constanten zijn? Zie define.
- Waar komt $name vandaan? Dit is vast en zeker een post waarde, daar gebruik je $_POST voor.
- Controleren of een formulier gepost is doe je met if($_SERVER['REQUEST_METHOD'] == 'POST')
- $REMOTE_ADDR is ook al driehonderduizend jaar oud. Gebruik $_SERVER['REMOTE_ADDR']
- Variabelen buiten quotes.
- Houd één stijl aan. Als je accolades gebruikt, blijf ze dan gebruiken.
- Die preg_replace'n moeten soort van anti-html zijn? Dat is niet veilig, gebruik gewoon htmlentities. Verder gebruik je altijd voor simpele string acties, string functies als str_replace. En natuurlijk moet je hier ook $_POST gebruiken.
- Zie ook trim.
- Stripslashes zijn vies. Zorg dat je geen addslashes hebt en magic quotes uit.
- Vast nog wel meer...
Nu heb ik een shoutbox.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
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
<?
ob_start();
require 'config.php';
include 'header.inc.php';
if(isset($_GET['page']))
{
if($_GET['page'] == 'post')
{
if(isset($_COOKIE['spam']))
{
echo 'Je mag niet 2 berichten in '.$cnfg['spam'].' seconden posten.';
reload('shoutbox.php',3);
}
elseif($_POST['naam'] == '')
{
echo 'Je hebt je naam niet ingevuld!<br>';
form('Naam',$_POST['email'],$_POST['website'],$_POST['bericht'],'?page=post',0);
}
elseif($_POST['email'] == '' || !eregi('@',$_POST['email']))
{
echo 'Je hebt je email niet ingevuld!<br>';
form($_POST['naam'],'Email',$_POST['website'],$_POST['bericht'],'?page=post',0);
}
elseif($_POST['bericht'] == '')
{
echo 'Je hebt je bericht niet ingevuld!<br>';
form($_POST['naam'],$_POST['email'],$_POST['website'],'bericht','?page=post',0);
}
elseif(strlen($_POST['bericht']) > $cnfg['maxlenght'])
{
echo 'Je bericht bevat meer dan '.$cnfg['maxlenght'].' tekens!';
form($_POST['naam'],$_POST['email'],$_POST['website'],'bericht','?page=post',0);
}
else
{
mysql_query("INSERT INTO ".$cnfg['prefix']."berichten VALUES ('', '".$_POST['naam']."', '".$_POST['email']."' ,'".$_POST['website']."', '".addslashes($_POST['bericht'])."', NOW(), '".$_SERVER['REMOTE_ADDR']."')") or die("Je bericht kon niet worden toegevoegd.");
setcookie("spam",$_POST['naam'],time()+$cnfg['spam']);
echo '<center>je bericht is succesvol toegevoegd, Je wordt nu automatisch doorgestuurd.</center>';
reload('shoutbox.php',2);
}
}
else
{
reload('shoutbox.php',0);
}
}
else
{
$totaal = mysql_result(mysql_query("SELECT count(id) FROM ".$cnfg['prefix']."berichten"),0);
$paginas = ceil($totaal / $cnfg['perpagina']);
if(isset($_GET['p']))
{
$start = $_GET['p'] * $cnfg['perpagina'];
}
else
{ $start = 0; }
$maxsize = $cnfg['maxbreedte'] - 16;
$i = 0;
echo '<table cellspacing="0" cellpadding="0" width="'.$maxsize.'">';
$sql = mysql_query("SELECT *, DATE_FORMAT(datum,'%d/%m %H:%i:%s') AS tijd FROM ".$cnfg['prefix']."berichten ORDER BY id DESC LIMIT ".$start.", ".$cnfg['perpagina']);
while($s = mysql_fetch_assoc($sql))
{
if($s['website'] == 'http://' || $s['website'] == '' || !eregi('http://',$s['website']))
{ $site = ''; }
else
{ $site = ' <a href="'.$s['website'].'" target="_blank">[URL]</a>'; }
$bericht = $s['bericht'];
$bericht = wordwrap($bericht, $cnfg['woordbreedte'], "\n", 1);
$bericht = stripslashes($bericht);
$sql_filter = mysql_query("SELECT * FROM ".$cnfg['prefix']."filter ORDER BY id DESC");
while($filter = mysql_fetch_assoc($sql_filter))
{ $bericht = eregi_replace($filter['woord'],$cnfg['filter_woord'],$bericht); }
$sql_smilies = mysql_query("SELECT * FROM ".$cnfg['prefix']."smilies ORDER BY id DESC");
while($smilie = mysql_fetch_assoc($sql_smilies))
{ $bericht = str_replace($smilie['code'],'<img src="'.$smilie['url'].'" border="0">',$bericht); }
$i++;
$kleur = ($i % 2) ? $cnfg['kleur1'] : $cnfg['kleur2'];
echo '<tr bgcolor="'.$kleur.'"><td colspan="2"><i><a href="mailto:'.$s['email'].'">'.$s['naam'].'</a> '.$site.'</i></td></tr><tr bgcolor="'.$kleur.'"><td colspan="2">'.$bericht.'</td></tr><tr bgcolor="'.$kleur.'"><td align="right" colspan="2">'.$s['tijd'].'</td></tr>';
}
$paginas2 = $paginas - 1;
if(isset($_GET['p']))
{
$next = $_GET['p'] + 1;
$previous = $_GET['p'] - 1;
if($_GET['p'] == 0)
{
$volgende = '<a href="?p=1" class="nav">></a>';
$vorige = '';
$eerste = '';
$laatste = '<a href="?p='.$paginas2.'" class="nav">>></a>';
}
else
{
$eerste = '<a href="?p=0" class="nav"><<</a>';
$vorige = '<a href="?p='.$previous.'" class="nav"><</a>';
if($paginas <= $_GET['p'])
{ $volgende = ''; $laatste = ''; }
elseif($_GET['p'] == $paginas2)
{ $volgende = ''; $laatste = ''; }
else
{ $volgende = '<a href="?p='.$next.'" class="nav">></a>'; $laatste = '<a href="?p='.$paginas2.'" class="nav">>></a>'; }
}
}
else
{
$vorige = '';
$eerste = '';
if($paginas > 1)
{ $volgende = '<a href="?p=1" class="nav">></a>'; $laatste = '<a href="?p='.$paginas2.'" class="nav">>></a>'; }
else
{ $volgende = ''; $laatste = ''; }
}
echo '<tr><td width="50%" align="right">'.$eerste.' '.$vorige.' </td><td width="50%" align="left"> '.$volgende.' '.$laatste.'</td></tr>';
echo '</table>';
echo '<br>';
form('Naam','Email','Website','Bericht','?page=post',1);
echo '<a href="admin.php"><center>Admin Panel</center></a>';
}
include 'footer.inc.php';
?>
ob_start();
require 'config.php';
include 'header.inc.php';
if(isset($_GET['page']))
{
if($_GET['page'] == 'post')
{
if(isset($_COOKIE['spam']))
{
echo 'Je mag niet 2 berichten in '.$cnfg['spam'].' seconden posten.';
reload('shoutbox.php',3);
}
elseif($_POST['naam'] == '')
{
echo 'Je hebt je naam niet ingevuld!<br>';
form('Naam',$_POST['email'],$_POST['website'],$_POST['bericht'],'?page=post',0);
}
elseif($_POST['email'] == '' || !eregi('@',$_POST['email']))
{
echo 'Je hebt je email niet ingevuld!<br>';
form($_POST['naam'],'Email',$_POST['website'],$_POST['bericht'],'?page=post',0);
}
elseif($_POST['bericht'] == '')
{
echo 'Je hebt je bericht niet ingevuld!<br>';
form($_POST['naam'],$_POST['email'],$_POST['website'],'bericht','?page=post',0);
}
elseif(strlen($_POST['bericht']) > $cnfg['maxlenght'])
{
echo 'Je bericht bevat meer dan '.$cnfg['maxlenght'].' tekens!';
form($_POST['naam'],$_POST['email'],$_POST['website'],'bericht','?page=post',0);
}
else
{
mysql_query("INSERT INTO ".$cnfg['prefix']."berichten VALUES ('', '".$_POST['naam']."', '".$_POST['email']."' ,'".$_POST['website']."', '".addslashes($_POST['bericht'])."', NOW(), '".$_SERVER['REMOTE_ADDR']."')") or die("Je bericht kon niet worden toegevoegd.");
setcookie("spam",$_POST['naam'],time()+$cnfg['spam']);
echo '<center>je bericht is succesvol toegevoegd, Je wordt nu automatisch doorgestuurd.</center>';
reload('shoutbox.php',2);
}
}
else
{
reload('shoutbox.php',0);
}
}
else
{
$totaal = mysql_result(mysql_query("SELECT count(id) FROM ".$cnfg['prefix']."berichten"),0);
$paginas = ceil($totaal / $cnfg['perpagina']);
if(isset($_GET['p']))
{
$start = $_GET['p'] * $cnfg['perpagina'];
}
else
{ $start = 0; }
$maxsize = $cnfg['maxbreedte'] - 16;
$i = 0;
echo '<table cellspacing="0" cellpadding="0" width="'.$maxsize.'">';
$sql = mysql_query("SELECT *, DATE_FORMAT(datum,'%d/%m %H:%i:%s') AS tijd FROM ".$cnfg['prefix']."berichten ORDER BY id DESC LIMIT ".$start.", ".$cnfg['perpagina']);
while($s = mysql_fetch_assoc($sql))
{
if($s['website'] == 'http://' || $s['website'] == '' || !eregi('http://',$s['website']))
{ $site = ''; }
else
{ $site = ' <a href="'.$s['website'].'" target="_blank">[URL]</a>'; }
$bericht = $s['bericht'];
$bericht = wordwrap($bericht, $cnfg['woordbreedte'], "\n", 1);
$bericht = stripslashes($bericht);
$sql_filter = mysql_query("SELECT * FROM ".$cnfg['prefix']."filter ORDER BY id DESC");
while($filter = mysql_fetch_assoc($sql_filter))
{ $bericht = eregi_replace($filter['woord'],$cnfg['filter_woord'],$bericht); }
$sql_smilies = mysql_query("SELECT * FROM ".$cnfg['prefix']."smilies ORDER BY id DESC");
while($smilie = mysql_fetch_assoc($sql_smilies))
{ $bericht = str_replace($smilie['code'],'<img src="'.$smilie['url'].'" border="0">',$bericht); }
$i++;
$kleur = ($i % 2) ? $cnfg['kleur1'] : $cnfg['kleur2'];
echo '<tr bgcolor="'.$kleur.'"><td colspan="2"><i><a href="mailto:'.$s['email'].'">'.$s['naam'].'</a> '.$site.'</i></td></tr><tr bgcolor="'.$kleur.'"><td colspan="2">'.$bericht.'</td></tr><tr bgcolor="'.$kleur.'"><td align="right" colspan="2">'.$s['tijd'].'</td></tr>';
}
$paginas2 = $paginas - 1;
if(isset($_GET['p']))
{
$next = $_GET['p'] + 1;
$previous = $_GET['p'] - 1;
if($_GET['p'] == 0)
{
$volgende = '<a href="?p=1" class="nav">></a>';
$vorige = '';
$eerste = '';
$laatste = '<a href="?p='.$paginas2.'" class="nav">>></a>';
}
else
{
$eerste = '<a href="?p=0" class="nav"><<</a>';
$vorige = '<a href="?p='.$previous.'" class="nav"><</a>';
if($paginas <= $_GET['p'])
{ $volgende = ''; $laatste = ''; }
elseif($_GET['p'] == $paginas2)
{ $volgende = ''; $laatste = ''; }
else
{ $volgende = '<a href="?p='.$next.'" class="nav">></a>'; $laatste = '<a href="?p='.$paginas2.'" class="nav">>></a>'; }
}
}
else
{
$vorige = '';
$eerste = '';
if($paginas > 1)
{ $volgende = '<a href="?p=1" class="nav">></a>'; $laatste = '<a href="?p='.$paginas2.'" class="nav">>></a>'; }
else
{ $volgende = ''; $laatste = ''; }
}
echo '<tr><td width="50%" align="right">'.$eerste.' '.$vorige.' </td><td width="50%" align="left"> '.$volgende.' '.$laatste.'</td></tr>';
echo '</table>';
echo '<br>';
form('Naam','Email','Website','Bericht','?page=post',1);
echo '<a href="admin.php"><center>Admin Panel</center></a>';
}
include 'footer.inc.php';
?>
Verder heb ik nog een install.php, config.php, header.php, footer.php en een admin.php.
Zou het dus kunnen om het maximum van shoutbox.php naar 1 te zetten? En nog graag meer info over die automatische reset
Je kan ook kiezen om elke 10 minuten de boel te wissen, maar dan is het effect van een shoutbox weg. Je reageert op elkaar, en de tijdsduur ertussen maakt niet uit.
Ik zou geen enig idee hebben waarom je dit zou willen?
Een paar opmerkingen:
- Regel 37: Hier mis mysql_real_escape_string() je kan nu eenvoudig met MySQL injection gehacket worden
- Ik zie ook dat de eregi() function gebruik wordt. Gebruik liever preg_match() en kijk eens op www.php.net/preg_match
Gewijzigd op 03/03/2011 08:51:15 door - Ariën -
mysql_real_escape_string("INSERT INTO ".$cnfg['prefix']."berichten VALUES ('', '".$_POST['naam']."', '".$_POST['email']."' ,'".$_POST['website']."', '".addslashes($_POST['bericht'])."', NOW(), '".$_SERVER['REMOTE_ADDR']."')") or die("Je bericht kon niet worden toegevoegd.");
Toevoeging op 03/03/2011 14:14:17:
De reden dat ik om de 10 minuten een reset wil is naar aanleiding van een idee van een site. Ik zou ook graag willen instellen dat maximaal 1 bericht geplaatst mag worden per shoutboxje, want ik wil meerdere shoutboxjes er op plaatsen. Heeft iemand dus een script waarbij alle shoutboxjes worden gereset? Ik weet ondertussen zo'n beetje hoe een cronjob werkt, ik heb nu dus een script nodig die de shoutboxjes reset. Graag jullie hulp
Toevoeging op 03/03/2011 18:05:08:
Ik heb wat gesurfd op het internet en heb een code gevonden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$dbhost = localhost;
$dbuser = user_name;
$dbpass = password;
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die(Error connecting to mysql);
$dbname = databasename;
mysql_select_db($dbname);
$query = UPDATE wp_options SET option_value = http://www.urdomain.com‘ WHERE `wp_options`.`option_id` =1 AND `wp_options`.`blog_id` =0 AND CONVERT( `wp_options`.`option_name` USING utf8 ) = ’siteurl’ LIMIT 1 ;”;
$result = mysql_query($query);
$query = UPDATE wp_options SET option_value = http://www.urdomain.com’ WHERE `wp_options`.`option_id` =39 AND `wp_options`.`blog_id` =0 AND CONVERT( `wp_options`.`option_name` USING utf8 ) = ‘home’ LIMIT 1 ;”;
$result = mysql_query($query);
mysql_close($conn);
?>
$dbhost = localhost;
$dbuser = user_name;
$dbpass = password;
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die(Error connecting to mysql);
$dbname = databasename;
mysql_select_db($dbname);
$query = UPDATE wp_options SET option_value = http://www.urdomain.com‘ WHERE `wp_options`.`option_id` =1 AND `wp_options`.`blog_id` =0 AND CONVERT( `wp_options`.`option_name` USING utf8 ) = ’siteurl’ LIMIT 1 ;”;
$result = mysql_query($query);
$query = UPDATE wp_options SET option_value = http://www.urdomain.com’ WHERE `wp_options`.`option_id` =39 AND `wp_options`.`blog_id` =0 AND CONVERT( `wp_options`.`option_name` USING utf8 ) = ‘home’ LIMIT 1 ;”;
$result = mysql_query($query);
mysql_close($conn);
?>
Is hij goed?