Archief - PHP: pagina nummering bij gastenboek

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Bertold

Legacy Member
De titel zegt denk ik al het meeste.
Ik heb een database met een 100 tal berichten in van een gastenboek.
Nu zou ik die graag per 15 op een pagina zetten. Kheb al heel de tijd zitten sukkelen met mysql (LIMIT x,y) maar het wil maar niet lukken. Weet iemand hier een concrete oplossing voor dit waarschijnlijk makkelijk op te lossen probleem?
Het is dus de bedoeling dat er onderaan de pagina dan twee linken komen met
vorige pagina en volgende pagina

Dank bij voorbaat

Bertold

Legacy Member
mss ietsje te concreet want iik snap er nix van tbh :$

en alsk et copy/paste in mn script dan krijgk een oneindig lange rij 1'en :s
(keb de mysql aangepast maar toch werkt et nie)
kben nog nie zo heel lang bezig met php mss als iemand gewoon kan uitleggen hoe daje et doet zodatk et zelf kan proberen daar zou ek ook al veel mee zijn

GuntherDW

Legacy Member
zonder enige code langs uw kant kunne we onmogelijk weten hoe da te fixen eh?

Bertold

Legacy Member
keb nog nix van code, kheb een database met +- 100 entry's
en met de volgende gegevens der in : id naam emailadres bericht datum
kzou ze graag op id schikken per 10/15 dus nrke 100-91 eerst dan 90-81 enzovoort

joyraider

Legacy Member
bt belgium zei:
keb nog nix van code, kheb een database met +- 100 entry's
en met de volgende gegevens der in : id naam emailadres bericht datum
kzou ze graag op id schikken per 10/15 dus nrke 100-91 eerst dan 90-81 enzovoort

weet uit ervaring dat dat een enorme berg code (+ werk) is, dus denk niet dat iemand dat hier zomaar gaat neertypen :)

betreft héél veel genestelde if-structuren als k mij niet vergis

Bertold

Legacy Member
en kan dan iemand het algoritme uitleggen want ik weet niet eens hoe ik er zou moeten aan beginnen als iemand mij dat kan uitleggen zou ik al een hele stap verder zijn

toch al bedankt voor de reacties enzo :)

killgore

Legacy Member
in uw url-query de startid meegeven. Controleren dat deze groter of gelijk is aan 0 (zoniet, zet op 0 :p), ik noem deze verder huidigestart ;).
dat ophalen, met een limiet van 10 zaken.
Link voor previous = huidigestart-10, link voor next = huidigestart+10
Je kan extra controle doen om deze grijs te maken indien nodig ;).

Pagina die je nu zit: ceil(huidigestart/10)+1 (bv. start = 0: 0/10 = 0; 0+1=1, start =5: 5*10=0,watgetallen; door ceil wordt dit 1; 1+1=2 (want uw pagina 1 begint vanaf 0 ;)). Op zelfde manier kan je logisch de eerste & laatste pagina's dynamisch weergeven & de 2 pagina's rondom de huidige ;).

Het is vrij simpel, maar zoals boven gezegd: veel code-werk :).

edit: url-query == get variabelen ;). En als je niet weet wat dit is:

http://www.mijnpage.com/page.php?startid=5

startid is hier een get variabele, die je oproept met $_GET['startid'], wel eerst altijd isset hierop testen voor je het gebruikt, bv.
$startid=isset($_GET['startid'])?$_GET["startid"]:0;
daarna kan je verder werken met de variabele startid die je uit de url haalt of op 0 zet als ze niet in de url zat :).

Je kan zo dus ook dynamisch een url aanmaken, door die =5 te veranderen naar bv. =$nextstartid of zo ;).

edit2: als je een startid krijgt dat niet deelbaar is door 10 ($startid%10!=0), dan zet je dit best naar eerste veelvoud van 10 ervoor ( floor($startid/10)*10 ), Anders ga je rariteiten bekomen met je pagina's (dat je bv. bij next of previous page ineens 5 berichten overslaat :). Dan is trouwens de ceil voor het berekenen van de huidige pagina ook niet meer nodig :).

dJeez

Legacy Member
Het is imho wel veel makkelijker om direct het paginanummer te gebruiken in je LIMIT clause. Stel dat je het paginanummer doorgeeft in de var pagina (dus script.php?pagina=X).

