Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Stronicowanie
Forum PHP.pl > Forum > PHP
mith
Witam
Mam mały problem mianowicie jak można przerobić ten skrypt tak aby był możliwy podział na strony wraz z możliwością wyboru strony np.:
<< < 1 2 3 [4] 5 6 7 > >>
I żeby na stronie było wyświetlane np. tylko 15 wierszy tej tabelki.

Dzięki z góry.

  1. <?
  2. include('db.php');
  3.  
  4. $result = mysql_query('SELECT * FROM tabela ORDER BY nazwa');
  5. if ($row = mysql_fetch_array($result)) {
  6.  
  7. print('<table border="1" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#F3F3F3">
  8. <tr><td><p align="left"><b>Nazwa</b></td>
  9. </tr><tr>
  10. ');
  11.  
  12. do {
  13.  
  14. print ('<td>'.$row["nazwa"].'</font></td></tr>
  15. ');
  16.  
  17. } while ($row = mysql_fetch_array($result));
  18. print('</table>');
  19. } else {
  20. print "Błąd: Nie odnaleziono rekordów.";
  21. }
  22. ?>


PS: Wiem że na forum dużo tego jest ale mi jest potrzebny akurat ten skrypt smile.gif
Master Miko
Było setki tysięcy razy!
Poszukaj w google, albo popatrz w to:
http://phpedia.pl/wiki/Stronicowanie
aby zmodyfikować swój kod (będzie to bardzo łatwe)

Albo odwrotnie.. zmodyfikuj kod na php.wiki swoimi danymi laugh.gif




by php.wiki, zmodyfikowany dla Ciebie... nie ma tylko intrukcji warunkowej czy istnieją jakieklowiek rekordy.

  1. <?php
  2. define('ILOSC_WYNIKOW_NA_STRONIE', 5);
  3.  
  4. include('db.php'); // połączenie z bazą itp
  5.  
  6. $SQL = "SELECT SQL_CALC_FOUND_ROWS * 
  7.        FROM tabela 
  8.        ORDER BY nazwa ASC 
  9.        LIMIT ".mysql_escape_string((int)$_GET['porcja']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;
  10. // pobiera ILOSC_NA_STRONIE rekordów z bazy, sortując wg daty rosnąco, zaczynając 
    od $_GET['porcja']*ILOSC_NA_STRONIE
  11. $RES = mysql_query($SQL); // wykonujemy zapytanie
  12.  
  13. print('<table border="1" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#F3F3F3">
  14. <tr><td><p align="left"><b>Nazwa</b></td>
  15. </tr><tr>
  16. ');
  17.  
  18. while($row = mysql_fetch_assoc($RES)){
  19.    /*Wyswietlanie wyników, przykładowo:*/
  20. print ('<td>'.$row["nazwa"].'</font></td></tr>
  21. ');
  22. }
  23.  
  24. print('</table>');
  25.  
  26. // w inny sposób pobieramy ilosc danych w bazie
  27. $SQL = "SELECT FOUND_ROWS() as Ilosc";
  28. $RES= mysql_query($SQL);
  29. list($iloscWpisow) = mysql_fetch_row($RES);
  30.  
  31. //Teraz wypadało by wyswietlic jakąc nawigację 
  32.  
  33. //jesli nie jestesmy na pierwszej stronie
  34. if($_GET['porcja']>0){ 
  35.     //wyswietlamy link do poprzedniej strony
  36.    echo '<a href="?porcja='.($_GET['porcja']-1).'">Poprzednie</a> ';
  37. }
  38.  
  39. for($i = 0;$i<=floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE);$i++){
  40.    echo '<a href="?porcja='.($i).'">[ '.($i+1).' ]</a> ';
  41. }
  42. //jesli nie jestesmy na ostatniej stronie
  43. if($_GET['porcja']<floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE)){ 
  44.   //wyswietlamy link do nastepnej strony
  45.    echo ' <a href="?porcja='.($_GET['porcja']+1).'">Następne</a>';
  46. }
  47. ?>
Jabol
A ja nie będę taki zły, podam swój sposób zaimplementowany w smarty:
Kod
{if $data.info.pages gt 1}
<hr />
{math equation="page - 2" page=$data.info.page format="%d" assign=npage2}
{math equation="page - 1" page=$data.info.page format="%d" assign=npage1}
{math equation="page + 2" page=$data.info.page format="%d" assign=page2}
{math equation="page + 1" page=$data.info.page format="%d" assign=page1}
{if $npage1 gte 1}
{if $npage2 gte 1}
{if $npage2 gt 1}<a href="?id={$page.page_id}&news_page=1">[1...]</a>&nbsp;
{/if}<a href="?id={$page.page_id}&news_page={$npage2}">[{$npage2}]</a>&nbsp;
{/if}<a href="?id={$page.page_id}&news_page={$npage1}">[{$npage1}]</a>&nbsp;
{/if}
[{$data.info.page}]&nbsp;
{if $page1 lte $data.info.pages}&nbsp;<a href="?id={$page.page_id}&news_page={$page1}">[{$page1}]</a>
{if $page2 lte $data.info.pages}&nbsp;<a href="?id={$page.page_id}&news_page={$page2}">[{$page2}]</a>
{if $page2 lt $data.info.pages}&nbsp;<a href="?id={$page.page_id}&news_page={$data.info.pages}">[...{$data.info.pages}]</a>
{/if}
{/if}
{/if}
{/if}
Oczywiście $data.info.page to aktualna strona, a $data.info.pages to
  1. SELECT COUNT(*)
  2. FROM tabela
Reszta zmiennych się nie liczy.
mith
Wielkie dzięki Master Miko a jak to jeszcze można przerobić, aby zamiast:

Poprzednie [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ 22 ] [ 23 ] [ 24 ] [ 25 ] [ 26 ] [ 27 ] [ 28 ] [ 29 ] [ 30 ] [ 31 ] [ 32 ] [ 33 ] [ 34 ] Następne

Wyświetlane było np. coś takiego:

<< < 19 20 21 22 [23] 24 25 26 27 > >>

I kolejne moje pytanie jak do tego można zrobić wyszukiwarkę.
krzyszbi
powinno dzialać
  1. <?php
  2. define('ILOSC_WYNIKOW_NA_STRONIE', 5);
  3.  
  4. include('db.php'); // połączenie z bazą itp
  5. //sprawdzamy ile rekorów jest w bazie
  6. $query = "SELECT SQL_CALC_FOUND_ROWS * FROM tabela";
  7. $result = mysql_query ($query);
  8. $ilosc_rekordow = @mysql_num_rows($result);
  9. //liczymy ile bedzie stron
  10.  $ile_stron=ceil($ilosc_rekordow/ILOSC_WYNIKOW_NA_STRONIE);  
  11. $SQL = "SELECT SQL_CALC_FOUND_ROWS * 
  12.  FROM tabela 
  13.  ORDER BY nazwa ASC 
  14.  LIMIT ".mysql_escape_string((int)$_GET['porcja']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;
  15. // pobiera ILOSC_NA_STRONIE rekordów z bazy, sortując wg daty rosnąco
  16. , zaczynając od $_GET['porcja']*ILOSC_NA_STRONIE
  17. $RES = mysql_query($SQL); // wykonujemy zapytanie
  18.  
  19. print('<table border="1" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#F3F3F3">
  20. <tr><td><p align="left"><b>Nazwa</b></td>
  21. </tr><tr>
  22. ');
  23.  
  24. while($row = mysql_fetch_assoc($RES)){
  25.  /*Wyswietlanie wyników, przykładowo:*/
  26. print ('<td>'.$row["nazwa"].'</font></td></tr>
  27. ');
  28. }
  29.  
  30. print('</table>');
  31.  
  32. // w inny sposób pobieramy ilosc danych w bazie
  33. $SQL = "SELECT FOUND_ROWS() as Ilosc";
  34. $RES= mysql_query($SQL);
  35. list($iloscWpisow) = mysql_fetch_row($RES);
  36.  
  37. //Teraz wypadało by wyswietlic jakąc nawigację 
  38.  
  39. //jesli nie jestesmy na pierwszej stronie
  40. if($_GET['porcja']>0){ 
  41. //wyswietlamy link do poprzedniej strony
  42.  echo '<a href="?porcja='.($_GET['porcja']-1).'">Poprzednie</a> ';
  43. }
  44. if ($ile_stron>2*ILOSC_WYNIKOW_NA_STRONIE)
  45. {
  46. if ($strona<5)
  47. {
  48. $ile = 10;
  49. $start = 0;
  50. }
  51.  else
  52. {
  53. $ile = $strona + 5;
  54. if ($ile>$ile_stron)
  55. {
  56. $ile = $ile_stron;
  57. $start = $strona - 5;
  58. }
  59. else
  60. $start = $strona - 5;
  61. }
  62. }
  63. else
  64. {
  65. $ile = $ile_stron;
  66. $start = 0;
  67. }
  68. for($i=$start;$i<$ile;$i++){
  69.  echo '<a href="?porcja='.($i).'">[ '.($i+1).' ]</a> ';
  70. }
  71. //jesli nie jestesmy na ostatniej stronie
  72. if($_GET['porcja']<floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE)){ 
  73. //wyswietlamy link do nastepnej strony
  74.  echo ' <a href="?porcja='.($_GET['porcja']+1).'">Następne</a>';
  75. }
  76. ?>
mith
To wyświetla tylko:

Poprzednie Następne

A nie:

<< < 19 20 21 22 [23] 24 25 26 27 > >>
em1X
offtopic.gif ~krzyszbi chciałbym zobaczyć jak za rok miałbyś ten kod przerobić, zmienić coś.. niezłe spaghetti blink.gif
krzyszbi
~mith a jakie wartości przyjmuja zmienne $start $ile przed petlą i.lub w warunkach

~em1X kod pisany juz dawno ale u mnie dziala dobrze kiedys każdy zaczynal i różnie mu to wychodzilo tongue.gif
Master Miko
@Krzyszbi dziwny ten Twój kod... zmienia tylko sposób obliczeń a nie wyświetlania

Nie wiem czy to zadziała... ale powinno:

Pisane z palca


  1.  
  2. <?php
  3. define('ILOSC_WYNIKOW_NA_STRONIE', 5);
  4.  
  5. include('db.php'); // połączenie z bazą itp
  6.  
  7. $SQL = "SELECT SQL_CALC_FOUND_ROWS * 
  8.        FROM tabela 
  9.        ORDER BY nazwa ASC 
  10.        LIMIT ".mysql_escape_string((int)$_GET['porcja']*ILOSC_WYNIKOW_NA_STRONIE).",".ILOSC_WYNIKOW_NA_STRONIE;
  11. //  pobiera ILOSC_NA_STRONIE rekordów z bazy, sortując wg daty rosnąco
  12. , zaczynając od $_GET['porcja']*ILOSC_NA_STRONIE
  13. $RES = mysql_query($SQL); // wykonujemy zapytanie
  14.  
  15. print('<table border="1" width="100%" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#F3F3F3">
  16. <tr><td><p align="left"><b>Nazwa</b></td>
  17. </tr><tr>
  18. ');
  19.  
  20. while($row = mysql_fetch_assoc($RES)){
  21.    /*Wyswietlanie wyników, przykładowo:*/
  22. print ('<td>'.$row["nazwa"].'</font></td></tr>
  23. ');
  24. }
  25.  
  26. print('</table>');
  27.  
  28. // w inny sposób pobieramy ilosc danych w bazie
  29. $SQL = "SELECT FOUND_ROWS() as Ilosc";
  30. $RES= mysql_query($SQL);
  31. list($iloscWpisow) = mysql_fetch_row($RES);
  32.  
  33. //Teraz wypadało by wyswietlic jakąc nawigację 
  34.  
  35. //jesli nie jestesmy na pierwszej stronie
  36. if($_GET['porcja']>0){ 
  37.     //wyswietlamy link do poprzedniej strony
  38.    echo '<a href="?porcja='.($_GET['porcja']-1).'"> << </a> ';
  39. }
  40.  
  41. for($i = 0;$i<=floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE);$i++){
  42.    echo '<a href="?porcja='.($i).'">'
  43.    if($_GET['porcja'] == $i) {echo '[';}
  44.    echo ' '.($i+1).' ';
  45.    if($_GET['porcja'] == $i) {echo ']';}
  46.    echo '</a> ';
  47. }
  48. //jesli nie jestesmy na ostatniej stronie
  49. if($_GET['porcja']<floor($iloscWpisow/ILOSC_WYNIKOW_NA_STRONIE)){ 
  50.   //wyswietlamy link do nastepnej strony
  51.    echo ' <a href="?porcja='.($_GET['porcja']+1).'"> >> </a>';
  52. }
  53. ?>



Cytat
zrobić wyszukiwarkę

Sugeruje do tego inny plik np. (search.php).
Proste. Poszytaj sobie w manualu mysql o WHERE i LIKE.
Poza tym:
1. Robisz formularz (gdzie użytkownik wpisuje czego szuka)
2. Potem wciska submit do submit.php
3. submit.php analizuje dane (sprawdza bezpieczeństwo) i wyszukuje przez WHERE i/lub LIKE tych wartości.
4. Skrypt wyświetla wyniki (do tego też może być stronicowanie)

Poradzisz sobie. Wystarczy umiejętnie przerobić ten skrypt. ALe ja się już tego nie podejmę winksmiley.jpg
piotrd
Wszystko ładnie się przedstawia jeśli chodzi o dane pobrane z SQL... a czy dane pobrane za pomocą:
  1. <?php
  2. $zawartosc = file_get_contents("kg.txt");
  3. $tablica = explode("\n",$zawartosc);
  4. $ile = count($tablica);
  5. for ($i=$ile-1;$i>=0;$i--) {
  6. echo $tablica[$i]."\n";
  7. }
  8. ?>

z pliku kg.txt też da radę stronicować?

ew. czy też da radę stronicować to:
  1. <?php
  2. $i = 1;
  3. $ile = 3;
  4. $folder = "./galeria/fotosy";
  5. $dane = @file($folder."/dane.txt");
  6.  
  7. if(is_array($dane))
  8. foreach($dane as $v) {
  9. $d = explode("|", chop($v));
  10. echo "<img src=\"$folder/$d[3]\"/>". ($i == $ile ? "</td></tr><tr><td align=\"center\" valign=\"middle\">" : "</td><td align=\"center\" valign=\"middle\">")."";
  11. $i < $ile ? $i++ : $i = 1;
  12. }
  13. ?>
krzyszbi
kodzik do danych z pliku
do bazy mala przeróbka i tez się nadale
dziala testowalem tongue.gif
kod do txt
  1. <?php
  2. $dane = file("test.txt");
  3. $ilosc_rekordow = count($dane);
  4. $ile_na_stronie = 20;
  5. $ile_stron = ceil($ilosc_rekordow/$ile_na_stronie);
  6. if ($ile_stron>$ile_na_stronie)
  7. {
  8. if ($_GET['strona']<10)
  9. {
  10. $ile = 10;
  11. $start = 0;
  12. }
  13.  else
  14. {
  15. $ile = $_GET['strona'] + 5;
  16. if ($ile>$ile_stron)
  17. {
  18. $ile = $ile_stron;
  19. $start = $_GET['strona'] - 5;
  20. }
  21. else
  22. $start = $_GET['strona'] - 5;
  23. }
  24. }
  25. else
  26. {
  27. $ile = $ile_stron;
  28. $start = 0;
  29. }
  30. for ($j=$_GET['strona']*$ile_na_stronie;$j<($_GET['strona']*$ile_na_stronie)+$ile_na_stronie;$j++)
  31. {
  32. if (isset($dane[$j]))
  33. {
  34. echo $dane[$j].'<br />';
  35. } 
  36. }
  37. echo '<br />'.$start.'&nbsp;&nbsp;'.$ile.'<br />';
  38. if($_GET['strona']>0)
  39. { 
  40.  echo '<a href="?strona='.($_GET['strona']-1).'">Poprzednie</a> ';
  41. }
  42. for($i=$start;$i<$ile;$i++)
  43. {
  44.  echo '<a href="?strona='.($i).'">[ '.($i+1).' ]</a> ';
  45. }
  46. if($_GET['strona']<$ile_stron-1)
  47. { 
  48.  echo ' <a href="?strona='.($_GET['strona']+1).'">Następne</a>';
  49. }
  50. ?>

przykladowy txt
Kod
pozycja 0
pozycja 1
pozycja 2
pozycja 3
pozycja 4
pozycja 5
pozycja 6
pozycja 7
pozycja 8
pozycja 9
pozycja 10
pozycja 11
pozycja 12
pozycja 13
pozycja 14
pozycja 15
pozycja 16
pozycja 17
pozycja 18
pozycja 19
pozycja 20
pozycja 21
pozycja 22
pozycja 23
pozycja 24
pozycja 25
pozycja 26
pozycja 27
pozycja 28
pozycja 29
pozycja 30

kod do DB
  1. <?php
  2. $ile_na_stronie = 20;
  3. $query = "SELECT id FROM tabela";
  4. $result = mysql_query ($query);
  5. $ilosc_rekordow = mysql_num_rows($result);
  6. $ile_stron = ceil($ilosc_rekordow/$ile_na_stronie);
  7. $query = "SELECT * FROM tabela ORDER BY id DESC LIMIT ".($_GET['strona']*$ile_na_stronie).",".$ile_na_stronie;
  8. $result = mysql_query ($query);
  9. while ($row = mysql_fetch_array($result)) 
  10. {
  11. //wyswietlamy co się nam podoba
  12. }
  13. //reszta bez zmian
  14. ?>

prosty ale spelnia swoje zadanie
oczywiście trzeba sprawdzic jakie zmiennedo nas docieraja $_GET['strona'] ale aby nie zaciemniać kodu nie wstawialem tego
piotrd
@krzyszbi Twoj pierwszy skrypt jest bardzo ładny, ale spojrz dokladnie na to:
  1. <?php
  2. $zawartosc = file_get_contents("kg.txt");
  3. $tablica = explode("\n",$zawartosc);
  4. $ile = count($tablica);
  5. for ($i=$ile-1;$i>=0;$i--) {
  6. echo $tablica[$i]."\n";
  7. }
  8. ?>

dane z kg.txt pokazywane sa na stronie w odwrotnej kolejnosci... a Twoj skrypt nie odwraca zapisu. Mozna to zmienic aby stronicowal i odwrocil kolejnosci wpisow do pliku?
kakq
powiedzcie mi czy tym stronicowanei z wiki da sie zrobic stronicowanei z htmla?
W bazie mam zapisany tekst sformatowany html i no i jak stronicuje to jak utnei mi jakiegos taga to juz wszystko sie wali. A moze macie jakis pomysl.
krzyszbi
array-reverse
  1. <?php
  2. $dane= file("test.txt");
  3. $dane = array_reverse($dane);
  4. ?>

i wszystko ok
tomekp
Mój kod wygląda tak:
  1. <?php
  2. [snip]
  3. // [START] KOD PASKA DZIELACEGO STRONY
  4. $l = 25;  // Limit wyświetlanych obiektów na stronie
  5.  
  6. $o = 0;
  7. $curr_page = $_GET['page'];
  8.  
  9. if ((!empty($curr_page)) && ($curr_page != "1")) {
  10. if (($curr_page-1) == "0") {
  11. $o = (($curr_page-1)+$l);
  12. } else {
  13. $o = (($curr_page-1)*$l);
  14. }
  15. } else {
  16. $curr_page = ($o/$l) + 1;
  17. }
  18.  
  19. if ($curr_page > 5) {
  20. $min = $curr_page-3;
  21. $max = $curr_page+4;
  22. } else {
  23. $min = 1;
  24. $max = 9;
  25. }
  26. // [KONIEC] KOD PASKA DZIELACEGO STRONY
  27.  
  28. $ilosc_rekordow = mysql_fetch_assoc(sql("SELECT count( * ) AS ilosc_rekordow FROM klient_dane"));
  29. $ilosc_rekordow = $ilosc_rekordow['ilosc_rekordow'];
  30.  
  31. // [START] KOD PASKA DZIELACEGO STRONY
  32. if ($max >= ceil($ilosc_rekordow/$l)) {
  33. $max = ceil(($ilosc_rekordow/$l)+1);
  34. }
  35.  
  36. $smarty->assign('pasek', $pasek);
  37. $smarty->assign('curr_page', $curr_page);
  38. $smarty->assign('min_page', $min);
  39. $smarty->assign('max_page', $max);
  40. $smarty->assign('last_page', ceil($ilosc_rekordow/$l));
  41. // [KONIEC] KOD PASKA DZIELACEGO STRONY
  42. [snip]
  43. ?>

I kod w pliku tpl:
  1. [snip]
  2. {if $last_page != "0" && $last_page != "1"}
  3. <tr class="text1">
  4. <td width="600" align="center" class="list" colspan="4">
  5. {if $curr_page != "1" && !empty($curr_page)}
  6. <a href="{$smarty.server.PHP_SELF}?option=clients&action=list&sort={$smarty.get.sort}&page={$curr_page-1}{$pasek}">Ť poprzednia</a> |
  7. {/if}
  8. {section name=pasek start=$min_page loop=$max_page step=1}
  9. {if $smarty.section.pasek.index == $curr_page}
  10. {if $curr_page == $last_page}
  11. [<b>{$smarty.section.pasek.index}</b>]
  12. {else}
  13. [<b>{$smarty.section.pasek.index}</b>] |
  14. {/if}
  15. {else}
  16. <a href="{$smarty.server.PHP_SELF}?option=clients&action=list&sort={$smarty.get.sort}&page={$smarty.section.pasek.index}{$pasek}">{$smarty.section.pasek.index}</a> |
  17. {/if}
  18. {/section}
  19. {if $curr_page != $last_page}
  20. <a href="{$smarty.server.PHP_SELF}?option=clients&action=list&sort={$smarty.get.sort}&page={$curr_page+1}{$pasek}">następna ť</a>
  21. {/if}
  22. </td>
  23. </tr>
  24. {/if}
  25. [snip]
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.