Avatar billede rampagezz Nybegynder
12. januar 2008 - 16:39 Der er 20 kommentarer og
1 løsning

forrige og næste records

Hej eksperter.

Jeg har et script, som gør at jeg kan se de første 8 records i min tabel "pokaler".
Det er lavet således at de bliver vist over 2 rækker med 4 på hver.

Det jeg mangler er et link "forrige" og "næste", som naturligvis henter de forrige 8 records (hvis man ikke er på de første) eller de næste 8 records (hvis man ikke er på de sidste).

Jeg giver 150 point, til hjælperen, da jeg nu har forsøgt i et stykke tid uden held.

Min nuværende kode er:

<?php
if( isset($_GET['side']) && ctype_digit($_GET['side']) )
  $side = $_GET['side'];
else
  $side = 1;

$start=($side-1)*8; 

$person = mysql_query("SELECT * FROM pokaler LIMIT $start,8");
?>
<? $person = mysql_query("SELECT * FROM pokaler");
                                            print "<table width='350' border='0' cellpadding='0' cellspacing='0' class='tur_detalje' align='center'><tr>";
                                            $i=0;
                                            while(($personen = mysql_fetch_array($person)) && $i < 8) {
                                                if ($personen[pokal]==""){
                                                    $personen[pokal]="&nbsp;";
                                                }
                                                if ($personen[medlem]==""){
                                                    $personen[medlem]="&nbsp;";
                                                }
                                                if ($personen[dato]==""){
                                                    $personen[dato]="&nbsp;";
                                                }
                                                if ($personen[plads]==""){
                                                    $personen[plads]="&nbsp;";
                                             
                                                }
                                                print "<td><table align='center'><tr><td height='20'></td></tr><tr><td class='menudato'>$personen[dato]</td></tr><tr><td align='center'><img src='../jpg/$personen[pokal]' width='54' height='78'></td></tr><tr><td class='brodtekst'>$personen[plads]. Præmie</td></tr></table></td>";
                                                  if( ($i+1)%4 == 0 ) {
                                                    if($i == 7 ) {// sidste række, der kommer ikke flere
                                                        print "</tr>";
                                                      } else {// afslut nuværende række, forsæt med næste
                                                        print "</tr><tr>";
                                                    }
                                                  }
                                                $i++;
                                            }
                           
                                            if( $i != 8 ) {
                                                  print "</td></tr>";  // hvis der er 3 billeder - skal vi huske at afslutte med </tr> - da vi ikke har gjort det endnu.
                                            }
                                            print "</table>";
?>
<table width="350" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="EEEEEE">
  <tr>
    <td align="center" class="pokaler">&nbsp;</td>
    <td align="center" class="pokaler">&nbsp;</td>
  </tr>
  <tr>
    <td height="20" align="center" class="brodtekst">Forrige</td>
    <td align="center" class="brodtekst">N&aelig;ste</td>
  </tr>
</table>

</body>
</html>
<?php
mysql_free_result($Recordset1);

?>
Avatar billede yHec Novice
12. januar 2008 - 18:36 #1
Uden at være sikker, ville jeg nok prøve noget med LIMIT ($record_min, $record_max)...

/y
Avatar billede yHec Novice
12. januar 2008 - 18:37 #2
Noget i retning af url?min=1&max=9...

Og så sætter du værdierne på linket med php

Måske...

/y
Avatar billede dkfire Nybegynder
12. januar 2008 - 20:26 #3
Må lige rette y lidt. Det er
LIMIT offset, antal
eller
LIMIT antal
ikke noget med min eller max.
Men ellers er det den rigtige vej, du skal have fat i det som hedder paging.
Avatar billede rampagezz Nybegynder
13. januar 2008 - 12:26 #4
Jeg er rimelig newbie til php, så en sammensætning at kode, ville være fint..
:-)
Avatar billede rampagezz Nybegynder
13. januar 2008 - 15:22 #5
Jeg tror at selve $person = mysql_query("SELECT * FROM pokaler LIMIT $start,8"); delen er fin nok.
Men hvordan "connecter" jeg forrige og næste linket?
Avatar billede dkfire Nybegynder
13. januar 2008 - 15:33 #6
Næste må vel være:
<a href="dinside.php?side=<?=$side+1?>">

