Zum Inhalt springen

feuser_admin erweitert-Daten werden nicht in Db geschrieben

Erstellt am 22. Oktober 2003 · 16 Antworten · letzte Antwort am 26. November 2003

Tags: Frontend-Benutzer, Frage

rainer669 ·

Hallo,

ich habe kleine Extension geschrieben, die die Tabelle fe_users um ein paar Spalten erweitert. Vorgegangen bin ich nach dem Schema wie in Thread #2052
Soweit kein Problem. Die zusätzl Spalten werden im Be angezeigt und wenn ich etwas eingebe, wird dieses auch in die Db geschrieben. Im Fe werden die Felder auch angezeigt, ich kann sie verändern und wenn ich auf die "verify"-Seite komme werden die Änderungen auch angezeigt.....aber, wenn es dann an's updaten der Db geht, werden nur die Änderungen der in der fe_user_admin-Erweiterung vorhandenen Felder(Passwort, Name, Adress usw.) in die Db geschrieben. Die Änderungen in den hinzugefügten Feldern, gehen dabei verloren.
Woran kann das liegen? Ich habe mir die Skripte angesehen, die für das Schreiben in die Db zuständig sind. Wenn ich das richtig sehe, werden die Formularfelder in ein array gepackt, so dass es egal ist, wieviele Felder es gibt....
Weiß jemand Rat?

Vielen Dank im Voraus.
Grüße,
Rainer

rainer669 ·

Hallo,

ich bin jetzt etwas weiter.
Ich habe mir die feuser_admin_lib.inc genauer angesehen. Diese datei ist für die Verarbeitung des Templates bei feuser_admin zuständig.
Ca. in Zeile 643 steht dann der Code, um die Datenbank upzudaten:

