gelöschter Benutzer
Blätterfunktion
Hallo zusammen!
Ich habe im Web ein Script zum Blättern gefunden und in meine Buch-Archiv-Geschichte per include eingebaut und angepasst.
mysql_select_db('140_archiv', $db);
$sql = "select id from Tabelle1";
if (!isset($_REQUEST['Total']))
{
$result = mysql_query($sql);
$Total = mysql_num_rows($result);
unset($result);
}
else
{
$Total = $_REQUEST['Total'];
}
if (!isset($_REQUEST['Seite']))
{
$Seite = 1;
}
else
{
$Seite = $_REQUEST['Seite'];
}
if ($Seite > $Total) $Seite = $Total;
$ProSeite = 10;
$LinksZahl = 7;
$SeitenZahl = ceil($Total/$ProSeite);
if ($LinksZahl % 2 == 0) $LinksZahl++;
$NumerischeLinks = ($LinksZahl - 1) / 2;
$url = $_SERVER['PHP_SELF'];
$sql .= " limit ". ($Seite * $ProSeite - $ProSeite) .", ".$ProSeite;
$result = mysql_query($sql);
mysql_close($db);
$AuslassungszeichenVorn = '';
$AuslassungszeichenHinten = '';
$AnfangLink = '';
$EndeLink = '';
$ZurueckLink = '';
$WeiterLink = '';
$SichtbareLinks = '';
if ($SeitenZahl > 1)
{
$Nr = $Seite - $NumerischeLinks;
$Anzeige = 0;
while ($Nr <= $SeitenZahl)
{
if ($Nr < 1) {$Nr++; continue;}
elseif ($Nr > $Seite + $NumerischeLinks) {break;}
if ($Nr == $Seite) {$SichtbareLinks .= " $Nr";}
else {$SichtbareLinks .= ' '.$Nr.'';}
$Nr++;
$Anzeige++;
}
}
if ($Seite > 1)
{
$AnfangLink = ' Anfang';
if ($Seite - 1 > 1)
{
$ZurueckLink = ' Zurck';
}
}
if ($Seite < $SeitenZahl)
{
$EndeLink = ' Ende';
if ($Seite + 1 < $SeitenZahl)
{
$WeiterLink = ' Weiter';
}
}
if ($Seite - $NumerischeLinks > 1)
{
$AuslassungszeichenVorn = ' ...';
}
if ($Seite + $NumerischeLinks < $SeitenZahl)
{
$AuslassungszeichenHinten = ' ...';
}
$Nav = $AnfangLink;
$Nav .= $ZurueckLink;
$Nav .= $AuslassungszeichenVorn;
$Nav .= $SichtbareLinks;
$Nav .= $AuslassungszeichenHinten;
$Nav .= $WeiterLink;
$Nav .= $EndeLink;
print $Nav;
if ($SeitenZahl > $Anzeige)
{
print "
Seiten: $SeitenZahl
Gehe zu Seite
";
echo '
<form action="'.$url.'" method="post">
<input type="text" size="3" name="Seite"></input>
<input type="submit" value="Los"></input>
<input type="hidden" name="Total" value="'.$Total.'"></input>
</form>
';
}
Das funktioniert ja auch soweit, wie man am Ende der verlinkten Seite sehen kann.
Nur leider werden nicht die gesetzten 10 Datensätze angezeigt, sondern wie man sieht alle.
Nun ist das nicht so, das ich die Logik im Script nicht verstehe. Was mir bezüglich php fehlt, ist das Wissen über die Syntax.
Ich schätze mal, das die leeren Teile einiger DS hier das Problem sind
Für evtl. aufs Problem aufmerksam machen bedanke ich mich schon mal im voraus.
Gruß
Marcus
Raptor
IT-Student
Content Gott (1013 Beiträge)
gelöschter Benutzer
Beide Code Beispiele sind ziemlich schlecht, allein schon wegen diesen stellen:
[sql]select id from Tabelle1;
SELECT * FROM tabelle WHERE spalte=\'iwas\' ORDER BY iwas[/sql]
Stellt euch da mal eine richtige Tabelle vor mit mehr als 1.000 Einträgen.
Ihr würdet immer alles abfragen obwohl ihr nur 10 DS braucht, sowas geht gar nicht.
Dadurch würde eine Datenmenge Transferiert die die Seite extrem verlangsamt und sogar zum Absturz des Server führen kann, das hab ich sogar schon mal erlebt.
Die Schuld wurde einen DDos Angiff gegeben, dabei war es der Betreiber selbst.
matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
Ultimas Einwand ist berechtigt, ich nutze folgendes und denke, das ist wesentlich besser:
$seite = (!empty($_GET[\'seite\'])) ? (int) $_GET[\'seite\'] : 1)-1; //Seitenzahl, erste Seite = 0
$anzeige = 10; //anzuzeigende Einträge pro Seite;
$erg=$db->query(\'SELECT SQL_CALC_FOUND_ROWS spalte
FROM tabelle
ORDER BY spalte LIMIT \'.$seite*$anzeige.\',\'.$anzeige); //gibt nur $anzeige Zeilen zurück
$gesamtzahlEintraege=$db->query(\'SELECT FOUND_ROWS();\'); //enthält die Gesamtzahl der Zeilen der Abfrage
//Einträge ausgeben
mach dies, tu jenes
//Seitenausgeben
$anzahlSeiten=ceil($gesamtzahlEintraege/$anzeige);
//Links zu den Seiten ausgeben
Make Seitenreport great again!
gelöschter Benutzer
Es ist wesentlich besser. Es wird genau das abgefragt was benötigt wird.
Und eine noch bessere Lösung als SQL_CALC_FOUND_ROWS hab ich bisher noch nie gesehen.
UFOMelkor
Student
Content Meister (350 Beiträge)
Das Seitenreport Forum hat aktuell 5275 Themen und 36110 Beiträge.
Insgesamt sind 48360 Mitglieder registriert.
Beitrag erstellen
EinloggenKostenlos registrieren