Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] LIMIT-Problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] LIMIT-Problem

    Hallo,

    ich habe eine Seitennavi geschrieben. D.h., daß ich pro Seite nur 10 Einträge anzeigen lasse, um die Seite übersichtlich zu halten.

    Hier mal die ganze Seitennavi:

    PHP-Code:
    <?php
    //Seitennavigation erstellen
    $eps 10;//Einträge pro Seite ausgeben
    $seiten ceil($zeilen_autor1/$eps); //ergibt x Seiten
    if ($seiten 1$seiten 1;
    if (
    $seiten 3){
    $verweis['verweis'] .= " <a class=seitenzahlen href=\"11.php?autor=".$array_autor1['Autor']."&&seite=1\"><img border=0 src=\"../grafiken/erste.gif\" alt=\"\"></a> ";}
    else {
    $verweis['verweis'] .= "";
    }
    //Seiten-Verweis berechnen
    for ($f = ($seite-5); $f <= $seite$f++){
    if (
    $f <= 0) {$verweis['verweis'] .= "";}
    else {
    if (
    $seite == $f) {$verweis['verweis'] .= "<span class=aktuelle_seitenzahl>[b]".$f."[/b]</span>";}
    else {
    $verweis['verweis'] .= " <a class=seitenzahlen href=\"11.php?autor=".$array_autor1['Autor']."&&seite=".$f."\">".$f."</a> ";}
    if (
    $seite == $f) {$verweis['verweis'] .= "";}
    $anfang = ($seite-1)*$eps;
    }
    }
    for (
    $f = ($seite+1); $f <= ($seite+5); $f++){
    if (
    $f $seiten){$verweis['verweis'] .= "";}
    else {
    $verweis['verweis'] .= " <a class=seitenzahlen href=\"11.php?autor=".$array_autor1['Autor']."&&seite=".$f."\">".$f."</a> ";}
    }
    if (
    $seiten 3){
    $verweis['verweis'] .= " <a class=seitenzahlen href=\"11.php?autor=".$array_autor1['Autor']."&&seite=".$seiten."\"><img border=0 src=\"../grafiken/letzte.gif\" alt=\"\"></a> ";}
    else {
    $verweis['verweis'] .= "";
    }

    ?>
    Hier die Abfrage dazu:

    PHP-Code:
    <?php
    mysql_query
    ("SELECT * FROM Buecher WHERE Autor='".$array_autor1['Autor']."' ORDER BY Titel ASC LIMIT $anfang,$eps");
    ?>
    $anfang ist natürlich definiert. Ich wende diese Verfahrensweise auf mehreren Seiten an. Auf einer funktioniert es komischerweise nicht. Wenn ich $anfang beispielsweise durch "0" ersetze funktioniert es. Das ist deshalb komisch, weil es auf anderen Seiten keine Probleme gibt.

    Hat jemand eine Idee, warum es nicht funktioniert?


  • #2
    nicht funktioniert?
    das heißt?

    wie sieht die query aus, wenn es nicht funktioniert?

    Kommentar


    • #3
      Er sagt mir, daß etwas mit der Syntax nicht stimmen würde. Das kann aber nicht sein, weil es auf einer anderen Seite funktioniert. Es muß aber ja wohl so sein. Ich finde den Fehler nur nicht. Ich kann da noch Tausend mal drüber lesen.

      $angang ist die aktuelle Seite - 1 mal die Anzahl der anzuzeigenden Artikel pro Seite.

      Also $anfang = ($seite-1)*$eps;

      In der Abfrage steht nun ... LIMIT $anfang,$eps...

      Wenn ich für $anfang einen beliebigen Startwert setze funktioniert es. Das ist aber auch blöd zu erklären.

      Kommentar


      • #4
        Es muß aber ja wohl so sein. Ich finde den Fehler nur nicht. Ich kann da noch Tausend mal drüber lesen.
        Nicht rumraten, sondern Fehlermeldung und tatsächliches SQL Statement ausgeben lassen.
        PHP-Code:
        <?php
        $sql 
        "SELECT * FROM Buecher WHERE Autor='".$array_autor1['Autor']."' ORDER BY Titel ASC LIMIT $anfang,$eps";
        mysql_query($sql) or die(mysql_error().' : '.$sql); 
        ?>

        Kommentar


        • #5
          Hab ich ja schon. Er gibt mir:

          1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '10' at line 1

          Ich kann damit aber nix anfangen. In Zeile 1 steht "<?php"! Weit und breit keine 10.

          Kommentar


          • #6
            Das hat wohl auch nichts mit der Syntax als solcher zu tun. Bei echo oder print $anfang ist die Ausgabe leer. Darum wird es nicht funktionieren. Weil er ja auf einen Wert wartet.

            Kommentar


            • #7
              Alles klar. Das Problem hat sich erledigt. Um $anfang zu berechnen braucht er $seite. Die ist am Anfang aber nicht definiert. Das habe ich jetzt mit

              if (!isset($seite))$seite = 1;

              gemacht und es funktioniert.

              Danke für die Hilfen.
              Frank

              Kommentar


              • #8
                Hi,

                Wieso steht
                Code:
                $anfang = ($seite-1)*$eps;
                eigentlich irgendwo in einer Schleife in einem else-Zweig? Tu es dorthin, wo es hingehört, ganz nach oben zu den Initlisierungen. Dann wird auch $anfang gleich mit dem richtigen Wert - auf Seite 1 eben mit einer 0 - belegt.

                Zitat von Dein MySQL-Server
                1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '10' at line 1
                Die Message kommt vom MySQL-Server und somit hat "at line 1" nichts mit dem PHP-Code zu tun, sondern mit Deiner MySQL-Syntax. Und wenn da steht (deshalb solltes Du es ja auch ausgeben) "LIMIT ,10" dann gibts Mecker!

                Gruß
                MarkusHausB

                Kommentar


                • #9
                  Ja, richtig. Ist geändert. Hab das dort reingeschrieben, weil es mir an der Stelle eingefallen war. Jetzt funktioniert auf jeden Fall alles.

                  Gruß
                  Frank

                  Kommentar


                  • #10
                    Zitat von FF
                    Hab ich ja schon. Er gibt mir:

                    1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '10' at line 1

                    Ich kann damit aber nix anfangen. In Zeile 1 steht "<?php"! Weit und breit keine 10.
                    Der Mysql Server kennt das PHP Skript nicht. Zeilenangaben in MYSQL Fehlertexten beziehen sich auf das jeweilige SQL Statement. Da das Statement nicht formatiert ist, befindet sich alles davon in Zeile 1

                    sondern Fehlermeldung und tatsächliches SQL Statement ausgeben lassen.
                    Es war extra unterstrichen und bezog sich auf
                    or die(mysql_error().' : '.$sql);
                    Wirklich anschauen, wie das SQL Statement beim MYSQL Server ankommt/ankommen wird - nicht rumraten, wie es sein könnte oder gedacht war.

                    Kommentar


                    • #11
                      und - verdammt nochmal - error_reporting auf E_ALL setzen!

                      Kommentar

                      Lädt...
                      X