Avatar billede hewa Nybegynder
14. februar 2007 - 15:01 Der er 25 kommentarer og
1 løsning

Bladre system

I en debat kunne jeg godt tænke mig, at man kan bladre mellem alle de forskellige indlæg. Dvs hver side indeholder f.eks. 25 indlæg og nederst på siden er der noget a la:
Side: « 1 2 3 »

Hvis man er på side 1, skal den ikke være et link og det skal « heller ikke, det skal de andre derimod være. Modsat står man på side 3, skal den ikke være et link og det skal » selvfølgelig heller ikke. Det giver næste sig selv, hvad der så skal ske, hvis man står på side 2 :)

Hvert indlæg har sit eget id, så hvis vi siger, der er 60 indlæg i alt, skal de først 25 vises på side 1, de næste 25 på side 2 og de sidste 10 på side 3.

Hvis det er mere simpelt at lave noget a la:
1 | 2 | 3 - altså uden pilene vil det også være ok med mig!

Hvad er det lige for nogle kode-stykker, jeg skal have gang i?
Avatar billede intenz Novice
14. februar 2007 - 15:43 #1
Har du et database kald du kan skrive, det der henter det relevante data ud af databasen. Det er lidt nemmere at forklare ud fra noget konkret.
Avatar billede hewa Nybegynder
14. februar 2007 - 16:36 #2
Min kode er meget, meget simpel, da det jo indtil nu er et kald:

$query = mysql_query("SELECT * FROM lovestories WHERE lovestory_id ='".$_GET['lovestory_id']."'");
$row = mysql_fetch_assoc($query);

echo "<h3>".$row['overskrift']."</h3>";
echo "Skrevet af ".$row['alias']." den ".$row['opretdato']."<br>";
echo "Historien er vist ".$row['counter']." gange.<br><br>";
echo nl2br($row['historie']);
Avatar billede intenz Novice
14. februar 2007 - 20:57 #3
Prøv det her, jeg har indsat kommentarer så du også kan læse lidt af det. Har dog ikke testet det.

$limit = 25; // antallet af overskrifter pr. side
if (!isset($_GET['start'])) {$start = 0;} else {$start = $_GET['start'];} // hent hvilken overskrift vi skal starte ved

$query = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM lovestories WHERE lovestory_id ='".$_GET['lovestory_id']."' limit $start, $limit");
// SQL_CALC_FOUND_ROWS henter det total antal poster i tabellen, så vi ikke kun får det antal der er sat som $limit

$res_sidetal = mysql_query("select FOUND_ROWS()");
$num = mysql_fetch_row($res_sidetal);
$num = $num[0]; // henter det totale antal poster i tabellen

if ($num > $limit) { // hvis der er flere end sat i $limit skal vi lave sidetal
$sidetal = "";

if ($num > ($start+$limit)) {
$sidetal .= "<a href='?start=".($start+$limit)."'>>></a>"; // indsætter >> hvis vi skal kunne gå frem
}

$antal_sider = $num / $limit; // find antal sider
$antal_sider = floor($antal_sider); // fjern evt. komma
while ($antal_sider > 0) {
$sidetal .= "<a href='?start=".($start+($limit*($antal_sider-1)))."'>".$antal_sider."</a>"; // indsætter numre på de sider vi skal bruge
$antal_sider--;
}

if ($start != 0) {
$sidetal .= "<a href='?start=".($start-$limit)."'><<</a>"; // indsætter << hvis vi skal kunne gå tilbage
}

}


print "$sidetal"; // indsætter sidetal
while ($row = mysql_fetch_assoc($query)) { // lavet en while, da jeg går ud fra de skal listes under hinanden

echo "<h3>".$row['overskrift']."</h3>";
echo "Skrevet af ".$row['alias']." den ".$row['opretdato']."<br>";
echo "Historien er vist ".$row['counter']." gange.<br><br>";
echo nl2br($row['historie']);

}
Avatar billede hewa Nybegynder
18. februar 2007 - 19:48 #4
Tak for dit bidrag intenz!

Jeg har prøvet at integrere din kode, men den har ingen effekt overhovedet... kan du evt. se, hvad der er galt