function save()	{
		switch($this->cmd)	{
			case "edit":
				$theUid = $this->dataArr[uid];
				$origArr = $GLOBALS["TSFE"]->sys_page->getRawRecord($this->theTable,$theUid);
				if ($this->conf["edit"] && ($GLOBALS["TSFE"]->loginUser || $this->aCAuth($origArr)))	{	
					$newFieldList = implode(array_intersect(explode(",",$this->fieldList),t3lib_div::trimExplode(",",$this->conf["edit."]["fields"],1)),",");
					if ($this->aCAuth($origArr) || $this->cObj->DBmayFEUserEdit($this->theTable,$origArr,$GLOBALS["TSFE"]->fe_user->user,$this->conf["allowedGroups"],$this->conf["fe_userEditSelf"]))	{
						$query = $this->cObj->DBgetUpdate($this->theTable, $theUid, $this->dataArr, $newFieldList);
		
					echo $this->fieldList."<br>";
						echo $this->conf["edit."]["fields"];

						if ($this->conf["debug"])		debug("Edit query: ".$query,1);
						mysql(TYPO3_db,$query);
						echo mysql_error();
						$this->currentArr = $GLOBALS["TSFE"]->sys_page->getRawRecord($this->theTable,$theUid);
						$this->userProcess_alt($this->conf["edit."]["userFunc_afterSave"],$this->conf["edit."]["userFunc_afterSave."],array("rec"=>$this->currentArr, "origRec"=>$origArr));
						$this->saved=1;
					} else {
						$this->error="###TEMPLATE_NO_PERMISSIONS###";
					}
				}
				
			break;

Da die Zeilen teilweise ziemlich lang sind, wurden sie hier umgebrochen, deshalb ist der code etwas unübersichtlich.
Ich habe, um das Ganze etwas zu debuggen, zwei echo eingefügt(abgesetzt) und kriege folgende Ausgaben:

$this->fieldList=username,password,usergroup,name,address,telephone,fax,email,title,zip,city,country,www,company, tx_kunden_geschf,tx_kunden_ansp,tx_kunden_custid,tx_kunden_custstate
$this->conf["edit."]["fields"]=username,password,name,email,usergroup,address,telephone,fax,title,company,zip,city,country,www

Es sieht also so aus, als hätte ich am Anfang alle Formularsfelder, die ich brauche, doch dann bei $newFieldList wurde das Ganze auf die Standardfelder von fe_user zurückgesetzt.
Und das verstehe ich ehrlich gesagt nicht....... 🙁
Weiß keiner, wie ich die Funktion so hinkriege, dass sie mir auch die neuen Spalten in fe_user updatet?
Ich bin für jede Anregung dankbar.

Grüße,
Rainer

escapedPrisoner ·

Hi Rainer,

Ist wirklch ein schwieriges Problem o.O

1. Ich wundere mich, warum in

$this->conf["edit."]["fields"]

nicht schon ALLE Felder drin stecken.

2. Was steht denn in $query, wenn Du diese Zeile änderst:

$query = $this->cObj->DBgetUpdate($this->theTable, $theUid, $this->dataArr, $this->fieldList);

Denn Du hast den String ja eh schon selbst zusammengebaut.

Viele Grüße
Daniel

rainer669 ·

Hallo Daniel,

genau das war's. 😃
Manchmal sieht man wirklich den Wald vor lauter Bäumen nicht.
Ich frage mich nur, warum Kaspar in dem Script den Umweg über $newFieldList geht......aber egal, hauptsache es funzt.

Danke nochmal.

Grüße,
Rainer

escapedPrisoner ·

Hi Rainer,

Freut mich doch, dass wir die Nuss knacken konnten. 😃

Scheint mir aber ein Bug in der Library zu sein - kein "Bedienungsfehler". Was meinst Du?

Greetzz
Daniel

rainer669 ·

Hi Daniel,

sieht fast so aus, denn ich habe das Ganze jetzt durchgetestet und habe in der neuen Fassung nie einen Fehler gekriegt. Insofern denke ich, dass es tatsächlich nur ein Bug ist.

Grüße,
Rainer

escapedPrisoner ·

Moin moin Rainer,

die Wahrscheinlichkeit ist also hoch, dass es wirklich ein Bug ist. Wär also gut eine Info in der Whishlist zu hinterlassen. Vielleicht kommt es dann in die 3.6.0 noch mit hinein.

Es gibt da zwei "Schubladen". TBE (BackEnd) oder TCE (core engine) - in unserem Fall passt's wohl eher in TCE mit hinein. Also http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=262&tx_extrepmgm_pi1[tocEl]=233&cHash=408a8a2f3e

Hast Du Bock es dort als Anmerkung mit dranzuhängen?

Greetzz
Daniel

rainer669 ·

Moin Daniel,

war 'ne woche weg, deshalb antworte ich erst heute.
Meinst Du tatsächlich, dass es da reinpasst? Es handelt sich ja um einen Bug, der ganz speziell eine Extension anbetrifft.

Rainer

escapedPrisoner ·

Hi,

Welcome back.

Nun ist ja ein Sonderfall wegen der fe_adminLib - Library. Die ist ja ein Teil vom Typo3-"Herzstück".

In der Beschreibung zur Extension heißt es ja nur "Description: A template/fe_adminLib based approach to automatic fe_user registration and maintenance." (http://typo3.org/1383.0.html?&tx_extrepmgm_pi1[mode]=99&tx_extrepmgm_pi1[showUid]=14)

Egal wo's nun am besten hinpasst. Ich denke Kasper freut sich über Hilfe. 🙂

Greettzzz
Daniel

rainer669 ·

Hi,

so, ich habe Kaspar geschrieben, nachdem ich ja fand, dass diese Geschichte nirgendwo reinpasst.
Was mir Kaspar zurückgeschrieben hat, poste ich hier, damit andere, die auf das selbe Problem stoßen, wissen, worum's geht:

It's not a bug but rather a security feature so not any random field you try to submit fromthe frontend will go into the backend.

The idea is that you define a list of fields, the MASTER list is in TCA array (something like fe_....fields) and another list (individually configured) is found in TypoScript for the plugin. Try to look at the TypOScript setup for the extension. Thats my best offer now that no proper documentation exists (which I'm sorry for...)

Ist ziemlich einleuchtend, finde ich.

Rainer

escapedPrisoner ·

Na ist ja nett, dass er gleich geantwortet hat. 😉

Die Frage ist nun, was heißt das nun in unserem Fall. Wie meldet man die zusätzlichen Felder als "die sind ok!" fürs Backend an??

Greeetzz
Daniel

rainer669 ·

Hi Daniel,

bin schon noch dabei 😃
Komme aber zur Zeit nur selten dazu, hier nachzuschaun', bzw. etwas zu posten.
Ich hab' mich, streng nach dem Grundsatz "Never change a running system", nicht mehr weiter um das Problem gekümmert, nachdem wir das problem ja auf unkonventionellere Weise gelöst hatten. Ich könnte mir aber vorstellen, dass man im Object-browser etwas machen kann.
Ich werd's mir aber nochmal ansehen und dann posten, was ich gefunden habe.

Bis dann,
Rainer

sacha ·

Hi,

habt ihr die neuen Felder denn im TS-Setup angegeben?

Bsp.:

page.config.notification_email_encoding = base64
page.config.notification_email_urlmode = 76

plugin.feadmin.fe_users {
  parseValues {
    tx_pnextfeuser_vorname = alphanum_x
  }
  create = 1 
  create.fields = tx_pnextfeuser_vorname
  create.required = tx_pnextfeuser_vorname
  create.evalValues { 
    tx_pnextfeuser_vorname = atLeast[3]
  } 

  #edit = 1 
  edit.fields = tx_pnextfeuser_vorname
  edit.required = tx_pnextfeuser_vorname
  edit.evalValues { 
    tx_pnextfeuser_vorname = atLeast[3]
  } 
}

hth,
Sacha

escapedPrisoner ·

Hi Sacha,

mensch das schaut aber gut aus!

Sag mal, woher hast Du die Infos, das man das so machen kann. Ist das schon irgendwo dokumentiert?

Ach ja und funktioniert das grundsätzlich so - also auch bei tt_board, tt_news?

Greetzz
Daniel

sacha ·

Hallo Daniel,

escapedPrisoner schrieb

Sag mal, woher hast Du die Infos, das man das so machen kann. Ist das schon irgendwo dokumentiert?

Doku ist hier: https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Index.html

aber mir fällt es sehr schwer, mich durch trockene Dokus durchzuackern. In der Community ist es halt ein geben und nehmen, ich habe einige Tipps bekommen, die mir sehr weitergeholfen haben. Mittlerweile habe ich die fe_admin.lib einigermassen verstanden und weiss was sie kann - und natürlich auch was sie alles nicht kann ;-). Ich finde es ziemlich dämlich, dass die Registrierung nur mit aktiviertem Java-Script möglich ist und das es so umständlich ist, neue Felder, Checkboxen, Selectfelder usw. einzubauen. Und der Grund, warum die feadmin.lib ihre Daten in die fe_users Tabelle schreibt und die Newsletter-Extension in die tt_address Tabelle ist mir auch schleierhaft. Wenns anders wäre könnte man die beiden Sachen viel einfacher zusammenführen. Das ist doch eine Standardanforderung so ziemlich jeder Community-Site.

escapedPrisoner schrieb

Ach ja und funktioniert das grundsätzlich so - also auch bei tt_board, tt_news?

?? die arbeiten doch nicht mit der feadmin.lib? Verstehe nicht so ganz, wie das gemeint ist.

Ciao,
Sacha

escapedPrisoner ·

Hi Sacha,

schön, dass Du Dich mit dem Teil gut auskennst !! Dann kannst Du mir sicher etwas sagen, was ich selbst nicht lösen kann: wie kann ich denn die Breite der Eingabefelder von username und password einstellen? Würde nämlich ganz gern ein style="width:10px" im INPUT-Tag hinzufügen !

> Doku ist hier: https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Index.html

Ja, super. Das hintere Eck der TSRef hab ich bisher übersehen. 😃

> In der Community ist es halt ein geben und nehmen,
> ich habe einige Tipps bekommen, die mir sehr weitergeholfen haben.

Ja, da bin ich auch froh. Dieses Forum hier ist eine super Alternative zur englischen mailingliste. Ehrlich gesagt mag ich Mailinglisten überhaupt nicht.

> Mittlerweile habe ich die fe_admin.lib einigermassen verstanden und weiss was sie kann -
> und natürlich auch was sie alles nicht kann ;-)

Hm. Ich war überrascht, als ich die TypoScript-Einstellungen gesehen habe. Hätte nicht gedacht dass die lib soviel kann!

Frage: Wäre ein besseres zuHause für die lib nicht /typo3/ext/feuser_admin/pi ? Dahin habe ich sie jedenfalls in meinen Installationen verschoben.

> Ich finde es ziemlich dämlich, dass die Registrierung nur mit aktiviertem Java-Script möglich ist
> und das es so umständlich ist, neue Felder, Checkboxen, Selectfelder usw. einzubauen.
> Und der Grund, warum die feadmin.lib ihre Daten in die fe_users Tabelle schreibt
> und die Newsletter-Extension in die tt_address Tabelle ist mir auch schleierhaft.

Yes! Eine Generalüberholung tut da not. Vor allem Doku. Dann wäre es auch selbstverständlich, dass Sachen wie tt_board mit der lib arbeiten. Weißt Du was ich meine - Wenn ein Gast auf der Seite ist, gibts das Eingabeformular bei "Autor", wenn ein angemeldeter User drauf ist, wird automatisch sein Name und auch seine Emailadresse angegeben. Die lib sollte vielleicht etwas mehr Service für FrontEnd-Extensions bieten. Irgendeine hübsche Schnittstelle, die so cool ist, dass man sie gern benutzt.

>> Ach ja und funktioniert das grundsätzlich so - also auch bei tt_board, tt_news?
> ?? die arbeiten doch nicht mit der feadmin.lib? Verstehe nicht so ganz, wie das gemeint ist.

Nun, ich dachte dabei, ich hätte da von einem geheimen Standard für ALLE Extensions nichts mitbekommen. Also sind diese sonderbaren TypoScript-Einstellungen dieser lib wohl einmalig ?

Greetz
Daniel