Blätter funktion erweitern

Loddar1

Erfahrenes Mitglied
Hallo und Guten Morgen alle
Ich habe eine Blätter Funktion in meiner Seite, zum Beispiel Gästebuch die sieht so aus:
PHP:
$basic['gbseite'] = 10; // kommt eigentlich aus DB

stmt = $mysqli->prepare("SELECT COUNT(*) FROM gbuch ORDER BY id");
$stmt->execute();
$rower = $stmt->get_result()->fetch_row();
$number = $rower[0];
$seiten=ceil($number/$basic['gbseite']);
$start=$np * $basic['gbseite'];
$stmt = $mysqli->prepare("SELECT name, inhalt, datum, mail FROM gbuch ORDER BY datum DESC LIMIT $start,$basic[gbseite]");
$stmt->execute();
$resultl = $stmt->get_result();
while ($l = $resultl->fetch_assoc())
{
  ... Code ...
}

$now=$np+1;
for($i=0; $i < $seiten; $i++)
 {
  $now2=$i+1;
  if ($i==$np)
   {
    $leiste.='<span>'.$now2.'</span>&nbsp;';
   }
    else
  {
   $leiste.='<span><a href="index.php?sid='.IntVal($sid).'&np='.IntVal($i).'">'.$now2.'</a></span>&nbsp;';
  }
 }
echo'<div class="leiste">'.$leiste.'</div>';

Sieht bei 30 einträgen in etwa so: 1 2 3 aus.

Wenn ich aber 150 Einträge habe würde es etwa so 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 aussehen.
Wie kann ich diese Seiten so aussehen lassen wie zB hier im Forum.
Habe keinen Ansatz..

Danke im vorraus für Hilfe
 
Als algorithmus?
Nehmen wir an, du willst es so anzeigen wie in meinem Beispiel (Im Beispiel 8 "echt" anzeigte Seitennummern)
1) Prüfe ob Anzahl Seiten > 8
Falls Ja
2) Baue deine "Leiste" zusammen:
a) baue zusammen "1", "2", "3" und "4"
b) setze Punkte (oder anstatt Punkte, die nichts machen, ein Feld "Springe direkt zu Seite")
c) baue zusammen "viert-letzte", "dritt-letzte", "vor-letzte" und "letzte" Seite zusammen

Wenn du die "Seiten" in einem Array hast,
kannst du für a) ein For 1 to 4 machen, gefolgt von b), gefolgt von For Letzte-3 To Letzte für c)
(und fangt jetzt nicht an, dass Array 0-basiert sind.... ist nur für den Algorithmus)

Du siehst, dass du auch anstatt 8 auch nur 6 Seiten anzeigen kannst. Ändern sich nur die Array-Grenzen
 
Hi Zwoni, Danke für deine Mühe
habe im Netz was gefunden was ich dank deines Beitrags auch verstehe und es sieht fast so aus wie hier.
Ich weis aber nicht ob ich das hier veröffentlichen darf bzw einen Link dorthin setzen darf.
 
xampp php 8.1.4

Ich hab da mal eine Frage:
PHP:
 function blaetterfunktion($seite,$maxseite,$url="index.php?sid=16",$anzahl=4,$get_name="seite")
   {
   if(ereg("\?",$url)) $anhang = "&";
   else $anhang = "?";

   if(substr($url,-1,1) == "&") {
      $url = substr_replace($url,"",-1,1);
      }
   else if(substr($url,-1,1) == "?") {
      $anhang = "?";
      $url = substr_replace($url,"",-1,1);
      }
Funktioniert!
aber wie kann ich
PHP:
 function blaetterfunktion($seite,$maxseite,$url="index.php?sid=$sid",$anzahl=4,$get_name="seite")
   {
   if(ereg("\?",$url)) $anhang = "&";
   else $anhang = "?";

   if(substr($url,-1,1) == "&") {
      $url = substr_replace($url,"",-1,1);
      }
   else if(substr($url,-1,1) == "?") {
      $anhang = "?";
      $url = substr_replace($url,"",-1,1);
      }
benutzen?
es kommt die Fehlermeldung:
Fatal error: Constant expression contains invalid operations in C:\xampp\htdocs\html\ordner\ordner\testen.php on line 59

line 59 = function blaetterfunktion($seite,$maxseite,$url="index.php?sid=$sid",$anzahl=4,$get_name="seite")

eine variable verursacht diese Fehlermeldung.

Habe gesucht und gefunden das es gewandelt werden muß aber wie?
PHP:
class Foo {
protected static string $geturl = DBNAME;
public static function debug(): string
  {
   return Foo::$geturl;
  }
}
$appdata = [
    'id' => $sid,
];
define('DBNAME', 'index.php?sid='.$appdata['id']);
$prij=(Foo::debug());
echo $geturl; = // index.php?sid=16
das wandelt zwar um ist aber wieder eine variable

Meine Frage wie kann ich eine variable bei $url=" " einsetzen?

Danke im vorraus Loddar1
 
Wieso überhaupt
PHP:
$url="index.php?sid=$sid",
und warum nicht
PHP:
function blaetterfunktion($seite,$maxseite,$sid,$anzahl=4,$get_name="seite")
{
    $url = "index.php?sid=$sid";
    :
    :
}

Was mich aber viel mehr verwundert:
PHP:
if(ereg("\?",$url)) $anhang = "&";
Aus der Doku:
ereg — Sucht Übereinstimmungen mit einem regulären Ausdruck

Warnung
Diese Funktion wurde in PHP 5.3.0 als DEPRECATED (veraltet) markiert und in PHP 7.0.0 REMOVED entfernt.
Alternativ können die folgenden Funktionen verwendet werden:

 
Hi m. scatello zu warum
ich möchte das auch weiter benutzen ein link sieht dann so: Index..php?sid=$sid&jump=1&cat=$cat oder ähnlich.
Zu erreg bekomme ich keine Fehlermeldung. Kann ich aber ändern.
 
Zuletzt bearbeitet:
Hier mal meine änderung:
PHP:
function blaetterfunktion($seite,$maxseite,$url="",$anzahl=4,$get_name="np"){
$url .= "?".$_SERVER["QUERY_STRING"];
$pos = strpos($url, "&np");
if($pos != 0)
$url = substr($url, 0, $pos);      
$anhang = preg_match('/\&/', $url) ? '?' : '&';
 
Zuletzt bearbeitet:
Zurück