Avatar billede horizon Nybegynder
11. april 2005 - 14:59 Der er 17 kommentarer og
1 løsning

Sider: Første side l 1 l 2 l 3 l 4 l osv. l Sidste Side

Jeg er på udkig efter et script som gør det samme som ude i spørgsmålsoversigten her på eksperten.

Der er f.eks. 10 input på en side og så i bunden er der dette script som så gør at brugeren kan se de næste 10 i rækken og samtidigt vise hvor de er

f.eks. hvis de er på side 2 så er | 2 | måske inaktiv som link, eller fed

Og der skal helst være en begrænsning på 9 gange 1 | 2 | 3 | osv.
Så når man trykker igennem så skal den så vise 4 til hver side,

f.eks. hvis vi er på side 7:
[ Første side | 3 | 4 | 5 | <b>6</b> | 7 | 8 | 9 | Sidste side ]
men hvis vi er på side 2:
[ 1 | <b>2</b> | 3 | 4 | 5 | 6 | 7 | Sidste side ]

Det er måske lidt meget at bede om, men vil gerne have et par spark i den rette retning, regner med selv at være i stand til at programere det hvis jeg får lidt vejledning.

Håber der er nogle som vil hjælpe ;D
Avatar billede coderdk Praktikant
11. april 2005 - 15:40 #1
Dette viser princippet, du kan selv tilpasse det:

// connect til database

$items_per_page = 10;
$page = ( !empty( $_GET['p'] ) && is_numeric( $_GET['p'] ) ? $_GET['p'] : 1 );
$offset = ( $page - 1 ) * $items_per_page;
$sql = "
    SELECT
        SQL_CALC_FOUND_ROWS()
        ,felt1
        ,felt2
        ,felt3
    FROM
        din_tabel
    LIMIT
        $offset, $items_per_page
    ";
$qh = mysql_query( $sql ) or die( "Fejl! " . mysql_error() );
if ( @mysql_num_rows( $qh ) )
{
    while ( $row = mysql_fetch_assoc( $qh ) )
    {
        echo "$row[felt1], $row[felt2], $row[felt3]<br>";
    }
}

$sql = "SELECT FOUND_ROWS() AS antal";
$qh = mysql_query( $sql );
$row = mysql_fetch_assoc( $qh );
$antal_items = $row['antal'];

$antal_sider = ceil( $antal_items / $items_per_page );

for ( $i = 1; $i <= $antal_sider; $i++ )
{
  echo "<a href='$_SERVER[PHP_SELF]?p=$i'> $i </a> ";
}
Avatar billede grise_bassen Nybegynder
11. april 2005 - 15:43 #3
skulle havde været et svar
Avatar billede coderdk Praktikant
11. april 2005 - 15:47 #4
Ingen af de artikler er særligt smarte, da de laver to store forespørgsler i stedet for at bruge SQL_CALC_FOUND_ROWS - man er nødt til at bruge to, men med SQL_CALC_FOUND_ROWS bliver den 'billigere'.

Der er dog en fejl i min kan jeg se... Den første query skal rettes til:

$sql = "
    SELECT SQL_CALC_FOUND_ROWS
        felt1
        ,felt2
        ,felt3
    FROM
        din_tabel
    LIMIT
        $offset, $items_per_page
    ";
Avatar billede horizon Nybegynder
11. april 2005 - 16:42 #5
hvad gør SQL_CALC_FOUND_ROWS egentligt?
Avatar billede coderdk Praktikant
11. april 2005 - 16:45 #6
Den finder det totale antal af rows i din query, uanset hvad LIMIT er ;)

