Schwere Pagination
Variablen bestimmen
<?php
if(isset($_GET['seite']))
{
$seite=preg_replace("/[^0-9]/", "", $_GET['seite']);
}
if(!isset($seite) || $seite == '')
{
$seite=1;
}
if(isset($_GET['seite']))
{
$seite=preg_replace("/[^0-9]/", "", $_GET['seite']);
}
if(!isset($seite) || $seite == '')
{
$seite=1;
}
Einträge per Seite / variabel
$pagseite= 1;
Einträge zählen
$stmt=$msql->prepare("SELECT COUNT(*) id FROM a_table");
$stmt->execute();
$result=$stmt->get_result();
$row=$result->fetch_assoc();
$number=$row['id'];
$seiten=ceil($number/$pagseite);
$start=$seite * $pagseite - $pagseite;
$stmt->execute();
$result=$stmt->get_result();
$row=$result->fetch_assoc();
$number=$row['id'];
$seiten=ceil($number/$pagseite);
$start=$seite * $pagseite - $pagseite;
$stmt=$pdo->prepare("SELECT COUNT(*) FROM a_table");
$stmt->execute();
$number=$stmt->fetchColumn();
$seiten=ceil($number/$pagseite);
$start=$seite * $pagseite - $pagseite;
$stmt->execute();
$number=$stmt->fetchColumn();
$seiten=ceil($number/$pagseite);
$start=$seite * $pagseite - $pagseite;
Datenbank abfrage
$stmt=$msql->prepare("SELECT spalte1, spalte2 FROM a_table ORDER BY id LIMIT ?,?");
$stmt->bind_param('ii',$start,$pagseite);
$stmt->execute();
$stmt->bind_param('ii',$start,$pagseite);
$stmt->execute();
Daten ausgabe
while ($row=$result->fetch_assoc())
{
echo $row['spalte1'];
echo $row['spalte2'];
}
{
echo $row['spalte1'];
echo $row['spalte2'];
}
oder gleich als Variablen ausgeben
$stmt=$msql->prepare("SELECT spalte1, spalte2 FROM a_table ORDER BY id LIMIT ?,?");
$stmt->bind_param('ii',$start,$pagseite);
$stmt->bind_result($spalte1,$spalte2);
$stmt->execute();
$stmt->bind_param('ii',$start,$pagseite);
$stmt->bind_result($spalte1,$spalte2);
$stmt->execute();
Daten ausgabe
while ($stmt->fetch())
{
echo $spalte1;
echo $spalte2;
}
{
echo $spalte1;
echo $spalte2;
}
$stmt=$pdo->prepare("SELECT spalte1, spalte2 FROM a_table ORDER BY id LIMIT :start,:pagseite");
$stmt->bindParam(':start',$start,PDO::PARAM_INT);
$stmt->bindParam(':pagseite',$pagseite,PDO::PARAM_INT);
$stmt->execute();
$stmt->bindParam(':start',$start,PDO::PARAM_INT);
$stmt->bindParam(':pagseite',$pagseite,PDO::PARAM_INT);
$stmt->execute();
Daten ausgabe
while ($row=$stmt->fetch())
{
echo $row['spalte1'];
echo $row['spalte2'];
}
{
echo $row['spalte1'];
echo $row['spalte2'];
}
oder gleich als Variablen ausgeben
$stmt=$pdo->prepare("SELECT spalte1, spalte2 FROM a_table ORDER BY id LIMIT :start,:pagseite");
$stmt->bindParam(':start',$start,PDO::PARAM_INT);
$stmt->bindParam(':pagseite',$pagseite,PDO::PARAM_INT);
$stmt->bindColumn(1,$spalte1);
$stmt->bindColumn(2,$spalte2);
$stmt->execute();
$stmt->bindParam(':start',$start,PDO::PARAM_INT);
$stmt->bindParam(':pagseite',$pagseite,PDO::PARAM_INT);
$stmt->bindColumn(1,$spalte1);
$stmt->bindColumn(2,$spalte2);
$stmt->execute();
Daten ausgabe
while ($stmt->fetch())
{
echo $spalte1;
echo $spalte2;
}
{
echo $spalte1;
echo $spalte2;
}
Funktion Seitenaufteilung: $anzahl=4 ist variabel
$url="foo.php";
$get_site="?seite";
$get_site="?seite";
function blaettern($seite, $maxseite, $url="foo.php", $get_site="?seite", $anzahl=4)
{
if ($anzahl % 2 != 0) $anzahl ++;
$a=$seite-($anzahl/2);
$b=0;
$blaetter=array();
while ($b <= $anzahl)
{
if ($a > 0 AND $a <= $maxseite)
{
$blaetter[] = $a;
$b ++;
}
else if
(
$a > $maxseite AND ($a - $anzahl - 2) >= 0)
{
$blaetter = array();
$a -= ($anzahl + 2);
$b=0;
}
else if
(
$a > $maxseite AND ($a - $anzahl - 2) < 0)
{
break;
}
$a ++;
}
$return = "";
if (!in_array(1, $blaetter) AND count($blaetter) > 1)
{
if (!in_array(2, $blaetter))
$return.='<td class="start">
<a href="'.$url.$get_site.'=1">1</a>
</td>
<td class="dots">
<div class="inf_txt">Sprung zu Seite</div>
<div class="info_text">Seitenzahl eingeben, Bestätigen.</div>
<form>
<input type="number" placeholder="..." class="numbi" min="1" max="'.$maxseite.'" name="seite" value="...">
</form>
</td>';
else
$return.='<td class="start">
<a href="'.$url.$get_site.'=1">1</a>
</td>';
}
foreach($blaetter AS $blatt)
{
if ($blatt == $seite)
$return.='<td class="currentpage">
<div class="inf_ktxt">Sprung zu Seite</div>
<div class="info_ktext">Klick oder Doppelklick, Seitenzahl wählen, Bestätigen.</div>
<form>
<input selected class="numbi"
min="1" max="'.$maxseite.'"
name="seite"
value="'.$blatt.'"
type="number">
</form>
</td>
<td class="little">
von '.$maxseite.'
</td>';
else
$return.='<td class="page">
<a href="'.$url.$get_site.'='.$blatt.'">'.$blatt.'</a>
</td>';
}
if (!in_array($maxseite, $blaetter) AND count($blaetter) > 1)
{
if (!in_array(($maxseite - 1), $blaetter))
$return.='<td class="dots">
<div class="inf_txt">Sprung zu Seite</div>
<div class="info_text">Seitenzahl eingeben, Bestätigen.</div>
<form>
<input type="number" placeholder="..." class="numbi" min="1" max="'.$maxseite.'" name="seite" value="...">
</form>
</td>
<td class="page">
<a href="'.$url.$get_site.'='.$maxseite.'">'.$maxseite.'</a>
</td>';
else
$return.='<td class="end">
<a href="'.$url.$get_site.'='.$maxseite.'">'.$maxseite.'</a>
</td>';
}
if(empty($return))
return "";
else
return $return;
}
?>
{
if ($anzahl % 2 != 0) $anzahl ++;
$a=$seite-($anzahl/2);
$b=0;
$blaetter=array();
while ($b <= $anzahl)
{
if ($a > 0 AND $a <= $maxseite)
{
$blaetter[] = $a;
$b ++;
}
else if
(
$a > $maxseite AND ($a - $anzahl - 2) >= 0)
{
$blaetter = array();
$a -= ($anzahl + 2);
$b=0;
}
else if
(
$a > $maxseite AND ($a - $anzahl - 2) < 0)
{
break;
}
$a ++;
}
$return = "";
if (!in_array(1, $blaetter) AND count($blaetter) > 1)
{
if (!in_array(2, $blaetter))
$return.='<td class="start">
<a href="'.$url.$get_site.'=1">1</a>
</td>
<td class="dots">
<div class="inf_txt">Sprung zu Seite</div>
<div class="info_text">Seitenzahl eingeben, Bestätigen.</div>
<form>
<input type="number" placeholder="..." class="numbi" min="1" max="'.$maxseite.'" name="seite" value="...">
</form>
</td>';
else
$return.='<td class="start">
<a href="'.$url.$get_site.'=1">1</a>
</td>';
}
foreach($blaetter AS $blatt)
{
if ($blatt == $seite)
$return.='<td class="currentpage">
<div class="inf_ktxt">Sprung zu Seite</div>
<div class="info_ktext">Klick oder Doppelklick, Seitenzahl wählen, Bestätigen.</div>
<form>
<input selected class="numbi"
min="1" max="'.$maxseite.'"
name="seite"
value="'.$blatt.'"
type="number">
</form>
</td>
<td class="little">
von '.$maxseite.'
</td>';
else
$return.='<td class="page">
<a href="'.$url.$get_site.'='.$blatt.'">'.$blatt.'</a>
</td>';
}
if (!in_array($maxseite, $blaetter) AND count($blaetter) > 1)
{
if (!in_array(($maxseite - 1), $blaetter))
$return.='<td class="dots">
<div class="inf_txt">Sprung zu Seite</div>
<div class="info_text">Seitenzahl eingeben, Bestätigen.</div>
<form>
<input type="number" placeholder="..." class="numbi" min="1" max="'.$maxseite.'" name="seite" value="...">
</form>
</td>
<td class="page">
<a href="'.$url.$get_site.'='.$maxseite.'">'.$maxseite.'</a>
</td>';
else
$return.='<td class="end">
<a href="'.$url.$get_site.'='.$maxseite.'">'.$maxseite.'</a>
</td>';
}
if(empty($return))
return "";
else
return $return;
}
?>
Seitenausgabe gehört in den Inhaltsbereich
<?php
echo'<table><tr>';
if ($seite != 1)
{
echo'<td class="prevs">
<a href="'.$url.$get_site.'=1"> ❮❮ </a>
</td>';
echo'<td class="prev">
<a href="'.$url.$get_site.'='.($seite - 1).'"> < </a>
</td>';
}
echo blaettern($seite, $seiten);
if ($seite != $seiten)
{
echo'<td class="next">
<a href="'.$url.$get_site.'='.($seite + 1).'"> > </a>
</td>';
echo'<td class="nexts">
<a href="'.$url.$get_site.'='.$seiten.'"> ❯❯ </a>
</td>';
}
echo'</tr></table>';
if ($seite != 1)
{
echo'<td class="prevs">
<a href="'.$url.$get_site.'=1"> ❮❮ </a>
</td>';
echo'<td class="prev">
<a href="'.$url.$get_site.'='.($seite - 1).'"> < </a>
</td>';
}
echo blaettern($seite, $seiten);
if ($seite != $seiten)
{
echo'<td class="next">
<a href="'.$url.$get_site.'='.($seite + 1).'"> > </a>
</td>';
echo'<td class="nexts">
<a href="'.$url.$get_site.'='.$seiten.'"> ❯❯ </a>
</td>';
}
echo'</tr></table>';
?>
Eignet sich für hunderte von Seitenaufteilungen.
Verkürzte Darstellung: ohne Formatierung,
kann etwa so aussehen:
Verkürzte Darstellung: ohne Formatierung,
kann etwa so aussehen: