Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Mysql + PHP]Porcjowanie wyników zapytania
Forum PHP.pl > Forum > Przedszkole
armen
Witam.

Starałem się znaleźć coś sensownego dla lajka o porcjowaniu wyników, ale niestety nic takiego nie mogłem znaleźć.

Chciałbym aby generowane były automatycznie strony z wyświetlonymi danymi po 10 na każdej, oraz aby linki do nich były w postaci numerycznej na głównej stronie.

Bardzo proszę o pomoc.
slash^
Bylo wiele razy, widocznei slabo szukales.

sprawdz: stronicowanie
armen
ale te wszystkie tutki są dla kurde mega pro koderów albo nie działają sad.gif

ja chciałbym coś prościutkiego

dało by rade zrobić tak...

mam główna stronę, która wyświetla te dane (mysql_query(blabla LIMIT 0, 10)
i później dało by się funkcje if ,która by sprawdzała czy rekordów jest więcej niż 10 mysql_num_rows z tego co pamiętam smile.gif
następnie jeżeli by było więcej (i tu niewiem zabardzo jak to wykonać)
to tworzy następną stronę np. wysw.php?page=2 gdzie zapytanie będzię (mysql_query(blabla LIMIT 10, 20)
oraz również sprawdza tylko teraz czy rekordów będzie 2x więcej... jeżeli tak to next... i tak w kółko...

hmm? smile.gif
slash^
  1. <?php
  2. $ile = mysql_num_rows($sql);; //ilosc wszystkich rekordow (nie stron !!)
  3.  
  4. $na_strone = 10; //tu podajesz ile rekordow na stronie max.
  5.  
  6. $stron = ceil ($ile / $na_strone);  //tutaj masz ilosc stron zaokraglanych w gore
  7.  
  8. for ($i = 1; $i < $stron; $i++) echo '<a href="?strona='.($i+1).'">strona '.($i+1).'</a>'; //tak wyswietlasz numery;
  9.  
  10. $sql = 'SELECT * FROM tabela LIMIT '.(((int)$_GET['strona']-1)*$na_strone).','.((int)$_GET['strona']*$na_strone) // tak odczytujesz ktore dane wczytac z linku
  11. ?>



pisane z palca, wiec moga byc drobne bledy.
armen
no to robie
  1. <?php
  2. //wys
  3.  
  4. $sql = 'SELECT * FROM ogloszenia LIMIT '.(((int)$_GET['strona']-1)*$na_strone).','.((int)$_GET['strona']*$na_strone); // tak odczytujesz ktore dane wczytac z linku
  5.  
  6. $ile = mysql_num_rows($sql); //ilosc wszystkich rekordow (nie stron !!)
  7.  
  8. $na_strone = 10; //tu podajesz ile rekordow na stronie max.
  9.  
  10. $stron = ceil ($ile / $na_strone);  //tutaj masz ilosc stron zaokraglanych w gore
  11.  
  12. for ($i = 1; $i < $stron; $i++) echo '<a href="?podglad1.php?='.($i+1).'">strona '.($i+1).'</a>'; //tak wyswietlasz numery;
  13.  
  14.  
  15. ?>


i mam Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\maciek\podglad1.php on line 28 (ta z $ile..) sad.gif
slash^
przede wszystkim brakuje opcji mysql_query.
Poza tym dobrze by bylo gdybys dal przed tym zapytaniem:
if (!isset($_GET['strona']) $strona = 1; else $strona = (int)$_GET['strona'];

i wstaw zmienna $strona zamiast $_GET w zapytaniu.

ps. wlasnie zauwazylem, to zapytanie (z warunkiem limit) powinno byc PO wykonaniu zapytania zliczajacego ilosc rekordow, gdyz inaczej dupa ;p (tak wiec musisz miec 2 zapytania).
armen
niewiem czy dobrze zrozumiałem... zrobiłem tak...
  1. <?php
  2. //wys
  3. $ile = mysql_num_rows($sql); //ilosc wszystkich rekordow (nie stron !!)
  4. $na_strone = 10; //tu podajesz ile rekordow na stronie max.
  5. $stron = ceil ($ile / $na_strone);  //tutaj masz ilosc stron zaokraglanych w gore
  6. for ($i = 1; $i < $stron; $i++) echo '<a href="?wysw1.php?='.($i+1).'">strona '.($i+1).'</a>'; //tak wyswietlasz numery;
  7. if (!isset($_GET['strona']) $strona = 1; else $strona = (int)$_GET['strona'];
  8. $sql = mysql_query("SELECT * FROM agencja LIMIT ".(((int)$_GET['strona']-1)*$na_strone).','.((int)$_GET['strona']*$na_strone)); // tak odczytujesz ktore dane wczytac z linku
  9. ?>


i mam Parse error: syntax error, unexpected T_VARIABLE in c:\usr\krasnal\www\maciek\wysw1.php on line 7
slash^
Ojej pisane z palca i zabraklo jednego nawiasu zamykajacego...

  1. <?php
  2. //wys
  3. $ile = mysql_num_rows($sql); //ilosc wszystkich rekordow (nie stron !!)
  4. $na_strone = 10; //tu podajesz ile rekordow na stronie max.
  5. $stron = ceil ($ile / $na_strone);  //tutaj masz ilosc stron zaokraglanych w gore
  6. for ($i = 1; $i < $stron; $i++) echo '<a href="?wysw1.php?='.($i+1).'">strona '.($i+1).'</a>'; //tak wyswietlasz numery;
  7. if (!isset($_GET['strona'])) $strona = 1; else $strona = (int)$_GET['strona'];
  8. $sql = mysql_query("SELECT * FROM agencja LIMIT ".(($strona-1)*$na_strone).','.$na_strone; // tak odczytujesz ktore dane wczytac z linku
  9. ?>


mam nadzieje ze teraz jest git
edit. wczesniej drobny blad ;p
armen
  1. <?php
  2. //wys
  3. $ile = mysql_num_rows($sql); //ilosc wszystkich rekordow (nie stron !!)
  4. $na_strone = 10; //tu podajesz ile rekordow na stronie max.
  5. $stron = ceil ($ile / $na_strone);  //tutaj masz ilosc stron zaokraglanych w gore
  6. for ($i = 1; $i < $stron; $i++) echo '<a href="?wysw.php?='.($i+1).'">strona '.($i+1).'</a>'; //tak wyswietlasz numery;
  7. if (!isset($_GET['strona'])) $strona = 1; else $strona = (int)$_GET['strona'];
  8. $sql = mysql_query("SELECT * FROM agencja LIMIT ".(($strona-1)*$na_strone).','.($strona*$na_strone)); // tak odczytujesz ktore dane wczytac z linku
  9. ?>


wywala
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\maciek\podglad1.php on line 3

zapewne wiesz o tym ale jako lajek podzielę się myślą, że coś jest z tym $sql ,że nie może odczytać liczby wierszy...
slash^
A dales na poczatku dodatkowe zapytanie, ktore zlicza ilosc wszystkich wierszy?

w twoim przypadku PRAWDOPODOBNIE powinno byc
  1. <?php
  2. $sql = mysql_query('SELECT * FROM agencja');
  3. ?>
armen
a zapomniałem przepraszam..

no teraz już nie ma błędu.. ale nie ma także danych z rekordów... pusta strona ?:/
slash^
Tylko mi nie mow ze to co jest powyzej to caly skrypt do wyswietlania, gdyz nie ma tam samej opcji wyswietlania czegokolwiek...

np. mysql_fetch_assoc" title="Zobacz w manualu PHP" target="_manual
armen
no dałem
  1. <?php
  2. if ($result=mysql_fetch_array($sql)) 
  3. {
  4. echo"<tr><td width='30%'><em>Imie</td><td></em> ".$resultat['Imie']."</tr></td>";
  5. }
  6. ?>


ale wyswietla mi tylko jeden wiersz, pierwszy
slash^
Zmien IF na WHILE - jest to ogromna roznica w tym przypadku.

  1. <?php
  2. while ($result = mysql_fetch_assoc($sql))
  3. echo"<tr><td width='30%'><em>Imie</td><td></em> ".$result['Imie']."</tr></td>";
  4. ?>
armen
no ładnie chodzi, wyświetla te 10 od razu, jest link do strony2 tylko kurcze jak ja klikam to nic sie nie dzieje oprócz tego ,że zmienia się adres strony... aj już tak blisko smile.gif
slash^
zmien ponizsza linijke w skrypcie na:
  1. <?php
  2. for ($i = 1; $i < $stron; $i++) echo ' <a href="?wysw.php?strona='.($i+1).'">strona '.($i+1).'</a> '; //tak wyswietlasz numery;
  3. ?>


... tak to jest jak sie pisze z palca niestety ;[
armen
kurcze nic nie pomaga ;(;( już tam sam coś kombinowałem ale nic nie pomagało sad.gif
slash^
Pokaz CALOSC jak teraz wyglada.
armen
proszę...
  1. <?php
  2. $polacz=laczenie z baza
  3. $sql = mysql_query('SELECT * FROM agencja');
  4.  
  5. //wys
  6. $ile = mysql_num_rows($sql); //ilosc wszystkich rekordow (nie stron !!)
  7. $na_strone = 10; //tu podajesz ile rekordow na stronie max.
  8. $stron = ceil ($ile / $na_strone);  //tutaj masz ilosc stron zaokraglanych w gore
  9.  
  10. for ($i = 1; $i < $stron; $i++) echo ' <a href="?=strona'.($i+1).'">strona '.($i+1).'</a> '; //tak wyswietlasz numery;
  11. if (!isset($_GET['strona'])) $strona = 1; else $strona = (int)$_GET['strona'];
  12. $sql = mysql_query("SELECT * FROM agencja LIMIT ".(($strona-1)*$na_strone).','.($strona*$na_strone)); // tak odczytujesz 
  13.  
  14. while ($resultat=mysql_fetch_array($sql)) 
  15. {
  16. echo"<tr><td width='50%'><em>Imie</td><td></em> ".$resultat['Imie']."</tr></td>";
  17. }
  18. ?>
slash^
Masz blad w linii 10. przy tworzeniu linka.
Nie =strona tylko strona=

..oraz w linii 12., powinno byc:
  1. <?php
  2. $sql = mysql_query("SELECT * FROM agencja LIMIT ".(($strona-1)*$na_strone).','.$na_strone); // tak odczytujesz
  3. ?>
armen
dzięki dzięki dzięki dzięki... i jeszcze raz dzięki!!!!!!

o to mi właśnie chodziło...

dziękuje bardzo!!!! smile.gif
armen
mam jeszcze jeden mały problem w związku z porcjowanie danych

chodzi mi ,żeby po naciśnięciu przycisku grupował np, po imieniu.

udaje mi się to ale tylko na pierwszej stronie, gdy klikam na drugą już niestety idzie normalnie nie wiem za bardzo jak to zmienić proszę o pomoc.

  1. <?php
  2. $ile = mysql_num_rows($result);
  3. $na_strone = 3; 
  4. $stron = ceil ($ile / $na_strone);  
  5. for ($i = 1; $i < $stron; $i++) echo ' <a href="?strona='.($i+1).'">strona '.($i+1).'</a> '; 
  6. if (!isset($_GET['strona'])) $strona = 1; else $strona = (int)$_GET['strona'];
  7. if (!empty($button)) 
  8. {
  9. $result = mysql_query("SELECT * FROM agencja ORDER BY Nazwisko ASC LIMIT ".(($strona-1)*$na_strone).','.$na_strone);
  10. }
  11. else
  12. {
  13. $result = mysql_query("SELECT * FROM agencja LIMIT ".(($strona-1)*$na_strone).','.$na_strone); 
  14. }
  15. ?>
THEone
może tu jeszcze dodaj

else
{
$result = mysql_query("SELECT * FROM agencja LIMIT ".(($strona-1)*$na_strone).','.$na_strone);
}


ORDER BY Nazwisko
armen
przecież jak dodam tak to tak jak bym wywalił if i zostawił samo zapytanie z ORDER BY czyli od razu by mi pozycjonował... a ja początkowo ma pokazywać najnowsze a po kliknięciu w przycisk te order by...
armen
pewnie trzeba zrobić, żeby tą wartość 1 z przycisku który zostaje naciśnięty przenosił do następnych stron ale nie wiem jak to dodać...
slash^
Odpowiedz na prv i to co tu:

Wpisz w linku ktory sie tworzy dodatkowe zmienne. Gdyz nie przekazujesz ich dalej. Stary to sa podstawy - proponuje poczytac w necie poradniki - jest ich mnostwo!

1) w linijce, ktora tworzy link musisz przekazac wszelkie zmienne dalej, w twoim przypadku jest to zmienna button.

  1. <?php
  2. for ($i = 1; $i < $stron; $i++) echo ' <a href="?strona='.($i+1).'&amp;button='.$button.'">strona '.($i+1).'</a> ';
  3. ?>


Aby odczytac zmienna z linku musisz to zrobic poleceniem $_GET
czyli przed pierwszym uzyciem:

  1. <?php
  2. $button = (int)$_GET['button'];
  3. ?>


poczytaj co to jest register_globals.

przedrostek (int) oznacza ze zmienna zostanie skonwertowana na liczbe stala, czyli link postaci:

xxxx.php?strona=1&button=5 -> button = 5
xxxx.php?strona=1&button=5.5 -> button = 5
xxxx.php?strona=1&button=5aa -> button = 5
xxxx.php?strona=1&button=a5 -> button = 0 (tak 0, to nie blad).

W linku jest tez &amp; zamiast & - jest to wymagane dla prawidlowego XHTML, mam nadzieje ze wiesz co to validator, jezeli nie o tym tez jest na tym forum duzo.
armen
Pierwsze dzięki za odpowiedź i pomoc.

Jeśli chodzi o te podstawy to doskonale zdaje sobie z tego sprawę.. ale nie ma chyba nic gorszego dla raczkującego jak tutorial, który jest albo ciężki do zrozumienia, albo nie działa...

To co mi napisałeś ok, dzięki tylko też nie działa, nie wiem przewałkowałem to kupę razy, ale nie znam jeszcze tego dobrze, żeby rozgryzać tak...

  1. <?php
  2. $button = $_POST['button'];
  3. $ile = mysql_num_rows($zapytanie);
  4. $na_strone = 10; 
  5. $stron = ceil ($ile / $na_strone); 
  6. for ($i = 1; $i < $stron; $i++) echo ' <a href="?strona='.($i+1).'&amp;button='.$button.'">strona '.($i+1).'</a> ';
  7. if (!isset($_GET['strona'])) $strona = 1; else $strona = (int)$_GET['strona'];
  8. if (!empty($button))
  9. {
  10. $result = mysql_query("SELECT * FROM agencja ORDER BY Imie LIMIT ".(($strona-1)*$na_strone).','.$na_strone);
  11. } 
  12. else 
  13. {
  14. $result = mysql_query("SELECT * FROM agencja LIMIT ".(($strona-1)*$na_strone).','.$na_strone);
  15. }
  16. ?>


ustawiłem echo na $button ale jest tak jak dalej, po kliknięciu na link do następnej strony ze stronnicowania zmienna jest pusta, czyli tak jak było... sad.gif
slash^
  1. <?php
  2. $button = $_POST['button'];
  3. $ile = mysql_num_rows($zapytanie);
  4. $na_strone = 10; 
  5. $stron = ceil ($ile / $na_strone); 
  6. for ($i = 1; $i < $stron; $i++) echo ' <a href="?strona='.($i+1).'&button='.$button.'">strona '.($i+1).'</a> ';
  7. if (!isset($_GET['strona'])) $strona = 1; else $strona = (int)$_GET['strona'];
  8. if ($button==1)
  9. {
  10.  echo ' [<a href="?strona='.$_GET['strona'].'&button=0">Pokaz normalnie</a>]';
  11.  $result = mysql_query("SELECT * FROM agencja ORDER BY Imie LIMIT ".(($strona-1)*$na_strone).','.$na_strone);
  12. }
  13. else 
  14. {
  15.  echo ' [<a href="?strona='.$_GET['strona'].'&button=1">Pokaz posortowane</a>]';
  16.  $result = mysql_query("SELECT * FROM agencja LIMIT ".(($strona-1)*$na_strone).','.$na_strone);
  17. }
  18. ?>
armen
tak wogole mi nie wyświetla danych

i zmienna dalej jest pusta po nacisnieciu..

eh chyba nie dane mi to zrobic
armen
pokazuje te dane, mala literówke miałem ale wyświetla wszystkie zamiast limitu, jest nastepna strona i nic sie nie zmienia ehh
armen
moze ktos by mogl pomoc na gg by bylo napewno sprawniej. bede wdzieczny

5219276
slash^
dopiero zauwazylem...

odczytujesz zmienna $_POST['button'] zaminast $_GET['button']
armen
jest ciekawa sytuacja gdyż jak klikam na te linki [Pokaz normalnie], [Pokaz posortowane] to nie wyświetla mi żadnych danych, ale przekazuje już tą zmienną, bo biorę echo na &button, a jak klikam na ten mój przycisk do sortowania to nic sie nie zmienia...


i jak tu biedny lajk ma ogarnąć sciana.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-2025 Invision Power Services, Inc.