Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]paginacja jako funkcja
Forum PHP.pl > Forum > Przedszkole
trucksweb
napisalem sobie prosty skrypt paginacji danych, wszystko dziala jak kod jest w pliku w ktorym ma sie stronicowac tresc. jako ze planuje wiecej takich stron, chcialbym zrobic kod, ktory bedzie elastyczny- tzn. po deklaracji zmienniej z nazwa tabeli bedzie stronicowal inne strony, wiec przygotowalem sobie cos takiego- nazwa tabeli jest na stale, ale i tak juz cos nie dziala:

plik funkcje.php
  1. <?php
  2. //PAGINACJA WYNIKOW
  3. function paginacja() {
  4. if(isset($_GET['np'])) {
  5. $num_pages = $_GET['np'];
  6. }else {
  7. $query = "SELECT COUNT(*) FROM faktury ORDER BY id DESC";
  8. $result = mysql_query($query);
  9. $row = mysql_fetch_array($result, MYSQL_NUM);
  10. $num_records = $row[0];
  11.  
  12. if($num_records > $display) {
  13. $num_pages = ceil ($num_records/$display);
  14. }else {
  15. $num_pages =1;
  16. }
  17. }
  18.  
  19. if(isset($_GET['s'])) {
  20. $start = $_GET['s'];
  21. }else {
  22. $start = 0;
  23. }
  24.  
  25. }//koniec funkcji paginacja
  26.  
  27. function pokaz_paginacje() {
  28.  
  29. if($num_pages > 1) {
  30. $current_page = ($start/$display) + 1;
  31. if($current_page !=1) {
  32. echo ' <a href="faktury.php?s='.($start - $display).'&np='.$num_pages.'">Poprzednia </a> ';
  33. }
  34.  
  35. for($i=1; $i <= $num_pages; $i++) {
  36. if($i !=$current_page) {
  37. echo ' <a href="faktury.php?s='.(($display * ($i - 1))).'&np='.$num_pages.'"> '. $i . ' </a> ';
  38. }else{
  39. echo $i. ' ';
  40. }
  41. }
  42. if($current_page != $num_pages) {
  43. echo ' <a href="faktury.php?s='.($start + $display).'$np='.$num_pages.'">Nastepna</a> ';
  44.  
  45. }
  46. }
  47. }
  48. ?>



strona.php:
  1. <?php
  2. ..
  3. $display = 10;
  4. $start =1;
  5. paginacja();
  6.  
  7. tutaj select z: LIMIT $start, $display";
  8.  
  9. ..
  10. tutaj tworzenie tabeli i listowanie produktow
  11.  
  12. ..
  13. pokaz_paginacje();
  14.  
  15. ?>


niesttey taki zapis nie dziala
marcio
parametry przetrzymuj w funckji
trucksweb
no tak, tlyko ze i to nie bardzo dziala bo jak przekaze ze wyswietlam str. 40 ?

