Zum Inhalt springen

flexforms: ungleichsoperator in foreign_table_where?

Erstellt am 13. August 2007 · 12 Antworten · letzte Antwort am 13. August 2007

Tags: Frage

eisstern ·

Hallo,
Ich habe eine Mehrfachauswahlbox deren Inhalte ich aus der Datenbank hole. Ich möchte die Auswahl an eine Bedingung (foreign_table_where) knüpfen. In diesem Fall soll alles was ungleich, bzw größer als 0 ist ausgewählt werden.

<tceforms>
  <label>LLL:EXT:gl_mmforum_news/locallang_db.xml:config.forum</label>
  <config>
    <type>select</type>
    <foreign_table>tx_mmforum_forums</foreign_table>
    <foreign_table_where>parentID >= 0</foreign_table_where>
    <size>5</size>
    <minitems>0</minitems>
    <maxitems>20</maxitems>
  </config> 
</tceforms>

Dann habe ich aber das Problem, wenn ich <> oder >= verwende, heißt es ungültiges XML. Verwende ich !=, ist es ungültiges SQL.
Wie kann ich Typo3 also beibringen alles größer 0 zurückzugeben? Muss ich evtl eine eigene Funktion schreiben?

nicki4lu ·

Hallo,

versuch es doch mal mit der CDATA-Anweisung für XML

<![CDATA[
]]>

Das sollte dann mit den < und > funktionieren.

Liebe Grüße,
Nicole

eisstern ·

Hallo,
Danke für den Tipp, aber das ergibt ebenfalls einen SQL Fehler.
Ich habe auch nochmal kontrolliert ob Tabellen- und Spaltennamen korrekt sind (cut & paste).
Es scheint wirklich am where liegen, denn ohne werden mir die Inhalte auch angezeigt.

eisstern ·

@nicki:
An CDATA hab ich gar nicht gedacht. Danke für den Hinweis. Mit

<foreign_table_where><![CDATA[parentID <> 0]]></foreign_table_where>

Ergibt sich auch ein SQL Fehler, immerhin kein XML Fehler mehr.

Allerdings macht es mich langsam stutzig dass ich auch hier einen SQL Fehler bekomme:
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 'parentID <> 0' at line 5 This may indicate a table defined in tables.php is not existing in the database!

Mir scheint er meckert an parentID rum. Diese Spalte existiert auf jeden Fall in dieser Tabelle (tx_mmforum_forums). Ich habe wie gesagt sogar schon die Spaltennamen mit cut & paste übernommen.

nicki4lu ·

Hallo,

wie sieht es denn mit der Groß- und Kleinschreibung aus? Oder muss ich die Wherezeile vielleicht noch der Tabellenname mit rein?

<foreign_table_where><![CDATA[tx_mmforum_forums.parentID <> 0]]></foreign_table_where>

Liebe Grüße,
Nicole

eisstern ·

Ich habe auf Groß-/Kleinschreibung geachtet, Typo3 kann da streng sein ^^.
Auch die Ergänzung zu tx_mmforum_forums.parentID hilft leider nicht.
Ich fang langsam an, an mir zu zweifeln. So schwer kann das eigentlich nicht sein ^^

nicki4lu ·

Hm,

ich habe auch etwas komisches entdeckt. Ich habe grade mal die Extension installiert, um mir die Tabellen anzuschein. Wenn ich nun mittels PhpMyAdmin versuche die Struktur der Tabelle anschauen will, leitet er mich auf die Tabelle ' tx_mwrandomobjects_objects' weiter, in der ja kein parentID existiert?!

Aber wenn ich das angegebene SQL ausführe, dann meckert SQL zumindest nicht rum. Gibt es einen Weg das erzeugte SQL irgendwie zu dumpen? Läuft das vielleicht noch durch htmlspecialchars?

Liebe Grüße,
Nicole

eisstern ·

Eine Weile gesucht aber gefunden:
Im Installtool die Option sqlDebug = 1 setzen, dann gibt Typo3 auch den zuletzt benutzen fehlerhaften Query aus.

Und das ist der Übertäter der mit oben genanntem XML erscheint:

SELECT tx_mmforum_forums.uid,tx_mmforum_forums.forum_name,tx_mmforum_forums.hidden
FROM tx_mmforum_forums,pages
WHERE
pages.uid=tx_mmforum_forums.pid
AND pages.deleted=0 AND tx_mmforum_forums.deleted=0 AND 1=1 tx_mmforum_forums.parentID <> 0

Das Beste ist wie immer am Schluss: 1=1 tx_mmforum_forums.parentID <> 0.
Kein Wunder, denn das sind 2 Abfragen hintereinander, abgesehen davon dass 1=1 nicht sehr sinnvoll ist.
Aber wo nimmt er die 1= 1 her? :o

nicki4lu ·

Ha,

grade mal mein schlaues Typo3buch gefragt und du musst vor das Where noch ein AND schreiben... dann klappt das auch. Und das ist auch der Grund, warum da 1=1 steht, nämlich, dass da ein AND oder OR oder änhliches hin darf...

Liebe Grüße,
Nicole

eisstern ·

DAS WARS!
Vielen Dank für die geduldige Hilfe, auf das AND wär ich nicht gekommen. Nun wird alles so ausgegeben wie es soll.

Hier abschließend nochmal das XML

<TCEforms>
  <label>LLL:EXT:gl_mmforum_news/locallang_db.xml:config.forum</label>
  <config>
    <type>select</type>
    <foreign_table>tx_mmforum_forums</foreign_table>
    <foreign_table_where><![CDATA[AND tx_mmforum_forums.parentID <> 0]]></foreign_table_where>
    <size>5</size>
    <minitems>0</minitems>
    <maxitems>20</maxitems>
  </config> 
</TCEforms>