Die Seite wird nicht mehr geladen
Maus
- php
Hallo,
hab folgendes geamcht. Da ich in der Db geanuer gesagt in einer Tabelle sehr viele Daten habe, will ich die auf meherer Seiten verteilen. Das mache ich so:
<?php
unset($i);
// Anziegen der Einträge
$sql = "SELECT
id,
name,
straße,
platz,
ort,
telefon,
info,
url,
mail,
bild,
aktiv
FROM
cafes
ORDER BY
id DESC
LIMIT $start, $eintraege_pro_seite
"; //SQL String zum auslesen aller Datensätze aus der Datenbank
$result = mysql_query($sql);
//echo mysql_error(); ?>
<?php
while($db_cafes = mysql_fetch_array($result)) //Ergebnisse der Abfrage in Array laden und dieses Array in einer While-Schleife durchlaufen, bei jedem Durchlauf die Daten ausgeben
{
?>
<?php
$result = mysql_query("SELECT id FROM cafes");
$menge = mysql_num_rows($result);
$wieviel_seiten = $menge / $eintraege_pro_seite;
?>
Dann der DAtensatz rufe ich so ab:
<?php print stripslashes(nl2br(htmlentities($db_cafes["straße"])));
Und zum Schluss lass ich dann die Seiten anzahl ausgeben. Das mache ich so so:
echo "<b>Seite:</b> ";
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">$b</a> ";
}
}
echo "</div>";
?>
Ganz oben steht dann noch folgendes:
$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;
}
$eintraege_pro_seite = 16;
//Ausrechen welche Spalte man zuerst ausgeben muss:
$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
so aber nun läd er die Setie nimmer bzw. doch er versucht immer was zu laden aber schafft es wohl nicht mehr. Hmm an was kann das denn liegen?
Gruß Maus
Hallo Maus,
2 kleine Hinweise möchte ich dir geben. Ob damit dein Problem gelöst ist weiß ich nicht, mußt halt ausprobieren.
hab folgendes geamcht. Da ich in der Db geanuer gesagt in einer Tabelle sehr viele Daten habe, will ich die auf meherer Seiten verteilen. Das mache ich so:
FROM
cafes
ORDER BY
id DESC
LIMIT $start, $eintraege_pro_seite
[...]
$result = mysql_query("SELECT id FROM cafes");
$menge = mysql_num_rows($result);
$wieviel_seiten = $menge / $eintraege_pro_seite;
$wieviel_seiten ergibt immer einen Wert <= 1, da Du als $menge ja max. $eintraege_pro_seite hast.
//Aus dieser Seite ist der User nicht, also einen Link ausgeben
else
{
echo " <a href="?seite=$b">$b</a> ";
echo " <a href="".$_SERVER['PHP_SELF']."?seite=$b">$b</a> ";
Ansonsten empfehle ich dir, deinen Code besser zu strukturieren und in der Reihenfolge zu posten in der er abgearbeitet wird, dann kann man leichter helfen.
Grüsse
Frankie
Hallo,
$result = mysql_query("SELECT id FROM cafes");
$menge = mysql_num_rows($result);
$wieviel_seiten = $menge / $eintraege_pro_seite;
die Berechnung von "$wieviel_seiten" liefert nur dann das richtige Ergebnis, wenn sich $menge ohne Rest durch $eintraege teilen lässt. Die letzte Seite fehlt ansonsten. Bei weniger als 16 Einträgen war es das dann. Der Modulo Operator (%) ist genau das richtige für dich. Er liefert den Rest einer Division.
if($wieviel_seiten % $eintraege_pro_seite != 0)
wieviel_seiten++;
Grüße,
Jochen
Hallo Maxx,
die Berechnung von "$wieviel_seiten" liefert nur dann das richtige Ergebnis, wenn sich $menge ohne Rest durch $eintraege teilen lässt. Die letzte Seite fehlt ansonsten. Bei weniger als 16 Einträgen war es das dann.
Deine Aussage ist so nicht richtig. Siehe auch mein anderes Posting dazu. $wieviel_seiten ergibt immer einen Wert 0<=$wieviel_seiten<= 1, egal wieviele Einträge gezeigt werde sollen, zumindest im vorliegenden Fall "Maus". Ein Wert < 1 ergibt sich immer dann, wenn die Anzahl der gefundenen Datensätze kleiner als $eintraege_pro_seite ist, ansonsten ergibt sich immer der Wert 1 (oder 0, wenn keine DS gefunden wurden). Dass $wieviel_seiten, abgesehen von den im vorliegenden Fall möglichen Werten 0 oder 1, keine Ganzzahl ist, ist ein anderes Problem.
zum nachvollziehen:
$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
...
LIMIT $start, $eintraege_pro_seite
...
$menge = mysql_num_rows($result);
...
$wieviel_seiten = $menge / $eintraege_pro_seite;
...
Grüsse
Frankie
Hi Frankie,
die Berechnung von "$wieviel_seiten" liefert nur dann das richtige Ergebnis, wenn sich $menge ohne Rest durch $eintraege teilen lässt. Die letzte Seite fehlt ansonsten. Bei weniger als 16 Einträgen war es das dann.
Deine Aussage ist so nicht richtig.
doch,
$result = mysql_query("SELECT id FROM cafes");
$menge = mysql_num_rows($result);
$wieviel_seiten = $menge / $eintraege_pro_seite;
Auf genau diese 3 Zeilen bezog sich meine Aussage. Vermutlich ist dir entgangen, dass an dieser Stelle für $menge alle Datensätze zur Berechnung herangezogen werden.
Da Maus uns aber nur ein paar unvollständige Häppchen geliefert hat, können wir nur raten ....
Mit Einschränkungen scheint der Code so schon zu funktionieren. Unter der Voraussetzung natürlich, dass die tatsächliche Reihenfolge nicht der geposteten entspricht.
Grüße,
Jochen
Hallo Maxx,
[...]
Auf genau diese 3 Zeilen bezog sich meine Aussage. Vermutlich ist dir entgangen, dass an dieser Stelle für $menge alle Datensätze zur Berechnung herangezogen werden.
Ups, das habe ich echt überlesen. Sorry. Nehme diesbezüglich alles zurück.
Grüsse
Frankie
Hallo,
nee der Code war nicht in der richtigen Reihenfolge. Hier kommt mal der Code in der Richtigen Reihenfolge. Das ganze HTMl Zeug lass ich raus:
$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;
}
$eintraege_pro_seite = 16;
//Ausrechen welche Spalte man zuerst ausgeben muss:
$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
<?php
unset($i);
// Anziegen der Einträge
$sql = "SELECT
id,
name,
straße,
platz,
ort,
telefon,
info,
url,
mail,
bild,
aktiv
FROM
cafes
ORDER BY
id DESC
LIMIT $start, $eintraege_pro_seite
"; //SQL String zum auslesen aller Datensätze aus der Datenbank
$result = mysql_query($sql);
//echo mysql_error(); ?>
<?php
while($db_cafes = mysql_fetch_array($result)) //Ergebnisse der Abfrage in Array laden und dieses Array in einer While-Schleife durchlaufen, bei jedem Durchlauf die Daten ausgeben
{
?>
<?php
$result = mysql_query("SELECT id FROM cafes");
$menge = mysql_num_rows($result);
$wieviel_seiten = $menge / $eintraege_pro_seite;
?>
<?php echo "<div align="center">";
echo "<b>Seite:</b> ";
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">$b</a> ";
}
}
echo "</div>";
?>
Gruß Maus
Hallo,
wie bereits erwähnt finde ich keinen groben Fehler. Zumindest while($db_cafes = mysql_fetch_array($result))
sollte irgendetwas ausgeben.
Um den Fehler einzukreisen würde ich erst einmal das Brimborium drumherum auskommentieren ... bis nur noch der select und die Ausgabe übrigbleibt.
Etwa:
$sql = "SELECT
id,
...
FROM
...
LIMIT $start, $eintraege_pro_seite
LIMIT 0, 16
$result = mysql_query($sql);
while($db_cafes = mysql_fetch_array($result))
{
echo "$db_cafes[...]";
Wenn das Ganze dann soweit läuft die Berechnungen für $start, $wieviel_seiten usw. nach und nach einkommentieren und zwischendurch immer wieder testen.
Grüße,
Jochen