Über ein Formular, erstellt mit powermail, lese ich die Eingabedaten in ein extra Datenbanktabelle ein. Nun möchte ich gern bestehende Datenbankeinträge ändern.
Über ein Formularfeld "pid" soll mit der Tabellenfeld "uid" abgeglichen werden. Falls ein der Formularfelder gefüllt ist soll dieser Wert, den Wert in der Datenbank (Tabellen-Feld) ersetzen.
Leider funktioniert mein Beispiel nicht richtig. Anstatt den bestehenden Datensatz zu ändern, wird ein neuer angelegt. Wie muss ich den Typoscriptcode ändern, damit er meine Bedingung erfüllt.
plugin.tx_powermail_pi1 {
clear.session = 1
dbEntry.user_tabelle {
_enable = HTML
_enable.value = 1
_ifUnique.pid = update
pid = TEXT
pid.data = TSFE:fe_user|sesData|powermail_20|uid52
tstamp = TEXT
tstamp.data = date:U
vorname = TEXT
vorname.data = TSFE:fe_user|sesData|powermail_20|uid42
vorname.if.isTrue.data = TSFE:fe_user|sesData|powermail_20|uid42
nachname = TEXT
nachname.data = TSFE:fe_user|sesData|powermail_20|uid43
nachname.if.isTrue.data = TSFE:fe_user|sesData|powermail_20|uid43
}
}
Hallo.
Sicher, dass Du Datensätze updaten möchtest, in denen die pid übereinstimmt? Innerhalb der TYPO3-Tabellen ist die pid normalerweise der "Speicherort", also die page, zu der ein Datensatz gehört bzw. in der er liegt. Als Identifier für Datensätze ist normalerweise die uid zuständig.
Viele Grüße
Julian
Ich habe einen logischen Fehler im Typoscript behoben, und zwar:
_ifUnique.uid = update
uid = TEXT
uid.data = TSFE:fe_user|sesData|powermail_20|uid52
Das heist es wird die uid angegeben, und in der Datenbanktabelle danach gesucht und gegebenenfalls die zu veränderten Werte ersetzt.
Leider funktioniert auch nach Berichtigung dieser Content noch nicht. Anstatt den Wert zu ändern wird ein neuer erstellt.
Nochmals vielen Dank für den vorigen Beitrag.
Hm...schade, dass es das wohl doch nicht war.
Eine weitere Idee wäre, dass die Datentypen evtl. sich in die Quer kommen. Die uid in der Datenbank ist ein Integer, Formularfelder werden (ohne gesonderte Behandlung) als Strings übergeben. D.h. der Vergelich könnte scheitern, da 1=="1" nicht TRUE ergibt. Ergänze dahe vielleicht bei uid mal einen Cast auf Integer:
uid.prioriCalc = intval
Habe den Typoscript Befehl "uid.prioriCalc = intval" hinzugefügt, aber der neue Wert im Formular wird nicht mit dem Datensatzfeld abgeglichen sondern immer noch neu erstellt.
Habe leider zur Zeit kein passendes Testszenarion bei mir selbst irgendwo zum Testen. Interessieren tut mich Dein problem bzw. dessen Lösung jedoch auch. Denn eigentlich sollte es passen.
Kennst Du Dich mit PHP aus?
Falls ja, dann könntest Du mal in der Extension mit Debugausgaben Dich vorwärtshangeln. In tx_powermail/lib/class.tx_powermail_db.php um die Zeile 122 findet eine Abfrage statt, die die uid des zu aktualisierenden Datensatzes versucht zu ermitteln. Nur wenn diese Abfrage glückt, findet ein Update statt. D.h. in Deinem falls cheint diese Abfrage - waruma uch immer - schief zu gehen. Daher wäre interessant, was da genau als Abfrage an die DB geht.
$GLOBALS['TYPO3_DB']->store_lastBuiltQuery = true;
$res = ...
t3lib_div::debug($GLOBALS['TYPO3_DB']->debug_lastBuiltQuery, __FILE__ . ' (' . __LINE__ . ') sql=');