Pagina inlezen via :
$pagina = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 0;

En je query dan aanpassen als volgt :
LIMIT ($pagina * ITEMS_PER_PAGINA),ITEMS_PER_PAGINA

Waarbij ITEMS_PER_PAGINA uiteraard het aantal records is dat je wil tonen op elke pagina. En dan voorzie je nog de nodige tests, zodanig dat paginanummer nooit kleiner dan 0 en nooit groter is dan het effectief aantal pagina's. Het aantal pagina's is trouwens ceil(AANTAL_RECORDS/ITEMS_PER_PAGINA);

GuntherDW

Legacy Member
bt belgium zei:
keb nog nix van code, kheb een database met +- 100 entry's
en met de volgende gegevens der in : id naam emailadres bericht datum
kzou ze graag op id schikken per 10/15 dus nrke 100-91 eerst dan 90-81 enzovoort

ge hebt niks van code maar toch hebt ge een guestbook, strange :wtf:
hoe the hell komen die dan daar al in?
of voegde ze handmatig in? :p


joyraider zei:
weet uit ervaring dat dat een enorme berg code (+ werk) is, dus denk niet dat iemand dat hier zomaar gaat neertypen :)

betreft héél veel genestelde if-structuren als k mij niet vergis

veel werk gaat da ni zijn ze, wel om het foolproof te maken :p
ale, veel werk gaat da ook ni zijn, het meeste werk zit in de gewone pagina's :p

Bertold

Legacy Member
GuntherDW zei:
ge hebt niks van code maar toch hebt ge een guestbook, strange :wtf: hoe the hell komen die dan daar al in? of voegde ze handmatig in?:p
mja neen khad eerst een guestbook maar zonder zo'n nummering :p gewoon allemaal op één pagina maar das nie echt handig in elk geval bedankt voor de vele hulp :applause:

EDIT : hoe kom ik te weten hoeveel records er in mijn database zitten? mss een noob vraag maarja ne mens moet ergens beginnen é :$
// is dat met mysql_affected_rows() ? --> OPGELOST

EDIT2 : Nog een vraagje: er zijn al verschillende records verwijdert uit mn database en dus zijn er 'gaten' in bvb id die van 22 --> 25 springt enzo, is het mogelijk om die weer allemaal achter elkaar te laten gaan zonder dat er gegevens verwijdert worden?

Da Turtle

Legacy Member
$records = mysql_num_rows($resultaat_van_je_select_query); //mens noemt u variabele eens zo :eek:
zo weet je het aantal records

reactie op 2e edit:
is toch niet echt nodig, zou heel onhandig zijn als je dat ieder keer moet doen. als je met LIMIT werkt wordt er toch niet gekeken naar dat id, dat id is er gewoon om onderscheid te maken tussen records zodat je met relaties kunt werken.

Bertold

Legacy Member
PHP:
<?php
include('connect.php');
$pagina = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 0;
$items_per_pagina = (isset($_GET['items_per_pagina'])) ? (int)$_GET['items_per_pagina'] : 10;
$aantal_records = mysql_num_rows(mysql_query("SELECT*FROM gastenboek"));
$aantal_paginas = ceil($aantal_records / $items_per_pagina);

if($pagina < 0){
	$pagina = 0;
	}
else if($pagina > $aantal_paginas){
	$pagina = 0;
	}
$vorige_pagina = $pagina - 1;
$volgende_pagina = $pagina +1;

$result = mysql_query("SELECT*FROM gastenboek order by id DESC LIMIT ". $pagina * $items_per_pagina .", ".$items_per_pagina."") or die(mysql_error());
while($row = mysql_fetch_array($result)){
		echo $row['id'];
		echo '<br />';
	}
