VPNwelt.com sucht Feedback Wie der Name schon sagt handelt es sich um eine Review Website für…
von: florian.berg.privat
Versuch Backlinks oder Keywords zu erstellen. Dein Content muss auch gut sein. Hier ein Artikel das…
von: welkercarmen5
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
Sali,
ich hatte selbst mal eine solche Paginator-Funktion für 3 verschiedene Datentypen geschrieben:
floern.com/webscripting/paginator
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.
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
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.
Aber auch nicht immer empfehlenswert:
http://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
http://phpperformance.de/sql_calc_found_rows-oder-wie-man-effektiv-blaetternavigationen-umsetzt/
Allheilmittel gibt es in der Informatik halt leider nicht.
Beitrag erstellen
EinloggenKostenlos registrieren