Avatar billede Slettet bruger
19. januar 2006 - 06:03 Der er 2 kommentarer og
1 løsning

Paging, vis sidst side

Til mit forum har jeg behov for at lave noget paging. Det har jeg brugt følgende kode fra en artikel her på eksperten til:

<?
$pagesize = 10; //Hvor mange brugere vi vil vise på hver side.

if (empty($_GET[start])) { // hvis $_GET[start] ikke er sat bliver $start 0 ellers $_GET[start]
$start = 0;
} else {
if (is_numeric($_GET[start])) {
$start = $_GET[start];
} else {
$start = 0;
}
}
$data = mysql_query("SELECT * from forum_posts WHERE topicID = 7 LIMIT $start,$pagesize");
while ($row = mysql_fetch_array($data)) { //while til at køre alle poster igennem
echo $row[brugernavn]."<br>";
}
$pages = ceil(mysql_num_rows(mysql_query("SELECT id from forum_posts WHERE topicID = 7"))/$pagesize);
for ($i = 1; $i <= $pages; $i++) {
$startnow = $pagesize*$i;
$startnow = $startnow-$pagesize;
if ($startnow == $start) {
$sidehtml .= "<a href='?page=board&show=showTopic&topicID=1&start=$startnow'>$i</a> ";
}else{
$sidehtml .= "<a href='?page=board&show=showTopic&topicID=1start=$startnow'>$i</a> ";
}
}
echo "Gå til side: ".$sidehtml;
?>

Min problemstilling er så bare, at jeg ønsker at lave et direkte link til sidste side.
Når man beder om at se emnet, skal man altså sendes til den sidste side der kan findes.

Det er sandsynligvis ganske simpelt, men min hjerne vil ikke lige forklare mig hvordan det skal gøres.
Håber der er nogen der kan hjælpe :)
Avatar billede coderdk Praktikant
19. januar 2006 - 09:01 #1
Er den sidste side ikke noget i stil med:

$lastPage = ( ( $pages * $pagesize ) - $pagesize ) + 1;

Desuden er din query ikke helt optimal... Du kan gøre sådan:

<?

    $pagesize = 10; //Hvor mange brugere vi vil vise på hver side.

    if (empty($_GET[start]))
    { // hvis $_GET[start] ikke er sat bliver $start 0 ellers $_GET[start]
        $start = 0;
    }
    else
    {
        if (is_numeric($_GET[start]))
        {
            $start = $_GET[start];
        }
        else
        {
            $start = 0;
        }
    }
    $data = mysql_query("SELECT SQL_CALC_FOUND_ROWS * from forum_posts WHERE topicID = 7 LIMIT $start,$pagesize");
    while ($row = mysql_fetch_array($data))
    { //while til at køre alle poster igennem
        echo $row[brugernavn]."<br>";
    }
    $res = mysql_query("SELECT FOUND_ROWS() AS antal");
    $row = mysql_fetch_assoc( $res );
    $pages = ceil( $row['antal'] / $pagesize );
    for ($i = 1; $i <= $pages; $i++)
    {
        $startnow = $pagesize*$i;
        $startnow = $startnow-$pagesize;
        if ($startnow == $start)
        {
            $sidehtml .= "<a href='?page=board&show=showTopic&topicID=1&start=$startnow'>$i</a> ";
        }
        else
        {
            $sidehtml .= "<a href='?page=board&show=showTopic&topicID=1start=$startnow'>$i</a> ";
        }
    }
    echo "Gå til side: ".$sidehtml;

?>

Jeg har brugt SQL_CALC_FOUND_ROWS og FOUND_ROWS til at finde det totalt antal poster - Det er ikke så hårdt mod serveren, som to rigtige queries :)
Avatar billede Slettet bruger
19. januar 2006 - 16:07 #2
Det var lige det jeg skulle bruge, så hvis du smider et svar, så får du dine point :)
Så mange tak for hjælpen.
Avatar billede coderdk Praktikant
19. januar 2006 - 16:57 #3
Ok :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester