emotki i czytanie rekordów od końca

0

emotki i czytanie rekordów od końca

chciałem ze sobą połączyć 3 skrypty ale coś mi nie wyszło:

  • komentarze
  • emotki
  • czytanie rekordów od końca (czyli żeby świeże komentarze były u góry a nie na dale jak zawsze)

problem polega na tym że nie działa to jak należy. Może ktoś by znalazł tu błąd:

<?
if ($message)
{
function emotki($ciag)
{
$znak=array(" :> "," :P "," :] ");
$znak_zmien=array('<img src="chytry.gif" alt=":>">','<img src="jezyk1.gif" alt=":P">','<img src="krzywy.gif" alt=":]">'); //etc...
$ciag=str_replace($znak,$znak_zmien,$ciag);
return $ciag;
}
        $name = strip_tags($name);
        $message = strip_tags($message);
        $message = ereg_replace("\r\n\r\n", "\n<P>", $message);
        $date = date("Y.m.d -- H:i:s");
        $message = "<B>$name</B> -- $date<P> $message <BR><HR>";

	$message=emotki($message);
        $fp = fopen ("komentarz.txt", "a");
        fwrite ($fp, $message);
        fclose ($fp);
	Header('Location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
	Die();
        }
?>



<FORM method="post">
<b>Twoje imie (lub ksywa):</b><BR><INPUT name="name" type="text" size="55"><BR>
<b>Twoj komentarz:</b><BR><TEXTAREA name="message" rows=10 cols=55 wrap=virtual>
</TEXTAREA><BR>
<INPUT name="submit" type="submit" value="Dodaj komentarz">
</FORM>
<HR>
<table border="2" cellspacing="30" cellpadding="20" width="100%">
<tr>
<td>
<?

@ $wp = fopen("komentarz.txt", 'r');

 if (!$wp)
 {
   echo 'nie ma jeszcze zadnego komentarza';
   exit;
 }
 
 while (!feof($wp))
 {
   $spis = fgets($wp, 999);
   echo $spis.'<br />';
 }
 
 fclose($wp);

?>
</td>
</tr>
</table>
<A href="#top"><P ALIGN="right">do góry</P></A>
0

Ale co Ci tu dokładnie nie działa?

0
  • emotki
  • czytanie rekordów od końca (czyli żeby świeże komentarze były u góry a nie na dale jak zawsze)
0

komentarze:
-zamiast wykonywac x razy echo najlepiej polaczyc te komentarze do jednej zmiennej, a potem wyswietlic jej zawartosc.

emotki:
czy ten kod jest urwany? co to ma byc ta druga linijka?

0

no ja juz sam nie wiem co tu z tego wyszło :-( próbowałem takie trzy skrypty ze soba jakoś połączyć:

1- komentarze

<?
if ($message)
{
        $name = strip_tags($name);
        $message = strip_tags($message);
        $message = ereg_replace("\r\n\r\n", "\n<P>", $message);
        $date = date("Y.m.d -- H:i:s");
        $message = "<B>$name</B> -- $date<P> $message <BR><HR>";
        $fp = fopen ("komentarz.txt", "a");
        fwrite ($fp, $message);
        fclose ($fp);
	Header('Location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
	Die();
        }
?>



<FORM method="post">
<b>Twoje imie (lub ksywa):</b><BR><INPUT name="name" type="text" size="55"><BR>
<b>Twoj komentarz:</b><BR><TEXTAREA name="message" rows=10 cols=55 wrap=virtual>
</TEXTAREA><BR>
<INPUT name="submit" type="submit" value="Dodaj komentarz">
</FORM>

<HR>
<?@readfile("komantarz.txt", "a");?>

2 - emotki:

function emotki($string)
{
$emotikony = array(":-)" => "1.gif", ":-|" => "2.gif", ":-(" => "3.gif", ":-]" => "4.gif");
foreach($emotikony as $text => $grafika) $string = str_replace($text,'<img src="'.$grafika'"/>',$string);

return $string;

}

3 - odczyt pliku od tyłu:

<?

@ $wp = fopen("komentarz.txt", 'r');

 if (!$wp)
 {
   echo 'nie ma jeszcze zadnego komentarza';
   exit;
 }

 while (!feof($wp))
 {
   $spis = fgets($wp, 999);
   echo $spis.'<br />';
 }

 fclose($wp);

?>

ale nic z tego nie wyszło:(
może ktoś to połączy żeby działało. Bo ja nie wiem jak :-(

0

komentarze:

  • zobacz druga linijke. mamy tam instrukcje warunkowa, ktora sprawdza wartosc logiczna zmiennej $message. w zwiazku z tym, ze zmienna ta nie byla nigdzie wczesniej utworzona, jej wartosc logiczna to false, czyli dalsza czesc tego skryptu nie jest wykonywana.

emotki:
tak bez wnikania, to kod chyba dobrze jest napisany. brakuje tylko wykorzystania tej funkcji przy odczytywaniu komentarzy

odczyt pliku od tylu:
sposob w jaki odczytujesz plik nie ma nic do rzeczy. wazne jest w jaki sposob wyswietlasz te dane.
nie potrzebnie wyswietlasz dane od razu po ich odczytaniu. naduzywasz przez "echo" (wydulza to czas dzialania skryptu), a kolejnosc tych komentarzy jest zgodna z kolejnosci odczytywania ich z pliku (tego nie chcemy). musisz zastapic linijke z wyswietlajaca komentarz, kodem, ktory bedzie dodawal do jednej zmiennej kazdy komenatrz, tak, zeby byly w naszej ustalonej kolejnosci. dopiero po wykonaniu petli while zostanie wyswietlona zawartosc tej zmiennej.

sorry ze nie daje ci gotowego rozwiazania, ale:

  1. nie chce mi sie
  2. jezeli chcesz sie nauczyc czegos z php musisz sam myslec.
0

co do komentarzy to chyba poprawką dla !register_globals może być linijka na początku:

$message = empty($_POST['message']) ? false : $_POST['message'];
0
$wp = fopen("komentarz.txt", 'r');

proponuje zamienic na

$wp = file("komentarz.txt");
$wp = array_reverse($wp);
//wypisanie danych

1 użytkowników online, w tym zalogowanych: 0, gości: 1