Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Stronicowanie wynikow z bazy
Forum PHP.pl > Forum > Przedszkole
agentmullder
Witam. Zwracam sie z prosba o rozwiazanie problemu ze stronicowaniem wynikow z bazy. Pobieram dane z tabeli users. Chcialbym aby moj skrypt odpowiedzialny za stronicowanie, wrzucal zalozmy po 5 rekordow na jedna strone. Niestety dzieje sie dziwna rzecz, otoz: na strone nr1 wrzuca mi 5 rekordow z bazy, na strone nr2 wrzuca mi ponownie 5 poprzednich rekordow oraz 5 nastepnych rekordow i tak dalej, az dojdzie petla do polowy rekordow i wowczas usuwa skrypt po 5 rekordow zastepujac piecioma kolejnymi rekordami, az na koncu zostaje <= 5 rekordow (w zaleznosci czy ilsoc rekordow w bazie jest rowna *5). Po chlopskiemu: skrypt nie czysci rekordow pobranych z bazy do poprzedniej strony. Oto skrypt:

  1. <?php
  2.  
  3. ini_set ('display_errors' , 1);
  4. error_reporting (E_ALL & ~E_NOTICE);
  5.  
  6. //Pod??czenie i wyb?r bazy
  7.  
  8.  
  9. if($dbc=@mysql_connect ('localhost' , 'root' , '')) {
  10.  
  11. if (!@mysql_select_db ('baza')) {
  12. die('Nie mo?na wybra? bazy danych');
  13. }
  14.  
  15.  
  16. }else {
  17. die('Nie mozna po??czy? sie z MySQl');
  18. }
  19.  
  20. $limit = 5; //Liczba newsów na jednej stronie
  21.  
  22. $strona = $_GET['strona'];
  23.  
  24.  
  25. if (!isset($strona)) {
  26. $limit1 = 0;
  27. $limit2 = $limit;
  28. } else {
  29. $limit1 = $limit * $strona - $limit;
  30. $limit2 = $limit * $strona;
  31. }
  32.  
  33. //Definicja zapytania
  34. $zapytanie = "SELECT * FROM users ORDER BY user_id DESC LIMIT $limit1,$limit2";
  35.  
  36.  
  37. if ($r = mysql_query ($zapytanie)) {
  38.  
  39. //Odczytywanie w wy?wietlenie kolejnych rekord?w.
  40. while ($wiersz = mysql_fetch_array($r)) {
  41.  
  42. //print "<p align='left'><b>{$wiersz['user_imie']}</b>";
  43.  
  44.  
  45. echo "<p align='left'><b>{$wiersz['user_imie']}</b> :: {$wiersz['user_nazwisko']}<br /><br />
  46.  
  47. {$wiersz['user_imie']}<br /><br /><b>Autor: </b>{$wiersz['user_email']}</p>
  48.  
  49. <hr width='70%' size='1' />n";
  50.  
  51.  
  52.  
  53. }
  54.  
  55. } else {
  56. die ('<p>Zapytanie nie zosta?o wykonane, bo <b>' . mysql_error() . "</b>. Zapytanie: $zapytanie.</p>");
  57.  
  58. }
  59.  
  60. echo "<center>wybierz stronę:";
  61. list($ile)=mysql_fetch_row(mysql_db_query("baza","SELECT count(*) FROM users"));
  62.  
  63. $liczba_stron = $ile / $limit;
  64. $liczba_stron = ceil($liczba_stron);
  65.  
  66. for ($v = 1; $v <= $liczba_stron; $v++) {
  67.  
  68. if ($liczba_stron == 1) {
  69. echo " $v";
  70. } else {
  71. echo " <a href=?strona=$v>$v</a>";
  72. }
  73. }
  74.  
  75.  
  76. mysql_close(); //Zamkni?cie po??czenia.
  77.  
  78.  
  79. ?>
mortus
W zapytaniu sql
  1. $zapytanie = "SELECT * FROM users ORDER BY user_id DESC LIMIT $limit1, $limit2";
zmienna $limit1 ma oznaczać offset (index) elementu początkowego, a zmienna $limit2 to po prostu liczba rekordów, jaką chcemy pobrać. Zauważ, że u Ciebie ta liczba rekordów cały czas się zmienia, bo na stronie 1 masz mieć 5 rekordów, na stronie 2 - 10 rekordów, na stronie 3 - 15 rekordów, itd. Tymczasem zmienna $limit2 nie powinna się w ogóle zmieniać. Proste? Teraz znajdź kod, który jest niepotrzebny i go usuń.
agentmullder
  1. else {
  2. $limit1 = $limit * $strona - $limit;
  3. $limit2 = $limit * $strona;
  4. }


Tak jak mowiles limit2 zrobic jako stala. Wiec to co wyzej zmienilem na:

  1. else {
  2. $limit1 = $limit * $strona - $limit;
  3. $limit2 = $limit;
  4. }


I jestes genialny :-) Dziekowa przeogromna. + dla Ciebie.
mortus
Skoro
  1. $limit2 = $limit
to czemu w zapytaniu nie użyjesz $limit, zamiast $limit2. Przepisywanie zmiennych jest trochę bez sensu. Nazwa pierwszej zmiennej $limit1, też jest trochę bez sensu, bo to nie jest żaden limit, tylko niejako punkt startowy (ale to tylko logiczny szczegół).
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.