pager script gesucht!

Hallo Leute,
ich habe eine Seite ilpendritsch die ich nun mit einer datenbank erweitern will.

ich brauche dazu noch ein script, dass mir erlaubt nach x datensätzen iene neue seite zu machen.

als beispiel.
ganz unten steht die seitenauswahl mit 1-20, 21-40 usw.
kann mir jemand helfen?
danke schonmal im vorraus!
MfG Fabian​
 
Naja schreib dir halt ein Script das die Variable "VON" und "BIS" auswertet und gib dann
anhand dieser 2 Variablen die passenden Datensätze aus.

Und unter an die Seite setzt du dann noch einen Link ala
PHP:
echo('<a href="x.php?von='.$bis.'&bis='.$bis+10.'">');


Xalon

P.S:voraus mit einem r :P
 
Das ist jetzt ein bischen umständlich aber sollte funktionieren

PHP:
<?php
$seite = 2;//Seite auf der du bist
$eintraege_pro_seite = 15;//Einträge pro Seite

$seite2 = $seite * $eintraege_pro_seite; //Maximale Seite

$seite3 = $seite2 - $eintraege_pro_seite + 1; //Minimale Seite

echo "".$seite3." - ".$seite2."";
?>

das muss du dann nur noch an deinen Skript anpassen

mfg
 
Hi,
ich weiß das ich ne null bin, aber ich hab noch zwei fragen.

1. Wie kann ich des in en template einbauen?

2. Wie kann ich nach x Seiten ne neue zeile machen?
Seite:1-20 21-40​
41-60 61-80​

thx ich glaub dann wars alles ;) Fabi
 
Hi

Ich hab es nicht getestet sollte aber gehen

PHP:
<?php 
$seite = $_GET["seite"];  //Abfrage auf welcher Seite man ist 

//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1 
if(!isset($seite)) 
   { 
   $seite = 1; 
   } 

//Verbindung zu Datenbank aufbauen 

$link = mysql_connect("localhost","Username","Passwort") or die ("Keine Verbindung moeglich"); 
mysql_select_db("Datenbank") or die ("Die Datenbank existiert nicht"); 


//Einträge pro Seite: Hier 15 pro Seite 
$eintraege_pro_seite = 15; 

//Ausrechen welche Spalte man zuerst ausgeben muss: 

$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite; 


//Tabelle Abfragen 
//Tabelle heißt hier einfach: Tabelle 
$abfrage = "SELECT * FROM Tabelle LIMIT $start, $eintraege_pro_seite"; 
$ergebnis = mysql_query($abfrage); 
while($row = mysql_fetch_object($ergebnis)) 
    { 
   echo $row->id."<br>"; // Hier die Ausgabe der Einträge 
   } 


//Jetzt kommt das "Inhaltsverzeichnis", 
//sprich dort steht jetzt: Seite: 1 2 3 4 5 


//Wieviele Einträge gibt es überhaupt 

//Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten 
//also der gleiche Text wie in der Variable $abfrage, bloß das hier das LIMIT fehlt 
//Sonst funktioniert die Blätterfunktion nicht richtig, 
//und hier kann nur 1 Feld abgefragt werden, also id 

$result = mysql_query("SELECT id FROM Tabelle"); 
$menge = mysql_num_rows($result); 

//Errechnen wieviele Seiten es geben wird 
$wieviel_seiten = $menge / $eintraege_pro_seite; 

//Ausgabe der Seitenlinks: 
echo "<div align=\"center\">"; 
echo "<b>Seite:</b> "; 

$seite2 = $seite * $eintraege_pro_seite; //Maximale Seite
$seite3 = $seite2 - $eintraege_pro_seite + 1; //Minimale Seite


//Ausgabe der Links zu den Seiten 
for($a=0; $a < $wieviel_seiten; $a++) 
   { 
   $b = $a + 1; 

   //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben 
   if($seite == $b) 
      { 
      echo "  <b>$b</b> "; 
      } 

   //Aus dieser Seite ist der User nicht, also einen Link ausgeben 
   else 
      { 
      echo "  <a href=\"?seite=".$b."\">".$seite3." - ".$seite2."</a> "; 
      } 


   } 
