Reactie pagina

Status
Niet open voor verdere reacties.

Mick Durst

Gebruiker
Lid geworden
21 feb 2004
Berichten
205
Beste lezer

Ik heb een reactie pagina op mijn website alleen hij doet het niet helemaal lekker.
Als iemand een reactie achterlaat en een enter gebruikt in het invulveld, dan ziet hij het als een nieuw bericht en explodeert hij het hele geposte bericht dus.

Het zal wel geen perfect script zijn want ik snap het niet helemaal voor de volle 100% dus ik hoop dat jullie het op kunnen lossen. Mijn PHP kennis is beperkt!

Code van schrijf.php:
Code:
<html>
<head>
<style type="text/css"> 
<!-- BODY {background:none transparent;}--> 
</style>
</head>
<body>
<BR><BR><BR>
<?php 

$datum = date("d-m-Y / H:i"); 

$a=$_GET['a'];

if($a=='s'){

$naam=$_POST['naam'];

$bericht=$_POST['bericht'];

$bestand = fopen("gastenboek.txt", "a"); 

$bericht = nl2br($bericht); 

$bericht = str_replace("|","",$bericht); 

$naam = str_replace("|","",$naam);

if(!empty($_POST['leegveld'])) {
  echo '<BR><BR>Er is een fout opgetreden. Klik <a href="schrijf.php"><font face=verdana>hier</font></a> om het nogmaals te proberen<br><br>';
  exit;
}


fwrite($bestand, "$naam|$email|$datum|$REMOTE_ADDR|$bericht\n"); 

fclose($bestand); 

echo"<font face=verdana size =2>Bedankt voor uw bericht.<br><br><a href=gastenboek.php>Klik hier om terug te keren naar het gastenboek</font></a>"; 

} else { 

echo"<form method=post action=schrijf.php?a=s>";

echo"<div style='display: none'><input type='text' name='leegveld' value=''></div>";

echo"<font face=verdana size =2>Naam:</font><br><input type=text name=naam><br>"; 

$value=$_GET['bericht'];

?>

<BR>

<?

echo"<font face=verdana size =2>Bericht:</font><br><textarea cols=55 rows=10 name=bericht id=bericht>$value</textarea><br>";

echo"<input type=submit value='Verstuur'>"; 

echo"</form>"; 

} 

?>

</body>
</html>

Code van gastenboek.php:
Code:
<html>
<head>
<style type="text/css"> 
<!-- BODY {background:none transparent;}--> 
</style>
</head>
<body>


<?php 

echo '<BR><BR><a href="schrijf.php"><font face=verdana>Laat een reactie achter</font></a><br><br>'; 



$aBestand = file('gastenboek.txt'); 

if($aBestand) { 

    $aBestand = array_reverse($aBestand); 

    foreach($aBestand as $sBericht) { 

        $aBericht = explode('|',$sBericht); 

        echo '<font face=verdana size=2><b>Naam: '.$aBericht[0].'</b></font>'; 

        echo '<font face=verdana size=2><br>'.$aBericht[4].'</font><br><br><hr>'; 

    } 

} else { 

    echo '<font face=verdana>Er zijn nog geen berichten.</font>'; 

} 

?>
</body>
</html>

Alvast vriendelijk bedankt voor de reacties!

Mick
 
Dat komt doordat de functie file elke regel uit het bestand als apart element in de array plaatst. Als er een enter in het bericht staat komt een deel van het bericht op een nieuwe regel te staan en die functie plaatst dat apart in de array.

De makkelijkste oplossing is om enters uit het bericht te halen voor ze weg te schrijven. Je gebruikt nl2br dus dat kan zonder dat het invloed op het bericht heeft. De enters weghalen kan met str_replace
PHP:
$bericht = str_replace("\n", "", $bericht);
 
Ik begrijp het niet helemaal maar het werkt!

Enorm bedankt voor de snelle reactie en meteen de oplossing!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan