gelöschter Benutzer

Blätterfunktion

am 26.09.2010, 21:18 Uhr eröffnete folgenden Thread
PHP & MySQL    1676 mal gelesen    5 Antwort(en).

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
Avatar Raptor
IT-Student
Content Gott (1013 Beiträge)
am 26.09.2010, 21:40 Uhr schrieb Raptor

Sali,

ich hatte selbst mal eine solche Paginator-Funktion für 3 verschiedene Datentypen geschrieben:

floern.com/webscripting/paginator



Vielleicht nützt dir das was.


Meine Developer-Website mit den Web-Entwickler-Tools.
Meine Web-Entwicklungs-Dienstleistungen

[url="http://www.seitenreport.de/forum/beitraege/seitenreport_verlosungen/wichtig_neue_regel


gelöschter Benutzer
am 26.09.2010, 22:02 Uhr schrieb

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
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 26.09.2010, 23:07 Uhr schrieb matthes

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
am 26.09.2010, 23:44 Uhr schrieb

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
Avatar UFOMelkor
Student
Content Meister (350 Beiträge)

  • 1


« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5273 Themen und 36107 Beiträge.
Insgesamt sind 48345 Mitglieder registriert.