if($pagina == 0){
echo 'Eerste Pagina/';
echo 'Vorige Pagina/';
echo '<a href="test.php?pagina='.$volgende_pagina.'&items_per_pagina=10">Volgende pagina</a>/';
echo '<a href="test.php?pagina='.$aantal_paginas.'&items_per_pagina=10">Laatste Pagina</a>';
}
else if($pagina = $aantal_paginas){
echo '<a href="test.php?pagina=0&items_per_pagina=10">Eerste Paina</a>/';
echo '<a href="test.php?pagina='.$vorige_pagina.'&items_per_pagina=10">Vorige Pagina</a>';
echo 'Volgende Pagina/';
echo 'Laatste Pagina';
}
else{
echo '<a href="test.php?pagina=0&items_per_pagina=10">Eerste Paina</a>/';
echo '<a href="test.php?pagina='.$vorige_pagina.'&items_per_pagina=10">Vorige Pagina</a>';
echo '<a href="test.php?pagina='.$volgende_pagina.'&items_per_pagina=10">Volgende pagina</a>/';
echo '<a href="test.php?pagina='.$aantal_paginas.'&items_per_pagina=10">Laatste Pagina</a>';
}
?>

Dit is het geworden geen parse errors meer als iemand nog dingen ziet die beter kunnen laat dan zeker iets weten é ! merci allemaal voor de hulp

edit: hier wordt enkel het id van het bericht weergegeven om het overzichtelijk te houden maar in mijn script wordt dus heel het kadertje enzo weergegeven

wonko

Legacy Member
Misschien beter het aantal records ophalen mbv een query als "SELECT count(id) as aantal FROM $tabelnaam". Zo moet hij niet de volledige query in zijn database gaan uitvoeren. (Niet dat het veel verschil maakt in een db met 100 records, maar toch, het is het principe).

dJeez

Legacy Member
Vervang
PHP:
else if($pagina = $aantal_paginas)
alvast maar door
PHP:
else if($pagina == $aantal_paginas)

Let op het verschil :p.

En om enkel het aantal records op te halen uit een tabel gebruik je idd best een "select count()", zoals hierboven aangegeven.

Marbug

Legacy Member
PHP:
$show=15;
$start=($_GET['page'] * $show);

echo"<div align=center>";
$total = mysql_result(mysql_query("SELECT COUNT(1) FROM gastenboek"),0);
if($_GET['page']){
echo"<a href='gastenboek.php&page=".($_GET['page']-1)."'><<<<</a>";
echo' ';
}
if($total > $start+$show){
echo"<a href='gastenboek.php&page=".($_GET['page']+1)."'>>>>></a>";
}
echo'<br>Page '.($_GET['page']+1).'<br>Replies from '.($start+1).' to '.($start+$show);
echo'<br>Total users: '.$total;
echo'</div>';
het lijkt toch niet zo meoilijk he? :)

GuntherDW

Legacy Member
Marbug zei:
PHP:
$show=15;
$start=($_GET['page'] * $show);

echo "<div align=center>";
$total = mysql_result(mysql_query("SELECT COUNT(1) FROM gastenboek"),0);
if($_GET['page']){
echo "<a href='gastenboek.php&page=".($_GET['page']-1)."'>&lt;&lt;&lt;&lt;</a>";
echo ' ';
}
if($total > $start+$show){
echo "<a href='gastenboek.php&page=".($_GET['page']+1)."'>&gt;&gt;&gt&gt;</a>";
}
echo '<br>Page '.($_GET['page']+1).'<br>Replies from '.($start+1).' to '.($start+$show);
echo '<br>Total users: '.$total;
echo '</div>';
het lijkt toch niet zo meoilijk he? :)

zou mijn aanpassing van uw code de iets 'dommere' browser de pagina toch correct laten renderen? :p (en W3C valid maken?)
i know da er nog stuff instaat da ni helemaal W3C valid is ma kom :p
edit : btw, beter geen spatie tussenlaten tusse echo en wa em moet echoën? :p

Bertold

Legacy Member
gastenboek is af en volledige site : te bekijken op www.chirodeginste.be
Kheb nog wa pijlkes ingevoegd enzo. als ge wilt post ik nog wel het php script hier ook maar veel is er nie meer aan verandert

Marbug

Legacy Member
GuntherDW zei:
zou mijn aanpassing van uw code de iets 'dommere' browser de pagina toch correct laten renderen? :p (en W3C valid maken?)
i know da er nog stuff instaat da ni helemaal W3C valid is ma kom :p
edit : btw, beter geen spatie tussenlaten tusse echo en wa em moet echoën? :p
ik heb er alles juist in gecorrigeerd bij mij, en spatie tussen echo en " is daar soms ook iets mee? :o
soms doe ik dat en soms niet
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan