Shoutbox

Status
Niet open voor verdere reacties.

webmastertje

Gebruiker
Lid geworden
4 jan 2011
Berichten
52
Hallo, ik heb geprobeert zelf een shoutbox te maken, waarvan de gegevens worden opgeslagen in een .txt bestand. Maar als ik nu iets invul in de shoutbox, komen de vorige berichten er steeds dubbel in de staan. Weet iemand hoe dit kan?? Dit is de code:
PHP:
<html>
<head>
<title>Shoutbox</title>
</head>
<body bgcolor="9370db">
<h2><center>Shoutbox...</center></h2>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
<?php if(isset($foutmelding)) { echo "<b>$foutmelding</b>"; } ?>
Uw naam&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: <input type="text" name="naam"><br>
Uw e-mailadres: <input type="text" name="mail"><br>
Uw bericht:<br>
<textarea rows="5" cols="50" name="commentaar">Typ hier uw bericht...</textarea><br>
Waardering over deze website:<br>
<select name="punt">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option selected="selected">5</option>
</select><br>
<input type="reset" value="Maak alle velden leeg">
<input type="submit" value="Voeg bericht toe">
</form>
<hr size="3">
</body>
</html>

<?php
if(isset($_POST["naam"])) {
	if($_POST["naam"] != "" && $_POST["mail"] != "") {
		$pointer=fopen("shoutbox.txt","r+");
		$oud=fread($pointer,filesize("shoutbox.txt"));
		$mail='<a href="mailto:' . $_POST["mail"] . '>' . $_POST["mail"] . '</a>';
		$datum=date("j.n.Y");
		$commentaar=htmlspecialchars($_POST["commentaar"]);
		$commentaar=stripslashes($commentaar);
		$commentaar=nl2br($commentaar);
		$geschreven=$_POST["naam"] . " (" . $_POST["mail"] . ") schreef op " . $datum . " het volgende:<br>\n
					 <b>" . $commentaar . "</b><br>\n
					 Punt: <b>" . $_POST["punt"] . "</b>\n
					 <hr>";
		fputs($pointer,"$oud");
		rewind($pointer);
		fputs($pointer,"$geschreven\n");
	}
	else {
		$foutmelding="U heeft niet alle velden ingevuld!";
}
}
readfile("shoutbox.txt");
?>
 
Je opent de file voor lezen en schrijven, maakt hem niet leeg, en schrijft vervolgens alle data die al in de file staat nog een keer in de file. Je moet of de file legen voor je alles opnieuw schrijft, of alleen de nieuwe data wegschrijven. Alleen nieuwe data is beter denk ik.
 
Ik heb mijn code aangepast, maar nu gaat het vorige bericht steeds weg, de code die ik nu heb is:

PHP:
<html>
<head>
<title>Shoutbox</title>
</head>
<body bgcolor="9370db">
<h2><center>Shoutbox...</center></h2>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
<?php if(isset($foutmelding)) { echo "<b>$foutmelding</b>"; } ?>
Uw naam&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: <input type="text" name="naam"><br>
Uw e-mailadres: <input type="text" name="mail"><br>
Uw bericht:<br>
<textarea rows="5" cols="50" name="commentaar">Typ hier uw bericht...</textarea><br>
Waardering over deze website:<br>
<select name="punt">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option selected="selected">5</option>
</select><br>
<input type="reset" value="Maak alle velden leeg">
<input type="submit" value="Voeg bericht toe">
</form>
<hr size="3">
</body>
</html>

<?php
if(isset($_POST["naam"])) {
	if($_POST["naam"] != "" && $_POST["mail"] != "") {
		$pointer=fopen("shoutbox.txt","r+");
		$mail='<a href="mailto:' . $_POST["mail"] . '>' . $_POST["mail"] . '</a>';
		$datum=date("j.n.Y");
		$commentaar=htmlspecialchars($_POST["commentaar"]);
		$commentaar=stripslashes($commentaar);
		$commentaar=nl2br($commentaar);
		$geschreven=$_POST["naam"] . " (" . $_POST["mail"] . ") schreef op " . $datum . " het volgende:<br>\n
					 <b>" . $commentaar . "</b><br>\n
					 Punt: <b>" . $_POST["punt"] . "</b>\n
					 <hr>";
		rewind($pointer);
		fputs($pointer,"$geschreven\n");
	}
	else {
		$foutmelding="U heeft niet alle velden ingevuld!";
}
}
readfile("shoutbox.txt");
?>
 
Ik vermoed dat je overige data overschreven wordt... verdwijnt specifiek het eerste bericht echt? Ook als je verschillende lengtes berichten ingeeft?

In dat geval moet je toch de file eerst ophalen, dan leeggooien en dan eerst de nieuwe content schrijven en dan de oude.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan