Bartosz82
(Bartosz82)
30 Lipiec 2011 06:48
#1
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=1 Komentarze 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.
drobok
(Drobok)
30 Lipiec 2011 07:00
#2
Zobacz jak wygląda twój plik z komentarzami. Jak odczytujesz po linijce to musisz siłą rzeczy zamieniać entery (\n), na znaki html (
) bądź xhtml (
).
Bartosz82
(Bartosz82)
30 Lipiec 2011 10:10
#3
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 .
drobok
(Drobok)
30 Lipiec 2011 10:23
#4
Nie, po tym:
$pole = HTMLSpecialChars($pole);
Masz dać:
$pole = str_replace ( '\n', '
, $pole );
Bartosz82
(Bartosz82)
31 Lipiec 2011 16:41
#6
Grzesie1k zrobiłem tak jak mi napisałeś i dodałem sobie tę linijke, ale nadal mi to nie działa
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);
}
?>
drobok
(Drobok)
31 Lipiec 2011 16:45
#7
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.
Bartosz82
(Bartosz82)
31 Lipiec 2011 17:05
#8
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 ?
Grzesie1k
(Grzesie K)
31 Lipiec 2011 17:15
#9
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].
Bartosz82
(Bartosz82)
31 Lipiec 2011 17:56
#10
Grzesie1k super, stokrotne dzięki. Teraz działa idealnie Bardzo Ci dziękeuje za pomoc.
Grzesie1k
(Grzesie K)
31 Lipiec 2011 18:01
#11
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
.