Zum Inhalt springen

Frontend Formular - wie dropdowns mit db-werten übergeben?

Erstellt am 16. Mai 2006 · 3 Antworten · letzte Antwort am 24. Mai 2006

Tags: PHP, Frage

Nick78 ·

ich habe eine extension "fahrzeug" mit mehreren datenbanken. die felder der hauptdatenbank "fahrzeug" sind selbst verknüpft mit datenbank-relationen. z.b. ist das feld "modell" mit der tabelle "modell verknüpft.
im be kann ich mir also fix über select-boxen meine fahrzeuge "zusammenklicken". dasselbe soll auch im fe möglich sein. dazu habe ich 2 formulare. im ersten befindet sich ein dropdown mit allen vorhandenen fahrzeugen. daneben befindet sich ein submit button. wähle ich ein fahrzeug aus und bestätige ich das mit dem button, werden im 2. formular darunter (das aus dropdowns der anderen tabellen, z.b. modell, typ, motor,... besteht) sämtliche werte, des gewählten fahrzeugs selektiert. so kann ich für jedes fahrzeug änderungen machen und mit dem sql-update befehl in die tabelle schreiben.

wenn ich allerdings im fe ein dropdown menü für die "fahrzeug"-tabelle erzeuge, erhalte ich dort als werte nur die entsprechenden uid's der einträge.

wie ersetze ich diese mit den entsprechenden bezeichnungen. so das für das fahrzeug mit der uid = 1 nicht mehr 1 5 4 im dropdown steht, sondern 1 Golf GTI.

ähnlich nach einem tutorial von kasper habe ich mir den ansatz etwa so gedacht:

//globale variable:

var $fzgCache = array();
...

// alle vorhandenen fahrzeuge abfragen
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
			'uid, modell, typ',
			'tx_faz_fahrzeug',
			'pid = 1',
			'',
			'',
			''
		);

...

$content.=<SELECT name="fahrzeug"';
$content.='<option value="0" selected="selected">Kein Eintrag...</option>';
while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
						
   $this->fzgCache[$row['uid']]=$row;
/*$content.="<option value=".$row['uid'].">".$row['uid']." ".$row['modell']." ".$row['av']."</option>";*/
}

Wenn ich das debugge:

debug($this->fzgCache);

erhalte ich alle fahrzeuge in tabellenform. die einträge sind dabei immernoch die uids der entsprechenden verknüpften komponenten.

1. wie bekomme ich jetzt gezielt die bezeichnungen und nicht die uids von "modell" und "typ" aus dem fzgCache array in mein dropdown menü?

2. wie kann ich abhängig vom gewählten fahrzeug die werte in den dropdowns des unteren formulars selektieren lassen. da muss ich von anfang an mit isset abfragen, ob ein fahrzeug gewählt wurde. also, für das dropdown-menü "modell" mit den werten der db-tabelle "modell" heißt das, wenn oben z.b. fzg 1 gewählt wurde, selektiere das modell, das für das fahrzeug mit der uid=1 verwendet wird.

zu 1. ich weiß das mein select in etwa so aussehen muss, oder?

<select name="'.$this-">prefixID.'[DATA][fahrzeug]" value="'.$this->piVars['relation'].'">

funktioniert aber nicht, das select menü wird so beim debuggen nicht gefunden. bei textfeldern kann ich beim übergeben das feld [DATA] benutzen. wie siet das bei selects aus? gibt es überhaupt als wert eines selects $this->piVars['relation']???

ich suche schon seit einigen tagen sämtliche bücher und tuts durch, doch überall werden immer nur für fe-formulare beispiele mit inputfeldern und textareas gebracht.

ich danke euch
nick

Björn ·

Hi,

kämpfe auch gerade mit dem Erzeugen von Formularen im FE.

Ich habe einen etwas anderen Ansatz gewählt, bei mir wird das komplette Formular von Typo erzeugen. Dazu lege ich ein Array an in dem die Daten enthalten sind aus denen das Formular generiert wird. Für eine select-boxen z.B.

$form[]=array("Führerschein", $this->prefixId.'[fuehrerschein]=select,3,m',$options_fuehrerschein);

In $options_fuehrerschein werden die Optionen übergeben, z.B.:

Motorrad=1,*PKW=2,LKW=3,Gefahrgut=4,Personentransport=5

Jeweils Name und Value der Option. Mit "*" markierte Einträge werden selektiert.

Mein Problem ist nun den erzeugten Formularelementen das „class“ bzw. „style“ Attribut zu zuordnen. Hast Du dazu vielleicht was im Netzt gefunden? Über nen guten Doku Tip wäre ich froh, echt schwer was Passendes zu finden.

Mir hat das Buch „Typo3 – Das Handbuch für Entwickler" sehr weitergeholfen.

Grüße,
Björn

Nick78 ·

danke björn,

falls es dir darum geht deinem formular stylesheets zuzuordnen, schau dir mal das video: 4. Applying Css Styles unter Frontend Plugin Development
auf der seite: http://typo3.org/documentation/videos/wmv-format/ an. hat mir sehr weitergeholfen...

meine options kommen für jedes dropdown aus einer entsprechenden datenbanktabelle. hm, dann müsste ich die ausgelesenen werte in der $options-variable speichern. weiß auch noch nicht genau, wie ich nach klicken des submit-buttons an die übertragenen werte herankomme.
ich habe auch das Buch „Typo3 – Das Handbuch für Entwickler". $_POST[] geht ja nicht. habe grad $this->piVars entdeckt. werd mich mal weiter durchbeißen...

Björn ·

Hab nun auch die Lösung für mein Problem gefunden 🙂

Formulare in PHP durch Typo mit eigenen CSS Styles automatisch generieren:

Array mit Formulardaten anlegen, z.B.:

$form[]=array('Text', $this->prefixId.'[email]=input,40',$this->piVars['text']);
$form[]=array('Bild', this->prefixId.'[bild]=file, 8',);
$form[]=array('Button',$this->prefixId.'[submit]=submit',$this->pi_getLL('submit'));

Zusätzliche Formularkonfiguration im Array ablegen, z.B. bei der HTML Ausgabe des Formulars das Class-Attribut für unterschiedlichen Input Varianten setzen:

$fconf=array('type'=>t3lib_div::getIndpEnv('REQUEST_URI'));
$fconf['params.']['input']= 'class="textinput"';
$fconf['params.']['file']=  'class="upload"';
$fconf['params.']['submit']= 'class="button"';

Zum Schluss Formular erzeugen lassen:

$content.=$this->cObj->wrap($this->cObj->FORM($fconf,$form),$formWrap);