Błędne wyświetlanie komentarzy na stronie

Zauważyłem na mojej stronie błędy w wyświetlaniu komentarzy. Polegają one na tym, że jak dodam jakiś komentarz skladający się z kilku linijek tekstu to wtedy ten jeden komentarz dzieli mi na kilka komentarzy.

Przykładowo gdy w jednym komentarzu napisze tak:

test

test

test

test

To wtedy dzieli mi ten jeden komentarz o treści test na 4 dodane komentarze o treści test. Przykladowo na mojej stronie dzieje się to tak: http://www.history.is.net.pl/?news&id=8&wyslano=1Komentarze mam na pliku txt. Nie wiem co jest nie tak, możecie mi w tym pomóc ? dodaj.php

Komentarz Podpis

<?php if(isset($_POST[‘action’]) && $_POST[‘action’]==1) echo <<< SER Nick: {$_POST[‘nick’]} Komentarz: {$_POST[‘pole’]} SER; ?>[/code] pokaz.php

[code]<?php if (!file_exists(‘comments/’.$_GET[‘id’].‘.txt’)) { file_put_contents(‘comments/’.$_GET[‘id’].‘.txt’, ‘’); chmod(‘comments/’.$_GET[‘id’].‘.txt’, 0777); } $file = file(‘comments/’.$_GET[‘id’].‘.txt’); rsort($file); $file = file(‘comments/’.$_GET[‘id’].‘.txt’); $file = array_reverse($file); foreach($file as $key => $value) { $data = explode(‘|||’, $value); echo ‘'. $data[0] . ’ | ’ . $data[1] .'’; $tresc = $data[5]; echo ‘’. $tresc .’ '; } ?>
wyslij.php

<?php 

if ($_GET['wyslano']!=1) {

if(empty($_POST['nick']) || empty($_POST['mail']) || empty($_POST['www']) || empty($_POST['temat']) || empty($_POST['pole'])) { 

header('Location: http://www.history.is.net.pl/?news&id='.$_GET['id'].'&wyslano=1');

} 

$nick = $_POST['nick']; 

$mail = $_POST['mail']; 

$www = $_POST['www']; 

$temat = $_POST['temat']; 

$pole = $_POST['pole']; 

$nick = HTMLSpecialChars($nick); 

$mail = HTMLSpecialChars($mail); 

$www = HTMLSpecialChars($www); 

$temat = HTMLSpecialChars($temat); 

$pole = HTMLSpecialChars($pole); 

$datanow = date("d.m.Y H:i");

$wynik = $datanow . '|||' . $nick .'|||'. $mail . '|||' . $www . '|||' . $temat . '|||' . $pole . "\n"; 

$plik = 'comments/'.$_GET['id'].'.txt'; 

$fp = fopen($plik, "a"); 

fwrite ($fp, $wynik); 

fclose($fp);

} 

?>

Prosze Was o pomoc w tej sprawie.

Zobacz jak wygląda twój plikz komentarzami. Jak odczytujesz po linijce to musisz siłą rzeczy zamieniać entery (\n), na znaki html (

) bądź xhtml (

).

drobok czyli, żeby było poprawnie musze w tej linijce:

$wynik = $datanow . '|||' . $nick .'|||'. $mail . '|||' . $www . '|||' . $temat . '|||' . $pole . "\n";

zamienić na tą:

$wynik = $datanow . '|||' . $nick .'|||'. $mail . '|||' . $www . '|||' . $temat . '|||' . $pole . "\
";

Jeśli nie, to prosze popraw mnie .

Nie, po tym:

$pole = HTMLSpecialChars($pole);

Masz dać:

$pole = str_replace ( '\n', '
, $pole );
$pole=nl2br($pole);

Grzesie1k zrobiłem tak jak mi napisałeś i dodałem sobie tę linijke, ale nadal mi to nie działa :frowning:

Zobacz sobie: http://www.history.is.net.pl/?news&id=8&wyslano=1

drobok natomiast gdy zrobiłem tak jak Ty mi podałeś to wtedy zamiast strony z komentarzami wyrzuciło mi bląd taki:

Parse error: syntax error, unexpected ',' in /home/users/history/public_html/wyslij.php on line 16

Wdaje mi się, że dobrze zrobiłem: wyslij.php

<?php 

if ($_GET['wyslano']!=1) {

if(empty($_POST['nick']) || empty($_POST['mail']) || empty($_POST['www']) || empty($_POST['temat']) || empty($_POST['pole'])) { 

header('Location: http://www.history.is.net.pl/?news&id='.$_GET['id'].'&wyslano=1');

} 

$nick = $_POST['nick']; 

$mail = $_POST['mail']; 

$www = $_POST['www']; 

$temat = $_POST['temat']; 

$pole = $_POST['pole']; 

$nick = HTMLSpecialChars($nick); 

$mail = HTMLSpecialChars($mail); 

$www = HTMLSpecialChars($www); 

$temat = HTMLSpecialChars($temat); 

$pole = HTMLSpecialChars($pole);

$pole = str_replace ( '\n', '
, $pole ); 

$datanow = date("d.m.Y H:i");

$wynik = $datanow . '|||' . $nick .'|||'. $mail . '|||' . $www . '|||' . $temat . '|||' . $pole . "\n"; 

$plik = 'comments/'.$_GET['id'].'.txt'; 

$fp = fopen($plik, "a"); 

fwrite ($fp, $wynik); 

fclose($fp);

} 

?>

Bo źle mam zamknięty apostrof. Usuń tego txt co masz w nim ten multum linijek, dodaj komentarze jeszcze raz metodą, którą podał ci Grzesie1k.

drobok usunąłem tamte komentarze txt z pliku i zrobiłem tak jak podał mi Grzesie1k

Wedy zamiast jednego komnetarza dodały mi sie trzy komentarze

http://www.history.is.net.pl/?news&id=8&wyslano=1

Mozecie mi jakoś pomóc ?

Spróbuj tak:

<?php if($_GET['wyslano']!=1){    if(empty($_POST['nick']) || empty($_POST['mail']) || empty($_POST['www']) || empty($_POST['temat']) || empty($_POST['pole'])) { ("Location:  http://www.history.is.net.pl/?newsid=$_GET[id]wyslano=1");    }    foreach($_POST as $key=$value){        $_POST[$key]=HTMLSpecialChars($value);    }    $_POST['pole']=str_replace(array("\r\n","\n\r","\n","\r"),',$_POST['pole']);    =fopen("comments/$_GET[id].txt", "a");    fwrite ($fp, date("d.m.Y H:i")."|||$_POST[nick]|||$_POST[mail]|||$_POST[www]|||$_POST[temat]|||$_POST[pole]\n"); ($fp);



Ps. Mam nadzieję że wcześniej sprawdzasz co masz w zmiennej $_GET[id].

Grzesie1k super, stokrotne dzięki. Teraz działa idealnie :slight_smile: Bardzo Ci dziękeuje za pomoc.

Tak jeszcze w drodze wyjaśnienia. Przykład droboka:

$pole = str_replace ( '\n', '
', $pole );

nie działał gdyż oznaczenie nowej linii \n musi się znajdować w “” (podwójnym apostrofie). Funkcja nl2br() również nie pomogła gdyż nie usuwa ona znaku nowej linii, lecz dodaje jedynie

.