Forrige må være:
<a href="dinside.php?side=<?=$side-1?>">

Så skal du selvfølgelig lige lave et tjek på om der er flere rækker i din mysql tabel eller om det er side 1 som du viser.
Avatar billede rampagezz Nybegynder
13. januar 2008 - 15:55 #7
jeg havde troet noget med PHP_self, da det jo er samme side, den skal hente?
Avatar billede dkfire Nybegynder
13. januar 2008 - 16:04 #8
Det kan du nok også godt bruge, men det erstatter kun dinside.php i det jeg har skrevet.
Avatar billede rampagezz Nybegynder
13. januar 2008 - 16:09 #9
Det ved jeg.. Jeg har lige prøvet om det virker.
Den henter ikke de næste records, den bliver ved de samme..
Avatar billede dkfire Nybegynder
13. januar 2008 - 16:18 #10
prøv at rette:
if( isset($_GET['side']) && ctype_digit($_GET['side']) )
  $side = $_GET['side'];
else
  $side = 1;
til:
if( isset($_GET['side']) ){
  $side = intval($_GET['side']);
}else{
  $side = 1;
}
Avatar billede dkfire Nybegynder
13. januar 2008 - 16:18 #11
Og så skal du lige vise den kode du tester med nu :-)
Avatar billede rampagezz Nybegynder
13. januar 2008 - 16:25 #12
Her er første kode:

<?php
if( isset($_GET['side']) ){
  $side = intval($_GET['side']);
}else{
  $side = 1;
}

$start=($side-1)*8; 

$person = mysql_query("SELECT * FROM pokaler LIMIT $start,8");
?>
<? $person = mysql_query("SELECT * FROM pokaler");
                                            print "<table width='350' border='0' cellpadding='0' cellspacing='0' class='tur_detalje' align='center'><tr>";
                                            $i=0;
                                            while(($personen = mysql_fetch_array($person)) && $i < 8) {
                                                if ($personen[pokal]==""){
                                                    $personen[pokal]="&nbsp;";
                                                }
                                                if ($personen[medlem]==""){
                                                    $personen[medlem]="&nbsp;";
                                                }
                                                if ($personen[dato]==""){
                                                    $personen[dato]="&nbsp;";
                                                }
                                                if ($personen[plads]==""){
                                                    $personen[plads]="&nbsp;";
                                             
                                                }
                                                print "<td><table align='center'><tr><td height='20'></td></tr><tr><td class='menudato'>$personen[dato]</td></tr><tr><td align='center'><img src='../jpg/$personen[pokal]' width='54' height='78'></td></tr><tr><td class='brodtekst'>$personen[plads]. Præmie</td></tr></table></td>";
                                                  if( ($i+1)%4 == 0 ) {
                                                    if($i == 7 ) {// sidste række, der kommer ikke flere
                                                        print "</tr>";
                                                      } else {// afslut nuværende række, forsæt med næste
                                                        print "</tr><tr>";
                                                    }
                                                  }
                                                $i++;
                                            }
                           
                                            if( $i != 8 ) {
                                                  print "</td></tr>";  // hvis der er 3 billeder - skal vi huske at afslutte med </tr> - da vi ikke har gjort det endnu.
                                            }
                                            print "</table>";
?>

Og så min næste knap:

<a href="<? $PHP_SELF ?>?side=<?=$side+1?>">næste</a>

Virker ikke.
Avatar billede dkfire Nybegynder
13. januar 2008 - 17:13 #13
<?php
if( isset($_GET['side']) ){
  $side = intval($_GET['side']);
}else{
  $side = 1;
}

$start=($side-1)*8;

