Wyświetlanie zawartosci z bazy, a numeracja strony.

0

Witam napisałem przed chwilą mały kod pobierający inf. z bazy danych MYSQL. Chciałbym aby ktoś mi pomógł w takim czymś że po wyświetleniu 30 rekordów z bazy danych, kolejne rekordy wyświetlają się w kolejnych stronach.

Poniżej przesyłam napisany kod, proszę o pomoc. Pozdrawiam.

 
<?php
mysql_connect ("localhost", "root", "") or die ("Nie można połaczyc sie z baza danych");
mysql_select_db ("listakat")  or die ("Nie można połaczyc sie z baza listakat");

$wynik = mysql_query ("SELECT * FROM listakat;") or die ("blad w zapytaniu");
echo "<table cellpadding=5 border=1>";
echo "<tr><td>ID</td><td>Nazwa</td><td>PR</td><td>Skrypt</td><td>Link zwrotny</td><td>Darmowy</td><td>Uwagi</td></tr>\n";

while ($rekord = mysql_fetch_assoc ($wynik)) {
      $ID = $rekord['ID'];
      $NAZWA = $rekord['NAZWA'];
      $PR = $rekord['PR'];
      $SKRYPT = $rekord['SKRYPT'];
      $LINK = $rekord['LINK'];
      $FREE = $rekord['FREE'];
      $UWAGI = $rekord['UWAGI'];
      
echo "<tr><td>$ID</td><td>$NAZWA</td><td>$PR</td><td>$SKRYPT</td><td>$LINK</td><td>$FREE</td><td>$UWAGI</td></tr>\n";
}
echo "</table>";

?>
0

Zapisz sobie w $_GET numer aktualnej strony i obliczaj w ten sposób:

$perpage = 30; //ilość rekordów na stronę
$page = $_GET['page']; //numer strony
$from = ($page-1)*$perpage; //obliczamy od którego rekordu powinno się zacząć pokazywanie
//dla strony #1 wynikiem będzie 0
//dla strony #2 wynikiem będzie 30
//dla strony #3 wynikiem będzie 60
//i tak dalej...

Obliczony $from można podstawić normalnie do zapytania:

mysql_query('SELECT costam FROM costam WHERE costam LIMIT ' . $from . ',' . $perpage);

W ten sposób LIMITem ograniczamy od której pozycji mają być czytane rekordy i ile sztuk.

0

znalazłem w necie bardziej szczegółowy kod stronicowana, zmodyfikowałem mój kod:

<?php
mysql_connect ("localhost", "root", "") or die ("Nie można połaczyc sie z baza danych");
mysql_select_db ("listakat")  or die ("Nie można połaczyc sie z baza listakat");

$start = $_GET['start'];
$na_stronie = 30;

$wykonaj=mysql_query("SELECT * FROM listakat")  or die ("blad w zapytaniu");

echo "<table id=s width=80% cellpadding=0 border=0>";
echo "<thead><tr><td class=sortowanie>ID</td><td class=sortowanie>Nazwa</td><td class=sortowanie>PR</td><td class=sortowanie>Skrypt</td><td class=sortowanie>Link zwrotny</td><td class=sortowanie>Darmowy</td><td class=sortowanie>Uwagi</td></tr></thead><tbody>\n";

$znaleziono=mysql_num_rows($wykonaj);
if($znaleziono>$na_stronie) {
    print '<center>Strona ';
for($i=0; $i<ceil($znaleziono/$na_stronie); $i++)
  print '<a href="index.php?start='.($i*$na_stronie).'">'.($i+1).'</a> | ';
}
print '</center>';

$query = "SELECT * FROM listakat LIMIT ".($start).",".$na_stronie."";
$result = mysql_query ($query);
        while ($row = mysql_fetch_array($result))  {

      $ID = $row['ID'];
      $NAZWA = $row['NAZWA'];
      $ADRES = $row['ADRES'];
      $PR = $row['PR'];
      $SKRYPT = $row['SKRYPT'];
      $LINK = $row['LINK'];
      $FREE = $row['FREE'];
      $UWAGI = $row['UWAGI'];

echo "<tr><td>$ID</td><td>$NAZWA<BR><a href='$ADRES' target=_blank>$ADRES</a></td><td>$PR</td><td>$SKRYPT</td><td>$LINK</td><td>$FREE</td><td>$UWAGI</td></tr>\n";

}
echo "</tbody></table>";

?>

Występuje błąd:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\WebServ\httpd\listkat\index.php on line 26

Co mam źle zrobione?

0
$wykonaj=mysql_query("SELECT * FROM listakat")  or die ("blad w zapytaniu");

:O Wiesz, że to spowoduje, że baza danych prześle ci wszystkie rekordy? Przy większej bazie możesz się pożegnać z RAMem w ten sposób. Jak już to:

$query = mysql_query('SELECT COUNT(*) AS ilosc FROM listakat');
$tmp = mysql_fetch_array($query);
$ilosc = $tmp['ilosc'];

I masz w $ilosc liczbę rekordów. Osadzasz $start w niebezpieczny sposób - nie sprawdzasz czy jest liczbą. Co jak wpiszę numer strony ; DROP TABLE listakat ;--? Stracisz wszystkie dane :P

if (isset($_GET['start']) && !is_numeric($_GET['start'])) exit('hacking attempt');

Kolejna sprawa, że zapytanie zapewne stało się nieprawidłowe, bo podstawiasz bezpośrednio $_GET['start'] nie sprawdzając czy taka zmienna jest zdefiniowana. W przypadku kiedy zapomnimy ?start=XXX w adresie zapytanie przekształca się w coś takiego:

SELECT * FROM listakat LIMIT ,30

Dokonaj sprawdzenia, czy zmienna $_GET['start'] jest zainicjowana.

if (isset($_GET['start'])) {
$start = $_GET['start'];
} else {
$start = 0; // jeśli $_GET['start'] nie jest zdefiniowane.
}
0

Klasa do stronnicowania wykorzystywana na 4programmers.net: http://redmine.boduch.net/projects/coyote/repository/entry/trunk/lib/pagination.class.php
Moze sie komus przyda...

1 użytkowników online, w tym zalogowanych: 0, gości: 1