Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Stronnicowanie wyników z bazy danych., kto pomoże?
progman
post 6.07.2006, 19:03:21
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 6.07.2006

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


Witam, cały czas staram sobie poradzić wprowadzić stronnicowanie (dzielenie na strony) w moim projekcie bazo-danowym opartym na bazie "PostgreSQL" ale nie daję sobie rady, próbowałem na tablicach ale coś nie wychodzi, poniżej podaję kod. Może ktoś pomóc z wprowadzeniem tego do mojego projektu? Najpierw pobieram dane z bazy zapytaniem 'SELECT * FROM ludzie' i dostaje wynik np 30 osob i jak zrobić podział np na 10 osób przypadające na jedną strone.

  1. <?php
  2. //Zapytanie do bazy danych,
  3. {
  4. $res = pg_query($conn, 'SELECT id, nazwisko, imie, id_stanowiska, nr_ewid
  5. FROM osoby_data WHERE time_del is NULL ORDER BY nazwisko, imie, id_stanowiska');
  6. }
  7. // Tabela
  8. {
  9. $count=pg_num_rows($res);
  10. print '<BR>';
  11. print '<center>';
  12. print '<TABLE BGCOLOR="#90C0F0" border="4" cellpadding="15" cellspacing="1">';
  13. print '<TR><TH colspan="5" scope="colgroup">Lista Osób</TH></TR>';
  14. print '<TH scope="col">Pełne Dane</TH>';
  15. print '<TH scope="col">Nazwisko</TH>';
  16. print '<TH scope="col">Imie</TH>';
  17. print '<TH scope="col">Stanowisko</TH>';
  18. print '<TH scope="col">Nr. Ewidencyjny</TH>';
  19. for ($x=0;$x<$count;$x++)
  20. {
  21.  
  22. // Tabela wraz z pobranymi danymi
  23.  
  24. print '<TR><td><A href="osoba.php?id='.pg_fetch_result($res,$x,'id').'">Szczegóły</A></td>';
  25. print '<td>'.pg_fetch_result($res,$x,'nazwisko').'</td>';
  26. print '<td>'.pg_fetch_result($res,$x,'imie').'</td>';
  27. print '<td>'.pg_fetch_result($res,$x,'id_stanowiska').'</td>';
  28. print '<td>'.pg_fetch_result($res,$x,'nr_ewid').'</td>';
  29. print '</tr>';
  30. }
  31. print '</table>';  
  32. print '</center>';
  33. }
  34. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
mdco
post 8.07.2006, 08:25:31
Post #2





Grupa: Zarejestrowani
Postów: 324
Pomógł: 5
Dołączył: 14.12.2004

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


Piasłem na szybko i bez tesu, wiec mogłem sie gdzies pomylić. Ale generlanie masz moj zamysł na stronicowanie.
  1. <?php
  2. $ON_PAGE = 10; //liczba wyświetleń na stronie
  3.  
  4. $res = pg_query ($conn, 'SELECT COUNT(*) FROM osoby_data WHERE time_del is NULL');
  5. $all_records = pg_fetch_row ($res, 0); //wszystkie rekordy
  6. $num_all_pages = $all_records/$ON_PAGE //liczba stron
  7.  
  8. $start = $_GET['page'] * $ON_PAGE;  //poniżej jest nawigacja i zmienna $_GET['page']
  9.  
  10. //Zapytanie do bazy danych,
  11. {
  12. $res = pg_query($conn, 'SELECT id, nazwisko, imie, id_stanowiska, nr_ewid
  13. FROM osoby_data WHERE time_del is NULL ORDER BY nazwisko, imie, id_stanowiska LI
    MIT '
     . $start . ',' . $ON_PAGE);
  14. }
  15.  
  16. //Pasek nawigacji
  17. for($i=0; $i<$num_all_pages; $i++) {
  18. echo '<a href="script.php?page='.$i.'">'.$i.'</a> | ';
  19. }
  20.  
  21. // Tabela
  22. {
  23. $count=pg_num_rows($res);
  24. print '<BR>';
  25. print '<center>';
  26. print '<TABLE BGCOLOR="#90C0F0" border="4" cellpadding="15" cellspacing="1">';
  27. print '<TR><TH colspan="5" scope="colgroup">Lista Osób</TH></TR>';
  28. print '<TH scope="col">Pełne Dane</TH>';
  29. print '<TH scope="col">Nazwisko</TH>';
  30. print '<TH scope="col">Imie</TH>';
  31. print '<TH scope="col">Stanowisko</TH>';
  32. print '<TH scope="col">Nr. Ewidencyjny</TH>';
  33. for ($x=0;$x<$count;$x++)
  34. {
  35.  
  36. // Tabela wraz z pobranymi danymi
  37.  
  38. print '<TR><td><A href="osoba.php?id='.pg_fetch_result($res,$x,'id').'">Szczegóły</A></td>';
  39. print '<td>'.pg_fetch_result($res,$x,'nazwisko').'</td>';
  40. print '<td>'.pg_fetch_result($res,$x,'imie').'</td>';
  41. print '<td>'.pg_fetch_result($res,$x,'id_stanowiska').'</td>';
  42. print '<td>'.pg_fetch_result($res,$x,'nr_ewid').'</td>';
  43. print '</tr>';
  44. }
  45. print '</table>';  
  46. print '</center>';
  47. }
  48. ?>


--------------------
zmoderowano - rozmiar
Go to the top of the page
+Quote Post
Cysiaczek
post 8.07.2006, 08:33:33
Post #3





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Niom. od razu uprzedzę...
  1. <?php
  2. $num_all_pages = $all_records/$ON_PAGE //liczba stron
  3. ?>


Wypada chyba zaokrąglić w górę prawda? No ewentualnie niektórzy lubią takie bajery jak 13,33 strony wyników hehe. Solution - ceil()


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
dopy
post 8.07.2006, 11:06:00
Post #4





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 25.07.2005

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


Odgrzebałem na dysku rozwiązanie Dariusza Majgiera (algorytmy.pl):

  1. <?php
  2. function pasek($l_odp,$l_odp_nastronie,$l_odp_napasku,$skrypt,$a) {
  3. $l_odp_podz = intval($l_odp / $l_odp_nastronie);
  4. $l_odp_podz_mod = $l_odp % $l_odp_nastronie;
  5. if ($l_odp_podz_mod>0) $l_odp_podz++;
  6. if ($a<0) $a=0; 
  7. if ($a>=$l_odp_podz) $a=$l_odp_podz-1;
  8. $start = $a-1;
  9. if ($a>0) {$pop="<a href="".$skrypt."a=$start">&lt;&lt;&lt;
  10. poprzednia</a> - &nbsp;";}
  11. else {$pop = "<font color="gray">&lt;&lt;&lt; poprzednia </font> - &nbsp;";}
  12. if ($a<$l_odp_napasku) {$koniec = $l_odp_napasku*2+1;}
  13. else {$koniec = $a+$l_odp_napasku+1;}
  14. if ($a<=$koniec-$l_odp_napasku) {$star=$a-$l_odp_napasku;}
  15. if ($a>=$l_odp_podz-$l_odp_napasku) {$star=$l_odp_podz-$l_odp_napasku*2-1;}
  16. if ($koniec>$l_odp_podz) $koniec = $l_odp_podz;
  17. if ($star<0) $star=0;
  18. for ($i=$star; $i<$koniec; $i++) {
  19. if ($i <> $a) { $pasek .= "<a href="".$skrypt."a=$i">";}
  20. else { $pasek .= "<font color="red"><b>"; }
  21. if ($l_odp_podz<>1) {$pomocniczy = $i+1;}
  22. if ($i<>$a) { $pasek .= "$pomocniczy</a> &nbsp;"; }
  23. else {$pasek .= "$pomocniczy</b></font> &nbsp;";}
  24. }
  25. $dalej = $a+1;
  26. if ($a<$l_odp_podz-1) 
  27.  {$nas="- <a href="".$skrypt."a=$dalej">następna &gt;&gt;&gt; </a>";}
  28. else { $nas = "- <font color="gray">następna &gt;&gt;&gt; </font>";}
  29. if ($pomocniczy>0) {$br= "<br> $pop $pasek $nas"; }
  30. echo "<center> znalezionych: <b>$l_odp</b> na <b>$l_odp_podz</b> 
  31. stronach $br</center>";
  32. }
  33.  
  34. $l_odp_nastronie = 10;
  35. $l_odp_napasku = 5;
  36. $skrypt = "index.php?";
  37.  
  38. // połączenie z bazą
  39. $baza = mysql_connect("localhost", "admin", "admin");
  40. mysql_select_db("baza1");
  41.  
  42. // ustalenie ilości wszystkich rekordów spełniających warunek
  43. $wynik = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM ludzie"));
  44. $l_odp = $wynik[0];
  45.  
  46. // pobranie porcji informacji
  47. $a = $_GET["a"];
  48. $start = $a*$l_odp_nastronie;
  49. $wynik = mysql_query("SELECT * FROM ludzie LIMIT
  50. $start,$l_odp_nastronie");
  51. mysql_close($baza);
  52.  
  53. // pokazanie paska nawigacyjnego
  54. pasek($l_odp,$l_odp_nastronie,$l_odp_napasku,$skrypt,$a);
  55.  
  56. // wyświetlenie wyników z bazy danych
  57. $wierszy = mysql_num_rows($wynik);
  58. $pol = mysql_num_fields($wynik);
  59. for ($i=0;$i<$wierszy;$i++) {
  60. $wiersz = mysql_fetch_row($wynik);
  61. for ($j=0;$j<$pol;$j++) echo $wiersz[$j]." ";
  62. echo "<br />";
  63. }
  64. ?>


--------------------
Błyśnij, nim zgaśniesz...
Go to the top of the page
+Quote Post
progman
post 9.07.2006, 10:47:56
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 6.07.2006

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


mdco Wywala mi błąd przy:

  1. <?php
  2. $start = $_GET['page'] * $ON_PAGE;
  3. ?>


Co może być nie tak?
Go to the top of the page
+Quote Post
b_kostek
post 9.07.2006, 10:54:20
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 9.07.2006

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


Witam
Mam rozwiązanie ale dla bazy MYSQL, moze się przyda:

  1. <?
  2. if($_GET[str] == "") {
  3. $str=0;
  4. } else {
  5. $str = $_GET[str];
  6. }
  7.  
  8. if($str > 0) {
  9. $str = $str * $wynikow_na_stronie;
  10. }
  11.  
  12.  
  13. $teraz = gmdate("Ymd") . gmdate("H") + 2 . gmdate ("is");
  14. $id = mysql_connect($host , $login, $haslo); 
  15. mysql_select_db($nazwa_bazy, $id);
  16.  
  17.  
  18. $query = "select * from $nazwa_tabeli where prywatny = 'nie' and wygasa > $teraz order by wygasa asc limit $str, $wynikow_na_stronie";
  19. $wynik = mysql_query($query);
  20. $query1 = "select * from $nazwa_tabeli where prywatny = 'nie' and wygasa > $teraz order by wygasa asc";
  21. $wynik1 = mysql_query($query1);
  22. $liczba_wynikow = mysql_num_rows($wynik1);
  23. }
  24.  
  25. while($wpis=mysql_fetch_assoc($wynik)) {
  26. include("szablony/szablon.php");
  27. }
  28.  
  29. ?>
  30.  
  31. <br>
  32. <center>
  33. Strona:<br>
  34. <?
  35. $liczba_wynikow = $liczba_wynikow / $wynikow_na_stronie;
  36. $liczba_stron = ceil($liczba_wynikow);
  37.  
  38. for($x=0; $x <= $liczba_stron-1; $x++) {
  39. if($x == $_GET[str]) {
  40. ?>
  41. <b><a href="?str=<? print $x; ?>">[<? print $x; ?>]</a> </b>
  42. <?
  43. } else {
  44. ?>
  45. <a href="?str=<? print $x; ?>">[<? print $x; ?>]</a> 
  46. <?
  47. }
  48. }
  49. ?>
  50.  
  51. </center>


Wygląda to tak jak na stronie
http://www.kostek.forall.pl/index.php?page=wszystkie&str=0
Nie śmiać się z wpisów tongue.gif To raczej prywatna strona biggrin.gif

Mam nadzieje ze się przyda


--------------------
kostek blog
Go to the top of the page
+Quote Post
dopy
post 9.07.2006, 11:07:16
Post #7





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 25.07.2005

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


Cytat
ale dla bazy MYSQL

Heh, moje rozwiazanie tez jest dla bazy mySQL, ale mysle ze bardzo latwo zaimplementowac to w innych typach bazy.

Ten post edytował dopy 9.07.2006, 12:40:56


--------------------
Błyśnij, nim zgaśniesz...
Go to the top of the page
+Quote Post
progman
post 9.07.2006, 12:34:46
Post #8





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 6.07.2006

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


Zastosowałem poniższy kod ale efektów nie ma, wyświetla samą tabelkę ale już bez rekordów, nie mogę sobie z tym wogóle poradzić. Poprawi mi ktoś ten kod żeby działało stronnicowanie?

  1. <?php
  2. $conn = pg_connect("host=127.0.0.1 port=5432 dbname=osoby user=test password=test");
  3. if (!$conn) {echo "Nie udalo sie polaczyc z baza danych. n";
  4. exit;}
  5.  
  6. {
  7.  $ON_PAGE = 5; //liczba wyświetleń na stronie
  8.  $res = pg_query ($conn, 'SELECT COUNT(id) FROM ludzie');
  9.  $all_records = pg_fetch_row ($res, 0); //wszystkie rekordy
  10.  $num_all_pages = $all_records/$ON_PAGE; //liczba stron
  11.  $start = $_GET['page'] * $ON_PAGE;  //poniżej jest nawigacja i zmienna $_GET['page']
  12.  }
  13.  
  14. //Zapytanie do bazy danych,
  15. {
  16. $res = pg_query($conn, 'SELECT nazwisko, imie FROM ludzie LIMIT ' . $start . ',' . $ON_PAGE);
  17. }
  18.  
  19. //Pasek nawigacji
  20. for($i=0; $i<$num_all_pages; $i++)
  21.  {
  22. echo '<a href="index.php3?page='.$i.'">'.$i.'</a> | ';
  23. }
  24.  
  25.  // Tabela
  26. {
  27. $count=pg_num_rows($res);
  28. print '<BR>';
  29. print '<center>';
  30. print '<TABLE BGCOLOR="#90C0F0" border="4" cellpadding="15" cellspacing="1">';
  31. print '<TR><TH colspan="5" scope="colgroup">Lista Osób</TH></TR>';
  32. print '<TH scope="col">Nazwisko</TH>';
  33. print '<TH scope="col">Imie</TH>';
  34. for ($x=0;$x<$count;$x++)
  35. {
  36.  
  37. // Tabela wraz z pobranymi danymi
  38.  
  39. print '<TR><td>'.pg_fetch_result($res,$x,'nazwisko').'</td>';
  40. print '<td>'.pg_fetch_result($res,$x,'imie').'</td>';
  41. print '</tr>';
  42. }
  43. print '</table>';  
  44. print '</center>';
  45. }
  46. ?>


Dodam jeszcze że żaden kod niechce mi działać prawidłowo z podanych tutaj :/

Go to the top of the page
+Quote Post
mdco
post 10.07.2006, 20:47:30
Post #9





Grupa: Zarejestrowani
Postów: 324
Pomógł: 5
Dołączył: 14.12.2004

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


Cytat(progman @ 9.07.2006, 09:47 ) *
mdco Wywala mi błąd przy:

  1. <?php
  2. $start = $_GET['page'] * $ON_PAGE;
  3. ?>


Co może być nie tak?


Jaki błąd Ci wywala? Być może wywala sie gdy zmienna $_GET['page'] nieistnieje?
Jeżeli tak to:
  1. <?php
  2. if( !isset($_GET['page']) )
  3. $_GET['page'] = 0;
  4.  
  5. $start = $_GET['page'] * $ON_PAGE;
  6. ?>


--------------------
zmoderowano - rozmiar
Go to the top of the page
+Quote Post
progman
post 14.07.2006, 14:33:27
Post #10





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 6.07.2006

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


Ok z tamtym sobie poradziłem już, mam inny problem związany ze stronnicowaniem, poniżej podaję kod zobaczcie co tam jest nie tak, bo ja się już zamotałem totalnie z tym stronnicowaniem winksmiley.jpg Sprawa jest taka że wszystko było by OK ale kiedy klikam na następną stronę to jest ok ale mogę tak klikać i klikać i strona cały czas idzie o 1 wyżej, druga sprawa to nie działa button ostatnia strona.

  1. <?php
  2. //ilosc rekordow na stronie
  3.  $na_stronie=7;
  4.  
  5.  //ilosc rekordow
  6.  $res1=pg_query($conn, 'SELECT count(id) as ilosc FROM ('.$tab_sql.') ddd');
  7.  $ilosc_rek=pg_result($res1, 0, 'ilosc');
  8.  
  9.  //biezaca strona
  10.  if (isset($HTTP_GET_VARS['pg']))
  11.  {
  12. $pg=$HTTP_GET_VARS['pg'];
  13.  }
  14.  else
  15.  {
  16. $pg=0;
  17.  }
  18.  
  19.  //rekordy dla biezacej strony
  20.  $res2=pg_query($conn, $tab_sql.' LIMIT '.$na_stronie.' OFFSET '.($pg * $na_stronie));
  21.  
  22.  if ($pg*$na_stronie>=$ilosc_rek)
  23.  {
  24. echo "Strona poza zakresem<br>";
  25.  }
  26.  else
  27.  {
  28. ?>


  1. <?php
  2. // pierwszy / npoprzedni / numer / następny / ostatni
  3. $plus = $pg+1;
  4.  
  5. if ($pg == 0)
  6. {
  7. echo " <img src='images/prev2.gif' alt='Poprzednia'/><img src='images/prev2.gif' alt='Poprzednia'/> <img src='images/prev.gif' alt='Poprzednia'/> ";
  8. } 
  9. else
  10. {
  11. echo " <a href='{$_SERVER['PHP_SELF']}?pg=0'><img src='images/prev2.gif' alt='Poprzednia'/><img src='images/prev2.gif' alt='Poprzednia'/></a> ";
  12. $prevpage = $pg-1;
  13. echo " <a href='{$_SERVER['PHP_SELF']}?pg=$prevpage'><img src='images/prev.gif' alt='Poprzednia'/></a> ";
  14. }
  15. echo " ( <B>Strona</B> $plus $lastpage ) ";
  16. if ($pg > $lastpage)
  17. {
  18. echo " <img src='images/next.gif' alt='Następna'/> <img src='images/next2.gif' alt='Następna'/><img src='images/next2.gif' alt='Następna'/> ";
  19. } 
  20. else 
  21. {
  22. $nextpage = $pg+1;
  23. echo " <a href='{$_SERVER['PHP_SELF']}?pg=$nextpage'><img src='images/next.gif' alt='Następna'/></a> ";
  24. echo " <a href='{$_SERVER['PHP_SELF']}?pg=$lastpage'><img src='images/next2.gif' alt='Następna'/><img src='images/next2.gif' alt='Następna'/></a> ";
  25. print '</center>';
  26. }
  27. ?>
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 - 09:22