Avatar billede Slettet bruger
31. juli 2003 - 00:00 Der er 12 kommentarer og
1 løsning

Næste side funktion

Hej

Hvordan kan jeg lave en funktion, som henter x poster ud fra min sql database og hvis der er flere poster, så bliver de indsat på en ny side. Ligesom det system her på eksperten, hvor der bliver vist 20 spm/side. Hvordan laver jeg det?


/bri@n
Avatar billede ahv Nybegynder
31. juli 2003 - 00:01 #1
<?php
$connection = mysql_pconnect("host","user","pass");
mysql_select_db("database");

$prside = 10;
$visfra = $_GET['visfra'];

if(!$_GET['visfra']) $visfra = 0;

$query = mysql_query ("SELECT * FROM tabel ORDER BY id DESC limit $visfra, $prside"); // Dit database udtræk
while ($row = mysql_fetch_array($query)) {
    echo $row['id']."<br>";
}

$antal = mysql_num_rows(mysql_query("SELECT * FROM tabel"));

if ($visfra > 0) {
    $bagud = $visfra-$prside;
    echo "<a href='$_SERVER[PHP_SELF]?visfra=$bagud'>Forrige</a> ";
}
$page = 1;
for ($start = 0; $antal > $start; $start = $start + $prside) {
    if($visfra != $page * $prside - $prside) {
        echo "<a href='$_SERVER[PHP_SELF]?visfra=$start'>$page</a> ";
    } else {
        echo $page." ";
    }
    $page++;
}
if ($visfra < $antal - $prside) {
    $naeste = $visfra + $prside;
    echo " <a href='$_SERVER[PHP_SELF]?visfra=$naeste'>Næste</a>";
}
?>
Avatar billede Slettet bruger
31. juli 2003 - 00:06 #2
kigger lige på det.
Avatar billede kohaar Nybegynder
31. juli 2003 - 00:06 #3
Først og fremmest er det en god ide, at bruge sql's limit funktion.

F.eks. "SELECT * FROM tabel LIMIT 0,20"

Det du så kan gøre, er at sætte 0 til en variabel, så du skriver:
mysql_query("SELECT * FROM tabel LIMIT $i, 20");

Du skal så bare lave, f.eks en for-løkke eller en ny sidehenvisning hvor $i bliver sat op med 20 hver gang. Altså først 20 indlæg bliver 0,20 - næste bliver 20,20 og næste 40,20 osv.
Avatar billede schaefner Juniormester
31. juli 2003 - 00:07 #4
Avatar billede schaefner Juniormester
31. juli 2003 - 00:08 #5
ahv >> Det er lidt "tosset" at hive samtlige rækker ud af tabllen bare for at tælle hvormange der er ;)
Avatar billede schaefner Juniormester
31. juli 2003 - 00:10 #6
Lidt mere overskuelig version:

<?php
// Indstillinger
$offset = (isset($_GET[offset])) ? $_GET[offset] : 0; // Hvis ikke offset er sat, sættes den til 0
$pr_side = 20; // Antal resultater pr. side

$query = mysql_query("SELECT * FROM tabel ORDER BY id DESC LIMIT $offset,$pr_side"); // Henter poster fra tabellen "tabel" (husk at ændre til den tabel du bruger)
while($row = mysql_fetch_assoc($query)) {
    echo "$row[id] - $row[felt]<br>"; // Udskriver felter fra tabellen
}
?>
<hr>
<?php
$antal = mysql_result(mysql_query('SELECT COUNT(*) FROM tabel'),0); // Tæller antal poster i tabellen "tabel" (husk at ændre til den tabel du bruger)

if ($offset >= $pr_side) { // Tester om det er nødvendigt med et "forrige-link"
    $forrige = $offset-$pr_side; // Finder ud af hvor forrige skal starte fra
    echo "<a href='?offset=$forrige'>Forrige</a> "; // Udskriver link
}
if ($antal > $offset+$pr_side) { // Tester om det er nødvendigt med et "næste-link"
    $naeste = $offset+$pr_side; // Finder ud af hvor næste skal starte fra
    echo "<a href='?offset=$naeste'>Næste</a>"; // Udskriver link
}
?>
Avatar billede ahv Nybegynder
31. juli 2003 - 00:10 #7
Ja ok, så laver vi den -> $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM tabel"),0);
Avatar billede Slettet bruger
31. juli 2003 - 00:16 #8
ok. Jeg kigger på det i nat, men lige nu er mit hotels sql server nede... Så lidt svært at sige om det virker.
Avatar billede Slettet bruger
31. juli 2003 - 00:48 #9
Jeg har lidt problemer med at få det til at virke..