echo "</div>"; 
?>

2. Wie kann ich nach x Seiten ne neue zeile machen?

sry weiss nicht was du meinst


mfg ba2
 
In ba2s Script gibt es einen kleinen Fehler:
In Zeile 6 Fragst du ab ob $seite existiert, die existiert auf jeden Fall da du $seite vorher mit dem Inhalt von $_GET['seite'] gefuellt hast, egal ob sie leer ist oder nicht, also entweder Zeile 6, als:
Code:
if (isset($_GET['seite']))
oder
Code:
if ($seite !=  '')

Habs nur kurz beim ueberfliegen gesehen, soll keine Kritik sein :)

mfg
c1b

EDIT:/ Falscher Smiley erwischt..
 
@ c1b

Das Skript ist nicht von mir ich habe es nur für "Ilpendritsch" angepasst.

:)

EDIT:

Ich denke nicht das es ein Fehler ist, kann mich aber auch irren.


mfg ba2
 
sry ich hab mich falsch ausgedrückt^^

ich meinte wie kann ich in der navigation nach x seiten einen zeilenumbruch erzwingen?

und wie kann ich dieses script in ein Template einbauen?
ich hab mit der if anweisung probleme ( wie ich sie einbauen kann)
 
in zeile 76 fuege das hinzu:
Code:
$site_check = $b / 10;
if (is_integer($site_check)) { echo('<br />'); }

Die 10 durch die anzahl der seiten ersetzen nachdenen ein Zeilenumbruch kommen soll.
$b wird 10 geteilt, wenn eine Ganzzahl (1;2;3;4..) rauskommt, dann wird der Zeilenumbruch durchgefuehrt, wenn eine Fliesskommazahl (1,23; 4,34..) rauskommt nicht.

Sollte funktionieren..

Fuer den einbau in eine Template enginge, kannst du anstatt echo, alles in einer Variable speichern und diese dann zuweisen, z.B.:
Code:
while($row = mysql_fetch_object($ergebnis)) 
    { 
      $template_variable .= $row->id."<br>"; // eintraege werden in der in der Variable gespeichert 
   }
 
welches template system?

Das Beispiel Skript kannst du auf deiner Seite ganz normal mit den Befehl include einbinden
 
also...
mein script sieht so aus
PHP:
$seite = $_GET["seite"];  //Abfrage auf welcher Seite man ist

//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($seite))
   {
   $seite = 1;
   }

//Verbindung zu Datenbank aufbauen

$link = mysql_connect("localhost","Username","Passwort") or die ("Keine Verbindung moeglich");
mysql_select_db("Datenbank") or die ("Die Datenbank existiert nicht");


//Einträge pro Seite: Hier 15 pro Seite
$eintraege_pro_seite = 10;

//Ausrechen welche Spalte man zuerst ausgeben muss:

$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;


//Tabelle Abfragen
//Tabelle heißt hier einfach: Tabelle

// Liste fuellen
$query = $mysql->query("SELECT * FROM tabelle Limit $start, $eintraege_pro_seite");
while($arr = $query->fetch_assoc())
{
   $tabelle[] = $arr;   
}


//Jetzt kommt das "Inhaltsverzeichnis",
//sprich dort steht jetzt: Seite: 1 2 3 4 5


//Wieviele Einträge gibt es überhaupt

//Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
//also der gleiche Text wie in der Variable $abfrage, bloß das hier das LIMIT fehlt
//Sonst funktioniert die Blätterfunktion nicht richtig,
//und hier kann nur 1 Feld abgefragt werden, also id

$result = mysql_query("SELECT id FROM tabelle");
$menge = mysql_num_rows($result);

//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;

//Ausgabe der Seitenlinks:
echo "<div align=\"center\" class=\"schrift_normal\"><table><tr>";
//echo "<b>Seite:</b> ";

