Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: POMOCY przy zabawie z plikami...
Forum PHP.pl > Forum > PHP
R4D3K
Witam w php ucze się programować od paru dni rolleyes.gif Postanowiłem napisać prostą bazę operujacą na plikach (a właściwie jednym). Baza składa się z pliki q.txt, oraz pliku php w którym dałem możliwość zmiany liczby punktów oraz dołączenie nowego użytkownika z daną ilością punktów oto kod:
  1. <html>
  2. <head>
  3. <title>dynamiczny formularz</title>
  4. <?
  5. function sortuj()
  6. {
  7. $dane=file("q.txt");$ile=count($dane);
  8. for($i=0;$i<$ile;$i++)
  9. {
  10.  list($p[$i], $n[$i])=explode("|", $dane[$i]);
  11. }
  12. array_multisort($p, SORT_DESC,
  13. $n);
  14. $plik=fopen("q.txt", "w");flock($plik,2);
  15. for($i=0;$i<$ile;$i++)
  16. {
  17. fputs($plik, $p[$i]."|".$n[$i]);
  18. }
  19. flock($plik,3);fclose($plik);
  20. }
  21. ?>
  22. </head>
  23. <body>
  24. <h3 align=center>Edycja graczy rankingowych</h3>
  25. <form name="formularz" action="edycja.php" method="post">
  26. <?
  27. //petla_Główna
  28. if (file_exists("q.txt"))
  29. {
  30. if (isset($_POST['nnick'])&&(isset($_POST['npunkty'])))
  31.  {
  32.  $d1=file("q.txt");$ile=count($d1);
  33.  for($i=0;$i<$ile;$i++)
  34.  {
  35. list($p1[$i],$n1[$i])=explode("|",$d1[$i]);
  36.  }
  37.  $plik=fopen("q.txt","w");flock($plik,2);
  38.  $p1[$ile]=$npunkty;$n1[$ile]=$nnick;
  39.  for($i=0;$i<=$ile;$i++)
  40.  {
  41.  fputs($plik,$p1[$i]."|".$n1[$i]);
  42.  }
  43.  flock($plik,3);
  44.  fclose($plik);
  45.  //sortuj();
  46.  }
  47.  $dane=file("q.txt");
  48.  $n=count($dane);
  49.  $lp=1;
  50.  for($i=0;$i<$n;$i++)
  51.  {
  52. list($punkty[$i], $nick[$i])=explode("|", $dane[$i]);
  53. echo "<br>$lp.) $nick[$i] ,punktacja: <font color=red>$punkty[$i]</font> Zmień: <input type=text name=pts[$i] value=$punkty[$i]>";
  54. $lp++;
  55.  }
  56.  echo "<br><input type=submit value=ZMIEŃ>";echo "</form>";
  57.  echo "<form name="formularz2" action="edycja.php" method="post">";
  58.  echo "Nick : <INPUT TYPE=TEXT NAME=nnick value=""> punkty: <INPUT TYPE=TEXT NAME=npunkty VALUE=""><INPUT TYPE=SUBMIT VALUE="DODAJ"></FORM>";
  59. }
  60. else {echo "<font color=red>Sorry błąd w bazie danych, nie odnaleziono pliku !</font>";}
  61. ?>
  62. </body>
  63. </html>


Zawartośc pliku txt wygłada tak:
punkty|nick i jest to jakaś przykładowa lista którą stworzyłem w notniku:
1000|radek
2000|lukasz
1500|czeslaw
itp.
Mój problem polega na tym że gdy dodaje nowego gracza do bazy to wpisuje mi go tak:
1000|radek
2000|lukasz
1500|czeslaw1200|nowy
a chiałbym żeby dodwało jak poprzednie rekordy czyli od nowej lini:
1000|radek
2000|lukasz
1500|czeslaw
1200|nowy
nie wiem jak to zrobić sadsmiley02.gif Poradzcie mi coś, aha i używam apache 1.3.23 i PHP 4.1.1
Aha dodam że próbowałem linie 30 zastąpić taką konstrukcją:
  1. <?php
  2. if (isset($_POST['nnick'])&&(isset($_POST['npunkty'])))
  3.  {
  4.  $plik=fopen("q.txt","a");flock($plik,2);
  5.  fputs($plik,"r".$npunkty."|".$nnick);
  6.  flock($plik,3);
  7.  fclose($plik);
  8.  sortuj();
  9.  }
  10. ?>

zamiast \r stosowałem też \n ale i tak w notatniku wszystko jest w jednej lini tylko że drukuje znak specjalny to powoduje że funkcja która ma sortować rekordy w pliku nie robi tego porawnie gdy jest ten znak angrysmiley.gif
BiRetis
Echm pliki domyślnie są zapisywane w trybie binarnym, dlatego nie tłumaczy ci znaku końca linii. Musisz wymusić zapis tekstowy. zamiast samego "w" daj "wt" i przy odczycie "rt". powinno działać. Bo jak napiszesz "r" albo "w" to domyślnie masz zapis "rb" lub "wb" czyli zapis binarny. Pozdrawiam
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.