SortablePage und MultipleLinkPage

  • Hi,
    Ich schreibe gerade, oder bin auf dem besten Weg ein Plugin zu schreiben.
    Ich wollte mich jetzt mal an der SortablePage und an der MultipleLinkPage versuchen, aber irgendwie komme ich nicht weiter.

    Habe den Code aus dem Devcenter mal so angepasst wie ich mir das vorstelle:

    Das Template ist ja erstmal unwichtig, er zeigt mir bei dem Code folgende Fehlermeldung an:

    Zitat


    Fatal error: Invalid SQL: SELECT * FROM wcf1_trlevels WHERE name ORDER BY ASC LIMIT 10 OFFSET -10


    Mit DESC habe ich es auch schon probiert, dann kommt noch ein anderer Fehler, bzw. das ASC wird mit DESC ausgetauscht.

    Hoffe ihr könnt mir helfen.

  • Das Template ist ja erstmal unwichtig, er zeigt mir bei dem Code folgende Fehlermeldung an:


    Mit DESC habe ich es auch schon probiert, dann kommt noch ein anderer Fehler, bzw. das ASC wird mit DESC ausgetauscht.

    Hoffe ihr könnt mir helfen.

    Bei ORDER BY fehlt das Feld, also z.B. ORDER BY name ASC, daher muss

    PHP
    $this->sortField

    leer sein.
    OFFSET -10 geht auch nicht, da musst du dir was überlegen um auf Seite 1 bei 0 zu landen

    PHP
    $this->pageNo

    scheint 0 zu sein

  • Wie heißen denn deine Tabellen-Spalten-Namen?

    Der Fehler den du da gemacht hast ist ja logisch... Du willst in der WHERE-Klausel eine Tabellenspalte abfragen, gibst aber nicht an, wie diese Spallte aussehen soll.

    Wenn du nur bestimmte Spalten der Tabelle aufgelistet oder ausgeworfen haben möchtest, dann solltest du die Spaltennamen nach dem SELECT schreiben.

    Also so:

    PHP
    $sql = "SELECT  name, subject, link, downloadlink
                           FROM wcf".WCF_N."_trlevels
                          ORDER BY    ".$this->sortField." ".$this->sortOrder."
                                 LIMIT       ".$this->itemsPerPage."
                                 OFFSET      ".(($this->pageNo - 1) * $this->itemsPerPage);
                $result = WCF::getDB()->sendQuery($sql);

    Außerdem sollte bei der Funktion Read keine WHERE - Klausel kommen....

    PHP
    $sql = "SELECT  *
                           FROM wcf".WCF_N."_deinetabelle
                                ORDER BY    ".$this->sortField." ".$this->sortOrder."
                                 LIMIT       ".$this->itemsPerPage."
                                 OFFSET      ".(($this->pageNo - 1) * $this->itemsPerPage);
                $result = WCF::getDB()->sendQuery($sql);

    So wäre es besser.

    Gruß
    Markus

    • Offizieller Beitrag

    Kannst du nicht die gesamte Fehlermeldung posten? Da steht meistens dabei, warum das SQL-Statement falsch und man kann dir damit wesentlich besser helfen also nur mit dem Query alleine.

  • Danke schonmal. :)

    Ist nun die gesamte Fehlermeldung.
    Select ist mir irgendwie entfallen. :wacko:

    Die Tabellenspaltennamen habe ich schon genommen, also name, subject, link und downloadlink.
    Ich möchte nur diese ausgeben.

  • Oh, okay habs entfernt. Aber der Fehler bleibt der Selbe, bloß das eine SELECT ist weg.
    Habe mal auf den Link geklickt, also der Link zu WoltLab, aber an der MySQL Version dürfte es ja nicht liegen.
    Auf 2 verschiedenen Servern gibts diese Fehlermeldung.

  • [quote]Fatal error: Invalid SQL: SELECT name, subject, link, downloadlink FROM wcf1_trlevels WHERE name, subject, ORDER BY DESC LIMIT 10 OFFSET -10
    You get more information about the problem in our knowledge base: http://www.woltlab.com/help/?code=1064
    Information:
    error message: Invalid SQL: SELECT name, subject, link, downloadlink FROM wcf1_trlevels WHERE name, subject, ORDER BY DESC LIMIT 10 OFFSET -10
    error code: 1064
    sql type: MySQLDatabase
    sql error: 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 ' subject, ORDER BY DESC ' at line 3
    sql error number: 1064
    sql version:
    file: C:\xampp\htdocs\wbb31\wcf\lib\system\database\MySQLDatabase.class.php (118)
    php version: 5.3.0
    wcf version: 1.1.1 pl 2 (Tempest)
    date: Sun, 20 Dec 2009 11:39:07 +0000
    request: /wbb31/index.php?page=TRList
    referer:
    Stacktrace:
    #0 C:\xampp\htdocs\wbb31\wcf\lib\page\TRListPage.class.php(36): MySQLDatabase->sendQuery('SELECT name, su...')
    #1 C:\xampp\htdocs\wbb31\wcf\lib\page\AbstractPage.class.php(90): TRListPage->readData()
    #2 C:\xampp\htdocs\wbb31\wcf\lib\page\AbstractPage.class.php(46): AbstractPage->show()
    #3 C:\xampp\htdocs\wbb31\wcf\lib\util\RequestHandler.class.php(64): AbstractPage->__construct()
    #4 C:\xampp\htdocs\wbb31\wcf\lib\util\RequestHandler.class.php(92): RequestHandler->__construct('TRList', Array, 'page')
    #5 C:\xampp\htdocs\wbb31\index.php(8): RequestHandler::handle(Array)
    #6 {main}
    [/color]

    • Offizieller Beitrag

    Das ist nicht syntaktisch korrekt.

    SQL
    WHERE name, subject,

    richtig wäre

    SQL
    WHERE name='X', subject = 'Y'


    X und Y wären dann natürlich die Eingaben des Benutzers bzw. die Parameter.

    Les dir mal genau die Fehlermeldungen durch. Dort steht in der Regel, was falsch ist.

    Code
    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 ' subject, ORDER BY DESC ' at line 3
  • Okay, jetzt hab ich mir mal ein paar andere Plugins angeschaut und habe dann mal etwas überlegt.


    Habe ich jetzt mal probiert.
    SQL Fehler war denke ich die ganze Zeit: "FROMwcf", habe es zu "FROM wcf" geändert.

    Folgende Fehlermeldung:


    Ich verstehe aber nicht was falsch ist.
    Oben steht doch:

    PHP
    'name' => $this->name,

    Danke schonmal. :)

  • Servus,
    beim fix drauf schauen ist mir das aufgefallen was falsch bei dir ist

    Schaue mir aber den rest auch mal an ^^
    EDIT: versuche es mal so

  • Danke für die Antwort, aber ist genau die gleiche Fehlermeldung wie gerade eben. :(


    Edit: Habe gerade mal was neues hinzugefügt:

    PHP
    public $name = '$this->name';
    	public $subject = '$this->subject';
    	public $link = '$this->link';
    	public $downloadlink = '$this->downloadlink';

    Allerdings zeigt er mir jetzt wieder die erste Fehlermeldung mit MySQL an. Glaube das ist nicht richtig. :S

  • Deine WHERE abfrage ist falsch sehe ich gerade.

    PHP
    /**
         * @see page::readData()
         */
        public function readData() {
                $sql = "SELECT name, subject, link, downloadlink
                        FROM wcf".WCF_N."_trlevels
                        WHERE name='$this->name' AND subject='$this->subject' AND link='$this->link' AND downloadlink='$this->downloadlink'
                        ORDER BY ".$this->sortField." ".$this->sortOrder;
                $result = WCF::getDB()->sendQuery($sql, $this->itemsPerPage, ($this->pageNo - 1) * $this->itemsPerPage);
        }

    das "," zwischen drin ist falsch da musst du mit AND arbeiten

  • Danke, aber das behebt den Fehler auch nicht. :(

    ;(
    Ich versteh das echt nicht, nicht mal irgendeine IDE zeigt mir einen Fehler an.

    Einmal editiert, zuletzt von Array (21. Dezember 2009 um 08:10)

  • Wozu eigentlich die WHERE Abfrage?

    Das habe ich mich auch schon gefragt, genauso frage ich mich wo er den inhalt für die Where abfrage überhaupt herbekommt. Also das unten

    PHP
    $this->name
    $this->subject
    $this->link
    $this->downloadlink
  • Habe WHERE mal rausgenommen, aber immernoch ein Fehler...