//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
   {
   $b = $a + 1;

$seite2 = $b * $eintraege_pro_seite; //Maximale Seite

$seite3 = $seite2 - $eintraege_pro_seite + 1; //Minimale Seite

$c = $b - 1;

$site_check = $c / 6;
//if (is_integer($site_check)) { echo('<br />'); }
if (is_integer($site_check)) {
echo('</tr><tr>');
    	}


   //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
   if($seite == $b)
      {
      echo "<td align=\"center\"><b>".$seite3."-".$seite2."</b></td>";
      }

   //Aus dieser Seite ist der User nicht, also einen Link ausgeben
   else
      {
      echo "<td align=\"center\"><b><a href=\"index.php?TEMPLATE=cartoons&seite=$b\" class=\"b\">[".$seite3."-".$seite2."]</a></b></td>";
      }


   }
echo "</tr></table></div>";

und wie kann ich das in nen template system einbauen?

PHP:
//Jetzt kommt das "Inhaltsverzeichnis",
//sprich dort steht jetzt: Seite: 1 2 3 4 5


//Wieviele Einträge gibt es überhaupt

//Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
//also der gleiche Text wie in der Variable $abfrage, bloß das hier das LIMIT fehlt
//Sonst funktioniert die Blätterfunktion nicht richtig,
//und hier kann nur 1 Feld abgefragt werden, also id

$result = mysql_query("SELECT id FROM tabelle");
$menge = mysql_num_rows($result);

//Errechnen wieviele Seiten es geben wird
$wieviel_seiten = $menge / $eintraege_pro_seite;

//Ausgabe der Seitenlinks:
echo "<div align=\"center\" class=\"schrift_normal\"><table><tr>";
//echo "<b>Seite:</b> ";

//Ausgabe der Links zu den Seiten
for($a=0; $a < $wieviel_seiten; $a++)
   {
   $b = $a + 1;

$seite2 = $b * $eintraege_pro_seite; //Maximale Seite

$seite3 = $seite2 - $eintraege_pro_seite + 1; //Minimale Seite

$c = $b - 1;

$site_check = $c / 6;
//if (is_integer($site_check)) { echo('<br />'); }
if (is_integer($site_check)) {
echo('</tr><tr>');
    	}


   //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
   if($seite == $b)
      {
      echo "<td align=\"center\"><b>".$seite3."-".$seite2."</b></td>";
      }

   //Aus dieser Seite ist der User nicht, also einen Link ausgeben
   else
      {
      echo "<td align=\"center\"><b><a href=\"index.php?TEMPLATE=cartoons&seite=$b\" class=\"b\">[".$seite3."-".$seite2."]</a></b></td>";
      }


   }
echo "</tr></table></div>";
 
also schon mal gesagt ich kenn mich mit templates nich so au, ich hab eins aus irgendeinem buch. es gibt zwei dateien einmal engine.inc.php und index.php

engine.inc.php
PHP:
class SimpleTemplate
{
   private $templateCode;
   private $templateHtml;
   
   const COMMENT = '/<!-- #(.+):(.+)\s+--(>)/iU';
   
   public function __construct($html = '', $code = '')
   {
      $this->templateCode = $code;
      $this->templateHtml = $html;
   }

   public function __set($prop, $value)
   {
      switch ($prop)
      {
          case 'Html':
              $this->templateHtml = $value;
              break;
          case 'Code':
              $this->templateCode = $value;
              break;
      }
   }
   
   public function __get($prop)
   {
      switch ($prop)
      {
          case 'Html':
              return $this->templateHtml;
          case 'Code':
              return $this->templateCode;
      }
   }
   