zzzZZZzzz... dog må jeg indrømme, jeg har lagt en forkert kode, men det kan vel næsten ikke være det, der er problemet?
- herunder er den rigtige.

echo "<table width='100%' class='tabeltekst' border=0>";
$query = mysql_query("SELECT * FROM lovestories order by lovestory_id DESC");
while($row = mysql_fetch_assoc($query))
{
$teaser = html_entity_decode($row['historie']);
$nyteaser = substr($teaser, 0, 200);

echo "<tr><td class='overskriftslink'><a href='/lovestories.php?mode=lovestory&lovestory_id=".$row['lovestory_id']."'>".$row['overskrift']."</a><br>af ".$row['alias']."</b></td></tr>";
echo "<tr><td>".htmlentities($nyteaser)."... [ <a href='/lovestories.php?mode=lovestory&lovestory_id=".$row['lovestory_id']."'>Læs mere</a> ]<br><br></td></tr>";
}
echo "</table>";
Avatar billede intenz Novice
19. februar 2007 - 19:26 #5
Ændrer bare lige din kode, så det er sat ind. Jeg vi snakker ud fra det samme :)

$limit = 25; // antallet af overskrifter pr. side
if (!isset($_GET['start'])) {$start = 0;} else {$start = $_GET['start'];} // hent hvilken overskrift vi skal starte ved

echo "<table width='100%' class='tabeltekst' border=0>";
$query = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM lovestories order by lovestory_id limit $start, $limit");

// SQL_CALC_FOUND_ROWS henter det total antal poster i tabellen, så vi ikke kun får det antal der er sat som $limit

$res_sidetal = mysql_query("select FOUND_ROWS()");
$num = mysql_fetch_row($res_sidetal);
$num = $num[0]; // henter det totale antal poster i tabellen

if ($num > $limit) { // hvis der er flere end sat i $limit skal vi lave sidetal
$sidetal = "";

if ($num > ($start+$limit)) {
$sidetal .= "<a href='?start=".($start+$limit)."'>>></a>"; // indsætter >> hvis vi skal kunne gå frem
}

$antal_sider = $num / $limit; // find antal sider
$antal_sider = floor($antal_sider); // fjern evt. komma
while ($antal_sider > 0) {
$sidetal .= "<a href='?start=".($start+($limit*($antal_sider-1)))."'>".$antal_sider."</a>"; // indsætter numre på de sider vi skal bruge
$antal_sider--;
}

if ($start != 0) {
$sidetal .= "<a href='?start=".($start-$limit)."'><<</a>"; // indsætter << hvis vi skal kunne gå tilbage
}

}


print "<tr><td>$sidetal</td></tr>"; // indsætter sidetal

while($row = mysql_fetch_assoc($query))
{
$teaser = html_entity_decode($row['historie']);
$nyteaser = substr($teaser, 0, 200);

echo "<tr><td class='overskriftslink'><a href='/lovestories.php?mode=lovestory&lovestory_id=".$row['lovestory_id']."'>".$row['overskrift']."</a><br>af ".$row['alias']."</b></td></tr>";
echo "<tr><td>".htmlentities($nyteaser)."... [ <a href='/lovestories.php?mode=lovestory&lovestory_id=".$row['lovestory_id']."'>Læs mere</a> ]<br><br></td></tr>";
}
print "<tr><td>$sidetal</td></tr>";
echo "</table>";
Avatar billede intenz Novice
19. februar 2007 - 19:29 #6
Her kommer så nogle spørgsmål til dig.
1) Der kommer ingen fejl?

2) Du er sikker på du har over 25 poster i databasen den har hentet ud? Ellers bliver sidetal ikke vist, ellers kan du ændre det til en mindre tal øverst hvor der står:
$limit = 25;

3) Du kan se midt i koden står:
$sidetal = "";
Prøv at ændre det til:
$sidetal = "test";

Så kan du se om den skriver test over dine overskrifter, så ved vi den i hvert fald er kommet ind og har prøvet at lave sidetal. Hvis den ikke skriver noget, ja så er der noget galt. (eller du har mindre end 25 ting i databasen)
Avatar billede hewa Nybegynder
19. februar 2007 - 19:48 #7
Halløj, håber du er der endnu intenz :)

