Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Kolejność wyświetlanych wpisów w księdze gości
Forum PHP.pl > Forum > Przedszkole
witu
Witam!
Uruchomiłem na mojej stronie internetowej prostą księgę gości. Działa na zasadzie dodawania do pliku .dat nowych wpisów, a następnie odczytu z tego pliku i wyświetlania na stronie.

Problem polega na tym, że nowo dodawane wpisy dopisują się na dole listy, a nie u góry.
Prościej mówiąc, chcę aby wyświetlanie działało na zasadzie systemów newsów.
Nie wiem co zmienić, by skrypt pobierał dane z pliku .dat od końca do początku, (ew. żeby skrypt zapisywał nowe wpisy na początku pliku - efekt chyba ten sam). Niestety nie pamiętam skąd ściągnąłem ten skrypt, ściągałem ich trochę jednocześnie więc nie jestem w stanie sobie przypomnieć...

zamieszczam kody skryptu:

część zapisująca do pliku:
  1. <?php
  2. $nazwa_pliku="baza.dat";
  3.  
  4. $imie=$_REQUEST["imie"];
  5. $imie=nl2br($imie);
  6. $imie=str_replace("r\n","",$imie);  
  7. $tresc=$_REQUEST["tresc"];
  8. $tresc=nl2br($tresc);
  9. $tresc=str_replace("r\n","",$tresc);  
  10. if (($fp=fopen($nazwa_pliku,"a"))!==false)
  11. {
  12. flock($fp,LOCK_EX);
  13. fputs($fp,$imie."r\n");
  14. fputs($fp,$tresc."r\n");
  15. flock($fp, LOCK_UN);
  16. fclose($fp);
  17. }
  18. ?>


część odczytująca z pliku
  1. <?php
  2. $nazwa_pliku="baza.dat";
  3. echo "<a href=\"index.php?id=dodaj\"><span style=\"font-weight: bold;\">Nowy wpis</span></a><br /><br />";
  4. if (($fp=fopen($nazwa_pliku,"r"))!==false)
  5. {
  6. $i=0; //ilosc wpisow
  7. flock($fp, LOCK_SH); // blokowanie pliku do odczytu
  8. while (($linia1=fgets($fp))!==false)
  9. {
  10. $linia2=fgets($fp);
  11. echo "<span style=\"font-weight: bold\">".$linia1."</span>";
  12. echo "<br />".$linia2."<br /><br />";
  13. echo "<hr />";
  14. $i++;
  15. }
  16. flock($fp, LOCK_UN); //zwolnienie blokady
  17. fclose($fp);
  18. }
  19.  
  20. if ($i==0)
  21. echo "<span style=\"font-weight: bold;\">Nie ma na razie żadnych wpisów</span><br /><br />";
  22.  
  23. echo "<a href=\"index.php?id=dodaj\"><span style=\"font-weight: bold;\">Nowy wpis</span></a><br /><br />";
  24. ?>
kszychu
Poczytaj sobie o fopen() w manualu i o fladze "x".
witu
No i poczytałem... wg tego co jest tu: http://php.net.pl/manual/pl/function.fopen.php napisane, " 'X' Tworzy i otwiera plik tylko do zapisu; umieszcza wskaźnik pliku na jego początku." a to mnie przecież nie interesuje. ja mam juz plik, w którym są zawarte wpisy więc jak użyję X to wyskoczy bąd i tak sie dzieje. próbowalem użyć opcji r+ przy zapisywaniu, ale to zastępuje to co bylo w danych linijkach a nie dopisuje...
nowotny
Ja bym zrobił tak: wczytał plik do tablicy za pomocą file" title="Zobacz w manualu PHP" target="_manual potem tablicy zrobił array_reverse" title="Zobacz w manualu PHP" target="_manual i wyświetlił taką tablicę...

OT: Heh... swoją drogą jak zaczynałem się uczyć php to właśnie taka księga gości była moim pierwszym skryptem i pamiętam miałem dokładnie ten sam problem... smile.gif chociaż nie pamiętam rozwiązania jakiego użyłem... smile.gif
witu
hnmmm probowalem zrobić tak jak doradzono tu: http://forum.php.pl/index.php?showtopic=78...si%EAga+go%B6ci ale coś chyba pokręciłem...
nowotny
Cytat(witu @ 19.02.2008, 01:37:55 ) *
hnmmm probowalem zrobić tak jak doradzono tu: http://forum.php.pl/index.php?showtopic=78...si%EAga+go%B6ci ale coś chyba pokręciłem...