   public function RunTemplate()
   {
       if (strlen($this->templateHtml) > 0 && file_exists($this->templateHtml))
       {
          // Template Laden
          $html = file_get_contents($this->templateHtml);
       } 
       else 
       {
           die ('Fehler: Vorlage konnte nicht gefunden werden. ');
       }
       // Wiederholungen aufdroeseln
       $matches = array();
       $blocksFound = preg_match_all(self::COMMENT, $html, $matches, PREG_OFFSET_CAPTURE);
       if ($blocksFound)
       {
          $page = '';
          // var_export($matches);
          // 0: Array der Kommentaranfaenge
          // 1: TAGs
          // 2: Variablen
          // 3: Ende-Offset
          if (is_array($matches))
          {    
              $startBlock = $lastStartBlock = 0;          
              for ($i = 0; $i < count($matches[1]); $i++)
              {
                  $token = strtoupper($matches[1][$i][0]);
                  $offsetComment = (int)$matches[0][$i][1];
                  $offsetContent = ((int)$matches[3][$i][1]) + 1;
                  $variableName = $matches[2][$i][0];
                  switch ($token)
                  {
                      case 'REPEAT':
                         $startBlock = $offsetContent;
                         $startComment = $offsetComment; 
                         break;
                      case 'ENDREPEAT':                      
                         $block = substr($html, $startBlock, $offsetComment - $startBlock);
                         $block = $this->repeatBlock($block, $variableName);
                         $len = $startComment - $lastStartBlock;
                         $page .= substr($html, $lastStartBlock, $len).$block;
                         $lastStartBlock = $offsetContent;
                         break;
                      case 'IF':
                         // Vor dem IF den Rest der Seite vom letzten Code ausgeben
                         $page .= substr($html, $lastStartBlock, $offsetComment - $lastStartBlock); 
                         $startBlock = $offsetContent;
                         $startComment = $offsetComment;
                         break; 
                      case 'ENDIF':
                         global $$variableName;
                         $len = $startComment - $lastStartBlock;
                         $lastStartBlock = $offsetContent;
                         if (isset($$variableName))
                         {
                             // substr($html, $lastStartBlock, $len).
                             $page .= substr($html, $startBlock, $offsetComment - $startBlock);
                         }
                         break; 
                  }
              }
              // Rest der Seite
              $page .= substr($html, $offsetContent);
          }
       } 
       else
       {
           // Wenn kein Code enthalten
           $page = $html;
       }
       echo ($this->varReplace($page));
    }
    
    private function repeatBlock($block, $varName)
    {
        global $$varName;
        $result = '';
        if (is_array($$varName))
        {
            $this->index = 0;
            if (count($$varName) > 0)
            {
                foreach ($$varName as $value)
                {
                    $result .= $this->arrayReplace($block);
                    $this->index++;                       
                }
            }
        } 
        return $result;
    }
    
    private $index = 0;
    
    private function replaceArray($repl)
    {
        global $$repl[1];
        $arr = $$repl[1];
        return $arr[$this->index][$repl[2]];
    }

    private function replaceSkalar($repl)
    {
        global $$repl[1];
        return $$repl[1];
    }
    
    private function arrayReplace($block)
    {
        $block = preg_replace_callback('/\{\$([^:}]*):(.+)\}/U', array($this, 'replaceArray'), $block);
        return $block;
    }
    
    private function varReplace($block)
    {
        $block = preg_replace_callback('/\{\$(.+)\}/U', array($this, 'replaceSkalar'), $block);
        return $block;
    }
    
}
$__template = isset($_GET['TEMPLATE']) ? $_GET['TEMPLATE'] : '';
return new SimpleTemplate($__template);
und index.php
PHP:
$engine = include_once('engine.inc.php');
if (!isset($_GET['TEMPLATE']))
{
    $engine->Html = 'start.html';
    $engine->Code = 'start.php';
} 
else 
{
    $engine->Html = "{$_GET['TEMPLATE']}.html";
    $engine->Code = "{$_GET['TEMPLATE']}.php";
}
if (strlen($engine->Code) > 0 && file_exists($engine->Code))
{       
    include_once($engine->Code);
}
$engine->RunTemplate();
 
Dank unserem lieben throjan geht der Thread nun wieder. (Schuld waren die ewig langen PHPcodelistings.)
Für die Zukunft solltest du/ solltet ihr sehr große PHPDatein lieber an den Thread anhängen als sie zu posten, damit sowas nicht nochmal vorkommt.

püppi
 
Zurück
Oben