[PHP] Problem ze stronicowaniem
: śr maja 19, 2010 11:44 am
Mam taki kod odpowiedzialny za stronicowanie rekordów:
Listing 1 - index.php
[php]
<?php
@$baza = mysql_connect('localhost', 'root', '') or die ("Nie można się poł±czyć");
mysql_select_db(newsy) or die ("Nie mozna wybrać bazy danych");
$wynik = mysql_query ("SELECT * FROM kategorie");
while ($wynik && $rekord = mysql_fetch_array ($wynik)) {
$id = $_GET['id'];
echo "<a href=\"katalog.php?id=".$rekord['cat_id']."\">";
echo $rekord['cat_nazwa']."</a> <br> ";
}
mysql_close($baza);
?>
Listing 2 - linki.php
[/php]
[php]
<?php
//Połączenie z mysql i wybranie bazy
$link = mysql_connect('localhost','root','');
mysql_select_db('newsy',$link);
//Domyślne wartości, odpowiednio liczby rekordów na strone i przesunięcia
$count=3;
$offset=0;
//Pobranie danych z $_GET jezsli ustawione
if(isset($_GET['count']))$count = $_GET['count'];
if(isset($_GET['offset']))$offset = $count*$_GET['offset']; //numer strony
//Pobranie liczby rekordów
$sql = 'Select count(*) from wpisy';
$result = mysql_query($sql,$link);
$r = mysql_fetch_array($result);
//Liczba stron, użycie ceil - zaokrąglenie w górę, w celu zapewnienia, że żadna strona się nie straci
$pages = ceil($r[0]/$count);
//Pobranie odpowieniej paczki
$id = $_GET['id'];
$sql = 'Select * from wpisy where kategoria = "'.$id.'" Limit '.$count.' offset '.$offset.'';
$result = mysql_query($sql,$link);
//Pętla po wszystkich rekordach
while(($row=mysql_fetch_array($result))!=NULL){
echo '<a href="#">'.$row['tytul'].'</a><br>'.$row['tresc']. '<br><br';
}
echo '</table>';
//Pętla po stronach
for($i=0;$i<$pages;$i++){
//jeśli obecna strona, nie twórz linku do strony
if($i*$count==$offset){
echo ' '.$i.' ';
}else{
echo '<a href="katalog.php?count='.$count.'&offset='.$i.'"> '.$i.' </a>';
}
}
?>
[/php]
Moje pytanie brzmi dlaczego wchodząc w jakąś kategorie to na dole strony wyświetlają mi wszystkie rekordy a nie rekordy w danej kategorii? Macie jakieś pomysły albo większą wiedzę? Proszę o pomoc.
Listing 1 - index.php
[php]
<?php
@$baza = mysql_connect('localhost', 'root', '') or die ("Nie można się poł±czyć");
mysql_select_db(newsy) or die ("Nie mozna wybrać bazy danych");
$wynik = mysql_query ("SELECT * FROM kategorie");
while ($wynik && $rekord = mysql_fetch_array ($wynik)) {
$id = $_GET['id'];
echo "<a href=\"katalog.php?id=".$rekord['cat_id']."\">";
echo $rekord['cat_nazwa']."</a> <br> ";
}
mysql_close($baza);
?>
Listing 2 - linki.php
[/php]
[php]
<?php
//Połączenie z mysql i wybranie bazy
$link = mysql_connect('localhost','root','');
mysql_select_db('newsy',$link);
//Domyślne wartości, odpowiednio liczby rekordów na strone i przesunięcia
$count=3;
$offset=0;
//Pobranie danych z $_GET jezsli ustawione
if(isset($_GET['count']))$count = $_GET['count'];
if(isset($_GET['offset']))$offset = $count*$_GET['offset']; //numer strony
//Pobranie liczby rekordów
$sql = 'Select count(*) from wpisy';
$result = mysql_query($sql,$link);
$r = mysql_fetch_array($result);
//Liczba stron, użycie ceil - zaokrąglenie w górę, w celu zapewnienia, że żadna strona się nie straci
$pages = ceil($r[0]/$count);
//Pobranie odpowieniej paczki
$id = $_GET['id'];
$sql = 'Select * from wpisy where kategoria = "'.$id.'" Limit '.$count.' offset '.$offset.'';
$result = mysql_query($sql,$link);
//Pętla po wszystkich rekordach
while(($row=mysql_fetch_array($result))!=NULL){
echo '<a href="#">'.$row['tytul'].'</a><br>'.$row['tresc']. '<br><br';
}
echo '</table>';
//Pętla po stronach
for($i=0;$i<$pages;$i++){
//jeśli obecna strona, nie twórz linku do strony
if($i*$count==$offset){
echo ' '.$i.' ';
}else{
echo '<a href="katalog.php?count='.$count.'&offset='.$i.'"> '.$i.' </a>';
}
}
?>
[/php]
Moje pytanie brzmi dlaczego wchodząc w jakąś kategorie to na dole strony wyświetlają mi wszystkie rekordy a nie rekordy w danej kategorii? Macie jakieś pomysły albo większą wiedzę? Proszę o pomoc.