pokaz_paginacje($dipslay,$start,$num_pages) ?
marcio
ja to tak zrobilem i dziala
  1. <?php
  2. public function Pokaz_ksiege($liczba=50) {
  3. if($db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) {
  4. mysql_select_db($this->pasy['baza']);
  5.  
  6. $query = ("select * from ksiega_gosci");
  7.  $wynik = mysql_query($query, $db) or die(mysql_error());
  8. $num = mysql_num_rows($wynik);
  9. $ile = ceil($num/50);
  10.  $strona = $_GET['strona'];
  11. $zap = ("select * from ksiega_gosci order by data desc limit ".$strona*$liczba.",".$liczba);
  12.  $ris = mysql_query($zap, $db) or die(mysql_error());
  13.  
  14. while($tab = mysql_fetch_assoc($ris)) {
  15.  
  16. echo('<table border="1" width="100%" bgcolor="#4E4E68" align="center"><tr><td width="50%">Dodal: '.$tab['nick'].'</td><td width="50%">Dnia:'.$tab['data'].'</td></tr>
  17. <tr><td>'.$tab['message'].'</td></tr></table></form>');
  18. }
  19. }
  20.  
  21. else {
  22. echo('<script>alert("Nie ma wpisow");</script>');
  23. }
  24.  
  25. if(is_numeric($strona) && !empty($strona) && $strona > 0) {
  26.  
  27. echo('<center><a href="?strona='.($strona-1).'">Poprzednia</a>|');
  28.  }
  29. if(is_numeric($strona) && !empty($strona) && $strona < $ile) {
  30.  
  31. echo('<a href="?strona='.($strona+1).'">Nastepna</a></center>');
  32.  }
  33. }
  34. ?>
trucksweb
no wlasnie, Ty masz to w jednym pliku i nie ma problemu, ja paginecje rozbilem na 2fukcje no i na 2 pliki :/


//edit

hehe, zrobilem literowke tongue.gif
wszystko dziala sciana.gif

//edit 2
a jednak nie tongue.gif
problem dalej aktualny dry.gif
marcio
Nie rozumiem po co to rozbija na 2 funckje jedna pobiera wiadomosci odpowiedni je dzieli a druga wyswietla linki troche bez sensu
trucksweb
ok, zrobilem to jako jedna funkcje, pokazuja mi sie linki do stronicowania, niestty nie przyjmuja one oczekiwanych wartosci, co wazniejsze nie powoduja stronicowania strony po kliknieciu sciana.gif

  1. <?php
  2.  
  3. $display = 10;$start =1;
  4.  
  5.  
  6. $zapytanie = "SELECT id, seria FROM faktury ORDER by id DESC LIMIT $start, $display";
  7. $wynik = mysql_query($zapytanie);
  8. ...............
  9. .......wyswietlam zwrocone pozycje
  10. .....
  11.  
  12. wywoluje paginacje
  13.  
  14. paginacja($num_pages);
  15.  
  16.  
  17. ?>


w pliku funkcje php

  1. <?php
  2. function paginacja($num_pages) {
  3. $start=1;$display=10;
  4. if(isset($_GET['np'])) {
  5. $num_pages = $_GET['np'];
  6. }else {
  7. $query = "SELECT COUNT(*) FROM faktury ORDER BY id DESC";
  8. $result = mysql_query($query);
  9. $row = mysql_fetch_array($result, MYSQL_NUM);
  10. $num_records = $row[0];
  11.  
  12. if($num_records > $display) {
  13. $num_pages = ceil ($num_records/$display);
  14. }else {
  15. $num_pages =1;
  16. }
  17. }
  18.  
  19. if(isset($_GET['s'])) {
  20. $start = $_GET['s'];
  21. }else {
  22. $start = 0;
  23. }
  24.  
  25.  
  26.  
  27. if($num_pages > 1) {
  28. $current_page = ($start/$display) + 1;
  29. if($current_page !=1) {
  30. echo ' <a href="faktury.php?s='.($start - $display).'&np='.$num_pages.'">Poprzednia </a> ';
  31. }
  32.  
  33. for($i=1; $i <= $num_pages; $i++) {
  34. if($i !=$current_page) {
  35. echo ' <a href="faktury.php?s='.(($display * ($i - 1))).'&np='.$num_pages.'"> '. $i . ' </a> ';
  36. }else{
  37. echo $i. ' ';
  38. }
  39. }
  40. if($current_page != $num_pages) {
  41. echo ' <a href="faktury.php?s='.($start + $display).'&np='.$num_pages.'">Nastepna</a> ';
  42.  
  43. }
  44. }
  45. }
  46. ?>
phpion
Co zauważyłem tak na pierwszy rzut oka:
  1. <?php
  2. function paginacja($num_pages) { // przekazujesz parametr $num_pages
  3. $start=1;$display=10; // to również powinny być parametry
  4. if(isset($_GET['np'])) {
  5. $num_pages = $_GET['np']; // dlaczego nadpisujesz $num_pages?
  6. }else {
  7. $query = "SELECT COUNT(*) FROM faktury ORDER BY id DESC";
  8. $result = mysql_query($query);
  9. $row = mysql_fetch_array($result, MYSQL_NUM);
  10. $num_records = $row[0];
  11.  
  12. if($num_records > $display) {
  13. $num_pages = ceil ($num_records/$display); // i znowu modyfikujesz $num_pages
  14. }else {
  15. $num_pages =1; // j.w.
  16. }
  17. }
  18.  
  19. if(isset($_GET['s'])) {
  20. $start = $_GET['s'];
  21. }else {
  22. $start = 0;
  23. }
  24.  
  25.  
  26.  
  27. if($num_pages > 1) {
  28. $current_page = ($start/$display) + 1;
  29. if($current_page !=1) {
  30. echo ' <a href="faktury.php?s='.($start - $display).'&np='.$num_pages.'">Poprzednia </a> ';
  31. }
  32.  
  33. for($i=1; $i <= $num_pages; $i++) {
  34. if($i !=$current_page) {
  35. echo ' <a href="faktury.php?s='.(($display * ($i - 1))).'&np='.$num_pages.'"> '. $i . ' </a> ';
  36. }else{
  37. echo $i. ' ';
  38. }
  39. }
  40. if($current_page != $num_pages) {
  41. echo ' <a href="faktury.php?s='.($start + $display).'&np='.$num_pages.'">Nastepna</a> ';
  42.  
  43. }
  44. }
  45. }
  46. ?>


Moim zdaniem do funkcji powinienej przekazywać takie parametry:
paginacja($numer_aktualnej_strony, liczba_wszystkich_stron, $liczba_rekordow_na_stronie)
Tyle w zupełności powinno wystarczyć. Kombinuj.
trucksweb
ok, zmienilem postac funkcji:
  1. <?php
  2.  
  3. function paginacja($num_pages,$start,$display,$current_page) {
  4.  
  5.  
  6. $query = "SELECT COUNT(*) FROM faktury ORDER BY id DESC";
  7. $result = mysql_query($query);
  8. $row = mysql_fetch_array($result, MYSQL_NUM);
  9. $num_records = $row[0];
  10.  
  11. if($num_records > $display) {
  12. $num_pages = ceil ($num_records/$display);
  13. }else {
  14. $num_pages =1;
  15. }
  16.  
  17.  
  18. if(isset($_GET['s'])) {
  19. $start = $_GET['s'];
  20. }else {
  21. $start = 0;
  22. }
  23.  
  24.  
  25.  
  26. if($num_pages > 1) {
  27. $current_page = ($start/$display) + 1;
  28. if($current_page !=1) {
  29. echo ' <a href="faktury.php?s='.($start - $display).'&np='.$num_pages.'">Poprzednia </a> ';
  30. }
  31.  
  32. for($i=1; $i <= $num_pages; $i++) {
  33. if($i !=$current_page) {
  34. echo ' <a href="faktury.php?s='.(($display * ($i - 1))).'&np='.$num_pages.'"> '. $i . ' </a> ';
  35. }else{
  36. echo $i. ' ';
  37. }
  38. }
  39. if($current_page != $num_pages) {
  40. echo ' <a href="faktury.php?s='.($start + $display).'&np='.$num_pages.'">Nastepna</a> ';
  41.  
  42. }
  43. }
  44. }
  45.  
  46. ?>


pojawia sie paginacja, linki maja ladne parametry, chyba takie jakie chcialem miec: ?s=20&np=4

jednak po kliknieciu linku dalej nie zmieniaja sie pozycje w tabelce sciana.gif
Cysiaczek
Jak się maja zmieniać? Pokaż kod, który odpowiada za przyjęcie żądania i jego obsługę.
trucksweb
przeciez jest napisany w postach wyzej !
  1. <?php
  2. $display = 10;$start =1;
  3.  
  4.  
  5. $zapytanie = "SELECT id, seria FROM faktury ORDER by id DESC LIMIT $start, $display";
  6. $wynik = mysql_query($zapytanie);
  7.  
  8. //wykonaj zapytanie
  9. $num = mysql_num_rows($wynik);
  10.  
  11. echo'<table>';
  12. while($row = mysql_fetch_array($wynik, MYSQL_ASSOC)) {
  13.  
  14. echo'<tr><td>'. $row['seria'] .'</td></tr>';
  15.  
  16.  
  17. }
  18. echo'</table>';
  19.  
  20. paginacja($num_pages,$start,$display,$current_page);
  21. //tu pobieram funkcje paginacja - z pliku funkcje.php
  22.  
  23. ?php
  24. ?>
Cysiaczek
Widziałem.

  1. <?php
  2. $display = 10;$start =1;
  3. ?>


Przecież zawsze da ten sam wynik, prawda? Ja się pytam, gdzie odbierasz wartości przekazane przez adres URL.
trucksweb
no chyba w funkcji paginacja(...)

  1. <?php
  2. if($num_records > $display) {
  3. $num_pages = ceil ($num_records/$display);
  4. }else {
  5. $num_pages =1;
  6. }
  7.  
  8.  
  9. if(isset($_GET['s'])) {
  10. $start = $_GET['s'];
  11. }else {
  12. $start = 0;
  13. }
  14. ?>
Cysiaczek
Ej no wiesz co...? Weź przeanalizuj ten kod i zobacz, co robisz. Wywołujesz zapytanie, które ma podlegać stronicowaniu ze stałymi parametrami w linijce numer 5, a paginację sprawdzasz w linijce numer 20. Do tego wszystkiego, nawet jak to poprawisz, to i tak nie zadziała, bo zmienne w funkcji paginacja() mają zasięg lokalny.
marcio
jak dla mnie zapytanie powinno tak wygladac
  1. <?php
  2. $zapytanie = "SELECT id, seria FROM faktury ORDER by id DESC LIMIT ".$np*$start.", ".$display";
  3. ?>



Cyciaszek ma racje funckji nie moze includowac i potem wywolywac tylko dac ja do skryptu w ktorym ja potrzebujes, a tak w ogole to zmienna $np ma przyjmowac nr strony tak?Jesli, tak to zapytanie masz powyzej
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.