Du bist hier: Seitenreport    Forum    Web-Entwicklung    PHP & MySQL    Blätterfunktion

Blätterfunktion

Verfasst am: 26. 09. 2010 [21:18]
Gelöschter Benutzer
Beitrag hilfreich?

Hallo zusammen!

Ich habe im Web ein Script zum Blättern gefunden und in meine Buch-Archiv-Geschichte per include eingebaut und angepasst.

PHP
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 .= ' <a href="'.$url.'?Seite='.$Nr.'&Total='.$Total.'">'.$Nr.'</a>';}
     $Nr++;
     $Anzeige++;
  }
}
 
if ($Seite > 1)
{
  $AnfangLink = ' <a href="'.$url.'?Seite=1&Total='.$Total.'">Anfang</a>';
  if ($Seite - 1 > 1)
  {
    $ZurueckLink = ' <a href="'.$url.'?Seite='.($Seite-1).'&Total='.$Total.'">Zurck</a>';
  }
}
 
if ($Seite < $SeitenZahl)
{
  $EndeLink = ' <a href="'.$url.'?Seite='.$SeitenZahl.'&Total='.$Total.'">Ende</a>';
  if ($Seite + 1 < $SeitenZahl)
  {
    $WeiterLink = ' <a href="'.$url.'?Seite='.($Seite+1).'&Total='.$Total.'">Weiter</a>';
  }
}
 
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

[Dieser Beitrag wurde 2mal bearbeitet, zuletzt am 26.09.2010 um 21:20.]
 
Verfasst am: 26. 09. 2010 [21:40]
Raptor
Dabei seit: 10.05.2009

1159 Beiträge
Beitrag hilfreich?

Sali,

ich hatte selbst mal eine solche Paginator-Funktion für 3 verschiedene Datentypen geschrieben:
http://floern.com/webscripting/paginator

Vielleicht nützt dir das was.

 
Verfasst am: 26. 09. 2010 [22:02]
Ultima
Dabei seit: 09.07.2010

759 Beiträge
Beitrag hilfreich?

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


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.

 
Verfasst am: 26. 09. 2010 [23:07]
Matthes
Dabei seit: 08.05.2010

174 Beiträge
Beitrag hilfreich?

Ultimas Einwand ist berechtigt, ich nutze folgendes und denke, das ist wesentlich besser:
PHP
$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


Mal: "May have been the losing side. Still not convinced it was the wrong one."
 
Verfasst am: 26. 09. 2010 [23:44]
Ultima
Dabei seit: 09.07.2010

759 Beiträge
Beitrag hilfreich?

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.

[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 26.09.2010 um 23:44.]

 
Verfasst am: 27. 09. 2010 [22:50]
UFOMelkor
Dabei seit: 20.10.2009

348 Beiträge
Beitrag hilfreich?

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.

 




Du bist nicht eingeloggt. Bitte beachte, dass Du eingeloggt sein musst, um Themen zu erstellen oder auf Beiträge zu antworten.

RSS Feed abonnieren

Werde in Echtzeit über neue Foren-Beiträge informiert:



2 Mitglieder waren innerhalb der letzten 15 Minuten online (40 heute gesamt):
romacron, wodadt

Administratoren und Moderatoren:
[keine]

Seitenreport hat 18153 registrierte Mitglieder, 3003 Themen und 29112 Beiträge.
Der aktuelle Mitgliederzuwachs liegt bei durchschnittlich 12 bestätigten Neuregistrierungen pro Tag.
Pro Tag werden im Seitenreport Forum durchschnittlich 1 neues Thema und 7 Beiträge erstellt.
Die Durchschnittszahlen berechnen sich aus den letzten 7 Tagen.

Mehrfach empfohlen

Seitenreport ist einer der bekanntesten SEO und Website Analyse Dienste im deutschsprachigen Raum und wurde u.a. schon empfohlen:
von Mr. Wong im Wong Letter
vom Leserservice der Deutschen Post
vom Technik Blog SiN
und vielen anderen

Partnerprogramm

12% Lifetime Provision auf alle Buchungen von Dir geworbener Mitglieder sowie 0,50 € für jede Registrierung. Eines der besten deutschen Partnerprogramme laut den appCharts von 100partnerprogramme.de. Nimm jetzt teil am Seitenreport Partnerprogramm und verdiene gutes Geld dabei!

* = Partnerlinks