Je zult de kleur (en eventuele andere argumenten) ook moeten onthouden.
Daarnaast... Je haalt alle data op om uit te rekenen hoeveel resultaten er zijn? :(
Je zou ook een COUNT(*) of COUNT(id) kunnen doen (waarbij "id" de kolom is die je records uniek identificeert, ik neem aan / hoop dat je deze hebt?).
Of nog beter (maar hier verschillen de meningen over), gebruik de SQL_CALC_FOUND_ROWS flag in je LIMIT query.
Daarmee geef je aan dat je ook geinteresseerd bent in het totaal aantal resultaten wat je zou krijgen als je dezelfde query met dezelfde argumenten zou uitvoeren, maar dan zonder het LIMIT statement.
Het totaal aantal resultaten kun je ophalen door direct na je LIMIT query nog een query uit te voeren met als enige inhoud:
SELECT FOUND_ROWS()
Oftewel:
<?php
// resultaten van huidige pagina
$res = $conn->query('SELECT SQL_CALC_FOUND_ROWS ... FROM ... WHERE ... LIMIT ...');
/*
de volgende constructie met [0] is bruikbaar vanaf PHP 5.4,
anders doe je eerst een fetch_row() en lees je daarna de eerste kolom uit
*/
// totaal aantal resultaten
$totaal = $conn->query('SELECT FOUND_ROWS()')->fetch_row()[0];
?>
(zo gauw niet kunnen testen)
Iets waar je wel op moet letten is dat je informatie die je in je query stopt ofwel filtert of wel escaped (en het beste is nog allebei) anders zijn deze mogelijk vatbaar voor SQL injectie.
Die staan toch in je result? Dan hoeft je die toch niet te onthouden. Het enige wat je moet onthouden is op welke pagina je zit, aan de hand van het aantal items.
Dat doet <?php if(isset($_GET['page'])){
$page = $_GET['page'];
} else {
$page = 1;
}
?> toch? Hij onthoudt wel de pagina maar niet de ingevoerde kleur.
even terzijde: een cirkel is altijd rond (anders was het wel een vierkant of een driehoek ofzo :)
maar bedoel je dat ik dat ik dat hier ergens tussen moet proppen?
<?php
for($i=1;$i<=$tpages;$i++) {
echo "<li><a href=kleur.php?page=".$i.">".$i."</a></li>";
} <?>
Waarbij $Kleur nog "veilig" gemaakt dient te worden.
Je kunt ook misschien beter een kleurcode (1,2,3,4) gebruiken.
Daarnaast, als je het oorspronkelijke zoekformulier de methode GET geeft in plaats van POST, wordt het zoekveld "kleur" en de daarbij ingevulde/geselecteerde waarde direct opgenomen in de URL bij het verzenden van het formulier.
Bij zoekformulieren werkt GET doorgaans een stuk fijner dan POST.
Wow, ik heb me hier weken op suf gestaard, het werkt eindelijk!
Mijn dank is groot.
Wat betreft de veiligheid, de echte code is dit (ik had ff alle overbodige tekst eruit gegooid en alleen de kern gebruikt om die paginatie werkend te krijgen)
<?php
$aValid = ('/');
if (isset($_POST['Kleur']) and (ctype_alpha(str_replace($aValid, '', $_POST['Kleur']))))
{ $Kleur = $_POST['Kleur'];
else {echo "<section>Vul een geldige kleur in.</section>";
}
<?> Dat is toch wel veilig?