Jeg havde næsten fået det til at virke, men der var stadig noget, der fucked op - det er nok rettet med den kode du har ændret :)
- jeg tror, det var noget mellem min foresprøgsel og din $res_sidetal = mysql_query("select FOUND_ROWS()");

Jeg havde rettet tallet til 5 og jeg havde fået det til at blive vist, men når jeg bladrede rundt i det, fandt den sider, der slet ikke var der og dermed vist den selvfølgelig ikke noget.

Selvfølgelig er serveren nede lige nu, sådan er det jo altid, at det sker på de forkerte tidspunkter!
Avatar billede hewa Nybegynder
19. februar 2007 - 19:54 #8
Jeg kan iøvrigt se, jeg har prøvet din version af:
$query = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM lovestories order by lovestory_id limit $start, $limit");

$res_sidetal = mysql_query("select FOUND_ROWS()");
$num = mysql_fetch_row($res_sidetal);

Men det gør, at resten ikke bliver trukket ud fra databasen, alias og overskrift og den viser kun overskriften for siden som en linje... hvis du forstår hvad jeg mener, lyder det sikkert skørt - sådan synes jeg også, det var, men jeg fik ikke andet frem med det (medmindre jeg fik lavet en anden fejl :)
Avatar billede hewa Nybegynder
19. februar 2007 - 20:07 #9
Nu har jeg prøvet det med din kode, men den driller stadig (dog har jeg sat en DESC på, så de nyeste ligger øverst)

Bladre jeg på pilene, virker det, men bruger jeg tallene, går det galt og så finder den nogle id'er, der ikke er lavet endnu - og dermed viser den selvfølgelig ikke noget.

Samtidig vender rundt på 3 2 1 som der jo burde være 1 2 3

Se her:
http://www.crazyinlove.dk/index.php?cat_id=4

Prøv at vælge 3 og så 3 igen :)
Avatar billede hewa Nybegynder
19. februar 2007 - 20:14 #10
Jeg ser lige, pile burde jo også vende om:
Side: « 1 2 3 »

Desværre kan man heller ikke se, hvilken side man er på - den kunne jo enten være med fed eller slet ikke markeret.

Bliver projektet for stort nu??
Avatar billede intenz Novice
19. februar 2007 - 20:29 #11
Ahh, ja.
Prøv at ændre:
$antal_sider = $num / $limit; // find antal sider
$antal_sider = floor($antal_sider); // fjern evt. komma
while ($antal_sider > 0) {
$sidetal .= "<a href='?start=".($start+($limit*($antal_sider-1)))."'>".$antal_sider."</a>"; // indsætter numre på de sider vi skal bruge
$antal_sider--;
}

til:
$antal_sider = $num / $limit; // find antal sider
$antal_sider = floor($antal_sider); // fjern evt. komma
$start_ny = ($antal_sider-1)*$limit;
while ($antal_sider > 0) {

$sidetal = "<a href='?start=".($start_ny+($limit*($antal_sider-1)))."'>".$antal_sider."</a>".$sidetal; // indsætter numre på de sider vi skal bruge
$antal_sider--;
$start_ny = $start_ny-$limit;
}
Avatar billede intenz Novice
19. februar 2007 - 20:30 #12
Eller til denne her i stedet hvis du også vil have den skal være fed:
$antal_sider = $num / $limit; // find antal sider
$antal_sider = floor($antal_sider); // fjern evt. komma
$start_ny = ($antal_sider-1)*$limit;
while ($antal_sider > 0) {

if ($start_ny == $start) {
$bold_start = "<b>";
$bold_slut = "</b>";
} else {
$bold_start = "";
$bold_slut = "";
}

$sidetal = "<a href='?start=".($start_ny+($limit*($antal_sider-1)))."'>".$bold_start.$antal_sider.$bold_slut."</a>".$sidetal; // indsætter numre på de sider vi skal bruge
$antal_sider--;
$start_ny = $start_ny-$limit;
}
Avatar billede intenz Novice
19. februar 2007 - 20:32 #13
Og pilene :) Måske jeg bare skulle læse alle dine indlæg :D
Byt rundt på de to koderstykker her:
if ($num > ($start+$limit)) {
$sidetal .= "<a href='?start=".($start+$limit)."'>>></a>"; // indsætter >> hvis vi skal kunne gå frem
}

og:
if ($start != 0) {
$sidetal .= "<a href='?start=".($start-$limit)."'><<</a>"; // indsætter << hvis vi skal kunne gå tilbage
}
Avatar billede intenz Novice
19. februar 2007 - 20:47 #14
Hov, jeg kan se der lidt dobbelt udregning. Hvis du lige ændrer:
$sidetal = "<a href='?start=".($start_ny+($limit*($antal_sider-1)))."'>".$bold_start.$antal_sider.$bold_slut."</a>".$sidetal; // indsætter numre på de sider vi skal bruge

til:
$sidetal = "<a href='?start=".$start_ny."'>".$bold_start.$antal_sider.$bold_slut."</a> ".$sidetal; // indsætter numre på de sider vi skal bruge


Så skulle den være der :)
Avatar billede intenz Novice
19. februar 2007 - 20:49 #15
Og:
$antal_sider = floor($antal_sider); // fjern evt. komma

til:
$antal_sider = ceil($antal_sider); // fjern evt. komma
Avatar billede hewa Nybegynder
19. februar 2007 - 20:49 #16
Det forstår jeg ikke, nu er begge pile ude til højre... hvad søren skyldes det..?

Det virker halvt med fed nu, men hvis jeg tykker på 2, bliver den markeret til 3 og trykker jeg så på 3, viser den nogle sider, der ikke er der :(

Desværre kan jeg ikke rette det, da det her er lagt over det jeg selv kan - endnu :)
Avatar billede hewa Nybegynder
19. februar 2007 - 20:54 #17
Nu virker det sgu vist :) Nu er det kun << der skal om på den anden side - tester lige igen :)
Avatar billede intenz Novice
19. februar 2007 - 20:54 #18
Pilene står sammen fordi ikke fik byttet ordenligt rundt på dem.

Denne kode:
if ($start != 0) {
$sidetal .= "<a href='?start=".($start-$limit)."'><<</a>"; // indsætter << hvis vi skal kunne gå tilbage
}

Skal stå lige efter denne kode:
if ($num > $limit) { // hvis der er flere end sat i $limit skal vi lave sidetal
$sidetal = "";
Avatar billede hewa Nybegynder
19. februar 2007 - 20:57 #19
Jamen det er også der, jeg har sat den, det er det, jeg ikke forstår... skal jeg lige smide hele den fine kode :)
Avatar billede intenz Novice
19. februar 2007 - 20:58 #20
ja, smid det lige ind
Avatar billede hewa Nybegynder
19. februar 2007 - 21:01 #21
Der er kommet en masse str_replace på, men dem har du bare ikke set før :)



$limit = 5; // antallet af overskrifter pr. side
if (!isset($_GET['start'])) {$start = 0;} else {$start = $_GET['start'];} // hent hvilken overskrift vi skal starte ved

echo "<table width='100%' class='tabeltekst' border=0>";
$query = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM lovestories order by lovestory_id DESC limit $start, $limit");

// SQL_CALC_FOUND_ROWS henter det total antal poster i tabellen, så vi ikke kun får det antal der er sat som $limit

$res_sidetal = mysql_query("select FOUND_ROWS()");
$num = mysql_fetch_row($res_sidetal);
$num = $num[0]; // henter det totale antal poster i tabellen