http://dev.mysql.com/doc/mysql/en/information-functions.html#id2648798
Avatar billede coderdk Praktikant
11. april 2005 - 16:46 #7
Glemte lige at nævne at resultatet får du ved at køre SELECT FOUND_ROWS() efter din query ;) Men det står der jo også :)
Avatar billede horizon Nybegynder
11. april 2005 - 17:09 #8
forresten tak coderdk We have a winner ;D
Avatar billede coderdk Praktikant
11. april 2005 - 17:10 #9
Så lidt :)
Avatar billede horizon Nybegynder
11. april 2005 - 17:19 #10
lige nu skal dette bruges som medlemsliste, og senere som led i et forum, men hvordan kan man bede mysql om først at sortere efter f.eks. brugerstatus, og derefter efter brugernavn? (brugerstatus = 1 for admin, 0 for alm. bruger)
Avatar billede coderdk Praktikant
11. april 2005 - 17:21 #11
Kan det ikke klares med:

ORDER BY brugerstatus DESC, brugernavn

? :)
Avatar billede horizon Nybegynder
11. april 2005 - 17:23 #12
smaart... takker
Avatar billede Slettet bruger
11. april 2005 - 17:40 #13
http://www.reginscorner.dk/index.php/Scripts/Paging <--- opdateret så SQL_CALC_FOUND_ROWS bliver brugt :)

Skal fandme ikke kalde mine scripts usmarte...
hvor smart er det lige at paste alt den kode hver gang med skal vise den eller anden liste?????
Avatar billede coderdk Praktikant
11. april 2005 - 17:43 #14
heheh ;)
Avatar billede horizon Nybegynder
11. april 2005 - 23:14 #15
se... nu har jeg fået det hele til at virke, næsten... nu før ville den godt printe 1 | 2 | 3 osv. men nu vil den ikke...

Nogle som lige umiddelbart kan finde fejlen?

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<?php
include("../Kilder/access.php");
$res = mysql_query("SELECT variabel, vaerdi FROM Indstillinger") or die(mysql_error());
while ($log = mysql_fetch_assoc($res)) {
    switch ($log['variabel']) {
        case 'forsidestatus': $forsidestatus = $log['vaerdi'];
            break;
        case 'titeltekst': $titeltekst = $log['vaerdi'];
            break;
        case 'antalmedlemmer': $antalmedlemmer = $log['vaerdi'];
            break;
    }
}
?>
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title><?php echo $titeltekst; ?></title>
<link href="../CSS/Style.css" rel="stylesheet">
</head>

<body>
<table border="1" cellspacing="0" cellpadding="0" bordercolor="#000000">
<tr height="30">
<td colspan="7" width="702" height="30" background="../Test_Forum/Billeder/KatBg.gif">
<h3>&nbsp;&raquo;&nbsp;Medlemsliste</h3>
</td>
</tr>
<tr>
<td width="50"><font size="-1"><i>Status</i></font></td>
<?php
if($_SESSION['admin'] == 1)
echo '<td width="80"><font size="-1"><i>Bruger ID</i></font></td>';
?>
<td width="150"><font size="-1"><i>Brugernavn</i></font></td>
<td width="60"><font size="-1"><i>Netside</i></font></td>
<td width="100"><font size="-1"><i>Oprettet</i></font></td>
<td width="100"><font size="-1"><i>Sidst p&aring;</i></font></td>
<td width="150"><font size="-1"><i>Medlemsstatus</i></font></td>
</tr>
<tr>
<td colspan="7" width="719">
<hr>
</td>
</tr>
<?php

$items_per_page = $antalmedlemmer;
$page = ( !empty( $_GET['p'] ) && is_numeric( $_GET['p'] ) ? $_GET['p'] : 1 );
$offset = ( $page - 1 ) * $items_per_page;
$sql = "
    SELECT
        SQL_CALC_FOUND_ROWS
        brugerid
        ,vistnavn
        ,NetsideURL
        ,NetsideTxt
        ,date_format(registreret, '%e/%c %Y') as registreret
        ,date_format(sidstpaa, '%e/%c %Y') as sidstpaa
        ,brugerstatus
    FROM
        Brugere
    ORDER BY
    brugerstatus DESC, vistnavn   
    LIMIT
        $offset, $items_per_page
    ";
