Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Stronicowanie wynikow z bazy, prosba o poprawienie skryptu
agentmullder
post 29.03.2010, 15:36:50
Post #1





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 1.03.2010

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
mortus
post 29.03.2010, 19:15:15
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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ń.

Ten post edytował mortus 29.03.2010, 19:16:27
Go to the top of the page
+Quote Post
agentmullder
post 29.03.2010, 21:20:47
Post #3





Grupa: Zarejestrowani
Postów: 120
Pomógł: 0
Dołączył: 1.03.2010

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
mortus
post 29.03.2010, 21:27:19
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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ół).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:37