if ($num > $limit) { // hvis der er flere end sat i $limit skal vi lave sidetal
$sidetal = "";

if ($start != 0) {
$sidetal .= "<a href='?cat_id=4&start=".($start-$limit)."'>«</a> "; // indsætter << hvis vi skal kunne gå tilbage
}

$antal_sider = $num / $limit; // find antal sider
$antal_sider = ceil($antal_sider); // fjern evt. komma
$start_ny = ($antal_sider-1)*$limit;
while ($antal_sider > 0) {

if ($start_ny == $start) {
$bold_start = "<b>";
$bold_slut = "</b>";
} else {
$bold_start = "";
$bold_slut = "";
}

$sidetal = "<a href='?cat_id=4&start=".$start_ny."'>".$bold_start.$antal_sider.$bold_slut."</a> ".$sidetal; // indsætter numre på de sider vi skal bruge
$antal_sider--;
$start_ny = $start_ny-$limit;
}
if ($num > ($start+$limit)) {
$sidetal .= "<a href='?cat_id=4&start=".($start+$limit)."'>»</a>"; // indsætter >> hvis vi skal kunne gå frem
}

}



while($row = mysql_fetch_assoc($query))
{
$teaser = html_entity_decode($row['historie']);
$nyteaser = substr($teaser, 0, 200);

$nyteaser = str_replace("", "", $nyteaser);
$nyteaser = str_replace("
", "", $nyteaser);
$nyteaser = str_replace("[B]", "", $nyteaser);
$nyteaser = str_replace("[/B]", "", $nyteaser);
$nyteaser = str_replace("", "", $nyteaser);
$nyteaser = str_replace("
", "", $nyteaser);
$nyteaser = str_replace("[I]", "", $nyteaser);
$nyteaser = str_replace("[/I]", "", $nyteaser);
$nyteaser = str_replace("", "", $nyteaser);
$nyteaser = str_replace("
", "", $nyteaser);
$nyteaser = str_replace("[U]", "", $nyteaser);
$nyteaser = str_replace("[/U]", "", $nyteaser);

echo "<tr><td class='overskriftslink'><a href='/lovestories.php?mode=lovestory&lovestory_id=".$row['lovestory_id']."'>".$row['overskrift']."</a><br>af ".$row['alias']."</b></td></tr>";
echo "<tr><td>".htmlentities($nyteaser)."... [ <a href='/lovestories.php?mode=lovestory&lovestory_id=".$row['lovestory_id']."'>Læs mere</a> ]<br><br></td></tr>";
}
print "<tr><td>Side: $sidetal</td></tr>";
echo "</table>";
}
Avatar billede intenz Novice
19. februar 2007 - 21:10 #22
Ahh, ændre:
if ($start != 0) {
$sidetal .= "<a href='?cat_id=4&start=".($start-$limit)."'>«</a> "; // indsætter << hvis vi skal kunne gå tilbage
}

til
if ($start != 0) {
$sidetal = "<a href='?cat_id=4&start=".($start-$limit)."'>«</a> ".$sidetal; // indsætter << hvis vi skal kunne gå tilbage
}

Og flyt det ned lige over:
if ($num > ($start+$limit)) {
$sidetal .= "<a href='?cat_id=4&start=".($start+$limit)."'>»</a>"; // indsætter >> hvis vi skal kunne gå frem
}
Avatar billede hewa Nybegynder
19. februar 2007 - 21:20 #23
NEEEEEJ sikker en fin og flot kode du har lavet til mig :))))

Jeg ville ønske, jeg forstod lidt mere af det, du har lavet, men det kommer nok med tiden.

Tusinde tak for hjælpen!!! Det er en KANON hjælp du har givet mig, tak :)
Avatar billede intenz Novice
19. februar 2007 - 21:28 #24
Helt i orden, du kan jo kigge lidt på kommentarerne hvis du har lyst, ellers kan du jo altid gemme dem til engang i fremtiden, så ser det nok mere simpelt ud :)
Avatar billede intenz Novice
19. februar 2007 - 21:29 #25
Lige et lille hint her på falderebet.
Hvis du vil have at Side: kun skal stå der når der rent faktisk er nogle sider at blade på, kan du ændre:
print "<tr><td>Side: $sidetal</td></tr>";

til:
if ($sidetal != "") {
print "<tr><td>Side: $sidetal</td></tr>";
}
Avatar billede hewa Nybegynder
19. februar 2007 - 21:30 #26
Jojo, jeg har været ved at se på det og det er mere forståeligt end i starten, da det var helt sort snak :)
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