Avatar billede bellizzy Nybegynder
09. juni 2010 - 16:55 Der er 9 kommentarer og
1 løsning

Paging i PHP virker ikke

Jeg har nu siddet i mega lang tid og roddet med mit paging problem. Jeg har fået det nogenlunde til at virke, så den faktisk viser de 10 på hver side. Men jeg skal kun have vist 5, hvilket den slet ikke kan finde ud af. Jeg ved godt hvorfor den ikke kan finde ud af det, men jeg ved ikke hvordan jeg løser det.

if($_GET['page'])
    {
        $limit = paging::writeLimit($_GET['page'], 5);
    }
    else
    {
        $limit = "5";
    }
    $kommando = "SELECT * FROM anmeldelser INNER JOIN bruger ON bruger.bruger_id = anmeldelser.anmeldelse_brugerID ORDER BY anmeldelse_id ASC LIMIT $limit";
    $resultat = mysql_query($kommando) or die(mysql_error());
    while($hent = mysql_fetch_assoc($resultat))
    {
        $color = ($color == '#333333') ? '#999999' : '#333333';
        echo "
        <tr>
            <td valign='top' width='110px' height='100px' rowspan='3'><img width='100px' height='100px' src='". $hent['anmeldelse_billede']. "'></td>
            <td bgcolor='". $color. "' margin-left='10px' height='5px' valign='top' width='554px' colspan='2'>". $hent['anmeldelse_overskrift']. "</font></td>
            <tr>
            <td bgcolor='". $color. "' margin-left='10px' height='60px' valign='top' width='554px' colspan='2'>". $hent['anmeldelse_indhold']. "</font></td>
            </tr>
            <tr>
            <td bgcolor='". $color. "' height='5px' width='300px' valign='top'>/". $hent['bruger_brugernavn']. "</td>
            <td bgcolor='". $color. "' height='5px' width='300px' valign='top'><div align='right'>". $hent['anmeldelse_link']. "</div></td>
            <tr>
            <td><br></td>
            </tr>
            </tr>
        </tr>
        ";

    }
    echo "</table>";
    echo paging::pageNum(5, "SELECT * FROM anmeldelser INNER JOIN bruger ON bruger.bruger_id = anmeldelser.anmeldelse_brugerID");

Og her er min funktion:

class paging
{
    function pageNum($rowLimit, $sql)
    {
        $getQuery = mysql_query($sql);
        $countRows = mysql_num_rows($getQuery);
       
        $pages = ceil($countRows/$rowLimit);
       
        $minus = $_GET['page']-1;
        if($_GET['page'] > 1)
        {
        echo "<a href='?page=$minus'>Forrige</a> ";
        }
        for($i=1;$i<=$pages;$i++)
        {
            echo "<a href='?side=anmeldelser&page=$i'>$i</a> ";
        }
        $plus = $_GET['page']+1;
        if($_GET['page'] < $pages)
        {
        echo "<a href='?page=$plus'>Næste</a>";
        }
    }
    function writeLimit($page, $rowLimit)
    {
        $output = ($page-1) . "0,$rowLimit";
        return $output;
    }
}

Jeg har roddet lidt med det, og har fundet ud af at ved hjælp af denne sætning: $limit = paging::writeLimit($_GET['page'], 5); sender den $_GET['page'](som er sidenummeret, som står i urlen) til funktionen. Den behandler den så her: $output = ($page-1) . "0,$rowLimit";

Her ligger problemet så. For den tager det nummer der står i url'en og "joiner" til 0 bagpå. Så den vil altid kun ville kunne tage 10 ad gange, uanset om jeg ændre limit eller ej, for så vil den bare faile og på de sidste sider vise blank, da den HENTER de 10.

Jeg vil gerne give 200 points til ham der kan hjælpe mig, da det er ret så vigtigt. Tusinde tak på forhånd.
Avatar billede xicrow Nybegynder
09. juni 2010 - 17:28 #1
Mon ikke funktionen skulle have været således:

function writeLimit($page, $rowLimit)
{
    $output = ($page * $rowLimit).",$rowLimit";
    return $output;
}


/xicrow
Avatar billede xicrow Nybegynder
09. juni 2010 - 17:31 #2
Eventuelt sådan her:

[div][pre]function writeLimit($page, $rowLimit)
{
    $output = (($page - 1) * $rowLimit).",$rowLimit";
    return $output;
}[pre][div]

