Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] stronnicowanie, Operacje na plikach *.txt
integer000
post
Post #1





Grupa: Zarejestrowani
Postów: 129
Pomógł: 0
Dołączył: 24.09.2005

Ostrzeżenie: (30%)
XX---


Witam mam skrypt:

  1. <?php
  2. $newsdata="plik.dat";
  3. $table=file($newsdata);
  4. $total=count($table);
  5. $maxstron=ceil($total/10);
  6. if(!isset($_GET['id'])) $_GET['id']=1;
  7. $do=$_GET['id']*10;
  8. $od=$do-10;
  9. if($do>$total) $do=$total;
  10. for ($i=$od; $i<$do; $i++)
  11. {
  12. $data=explode("*|*", $table[$i]);
  13. echo "<table border="1" cellspacing="0" cellpadding="6" width="500px">
  14. <tr>
  15. <td colspan="2">
  16. <b>$data[0]</b>
  17. </td>
  18. </tr>
  19. <tr>
  20. <td rowspan="2" width="210px" height="170px"><A TARGET="_blank" HREF="$data[3]" onclick="return wyswietl('$data[3]')">
  21. <IMG SRC="$data[3]" BORDER="0" width="210px" height="170px">
  22. </A></td> 
  23. <td width="290px" height="140px">$data[1]</td>
  24. </tr>
  25. <tr>
  26.  <td colspan="2" width="290px" height="30px"><table border="0" cellspacing="0" cellpadding="0" width="290px" height="30px"><tr><td>$data[2]</td><td align="right">
  27.  </td></tr></table></td>
  28. </tr>
  29. </table><br>";
  30. };
  31. for($i=1;$i<=$maxstron;$i++) echo "<a href="site.php?id=$i">$i</a> | ";
  32. ?>


skrypt ten pobiera dane z pliku tekstowego a następnie stronnicując je wyświetla na stronie.

problem w tym że zmienna $table przechowuje wszystkie rekordy pobrane z pliku, a ja bym chciał aby przechowywała tylko te rekordy które w $data[4] == "ppp"; a inne żeby odrzucała...

plik wygląda mniejwięcej tak:

qqqqqqq*|*rrrrrrrrrr*|*ttttttttttttt*|*uuuuuuuu*|*ppp*|*0
qewrqqq*|*rrewrrrrrrr*|*ttttewrtttt*|*uuewuuu*|*ddd*|*0
reqq*|*rrrrrrrrrr*|*ttttttttttttt*|*uuuewruuu*|*hfffffhh*|*0
qqqqqqq*|*rrrrrrrrrr*|*ttttttttttttt*|*uuuewruuuu*|*pis*|*0
qqqrrqqq*|*rrrreeerrrrr*|*tttterw*|*uuuuuuuu*|*ppp*|*0
zzzzzzz*|*rreeerrrr*|*ttttttttttttt*|*uuuuuuuu*|*ppp*|*0
qxxxxxx*|*rrrddddrr*|*ttttttttttttt*|*uuuuuuuu*|*rew*|*0
cccccc*|*rrrrrrrrrr*|*ttttttttttttt*|*uuuuuuuu*|*ppp*|*0

czyli jeśli skrypt wykryje że w pierwszej linijce w $data[4] == "ppp" to żeby ją ładowało do zmiennej,
natomiast 2 linijka w #data[4] już nie ma "ppp" więc żeby ją odrzucało....

Ten post edytował integer000 3.06.2006, 13:06:54
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
integer000
post
Post #2





Grupa: Zarejestrowani
Postów: 129
Pomógł: 0
Dołączył: 24.09.2005

Ostrzeżenie: (30%)
XX---


UDAT analizując Twój kod dla mnie wydaje się że jest OK, ale niestety OK nie jest.

Nadal jeśli w pliku tekstowym mam 40 wpisów a w pierwszych 10 wpisach są tylko 2 z wartością "ppp" to na pierwszej stronie mam wyświetlone tylko 2 rekordy. (stronnicowanie nadal bierze pod uwagę wszystkie rekordy wczytane do zmiennej...
Go to the top of the page
+Quote Post
UDAT
post
Post #3





Grupa: Zarejestrowani
Postów: 442
Pomógł: 0
Dołączył: 27.12.2005

Ostrzeżenie: (0%)
-----


Cytat(integer000 @ 3.06.2006, 14:12 ) *
UDAT analizując Twój kod dla mnie wydaje się że jest OK, ale niestety OK nie jest.

Nadal jeśli w pliku tekstowym mam 40 wpisów a w pierwszych 10 wpisach są tylko 2 z wartością "ppp" to na pierwszej stronie mam wyświetlone tylko 2 rekordy. (stronnicowanie nadal bierze pod uwagę wszystkie rekordy wczytane do zmiennej...


Przecież masz w pętli for wyraźnie 10 iteracji. Zamień to na pętlę for po wszystkich elementach, a potem daj foreach
  1. <?php
  2. $newsdata="plik.dat";
  3. $table=file($newsdata);
  4. $total=count($table);
  5.  
  6. if(!isset($_GET['id'])) $_GET['id']=1;
  7.  
  8. for ($i=0; $i<$total; $i++)
  9. {
  10. $data=explode("*|*", $table[$i]);
  11.  if ($data[4] != "ppp") 
  12. {//sprawdza cy w $data[4] jest ppp
  13.  unset($table[$i]);
  14.  continue;
  15.  } 
  16. }
  17.  $total=count($table); 
  18. $do=$_GET['id']*10;
  19.  if($do>$total) $do=$total; // trzeba to było zamienić miejscami
  20.  $od=$do-10; // bo mogło niewyświetlić żadnej strony gdy $total <$do-10
  21.  
  22. $maxstron=ceil($total/10);
  23.  
  24. $i=0;
  25.  
  26. foreach ($table as $data)
  27. {
  28. ++$i;
  29.  if (($i<$od)||($i>$do))
  30.  continue;
  31.  echo "<table border="1" cellspacing="0" cellpadding="6" width="500px">
  32. <tr>
  33. <td colspan="2">
  34. <b>$data[0]</b>
  35. </td>
  36. </tr>
  37. <tr>
  38. <td rowspan="2" width="210px" height="170px"><A TARGET="_blank" HREF="$data[3]" onclick="return wyswietl('$data[3]')">
  39. <IMG SRC="$data[3]" BORDER="0" width="210px" height="170px">
  40. </A></td> 
  41. <td width="290px" height="140px">$data[1]</td>
  42. </tr>
  43. <tr>
  44.  <td colspan="2" width="290px" height="30px"><table border="0" cellspacing="0" cellpadding="0" width="290px" height="30px"><tr><td>$data[2]</td><td align="right">
  45.  </td></tr></table></td>
  46. </tr>
  47. </table><br>";
  48. };
  49. for($i=1;$i<=$maxstron;$i++) echo "<a href="site.php?id=$i">$i</a> | ";
  50. ?>


Teraz powinno być dobrze.

Ten post edytował UDAT 3.06.2006, 13:42:04
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 18:15