$qh = mysql_query( $sql ) or die( "Fejl! " . mysql_error() );
if ( @mysql_num_rows( $qh ) )
{
$farve = true;
$farve2 = false;
    while ( $row = mysql_fetch_assoc( $qh ) )
    {
    $HentTaeller = mysql_query("SELECT brugerid FROM Taeller WHERE brugerid = $row[brugerid]");
    $Taeller = mysql_fetch_array($HentTaeller);
   
    if(isset($Taeller[brugerid])){
    $Status = Paa;
    $StatusAlt = Online;
    }else{
    $Status = Af;
    $StatusAlt = Offline;
    }
   
    $farve = !$farve;
   
    if($farve == $farve2)
    $farveid = 2;
    else
    $farveid = "";
   
    if($row[brugerstatus] == "1")
    $brugerstatus = "Administrator";
    else
    $brugerstatus = "Medlem";
    if($row[NetsideURL] == "")
    $netside = '<img src="../Billeder/IngenNetside'.$farveid.'.gif" alt="Ingen netside">';
    else
    $netside ='<a href="'.$row[NetsideURL].'" target="_blank" id="Ext_Link"><img src="../Billeder/Netside'.$farveid.'.gif" alt="'.$row[NetsideTxt].'" border="0"></a>';
    if($_SESSION[admin] == 1)
    $brugerid = '<td width="80">'.$row[brugerid].'</td>';
        echo '
        <tr class="Forum', $farve ? '' : '2', '">
<td width="50" align="center"><img src="../Billeder/'.$Status . $farveid . '.gif" alt ="'.$StatusAlt.'"></td>
'.$brugerid.'
<td width="150"><a href="Profil.php?id='.$row[brugerid].'">'.$row[vistnavn].'</a></td>
<td width="60" align="center">'.$netside.'</td>
<td width="100">'.$row[registreret].'</td>
<td width="100">'.$row[sidstpaa].'</td>
<td width="150">'.$brugerstatus.'</td>
</tr>';
    }
}

$sql = "SELECT FOUND_ROWS() AS antal";
$qh = mysql_query( $sql );
$row = mysql_fetch_assoc( $qh );
$antal_items = $row['antal'];

$antal_sider = ceil( $antal_items / $items_per_page );
?>
<div align="center">
<?php

for ( $i = 1; $i <= $antal_sider; $i++ )
{
  echo "<a href='$_SERVER[PHP_SELF]?p=$i'>$i</a> ";
}

mysql_close();

?>
</div>
</table>
</body>
</html>
Avatar billede coderdk Praktikant
12. april 2005 - 00:43 #16
Jeg tror ikke du kan lave queries efter den med SQL_CALC_FOUND_ROWS og forvente at kunne bruge FOUND_ROWS() bagefter - de skal vist følge hinanden.

Du må joine Taeller med Brugere i stedet tror jeg... Hvis jeg læser den rigtigt skal du:

$sql = "
    SELECT
        SQL_CALC_FOUND_ROWS
        b.brugerid
        ,b.vistnavn
        ,b.NetsideURL
        ,b.NetsideTxt
        ,date_format(b.registreret, '%e/%c %Y') as registreret
        ,date_format(b.sidstpaa, '%e/%c %Y') as sidstpaa
        ,b.brugerstatus
        ,t.brugerid AS online
    FROM
        Brugere b
    LEFT OUTER JOIN Taeller t ON
        b.brugerid = t.brugerid
    ORDER BY
        b.brugerstatus DESC, b.vistnavn 
    LIMIT
        $offset, $items_per_page
    ";

Hvis "online" så er NULL eller tom, er brugerren offline. Hvis den er et tal så er brugeren online... Kan det passe?
Avatar billede horizon Nybegynder
12. april 2005 - 09:09 #17
altså selve tabellen indeholder kun noget hvis der er en bruger som er på, så det som den skal checke er om brugerens brugerid ligger i tabellen, gør det det så er brugeren online og billedet skal være Paa.gif istedet for Af.gif
Avatar billede coderdk Praktikant
12. april 2005 - 10:42 #18
Yep, det var hvad jeg kunne læse - Den ene forespørgsel jeg har lavet, burde kunne gøre jobbet i ét hug i stedet for med flere forespørgsler ;)
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