Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z porcjowaniem
Forum PHP.pl > Forum > PHP
FireMan
Witam. Piszę właśnie stronę z filmami i mam problem. Mam taki kod który będzie robił podstrony z filmami (10 filmów na stronę). I tak. Mam np. 22 rekordy w bazie danych. TO wyświetla mi 2 podstrony (powinny być 3) lecz na pierwszej stronie mam 10 ostatnich rekordów a na drugiej tylko jeden. Czyli wyświetla mi połowę rekordów. Siedzę i myślę co z tym zrobić no i nie wiem tongue.gif PHP to ja znam bdb ale nie robiłem takiego czegoś nigdy a ten skrypt powiem szczerze to dostałem od kolegi rok temu więc nie znam jego źródła dokładnie. Może mi ktoś pomóc ?

  1. <?php
  2. include("config.php");
  3. $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die ("Nie można nawiązać połączenia z bazą danych !");
  4. mysql_select_db(DB_NAME) or die ("Nie można nawiązać połączenia z bazą danych !");
  5. $ht = mysql_query("SELECT id FROM moves WHERE kategoria = 'inne'");
  6. $quer=mysql_numrows($ht);
  7.  
  8. function printlink($page, $rec)
  9. $record=$rec / 10;
  10. if($record <= 10)
  11. {
  12. //
  13. for($i=1;$i<=($page-1);$i++)
  14. {
  15. echo ' <a href="inne.php?page='.$i.'">'.$i.'</a>';
  16. }
  17. print $page;
  18. for($a=$page+1;$a<=$record;$a++)
  19. {
  20. echo ' <a href="inne.php?page='.$a.'">'.$a.'</a>';
  21. }
  22. }
  23. if($record > 10)
  24. {
  25. if($page>5 )
  26. {
  27. if($record > $page+5)
  28. {
  29. $in= $page - 5;
  30. $out= $page + 5;
  31. exit ;
  32. }
  33. if($record <=$page+5)
  34. {
  35. $in=$page-5;
  36. $out=$record;
  37. }
  38. }
  39. if($page<=5)
  40. {
  41. if($record<=$page+5)
  42. {
  43. $in=1;
  44. $out= $record;
  45. }
  46. if($record > $page+5)
  47. {
  48. $in=1;
  49. $out=$page+5;
  50. }
  51. }
  52. for($i=$in;$i<=($page-1);$i++)
  53. {
  54. echo ' <a href="inne.php?page='.$i.'">'.$i.'</a>';
  55. }
  56. print $page;
  57. for($a=$page+1;$a<=$out;$a++)
  58. {
  59. echo ' <a href="inne.php?page='.$a.'">'.$a.'</a>';
  60. }
  61. }
  62.  
  63. }
  64.  
  65. function mysqlquer($limit,$page,$quer)
  66. {
  67. $query= mysql_query("SELECT * FROM moves WHERE kategoria = 'inne' ORDER BY id DESC LIMIT " .$limit. ", 10"); // bug
  68. while($return= mysql_fetch_array($query, MYSQL_ASSOC))
  69. {
  70. ?>
  71. <tr>
  72. <td>
  73. <center> <b><? echo $return['nazwa']; ?></b></center>
  74. </td>
  75. </tr>
  76. <tr>
  77. <td>
  78. <center> <p width='200' height='200'><? echo $return['tresc']; ?></p></center>
  79. </td>
  80. </tr>
  81. <tr>
  82. <td>
  83. <center> <? echo $return['opis']; ?><br>
  84. Dodał: <b><? echo $return['autor']; ?> - <a href='../koment.php?id=<? print $return['id']; ?>' style="text-decoration: none; color: black;">[Komentarze]</a></b><br><hr>
  85. </td>
  86. </tr>
  87. <?
  88. }
  89. printlink($page,$quer);
  90. }
  91.  
  92. if($page=strip_tags($_GET['page']))
  93. {
  94.  
  95. print "<br/>";
  96. $limit= $page * 10;
  97. if($page == 1)
  98. {
  99. mysqlquer(0,$page,$quer);
  100. }
  101. if($page != 1)
  102. {
  103. mysqlquer($limit,$page,$quer);
  104. }
  105. }
  106.  
  107. if(!($page=strip_tags($_GET['page'])))
  108. {
  109. mysqlquer(0,1,$quer);
  110. }
  111. ?>
motylo
Przede wszystkim pętla robiąca paginację. Jeżeli źle myślę to przepraszam.
  1. function printlink($page, $rec){
  2. $_perPage = 10;
  3. $_loop = ceil($rec/$_perPage);
  4. for($i=1; $i<=$_loop; $i++){
  5. echo '<a href="inne.php?page='.$i.'">'.$i.'</a>';
  6. }
  7. }
  8.  

Bo przyznam się szczerze nie chciało mi się zastanawiać co Twoja paginacja ma robić.
Może warto wydrukować na ekranie wartości przekazane przez _GET oraz z bazy danych
czy są odpowiednie, oraz przygotowane zapytanie SQL (wtedy gdy podstawisz wartości).
FireMan
Wyświetliło się poprawnie 3podstrony ale 3-cia podstrona pusta i tez wczytuje 11rekordów.
Tu coś jest źle chyba bo jak zmieniam to 10 na inny parametr to jest inaczej
  1. $limit= $page * 10;
  2. if($page == 1)
  3. {
  4. mysqlquer(0,$page,$quer);
  5. }
  6. if($page != 1)
  7. {
  8. mysqlquer($limit,$page,$quer);
  9. }
  10. }

Wydaje się mi że coś jest nie tak z zapytaniem
  1. "SELECT * FROM moves WHERE kategoria = 'inne' ORDER BY id DESC LIMIT " .$limit. ", 10
bo jak na końcu zamiast ,10 dam 5 to na stronie nr.1 jest 5 rekordów a na nr.2 aż 16
motylo
zamień

  1. $limit= $page * 10;
  2. if($page == 1){
  3. mysqlquer(0,$page,$quer);
  4. }
  5. if($page != 1){
  6. mysqlquer($limit,$page,$quer);
  7. }


na:

  1. $page = $page - 1;
  2. $limit= $page * 10;
  3. mysqlquer($limit,$page,$quer);

FireMan
No działa ale jak mam w bazie 22 rekordy to wyswietla po 10 na stronę a te pozostałe 2 powinno wyświetlić na 3-ciej tronie a nie wyświetla ich.
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.