Może tak, może nie... :/ trudno stwierdzić skoro nic więcej nie napisałeś...
kszychu
No a nie możesz użyć fopen() z "x" PODCZAS tworzenia pliku a nie już przy jego odczycie? Wtedy nowo dodawane wpisy będziesz miał na górze pliku.
witu
nowotny: no fakt nie napisałem zbyt wiele ale mi się spać chciało winksmiley.jpg teraz jeszcze pokminię coś z innych tematów na forum.

kszychu: ustawiłem przy fopen() parametr X w pliku zapisującym i teraz w ogóle nie zapisuje do pliku...


dodano 22.03.2008:
udalo mi się rozkminić juz jakis czas temu ale dzisiaj sobie przypomnialem o tym temacie. zamieszczam kod księgi, która działa cudownie smile.gif
dodałem nawet licznik wpisów i datę smile.gif

część wyświetlająca:
  1. <!-- plik wpisownia.php -->
  2. <center>
  3. <p>
  4. <span style="font-size:x-large;"><b>WPISOWNIA</b></span>
  5. </p>
  6. </center>
  7. <br />
  8. <?
  9. $nazwa = "baza.dat"; 
  10. $myFile = fopen($nazwa, "r");
  11. $i = -1;
  12. while(!feof($myFile)) {
  13.  $myLine = fgets($myFile, 2000);
  14.  $i++; 
  15.  }
  16. fclose($myFile);
  17.  
  18. echo "<a href=\"index.php?id=dodaj\"><span style=\"font-weight: bold;\">Nowy wpis</span></a> Ilość wpisów we Wpisowni: $i<br /><br />";
  19.  
  20. $file = array_reverse( file('baza.dat') );
  21.  
  22. foreach($file as $key => $value)
  23. {
  24. list($imie, $tresc) = explode("|||", $value);
  25. echo $imie .'<br />';
  26. echo $tresc .'<br /><br />';
  27. echo '<hr>';
  28. }
  29. echo "<a href=\"index.php?id=dodaj\"><span style=\"font-weight: bold;\">Nowy wpis</span></a><br /><br />";
  30.  
  31.  
  32. ?>


część dodająca:
Kod
<!-- plik dodaj.php -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" >
<title>Dodawanie wiadomości</title>
</head>
<body>

<form method="post" action="index.php?id=zapisz">
<div>
   Imię: <input type="text" name="nick" /><br />
   Treść:<br />
    <textarea cols="35" name="pole" rows="12">
</textarea>  <br />
   <input type="submit" value="Wyślij"/>
</div>
</form>
</body>
</html>


czesc zapisująca:
  1. <!-- plik zapisz.php -->
  2. <META HTTP-EQUIV="Refresh" CONTENT="javascript:history.back()"> 
  3. <?php
  4.  
  5. if($pole=="")
  6. {
  7.  
  8. echo("<br /><br /><h4><b>Napisz coś ;)<br /><br /><a href='javascript:history.back();'>Wstecz</a></b></h4>");
  9. }
  10. else {
  11.  
  12. $nick = $_POST['nick'];
  13. $pole = $_POST['pole'];
  14.  
  15. $nick = HTMLSpecialChars($nick);
  16. $anonim = "Gość";
  17. if($nick=="") $nick = $anonim;
  18. $pole = HTMLSpecialChars($pole);
  19. $date = date("j.m.Y G:i");
  20. $text = ereg_replace("\n", "<br />", $pole);
  21. $wynik = '<b>'. $nick . '</b>'. "  " . $date . '|||' .$text. "\n";
  22. $plik ="baza.dat";
  23. $fp = fopen($plik, "a");
  24.  
  25. fwrite ($fp, $wynik);
  26. fclose($fp);
  27.  
  28. echo '<span style="font-size:small;"> <a href="index.php?id=ksiega" /> <b>Powrót</b></a></span><br />';
  29. echo '<center><h2> Dzięki za wpis! </h2></center>';
  30. }
  31. ?>


do pelni szczescia brakuje jeszcze pliku tekstowego ktory przechowuje wpisy: baza.dat , ktorego chmody musimy ustawic na 777.
pozdr!
Witu
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.