Her er mit gamle script hvor der bliver udskrivet 10 post:

<?php
include("config.php");      // database indstillinger

$query = mysql_query("SELECT id, overskrift, DATE_FORMAT(dato, '%d/%m-%Y %H:%i') AS dato FROM nyheder ORDER BY id ASC LIMIT 10");

while ($row = mysql_fetch_array($query)) {



?>
<td width="4%" align="center"><?php echo $row['id'] ?></td>
<td width="26%"><?php echo $row['overskrift'] ?></td>
<td width="11%" align="center"><?php echo $row['dato'] ?></td>
<td width="8%" align="center"><?php echo "<a href=\"vis_nyhed.php?id=".$row['id']."\">Læs nyhed</a><br>"; ?></td>
<td width="6%" align="center"><?php echo "<a href=\"edit.php?id=".$row['id']."\">Rediger</a><br>"; ?></td>
<td width="6%" align="center"><?php echo "<a href=\"delete_s.php?id=".$row['id']."\">Slet</a><br>"; ?></td>
</tr>
</font>
<?php
} //afslutter while sætningen
?>

Hvordan skal mit script se ud? Jeg ved ikke hvor jeg skal indsætte det forskellige henne :-(
Avatar billede ahv Nybegynder
31. juli 2003 - 09:22 #10
<?php
include("config.php");      // database indstillinger

$prside = 10;
$visfra = $_GET['visfra'];

if(!$_GET['visfra']) $visfra = 0;

$query = mysql_query("SELECT id, overskrift, DATE_FORMAT(dato, '%d/%m-%Y %H:%i') AS dato FROM nyheder ORDER BY id DESC limit $visfra, $prside");
while ($row = mysql_fetch_array($query)) {
?>
<td width="4%" align="center"><?php echo $row['id'] ?></td>
<td width="26%"><?php echo $row['overskrift'] ?></td>
<td width="11%" align="center"><?php echo $row['dato'] ?></td>
<td width="8%" align="center"><?php echo "<a href=\"vis_nyhed.php?id=".$row['id']."\">Læs nyhed</a><br>"; ?></td>
<td width="6%" align="center"><?php echo "<a href=\"edit.php?id=".$row['id']."\">Rediger</a><br>"; ?></td>
<td width="6%" align="center"><?php echo "<a href=\"delete_s.php?id=".$row['id']."\">Slet</a><br>"; ?></td>
</tr>
</font>
<?php
} //afslutter while sætningen

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM nyheder"),0);
if ($visfra > 0) {
    $bagud = $visfra-$prside;
    echo "<a href='$_SERVER[PHP_SELF]?visfra=$bagud'>Forrige</a> ";
}
$page = 1;
for ($start = 0; $antal > $start; $start = $start + $prside) {
    if($visfra != $page * $prside - $prside) {
        echo "<a href='$_SERVER[PHP_SELF]?visfra=$start'>$page</a> ";
    } else {
        echo $page." ";
    }
    $page++;
}
if ($visfra < $antal - $prside) {
    $naeste = $visfra + $prside;
    echo " <a href='$_SERVER[PHP_SELF]?visfra=$naeste'>Næste</a>";
}
?>
Avatar billede Slettet bruger
31. juli 2003 - 10:45 #11
ahv -> Det virker :-) Er det muligt at center side tallet, næste og forrige?
Avatar billede ahv Nybegynder
31. juli 2003 - 13:01 #12
Du kan vel blot sætte en div rundt om hvor text-align er center?
Avatar billede Slettet bruger
31. juli 2003 - 19:13 #13
Ja. Det kunne jeg, men har sat det ind i en tabel. Det virker som det skal. Mange tak for hjælpen :-D
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