Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ilość odpowiedzi na stronie?
Forum PHP.pl > Forum > Gotowe rozwiązania
irysek110
Witajcie!


W trakcie realizacji swojego projektu natknąłem się na problem: nie wiem jak wyświetlać np. po 10 odpowiedzi na stronie, a na samym dole (pod wyświetlonymi odpowiedziami) umieścić cyferki oznaczające ilość stron odpowiedzi pozostałych do obejrzenia czyli coś w rodzaju: 1 [2] [3] itp..

Ma ktoś jakiś pomysł?

Dziękuję za wszystkie odpowiedzi.

Irysek
mike
Zacznij korzystać z wyszukiwarki !

Szukaj: stronicowanie
mario
  1. <?php
  2. $zapytanie = &#092;"SELECT * FROM tabela\";
  3. $result = mysql_query($zapytanie);
  4. $rekordy = mysql_num_rows ($result);
  5.  
  6. $max_poz = 10;
  7.  
  8. echo &#092;"<p align=center>\";
  9.  
  10. // jeśli wchodzimy bez parametru $page pierwsza strona
  11. // ustawia się jako pierwsza i pętla startuje od cyfry 0
  12.  
  13. If ($page==&#092;"\")
  14.  {
  15. $page=1;
  16. $start=0;
  17.  }
  18.  
  19. else
  20.  
  21. // jeśli wchodzimy z parametrem pierwsza strona
  22. // ustawia się z podanego parametru $page i pętla startuje od parametru $page
  23.  
  24.  {
  25. $start=$page*$max_poz;
  26. $start=$start-$max_poz;
  27.  }
  28.  
  29. $stron = ceil ($rekordy/$max_poz);  // instrukcja ceil zaokrągla ułamki w górę do pełnej liczby
  30.  
  31. // wykonujemy pętelki z podziałem na odnośniki do poszczególnych stron
  32.  
  33. If ($page>1)
  34.  {
  35. $strona=$page-1;
  36. echo &#092;"<a href='index.php?page=$strona'>poprzednie</a> &nbsp; \";
  37.  }
  38.  
  39. For ($index=1;
  40.  $index <= $stron;
  41.  $index++)
  42.  {
  43. If (($page==$index) and ($stron!=1))
  44.  {
  45. echo&#092;"<font color=red><b>$index</b></font> | \";
  46. $next=$page+1;
  47.  }
  48. elseif ($stron!=1)
  49.  echo&#092;" <b><a href='index.php?page=$index'>$index</a></b> | \";
  50.  
  51. If (($page>0) and ($index==$stron) and ($page<$stron))
  52.  echo &#092;" &nbsp; <a href='index.php?page=$next'>następne</a>\";
  53.  }
  54.  
  55. // pobierasz sobie z bazy dane w zakresie oznaczonym $start, $max_poz (czyli z aktualnej strony na której jesteś)
  56.  
  57. $zapytanie = &#092;"SELECT * FROM tabela LIMIT $start, $max_poz\";
  58. $result = mysql_query($zapytanie);
  59.  
  60.  while ($r= mysql_fetch_array($result))
  61.  {
  62.  $zmienna = $r [zmienna];
  63.  ......
  64.  ......
  65.  }
  66.  
  67. ?>
irysek110
Mike_Mech..smile.gif Chciałem skorzystać z wyszukiwarki, ale nie wiedziałem jak to się formalnie nazywa. Dzięki, że mnie uświadomiłeś.smile.gif


Mario! Serdecznie dzięki poraz drugi!
Jarod
Cytat(mario @ 2005-05-07 17:49:21)
  1. <?php
  2. $zapytanie = &#092;"SELECT * FROM tabela\";
  3. $result = mysql_query($zapytanie);
  4. $rekordy = mysql_num_rows ($result);
  5.  
  6. $max_poz = 10;
  7.  
  8. echo &#092;"<p align=center>\";
  9.  
  10. // jeśli wchodzimy bez parametru $page pierwsza strona
  11. // ustawia się jako pierwsza i pętla startuje od cyfry 0
  12.  
  13. If ($page==&#092;"\")
  14.  {
  15. $page=1;
  16. $start=0;
  17.  }
  18.  
  19. else
  20.  
  21. // jeśli wchodzimy z parametrem pierwsza strona
  22. // ustawia się z podanego parametru $page i pętla startuje od parametru $page
  23.  
  24.  {
  25. $start=$page*$max_poz;
  26. $start=$start-$max_poz;
  27.  }
  28.  
  29. $stron = ceil ($rekordy/$max_poz);  // instrukcja ceil zaokrągla ułamki w górę do pełnej liczby
  30.  
  31. // wykonujemy pętelki z podziałem na odnośniki do poszczególnych stron
  32.  
  33. If ($page>1)
  34.  {
  35. $strona=$page-1;
  36. echo &#092;"<a href='index.php?page=$strona'>poprzednie</a> &nbsp; \";
  37.  }
  38.  
  39. For ($index=1;
  40.  $index <= $stron;
  41.  $index++)
  42.  {
  43. If (($page==$index) and ($stron!=1))
  44.  {
  45. echo&#092;"<font color=red><b>$index</b></font> | \";
  46. $next=$page+1;
  47.  }
  48. elseif ($stron!=1)
  49.  echo&#092;" <b><a href='index.php?page=$index'>$index</a></b> | \";
  50.  
  51. If (($page>0) and ($index==$stron) and ($page<$stron))
  52.  echo &#092;" &nbsp; <a href='index.php?page=$next'>następne</a>\";
  53.  }
  54.  
  55. // pobierasz sobie z bazy dane w zakresie oznaczonym $start, $max_poz (czyli z aktualnej strony na której jesteś)
  56.  
  57. $zapytanie = &#092;"SELECT * FROM tabela LIMIT $start, $max_poz\";
  58. $result = mysql_query($zapytanie);
  59.  
  60.  while ($r= mysql_fetch_array($result))
  61.  {
  62.  $zmienna = $r [zmienna];
  63.  ......
  64.  ......
  65.  }
  66.  
  67. ?>

@mario: Mam jedno pytanie. Użyłeś na samym początku skrytpu kodu:
  1. <?php
  2.  
  3. $zapytanie = &#092;"SELECT * FROM tabela\";
  4. $result = mysql_query($zapytanie);
  5. $rekordy = mysql_num_rows ($result);
  6.  
  7. ?>

do pobrania ilości wszystkich wierszy. A nie szybciej będzie jak zrobisz tak:
  1. <?php
  2.  
  3. $zapytanie = &#092;"SELECT Count(primary key) FROM tabela\";
  4. $result = mysql_query($zapytanie);
  5. $rekordy = mysql_fetch_row($result);;
  6.  
  7. ?>

questionmark.gif?

Drugie pytanie: czy da się skrypt przerobić tak, żeby za każdym razem wywoływania samego siebie nie sprawdzał ilości rekordów? Bo po co cały czas robić to samo?

Pozdrawiam

PS. Jestem bliski rozwiązania tego problemu ale proszę o odpowiedź

EDIT:
------
Można to zrobić jedynie przez przekazanie wartości za pomocą GET, ale nie wiemy jakiego wyniku się spodziewamy więc jest to niebezpieczne. Dlatego moim zdaniem lepiej zliczać ilość wierszy za każdym razem.
Co o tym myślicie?
dzon
mam problem ...
skorzystałem z kodu kolegi mario i stronicowanie dzial mi pieknie tylko jest problem z tym, że jak dodoaje coś do mojej bazyto wynik wyswietla mi sie tam gdzie był ostatnio usuniety rekord. Rzecz w tym ze chcialbym aby po dodaniu rekordy wyswietlal sie on na poczatku tablicy. Tak mialem przed dodoaniem tego stronicowania i nie wiem teraz o co chodzi.

Używam polecienia order by, co prawda sortuje mi wyniki w tabeli ale tylko na kolejnych stronach a nie sortuje wszstkiego.
  1. <?php
  2. $query = "SELECT * FROM mode1 order by Id DESC";
  3. $result = mysql_query($query) or die("Query failed");
  4. $rekordy = mysql_num_rows ($result);
  5. ?>


Po za tym tak juz pisałem po usunieciu rekordu, dodanie kolejnego powoduje ze dodaje go nie na poczatku tylko od miejsca gdzie usunąłem ostatni rekord.

Prosze o pomoc

dobra doszedłem co bylo nie tak ... za LIMIT wstawialem ORDER a musi byc przed ... no coz czlowiek sie uczy dopiero
mario
Cytat(J4r0d @ 10.05.2005, 17:24 ) *
Można to zrobić jedynie przez przekazanie wartości za pomocą GET, ale nie wiemy jakiego wyniku się spodziewamy więc jest to niebezpieczne. Dlatego moim zdaniem lepiej zliczać ilość wierszy za każdym razem.
Co o tym myślicie?


oczywiscie ze $_GET latwo jest oszukac podobnie jak $_COOKIE, mozna zastosowac $_POST w polu "hidden" lub lepiej $_SESSION ale moim zdaniem po co.... Wykonanie sprawdzenia liczby komorek z tabeli trwa ulamki sekundy, a np. z $_SESSION trzeba by sprawdzic czy zmienna jest zarejestrowana (jezeli nie to ja zarejestrowac), i inne pierdoly zwiazane z zabezpieczeniem skryptu. Moim zdaniem robota nie warta zachodu... po co sobie komplikowac zycie?

Oczywiscie to byl przyklad i kazdy zrobi jak mu bedzie wygodnie i najlepiej :-)
Kayne
Witam

Interesuje mnie ważna kwestia, a mianowicie w kodzie jest tak:

Kod
<?php
$query = "SELECT * FROM mode1 order by Id DESC";
$result = mysql_query($query) or die("Query failed");
$rekordy = mysql_num_rows ($result);
?>


A czy nie lepiej tak?

Kod
<?php
$result = mysql_query("SELECT * FROM mode1 ORDER BY Id DESC") or die("Query failed");
$rekordy = mysql_num_rows ($result);
?>


Mniej zmiennych używasz, kod jest mniej obszerny i czytelniejszy.
bim2
Zero róznicy w tym jest więc nie pokazuj że jesteś jakiś mądry tongue.gif. A ja zamaist or die dałbym mysql_error tongue.gif wtedy skrypt lecial by dalej. Np jak się ma templatki i wczyta 1 połowe a drugą nie biggrin.gif
Cysiaczek
Właśnie wczoraj pisałem klasę kontrolera stronicowania. Jak liczycie rekordy, to nie używajcie
  1. <?php
  2. $sql="SELECT * FROM tabela";
  3. $query=mysql_query($sql);
  4. $ile_rekordow=mysql_num_rows($query);
  5.  
  6. //tylko :
  7.  
  8. $sql="SELECT COUNT(*) FROM tabela";
  9.  
  10. //i dalej normalnie przez fetch_array lub result etc.
  11. ?>


Ta funkcja jest około 300+%(zalezy ile rekordów) szybsza niż liczenie przez mysql_num_rows()
Jak już koniecznie chcecie, to używajcie mysql_affected_rows()

Wszystko rozbija się o "SELECT * ..." Głupotą jest używanie takiego kodu po to, aby policzyc ich całkowitą ilośc w tabeli.

Oczwiscie nabiera to sensu, jeśli zamierzacie potem coś z tymi wyciągniętymi danymi zrobic.

P.S Testowałem te zapytania na tebeli z 2000000 rekordów.
mario
oczywiscie ze uzywam zapytan z * aby otrzymac calosc, gdyz najczesciej cala tablica jest mi potrzebna do wyswietlenia smile.gif
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-2024 Invision Power Services, Inc.