$person = mysql_query("SELECT * FROM pokaler LIMIT $start,8");
//$person_total = mysql_query("SELECT * FROM pokaler");

print "<table width='350' border='0' cellpadding='0' cellspacing='0' class='tur_detalje' align='center'><tr>";

$i=0;
while($personen = mysql_fetch_array( $person )) {
    $i++;
    if ($personen[pokal]==""){
        $personen[pokal]="&nbsp;";
    }
    if ($personen[medlem]==""){
        $personen[medlem]="&nbsp;";
    }
    if ($personen[dato]==""){
        $personen[dato]="&nbsp;";
    }
    if ($personen[plads]==""){
        $personen[plads]="&nbsp;";
    }
    print "<td>
            <table align='center'>
                <tr>
                    <td height='20'></td>
                </tr>
                <tr>
                    <td class='menudato'>$personen[dato]</td>
                </tr>
                <tr>
                    <td align='center'><img src='../jpg/$personen[pokal]' width='54' height='78'></td>
                </tr>
                <tr>
                    <td class='brodtekst'>$personen[plads]. Præmie</td>
                </tr>
            </table>
            </td>";

    if( ($i)%4 == 0 ) {
        if($i == 8 ) {// sidste række, der kommer ikke flere
            print "</tr>";
        } else {// afslut nuværende række, forsæt med næste
            print "</tr><tr>";
        }
    }
}
   
if( $i != 8 ) {
print "</tr>";  // hvis der er 3 billeder - skal vi huske at afslutte med </tr> - da vi ikke har gjort det endnu.
}
print "</table>";
?>
Avatar billede dkfire Nybegynder
13. januar 2008 - 17:14 #14
Du var der næsten, du manglede bare lige at gøre brug af $start :-)
Avatar billede rampagezz Nybegynder
13. januar 2008 - 18:03 #15
Cool.. Så virker forrige og næste. Men den skal jo helst ikke vise næste, hvis den er på de sidste records.
Ligeledes skal den ikke vise forrige, hvis den er på de første records.
Avatar billede dkfire Nybegynder
13. januar 2008 - 18:06 #16
Så må du jo lave noget tjek som ser på hvor mange rækker der ialt er i tabellen og så derfter, på baggrund af den aktuelle side, afgøre om næste skal vises.
Du kan jo også lave et tjek for om det er side 1 som vises, for så skal forrige jo ikke vises :-)
Avatar billede rampagezz Nybegynder
13. januar 2008 - 18:08 #17
Ok.. Du har fortjent dine point.. Kom med et svar.. :-)
Har du et udkast til hvordan et tjek kunne se ud?
Avatar billede dkfire Nybegynder
13. januar 2008 - 19:36 #18
Jeg lægger et svar.
Et tjek kunne være

if( $side != 1 ){
    Forrige link her
}

$person_total = mysql_query("SELECT COUNT(*) AS antal FROM pokaler");
$RowAntal = mysql_fetch_assoc( $person_total );
if( (($side+1)*8) =< ($RowAntal['antal']+7) ){
    Næste link her
}
Avatar billede gammelhat Nybegynder
13. januar 2008 - 19:42 #19
$person = mysql_query("SELECT * FROM pokaler LIMIT $start,9");

Hvis du trækker 9 ud i stedet for, og der bliver returneret 9, så ved du, om der er behov for en næste-knap. I din løkke viser du selvfølglig kun max 8.

Se: http://dk.php.net/mysql_num_rows

Den fremgangsmåde tror jeg performer bedre, end at lave en separat sql count hver gang
Avatar billede rampagezz Nybegynder
13. januar 2008 - 20:15 #20
Jeg kan få forrige til at virke men ikke:

<?php if( (($side+1)*8) =< ($RowAntal['antal']+7) ){ ?><a href="<? $PHP_SELF ?>?side=<?=$side+1?>">næste</a><? } ?>
Avatar billede rampagezz Nybegynder
13. januar 2008 - 20:15 #21
Den viser bare blank..
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