Maus: Die Seite wird nicht mehr geladen

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&auml;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&auml;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

  1. 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

  2. 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

    --
    Heute schon gescribbelt?
    Scribbleboard
    1. 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

      1. 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

        --
        Heute schon gescribbelt?
        Scribbleboard
        1. 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

        2. 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&auml;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&auml;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

          1. 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

            --
            Heute schon gescribbelt?
            Scribbleboard