Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] stronnicowanie
Forum PHP.pl > Forum > Przedszkole
integer000
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....
UDAT
Nie możesz tam dać prostego sprawdzenia typu (od lini 10)
  1. <?php
  2. for ($i=$od; $i<$do; $i++)
  3. {
  4. $data=explode("*|*", $table[$i]);
  5. if ($data[4] != "ppp") //sprawdza cy w $data[4] jest ppp
  6.  continue;
  7. //tu wstaw wypisywanie
  8. }
  9. ?>
integer000
Cytat(UDAT @ 3.06.2006, 10:46 ) *
Nie możesz tam dać prostego sprawdzenia typu (od lini 10)
  1. <?php
  2. for ($i=$od; $i<$do; $i++)
  3. {
  4. $data=explode("*|*", $table[$i]);
  5. if ($data[4] != "ppp") //sprawdza cy w $data[4] jest ppp
  6.  continue;
  7. //tu wstaw wypisywanie
  8. }
  9. ?>



nie, w zmiennej $table nadal będą wszystkie rekordy, a warunek spowoduje tylko że nie zostaną one wyświetlkoe. A ja chce pozbyć się ze zmiennej $table wszystkiego oprucz "ppp".
UDAT
No to:
  1. <?php
  2. for ($i=$od; $i<$do; $i++)
  3. {
  4. $data=explode("*|*", $table[$i]);
  5. if ($data[4] != "ppp") //sprawdza cy w $data[4] jest ppp
  6. {
  7. unset($table[$i]);
  8.  continue;
  9.  }
  10. //tu wstaw wypisywanie
  11. }
  12. ?>
nospor
@integer zdaje sie ze o cos cie prosilem:
http://forum.php.pl/index.php?showtopic=47...533;entry262454

edit: otwieram. popraw jeszcze w tym
integer000
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...
UDAT
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.
integer000
nie działa poprawnie! policzyłem to wszystko dokładnie: skrypt ten nie wyświetla poprawnie rekordów tylko pojedyńcze litery z co niektórych wpisów. i ilkość też się nie zgadza. w pliku mam dokładnie 35 rekordów. pomiędzy nimi są rozsypane 14 z wartością "ppp" a efektem tego skryptu są 2 strony, na jednej 10 a na drugiej 11 "tabelek" czyli rekordów. z pojedyńczymi literkami.... ( z pojedyńczymi literkami czyli efektem echo $data[0].$data[1].$data[2].$data[3].$data[4]; nie są wyrazy które się tam znajdują tylko pojedyńcze litery)...
UDAT
Teraz już działa. Sprawdziłem biggrin.gif
  1. <?php
  2.  
  3.  $newsdata="plik.dat";
  4.  
  5.  $table=file($newsdata);
  6.  $total=count($table);
  7.  
  8.  if(!isset($_GET['id'])) $_GET['id']=1;
  9.  
  10.  for ($i=0; $i<$total; $i++)
  11.  {
  12.  $data=explode("*|*", $table[$i]);
  13.  
  14.  if ($data[4] != "ppp")
  15.  {//sprawdza cy w $data[4] jest ppp
  16. unset($table[$i]);
  17. continue;
  18. }
  19. $table[$i]=$data; // tu był błąd
  20.  }
  21. $total=count($table);
  22. $od=($_GET['id']-1)*10+1;
  23. if ($od>$total) $od-=10;
  24. $do=$od+9;
  25.  
  26. $maxstron=ceil($total/10);
  27.  
  28.  $i=0;
  29.  
  30.  foreach ($table as $data)
  31.  {
  32.  ++$i;
  33. if (($i<$od)||($i>$do))
  34. continue;
  35. echo "<table border="1" cellspacing="0" cellpadding="6" width="500px">
  36.  <tr>
  37.  <td colspan="2">
  38.  <b>".$data[0]."</b>
  39.  </td>
  40.  </tr>
  41.  <tr>
  42.  <td rowspan="2" width="210px" height="170px"><A TARGET="_blank" HREF="$data[3]" onclick="return wyswie
  43.  tl('$data[3]')">
  44.  <IMG SRC="$data[3]" BORDER="0" width="210px" height="170px">
  45.  </A></td>
  46.  <td width="290px" height="140px">$data[1]</td>
  47.  </tr>
  48.  <tr>
  49. <td colspan="2" width="290px" height="30px"><table border="0" cellspacing="0" cellpadding="0" width=
  50.  "290px" height="30px"><tr><td>$data[2]</td><td align="right">
  51. </td></tr></table></td>
  52.  </tr>
  53.  </table><br>";
  54.  };
  55.  for($i=1;$i<=$maxstron;$i++) echo "<a href="index.php?id=$i">$i</a> | ";
  56.  ?>
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.