Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]stronnicowanie problem
Forum PHP.pl > Forum > Przedszkole
lamcpp
witam, chciałem napisać sobie funkcje sortowania, połączoną ze stronnicowaniem i wyświetlaniem miniaturek zdjęć. Wyświetlanie i sortowanie działa, natomiast ze stronnicowaniem jest problem, zaden błąd w aplikacji nie wystepuje, ale zdjecia zamiast przerywać po ustalonej liczbie (odpowiada za to zmienna $strona = 16) i przechodzić na kolejną stronę są cały czas na tej samej,
kod wygląda tak:
  1. function sortuj($zapytanie)
  2. {
  3. global $dbc; global $images_dir; global $strona;
  4. if(isset($_GET['pages']) && is_numeric($_GET['pages']) && !empty($_GET['pages']))
  5. {
  6. $pages = $_GET['pages'];
  7.  
  8. }
  9. else
  10. {
  11. $wynik = mysqli_query($dbc,$zapytanie);
  12. $ilosc_rekordow = mysqli_num_rows($wynik);
  13. if($ilosc_rekordow > $strona)
  14. {
  15. $pages = ceil($ilosc_rekordow / $strona);
  16. }
  17. else
  18. {
  19. $pages = 1;
  20. }
  21. }
  22. if(isset($_GET['start']) && is_numeric($_GET['start']))
  23. {
  24. $start = $_GET['start'];
  25.  
  26. }
  27. else
  28. {
  29. $start = 0;
  30. }
  31. echo $start;
  32. echo $pages;
  33. $zapyt = $zapytanie." LIMIT $start,$strona";
  34. $wyn = mysqli_query($dbc,$zapyt);
  35. while($res = mysqli_fetch_array($wyn))
  36. {
  37. echo "<div class='wyswietl_wszystkie'><a href=\"'index.php?so=sortuj_za\"><img src='".$images_dir."/tb_".$res[2]."' border='0' alt='".$res[1]."' />
  38. </a><div class='napis_miniaturki'>".$res[1]."</div></div>";
  39. }
  40. if($pages > 1)
  41. {
  42. echo '<br /><span class="pagination">';
  43. $bierzaca_strona = ($start / $strona) + 1;
  44. if($bierzaca_strona != 1)
  45. {
  46. echo '<a href="index.php?so=sortuj_za&start='.($start - $strona).'&pages='.$pages.'">Poprzednia</a>';
  47. }
  48. for($i=1; $i<=$pages; $i++)
  49. {
  50. if($i != $bierzaca_strona)
  51. {
  52. echo "\t".'<a href="index.php?so=sortuj_za&start='.(($strona * ($i-1))).'&pages='.$pages.'">'.$i."\t</a>";
  53. }
  54. else
  55. {
  56. echo $i.' ';
  57. }
  58. }
  59. if($bierzaca_strona != $ilosc_stron)
  60. {
  61. echo '<a href="index.php?start='.($start+$strona).'&pages='.$pages.'">Następna</a></span>';
  62. }
  63. }
  64.  
  65. }
  66.  

dodam że dodatkowo, chciałem sprawdzić co zawierają zmienne start i pages, juz na samym początku kiedy powinny mieć one wartość 0 i 2(bo tyle wychodzi w przeliczeniu ze stron będzie) natomiast one zawierają po dwie wartości: 0 i 0 oraz 2 i 2. Nie wiem czemu tak jest
funkcja jest wykorzystywana przez ten kawałek kodu:
  1. switch($_GET['so'])
  2. {
  3. case 'sortuj_az':
  4. sortuj("SELECT id,nazwa,plik FROM zdjecie ORDER BY zdjecie.nazwa ASC");
  5. break;
  6. case 'sortuj_za':
  7. sortuj("SELECT id,nazwa,plik FROM zdjecie ORDER BY zdjecie.nazwa DESC");
  8. case 'sortuj_new':
  9. sortuj("SELECT id,nazwa,plik FROM zdjecie ORDER BY zdjecie.dodano DESC");
  10. break;
  11. case 'sortuj_old':
  12. sortuj("SELECT id,nazwa,plik FROM zdjecie ORDER BY zdjecie.dodano ASC");
  13. break;
  14. case 'los10':
  15. sortuj("SELECT id,nazwa,plik FROM zdjecie ORDER BY RAND() LIMIT 10");
  16. break;
  17. case 'los20':
  18. sortuj("SELECT id,nazwa,plik FROM zdjecie ORDER BY RAND() LIMIT 20");
  19. break;
  20. case 'los30':
  21. sortuj("SELECT id,nazwa,plik FROM zdjecie ORDER BY RAND() LIMIT 30");
  22. break;
  23. }

jakby ktoś miał jakis pomysł to będę wdzięczny
r4xz
no to zaczniemy skrypt poprawiać po mału, bez dawania gotowców.. winksmiley.jpg

  1.  
  2. if(isset($_GET['start']) && is_numeric($_GET['start']))
  3. {
  4. $start = $_GET['start'];
  5.  
  6. }
  7. else
  8. {
  9. $start = 0;
  10. }
  11.  
  12.  


nie lepiej wyliczyć od którego zdjęcia ma zacząć ze zmiennej $pages? jest to o wiele bezpieczniejsze, przynajmniej jak ktoś zmieni adres strona nadal będzie dobrze wyświetlana

-----------------------

  1.  
  2. if(isset($_GET['pages']) && is_numeric($_GET['pages']) && !empty($_GET['pages']))
  3. {
  4. $pages = $_GET['pages'];
  5.  
  6. }
  7.  
  8.  


podobny problem, co jeśli wpiszę w adresie liczbę 354? zobaczę taką stronę? pewnie nie, wypadało by sprawdzić przez bazę danych czy użytkownik czasem nie grzebie w adresie niepotrzebnie winksmiley.jpg

thek
Konwersja na int zmiennej page. oprócz tego lepiej zrobić sensowne zapytanie do bazy oparte o LIMIT winksmiley.jpg
konkretnie:
  1. '(...) LIMIT '.($page * $ile_na_strone).', '.$ile_na_strone
Jeśli zastosujesz konwersję to jedynie sprawdzisz ile masz w wyniku rekordów. Jeśli nawet walnie ktoś stronę 1054 poprzez GET to wyświetli ją pustą i komunikat odpowiedni wyświetli.
$ile_na_strone może by w skrypcie na sztywno, ale możesz też dać decydować o tym userowi choćby w jakimś select-boxie smile.gif
Zauważ, że masz mały błąd w zapytaniu... W limit jest składnia: LIMIT: odkąd_zacząć, ile_pokazać.
Popatrz jak wyliczasz zmienne. Tam też masz zamotanie. Zrób lepiej funkcję, która przyjmuje tylko 1 parametr: numer strony i opcjonalne ile na stronie czy pole i kierunek, czyli nagłówek w stylu
  1. function sortuj ($strona, $ile=20, $pole=0, $kierunek=1) {
  2. //konwersja na int i przypisanie ilości czegoś na stronę
  3. //konwersja na int i przypisanie nazwy pola
  4. //skonwertuj dla pewności kierunek na int i zdefiniuj choćby -1 to DESC a 1 to ASC
  5. //A tutaj sobie składasz zapytanie w zależności od odpowiednich danych i ślesz do bazy i obrabiasz wynik.
  6. }
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.