Avatar billede webstuff Nybegynder
12. januar 2006 - 12:06 Der er 11 kommentarer og
2 løsninger

så skal vi igang med noget matematik

Jeg har forsøgt at laves noget sideskift..
og det virker...... til dels..

Jeg har disse variabler:
---------------------------------------------------------------
$pr_side = 5;
$vis_fra = $_GET[visfra];
if(empty($_GET[visfra])){
$vis_fra = 0;
}


$tael = mysql_query("SELECT navn FROM gbog") or die(mysql_error());
$antal = mysql_num_rows($tael);
$sider = $antal/$pr_side;
echo "<b>Der er ".$antal." beskeder fordelt på ".ceil($sider)." sider.</b><br /><br />";
------------------------------------------------------------

og mit sideskift ser således ud:
------------------------------------------------------------
if($vis_fra >= $antal-$pr_side){
$prev = 0;
echo "<a href=\"gbog.php?visfra=$prev\">Forrige</a>&nbsp; ";
} else {
echo "Forrige&nbsp; ";
}


if($vis_fra <= $antal-$pr_side){
$next = $vis_fra+$pr_side;
echo " &nbsp;<a href=\"gbog.php?visfra=$next\">Næste</a>";
} else {
echo " &nbsp;Næste";
}


og LIMIT $vis_fra, $pr_side
Avatar billede webstuff Nybegynder
12. januar 2006 - 13:21 #1
Det er kun "forrige" der fucker rundt, "næste" virker fint nok :-)
Avatar billede fixxxer Nybegynder
12. januar 2006 - 14:40 #2
Du sætter jo også bare

$prev = 0;

Så trykker man på Forrige starter den altid fra 0'de række - hvilket jo er fint, men nok ikke det du vil.

Prøv i stedet:

$prev = $vis_fra-$pr_side;
Avatar billede webstuff Nybegynder
12. januar 2006 - 23:32 #3
har jeg prøvet, virkede ikke optimalt.. :-/
Avatar billede fixxxer Nybegynder
13. januar 2006 - 12:02 #4
$prev = ($vis_fra > $pr_side)?$vis_fra-$pr_side:0;

måske?
Avatar billede webstuff Nybegynder
13. januar 2006 - 12:44 #5
næ.. det virker heller ikke :-(
Avatar billede webstuff Nybegynder
13. januar 2006 - 21:08 #6
Slet ingen der har styr på sådan noget? :-)
Avatar billede fixxxer Nybegynder
15. januar 2006 - 09:45 #7
Jeg har nu styr på det, men lad mig sige med det samme jeg at jeg er vant til at skrive en "paging" funktionalitet lidt anderledens:

Som det første vil jeg altid gerne have at brugeren ser et side nummer, og ikke offset til databasen. Det gør det også lettere for en med bare en smule kendskab til URL'en at rette sig frem til en specifik side uden at skulle gange op med et bestemt tal - samtidigt udelukker man også at der bliver sendt et offset der bygger "skæve" lister.

Min løsning ville derfor se sådan ud:


<?
    // antal rækker fra tabel
    $prSide        = 5;
    // hvis $_GET['side'] er sat og er større end 0, skriv til $visFra
    // brug floor() til at undgå at der er skrevet et
    // mere eksotisk tal i URL'en
    // vi trækker 1 fra sidetallet og gange med $visFra
    // vi  har nu et korrekt offset i $visFra
    // eller skriv 0
    $visFra        = (isset($_GET['side']) && $_GET['side']) > 0)?(floor($_GET['side'])-1)*$visFra:0;
   
    // tæl antal beskeder i gæstebogen
    // og udregn antal sider
    $antalBeskeder  = mysql_result(mysql_query("SELECT COUNT(id) FROM gbog")), 0);
    $antalSider    = ceil($antalBeskeder / $prSide);
   
    // frem og tilbage links
    // hvis vi er på et sidetal større end 1
    // byg "Forrige" link
    if ($_GET['side'] > 1) {
        echo '<a href="gbog.php?side='.($_GET['side']-1).'">Forrige</a>';
    }
   
    // hvis vi er på et sidetal mindre end antal sider
    // byg næste link
    if ($_GET['side'] < $antalSider) {
        echo '<a href="gbog.php?side='.($_GET['side']+1).'">N&aelig;ste</a>';
    }


    // LIMIT $visFra, $prSide
?>
Avatar billede fixxxer Nybegynder
15. januar 2006 - 09:46 #8
Jeg har ikke haft mulighed for at teste det, så jeg beklager evt. slåfejl :)
Avatar billede webstuff Nybegynder
15. januar 2006 - 14:43 #9
Jeg slet ikke få dit til at fungere ordentligt :S
Men du har ikke en idé til hvordan "Forrige" kunne komme til at fungere i mit script?
Avatar billede webstuff Nybegynder
17. januar 2006 - 13:29 #10
Kan det slet ikke lade sig gøre at få mit til at virke?
Avatar billede fixxxer Nybegynder
17. januar 2006 - 15:55 #11
Teorien er jo det samme som mit eksempel:

Hvis vi er på et offset ($vis_fra) større end og ikke lig med $pr_side, så skal vi kunne gå til offsettet, der er lig med: $vis_fra-$pr_side..

Altså:

if($vis_fra > $pr_side){
$prev = $vis_fra-$pr_side;
echo "<a href=\"gbog.php?visfra=$prev\">Forrige</a>&nbsp; ";
} else {
echo "Forrige&nbsp; ";
}
Avatar billede webstuff Nybegynder
18. januar 2006 - 13:04 #12
Så virker det som bare faen.. Her er point :D
Avatar billede fixxxer Nybegynder
18. januar 2006 - 13:28 #13
Tak for point..

Jeg synes du skulle tage et kig på at udskrive rigtige sidetal, i stedet for et offset, men det er jo en smagssag :)
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