/xicrow
Avatar billede xicrow Nybegynder
09. juni 2010 - 17:32 #3
Hov, fejlede lige med koderne:

function writeLimit($page, $rowLimit)
{
    $output = (($page - 1) * $rowLimit).",$rowLimit";
    return $output;
}


/xicrow
Avatar billede bellizzy Nybegynder
09. juni 2010 - 17:56 #4
Kan du eventuelt give en beskrivelse af hvad du gør anderledes og hvad de forskellige ting gør? :D Jeg er ikke sat så meget ind i php, men kan en smule. Derfor vil jeg gerne lære af fejlene jeg laver og forstå meningen med løsningerne.
Avatar billede bellizzy Nybegynder
09. juni 2010 - 18:05 #5
Kan du eventuelt give en beskrivelse af hvad du gør anderledes og hvad de forskellige ting gør? :D Jeg er ikke sat så meget ind i php, men kan en smule. Derfor vil jeg gerne lære af fejlene jeg laver og forstå meningen med løsningerne.
Avatar billede xicrow Nybegynder
09. juni 2010 - 18:12 #6
Din funktion:
function writeLimit($page, $rowLimit)
{
    // Sætter limit til sidetal - 1 med nul på
    $output = ($page-1) . "0,$rowLimit";
    return $output;
}


Mit bud:
function writeLimit($page, $rowLimit)
{
    // Sætter limit til sidetal - 1 * antal-rækker
    $output = (($page - 1) * $rowLimit).",$rowLimit";
    return $output;
}


Limit i MySQL fungere på den måde at du kan angive et tal (5), eller et tal komma et andet tal (5,10)

Hvis du skriver et tal (X) vil den hente de første X antal resultater, hvis du skriver to tal delt af et komma (X,Y) vil den hente de næste Y antal resultater fra række X.

Forskellen på de to funktioner er derfor at din henter 5 resultater men springer 10 rækker frem for hver side. Hvorimod den jeg har lavet til dig tager 5 resultater, og springer 5 rækker frem (5 er det du angiver som $rowLimit)

/xicrow
Avatar billede bellizzy Nybegynder
09. juni 2010 - 18:29 #7
Okay, det forstår jeg godt. Det forstod jeg godt. Da jeg printede sql sætningen ud og jeg startede på side 1 skrev den noget lignende 00,5 og når jeg så gik videre til side 2 skrev den 10,5 og på side 3 skrev den 20,5.

Ved den sætning du har skrevet vil den så starte på 00,5 og gå videre til 05,5 og så til 10,5?

By the way. Hvad gør (($page - 1) * $rowLimit).",$rowLimit";

Har set flere der laver den stjerne(*) men jeg forstår ikke funktionaliteten med den.
Avatar billede xicrow Nybegynder
09. juni 2010 - 18:37 #8
Den sætning jeg har skrevet vil give:
Side 1: 0,5
Side 2: 5,5
Side 3: 10,5
osv.

Stjernen er blot simpel matematik (gange-tegn) ligesom + (plus-tegn), - (minus-tegn) og / (divider-tegn).

Så det den sætning gør er:
(($page - 1) * $rowLimit)
((side-tal minus 1) ganget med resultater-per-side)

Som f.eks. kunne være:
((3 - 1) * 5) = 10

Derefter sætter den et komma samt resultater-per-side bagefter, så vi f.eks. får: 10,5

/xicrow
Avatar billede bellizzy Nybegynder
09. juni 2010 - 18:54 #9
#8(nu prøver jeg lige at gøre det på den rigtige måde :D)

Super, nu forstår jeg konceptet. Tusinde tak for hjælpen! Hvordan giver jeg dig pointsne så? :D
Avatar billede xicrow Nybegynder
09. juni 2010 - 18:59 #10
Snapset fra FAQ:
[i]Når der er kommet et svar som du kan bruge, så klikker du ud for selve svaret i boksen "Acceptér dette svar". Derefter accepterer du svaret i den boks som dukker frem.

Er løsningen kommet gennem en kommentar, skal du stadig give point. Du skriver bare, at bruger XXX har løst problemet og beder vedkommende om et svar. Når svaret kommer, accepterer du bare dette.[i]

Kan varmt anbefale dig at kigge nærmere på FAQ'en:
http://www.eksperten.dk/faq

/xicrow
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