Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Prosta księga gości
Forum PHP.pl > Forum > Przedszkole
kamil_lk
Mam pytanie. Jak zrobić, żeby wpisy w książce zapisywały się na początku, a nie na końcu np.

wpis czwarty
wpis trzeci
wpis drugi
wpis pierwszy

Wiem że jest parametr r+, ale działa on tylko wtedy kiedy plik z danymi jest już utworzony.
Poniżej podaje źródła..

index.php
  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html; charset=ISO-8859-2" />
  4. </head>
  5. <body>
  6.  
  7. <table align="center"><tr><td>
  8. <h1>KSIĘGA GOŚCI</h5>
  9. <form action="zapis.php" method="post">
  10. Nick:<br><input type="text" name="nick" value="" /><br>
  11. Treść:<br><textarea name="wpis" rows="10" cols="50"></textarea><br>
  12. <input type="submit" value="wyślij" />
  13. </form><br><br>
  14. </td></tr></table>
  15. <hr width="100%" />
  16.  
  17. <?
  18. $a= @filesize("dane.txt");
  19. if ($a)
  20. {
  21. $odczyt= fopen("dane.txt", "r");
  22. $czytaj= fread ($odczyt, filesize("dane.txt"));
  23. echo $czytaj;
  24. }
  25. else {
  26. echo "Brak wpisów.";
  27. }
  28. ?>
  29.  
  30. </body>
  31. </html>



zapis.php
  1. <html>
  2. <head>
  3. <meta http-equiv="refresh" content="3;URL=index.php">
  4. </head>
  5. <body>
  6.  
  7. <?php
  8. ini_set('display_errors','1');
  9. ?>
  10.  
  11. <?
  12. $nick= $_POST['nick'];
  13. $wpis= $_POST['wpis'];
  14. if (empty($nick) && empty($wpis))
  15. {
  16. echo "WYPEŁNIJ POLA FORMULARZA!";
  17. }
  18. else {
  19. $zapis= fopen("dane.txt", "a");
  20. fwrite($zapis, "<b>Dodał:</b> <p>".$nick."</p> <b>Wpis:</b> <p>".$wpis."</p><br><hr width=100% />");
  21. fclose($zapis);
  22. }
  23. ?>
  24.  
  25. </body></html>
nospor
algorytm:
1) wczytujesz zawartosc pliku do zmiennej
2) doklejasz na poczatek tej zmiennej nowy wpis
3) zapisujesz te zmienna spowrotem do pliku
kamil_lk
Cytat(nospor @ 4.06.2008, 16:25:53 ) *
2) doklejasz na poczatek tej zmiennej nowy wpis


jak to zrobić?
nospor
  1. <?php
  2. $zm = 'cos';
  3. $zm = 'przed'.$zm;
  4. ?>

No toz to podstawy smile.gif
kamil_lk
tzn, że w pliku wpis.php mam otworzyć drugi raz ten sam plik, utworzyć taką samą zmienną do której dopisze to co otworzyłem?
marcio
Nie qwiem czy cie dobrze zrozumialem chcesz je zapisywac na poczatku zeby miec najnowsze wpisu jako pierwsze??

Jesli tak to dlaczego nie zapiszesz ich normalnie i nie wyswietlisz w odwrotnej kolejnosci za pomoca array_reverse() ale nie wiem czy dobze cie zrozumialem
kamil_lk
Cytat(marcio @ 4.06.2008, 16:37:27 ) *
Nie qwiem czy cie dobrze zrozumialem chcesz je zapisywac na poczatku zeby miec najnowsze wpisu jako pierwsze??

Jesli tak to dlaczego nie zapiszesz ich normalnie i nie wyswietlisz w odwrotnej kolejnosci za pomoca array_reverse() ale nie wiem czy dobze cie zrozumialem


dobrze mnie zrozumiałeś.. a jak to zrobić?
marcio
  1. <?php
  2. $zawartosc = file('dane.txt');
  3. foreach($zawartosc as $all) $wpisy = array_reverse($all, true);
  4. echo($wpisy);
  5. ?>

Cos takiego tak na szybko zobacz jak sie wykorzystuje array_reverse()
http://www.php.ssng.info/function.array-reverse.php
gox
Bez watpienia lepszy sposob, to zapisywanie na poczatku, zapisujesz duuuuzo rzadziej niz prezentujesz, wiec takie rozwiazanie bedzie bez watpienia znaczenie szybsze, szegolnie gdy nie wysweitlasz za jedym zamachem wszystkich wpisow..

pamietaj tylko, ze jesli plik z baza osiagnie wiekszy rozmar niz ten zadeklarowany w iniset(memory_limit), bedzie problem...
kamil_lk
nospor.. mógłbyś rozpisać jak to zrobić? ;>
Cysiaczek
Przecież ~nospor już to zrobił...

  1. <?php
  2. $dane=file_get_contents($plik);
  3. file_put_contents($plik, "<b>Dodał:</b> <p>".$nick."</p> <b>Wpis:</b> <p>".$wpis."</p><br><hr width=100% />".$dane);
  4. ?>


bez tych fopen() i fread()

Pozdawiam.
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.