Avatar billede noodrem Nybegynder
21. marts 2004 - 16:07 Der er 13 kommentarer og
1 løsning

Opdeling i sider

Hej

Hvordan kan jeg dele mine indlæg, i f.eks en gæstebog op, således at der bliver lavet en ny side, for f.eks hver fjerde post?
Avatar billede schaefner Juniormester
21. marts 2004 - 16:11 #1
<?php
/* Configuration */
$mysql_handle = mysql_connect('***', '***', '***');
mysql_select_db('***', $mysql_handle);

$db_table_select = 'guestbook'; // Tabel der skal hentes fra
$limit = 4; // Antal resultater pr. side
$pages_each_way = 7; // Sider der peger hver vej
$string_output = ''; // Sætter $string_output

/* Calculation */
$total = mysql_result(mysql_query("SELECT COUNT(*) FROM $db_table_select"),0); // Henter antal poster i databasen
$offset = isset($_GET['offset']) ? $_GET['offset'] : 0;
$start_point = ($offset-($pages_each_way*$limit) < 0) ? 0 : $offset-($pages_each_way*$limit);
$end_point = ($offset+($pages_each_way*$limit) > $total) ? $total : $offset+($pages_each_way*$limit);
$page_number = ($start_point/$limit)+1;

/* Fetching result */
$sql_output = mysql_query("SELECT * FROM $db_table_select ORDER BY id DESC LIMIT $offset,$limit") or die(mysql_error());
while ($row = mysql_fetch_assoc($sql_output)) {
    $string_output .= $row['id'].' '.$row['field'].'<br>';
}

$string_output .= ($offset >= $limit) ? '<a href="?offset='.($offset-$limit).'">Forrige</a> ' : 'Forrige ';
for ($start=$start_point;$start<$end_point;$start=$start+$limit) {
    $string_output .= ($offset == $start) ? '<b>'.$page_number++.'</b> ' : '<a href="?offset='.$start.'">'.$page_number++.'</a> ';
}
$string_output .= ($total > $offset+$limit) ? '<a href="?offset='.($offset+$limit).'">Næste</a>' : 'Næste';

/* Printing */
echo $string_output;

/* Disconnecting */
mysql_close($mysql_handle);
?>
Avatar billede schaefner Juniormester
21. marts 2004 - 16:16 #2
og den simple udgave:

<?php
/* Configuration */
mysql_connect('***', '***', '***');
mysql_select_db('***');

$tbl_name = 'guestbook';
$limit = 4; // Antal resultater pr. side
$offset = isset($_GET['offset']) ? $_GET['offset'] : 0;
$total = mysql_result(mysql_query("SELECT COUNT(*) FROM $tbl_name"),0); // Henter antal poster i databasen

$sql_output = mysql_query("SELECT * FROM $tbl_name ORDER BY id DESC LIMIT $offset,$limit") or die(mysql_error());
while ($row = mysql_fetch_assoc($sql_output)) {
    echo $row['id'].' '.$row['field'].'<br>';
}

echo ($offset >= $limit) ? '<a href="?offset='.($offset-$limit).'">Forrige</a> ' : 'Forrige ';
echo ($total > $offset+$limit) ? '<a href="?offset='.($offset+$limit).'">Næste</a>' : 'Næste';
?>
Avatar billede melange Nybegynder
21. marts 2004 - 16:16 #3
schaefner << nå, er færdig med at holde pause eller keder man sig bare :)

noodrem << sorry for spam
Avatar billede schaefner Juniormester
21. marts 2004 - 16:19 #4
melange >> det sidste, men hvad skal man ellers lave en søndag eftermiddag ;)
Avatar billede melange Nybegynder
21. marts 2004 - 16:25 #5
schaefner << ved det virkelig ikke :) Sidder selv og trykker F5 hele tiden i håb om der kommer nye spørgsmål (rss-læseren opdaterer jo kun hvert minut ;) )
Avatar billede noodrem Nybegynder
21. marts 2004 - 16:26 #6
taks shaefner. Gider du ik lige forklare denne sætning lidt nærmere:

$offset = isset($_GET['offset']) ? $_GET['offset'] : 0;

For den forstår jeg ikke meget af. Henter du fra URL'en med $_GET['offset'] eller hvad bruges den til?
Avatar billede melange Nybegynder
21. marts 2004 - 16:29 #7
noodrem: det er i virkeligheden bare en forkorted udgave af:

if (isset($_GET['offset'])) {
  $offset = $_GET['offset'];
} else {
  $offset = 0;
}

Den sætter altså $offset lig hvad der står i URL'en, og står der ikke noget bliver $offset sat lig 0
Avatar billede schaefner Juniormester
21. marts 2004 - 16:30 #8
noodrem >> Den tjekker om $_GET['offset'] er sat, ellers sættes den til 0. Det er en kortere udgave af:

if (isset($_GET['offset'])) {
  $offset = $_GEt['offset'];
} else {
  $offset = 0;
}

mvh:jesper.sørensen
Avatar billede melange Nybegynder
21. marts 2004 - 16:31 #9
schaefner: to sjæle, en tanke :)
Avatar billede sukos Juniormester
21. marts 2004 - 16:33 #10
hmm, og hvad så hvis man prøver at komme på
domain.dk/?offset=navn
???
Avatar billede schaefner Juniormester
21. marts 2004 - 16:36 #11
tjah, så kan den rettes til:

$offset = (isset($_GET['offset']) && is_numeric($_GET['offset'])) ? $_GET['offset'] : 0;
Avatar billede melange Nybegynder
21. marts 2004 - 16:37 #12
sukos: så går det jo helt glat, når man når til SQL'en med:
...LIMIT $offset,$limit

men det må han som lavede om i URL'en vel selv om. Han kan da bare lade være med at manipulere med den :) (og det åbner jo ingen sikkerhedshuller, så man behøver vel ikke ligefrem gøre noget ved det)
Avatar billede noodrem Nybegynder
23. marts 2004 - 15:21 #13
Lige et spørgsmål til:
I denne sætning:

$total = mysql_result(mysql_query("SELECT COUNT(*) FROM $tbl_name"),0);

skriver du 0 til sidst, hvad gør det?

Er der i øvrigt ikke en der vil forklare præcist hvordan scriptet fungererer ( det simple ) eftersom jeg ikke forstår det fuldt ud?
Avatar billede noodrem Nybegynder
23. marts 2004 - 16:32 #14
Og hvad gør LIMIT i følg sætning:

sql_output = mysql_query("SELECT * FROM $tbl_name ORDER BY id DESC LIMIT $offset,$limit") or die(mysql_error());


?
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