Tutorials

28.03.2008 10:39 Alter: 9 yrs

Mailformplus Formulardaten in Typo3 Datenbank speichern

Rubrik: Tutorials
Von: Thomas Schlüter

Mailformplus Formulardaten in Datenbank speichern

Ausgangssituation: MailformPlus nutzen in Typo3

Auf einer bestehenden Website mit Typo3 als Content-Management-System (CMS) sollen Daten eines Eingabeformulars mit der Erweiterung "MailformPlus" gespeichert und direkt in eine Tabelle in einer Datenbank abgelegt werden, um anschließend mit einer Office-Datenbank-Anwendung weiterverwendet zu werden.

Vorteile

Für den Formularersteller ist der Nutzen des Anmeldeformulars, deutlich zu erkennen. Statt die eingehenden Anmeldungen wie bei Fax, Brief oder Telefon, selbst in die Datenbank einpflegen zu müssen, werden die vom Benutzer bereitzustellenden Daten direkt gespeichert. Doch nicht nur auf dieser Seite entsteht ein Vorteil, auch für den Nutzer hat diese Lösung ihren Charme. Statt zunächst das Anmeldeformular auszudrucken, dann auszufüllen und zu versenden, geht alles in einem Arbeitsschritt. Rein ins Internet, Anmeldeformular anklicken, Daten eingeben und abschicken. Da auf beiden Seiten der Website die Vorteile offensichtlich sind, ist es nur logisch, dass eine solche Lösung umgesetzt werden sollte.

Anwendungsbeispiel: Anmeldeformular

Als Anwendungsbeispiel für dieses Szenario dient ein Anmeldeformular für Besucher einer Veranstaltung. Diese können sich sowohl über die Website als auch per Telefon und Fax anmelden. Es muss also die Möglichkeit geben, direkt auf die Datenbank im Internet aus der Office-Anwendung zu zugreifen, um die entsprechenden Anmeldungen dort eingeben zu können und die Daten konsistent zu halten. Nach Ablauf der Anmeldung sollen die Daten für Serienbriefe und Anmeldeunterlagen weiterverwendet werden können. Also, wird eine Anbindung der Office-Datenbank-Anwendung an die Datenbank des Content-Management-Systems benötigt.

Lösungsansatz: MailformPlus, ein SSH-Tunnel und MySQL-ODBC-Connector

Typo3 bietet eine Vielzahl von Erweiterungen. In unserem Fall kommt MailformPlus in Frage. Es handelt sich dabei um eine schnell zu konfigurierende und dennoch sehr flexible Erweiterung, zur Erstellung umfangreicher Formulare. Weiterhin kann MailformPlus die Daten des Formulars in einer eigenen Tabelle innerhalb der Typo3-Datenbank speichern. Mit SSH ist der sichere Zugriff auf eine Datenbank über das Internet möglich. Die Anbindung von MySQL-Datenbank an Office-Anwendungen (z.B. OpenOffice Base) ist mit einem entsprechenden Connector ODBC-Driver kein Problem.

Insgesamt stellt sich mit diesen Hilfsmitteln eine Lösung der Problemstellung dar, die die genannten Anforderungen erfüllt und effizient sowie einfach umsetzbar ist.

Notwendige Arbeiten zur Nutzung MailformPlus unter Typo3

Damit die Daten direkt in eine Tabelle der Datenbank abgelegt werden können, muss die Erweiterung "MailformPlus" für Typo3 installiert sein. Zusätzlich wird eine Tabelle in der Datenbank benötigt auf die Typo3 zugreift. Damit die Daten entsprechend aus dem Formular in die Typo3-Tabelle gespeichert werden können, muss letztendlich eine Zuordnung (Mapping) der Formulardaten zu den jeweiligen Spaltenbezeichnungen in der Tabelle erfolgen.

Die Arbeiten in einer kurzen Übersicht:

  • Installation der Erweiterung MailformPlus
  • Festlegen welche Felder und Datentypen benötigt werden (z.B. Anschrift, Name usw. wie sollen diese in der Datenbank abgelegt werden.)
  • Erstellen eines Formular-Templates
  • Einrichten des Templates und der Seite für das Formular
  • Notwendige Felder definieren und die Extension MailformPlus konfigurieren
  • Anlegen der Tabelle für die Daten
  • Typoscript erstellen für das Mapping der Formulardaten

Erstellen eines Templates für MailformPlus

Das Template für die Erfassung der Daten mit den entsprechenden Fehlereinträgen ist eine Abwandlung des Beispieltemplates von MailformPlus (erstellt und entwickelt von www.typoheads.at).

 <!-- ###TEMPLATE_FORM### begin -->

###ERROR###

<form name="Anmeldeformular" id="af_form" method="post" action="###REL_URL###" enctype="multipart/form-data">
<fieldset>
<legend>Bitte füllen sie das Anmeldeformular aus.<br />Pflichtfelder sind mit "*" gekennzeichnet.</legend>
<input type="hidden" name="submitted" value="1" />
<input type="hidden" name="L" value="###value_L###" />
<input type="hidden" name="type" value="###value_type###" />

<label for="vorname" accesskey="v">Vorname*</label>
###error_vorname###<input type="text" name="vorname" id="vorname" value="###value_vorname###" tabindex="1"/>
<br/>

<label for="name" accesskey="n">Name*</label>
###error_name###<input type="text" name="name" id="name" value="###value_name###" tabindex="2"/>
<br/>

<label for="strasse" accesskey="s">Straße*</label>
###error_strasse###<input type="text" name="strasse" id="strasse" value="###value_strasse###" tabindex="3"/>
<br/>

<label for="plz" accesskey="p">Postleitzahl und Ort*</label>
###error_plz###<input type="text" name="plz" id="plz" value="###value_plz###" maxlength="5" tabindex="4"/>
###error_ort###<input type="text" name="ort" id="ort" value="###value_ort###" tabindex="5"/>
<br/>

<label for="telefon" accesskey="t">Telefon*</label>
###error_telefon###<input type="text" name="telefon" id="telefon" value="###value_telefon###" tabindex="6"/>
<br/>

<label for="fax" accesskey="f">Fax</label>
###error_fax###<input type="text" name="fax" id="fax" value="###value_fax###" tabindex="7"/>
<br/>

<label for="email" accesskey="e">e-mail*</label>
###error_email###<input type="text" name="email" id="email" value="###value_email###" tabindex="8"/>
<br/>
<br/>

<input type="submit" id="submit" value="anmelden" tabindex="12"/><br/>
</fieldset>
</form>
<!-- ###TEMPLATE_FORM### end -->
####
#hier endet das eigentliche Formular
####

<!-- ###TEMPLATE_SUBMITTED_OK### begin Dies wird nach erfolgreichem Absenden des Formulars angezeigt, damit der Nutzer weiß, dass seine Daten gespeichert wurden. -->

<p>Vielen Dank für Ihre Anmeldung!</p>
<p>Sie haben Sie erfolgreich registriert.</p>

<!-- ###TEMPLATE_SUBMITTED_OK### end -->


<!-- ###TEMPLATE_EMAIL_USER### begin Plain-Text Email zum Benutzer der sich angemeldet hat -->

!!!!!!!!!! WIRD NICHT VERWENDET !!!!!!!
!!!!!!!!!! STATTDESSEN WIRD EINE HTML-MAIL VERSCHICKT!!!!!!!

<!-- ###TEMPLATE_EMAIL_USER### end -->

<!-- ###TEMPLATE_EMAIL_USER_HTML### begin Hier wird die HTML-Mail an den Benutzer erstellt -->

Guten Tag ###vorname### ###name###, <br />
Sie haben sich mit folgenden Daten angemeldet:<br />
<table border="1">
<tr>
<td>Name</td>
<td>###name###</td>
</tr>
<tr>
<td>Straße</td>
<td>###strasse###</td>
</tr>
<tr>
<td>PLZ und Ort</td>
<td>###plz### ###ort###</td>
</tr>
<tr>
<td>Telefon</td>
<td>###telefon###</td>
</tr>
<tr>
<td>Fax</td>
<td>###fax###</td>
</tr>
</table>
<p>Bitte heben Sie diese E-Mail für Ihre Unterlagen auf.
<br/>
<br/>
Mit freundlichen Grüßen!</p>

<!-- ###TEMPLATE_EMAIL_USER_HTML### end -->



<!-- ###TEMPLATE_EMAIL_RECEIVER### begin Optional - WIRD HIER NICHT VERWENDET! Schickt eine Mail an den Verantwortlichen für das Formular bei jeder Registrierung.
Adresse des Empfängers wird im Backend festgelegt. -->

Es hat sich folgende Person registriert
Name: ###name###<br/>
Vorname: ###vorname###
<br/>
Details sind in der Datenbank gespeichert worden.

<!-- ###TEMPLATE_EMAIL_RECEIVER### end -->


<!-- ###TEMPLATE_EMAIL_RECEIVER_HTML### begin Optional - Schickt eine Mail an den Verantwortlichen für das Formular bei jeder Registrierung.
Adresse des Empfängers wird im Backend festgelegt. -->

Es hat sich folgende Person registriert<br />
Name: ###name###<br/>
Vorname: ###vorname### <br/>
<br />
Details sind in der Datenbank gespeichert worden.<br />

<!-- ###TEMPLATE_EMAIL_RECEIVER_HTML### end -->


<!-- ###TEMPLATE_ERROR### begin Fehler beim Absenden des Formulars -->

<!-- ###ERROR_START### Fehler werden hier verarbeitet ###ERROR### -->
<p>Leider sind nicht alle benötigten Felder ausgefüllt. Bevor Sie sich anmelden können, füllen Sie bitte noch folgende Felder aus:</p>
<ul>
<!-- ###ERROR_START### end -->
<!-- ###ERROR_END### begin Allgemeiner Fehler ###ERROR### -->
</ul>
<!-- ###ERROR_END### end -->

<!-- ###ERROR_name### begin Abarbeiten der speziellen Fehler -->
<li class="error">Bitte tragen Sie Ihren Namen ein</li>
<!-- ###ERROR_name### end -->

<!-- ###ERROR_vorname### begin -->
<li class="error">Bitte tragen Sie Ihren Vornamen ein</li>
<!-- ###ERROR_vorname### end -->

<!-- ###ERROR_strasse### begin -->
<li class="error">Bitte tragen füllen Sie das Feld Straße aus</li>
<!-- ###ERROR_strasse### end -->

<!-- ###ERROR_plz### begin -->
<li class="error">Bitte füllen Sie das Feld Postleitzahl aus</li>
<!-- ###ERROR_plz### end -->

<!-- ###ERROR_ort### begin -->
<li class="error">Bitte füllen Sie das Feld Ort aus</li>
<!-- ###ERROR_ort### end -->

<!-- ###ERROR_email### begin -->
<li class="error">Bitte geben Sie die E-Mail-Adresse für unsere Bestätigungsmail ein</li>
<!-- ###ERROR_email### end -->

<!-- ###TEMPLATE_ERROR### end -->

Anlegen der Tabelle zum Speichern der Formulardaten

Das Anlegen der Tabelle, welche die Daten des Formulars aufnimmt, kann auf mehreren Wegen geschehen. Zum Einen ist es möglich, direkt per phpMyAdmin o.ä. die Tabelle in die Typo3 Datenbank einzufügen. Zum Anderen kann aber auch die Erweiterung Extension Kickstarter helfen.

Anlegen der Tabelle für Mailformplus per PHPMyAdmin

Statt des etwas umständlichen Weges über den Extension-Kickstarter, können die Tabelle und die Spalten auch direkt über phpMyAdmin (oder vergleichbare Tools) angelegt werden. Dazu meldet man sich an der entsprechenden Typo3-Datenbank an und legt dort die Tabelle samt der nötigen Felder an.

Anlegen der Tabelle für MailformPlus mit dem Extension Kickstarter

Hierzu muss die Erweiterung "Extension Kickstarter" installiert sein.

Um den Kickstarter zu verwenden, geht man in den "Extension Manager" und wählt im Drop-Down-Menü den Eintrag "Make new Extension" aus.

Zunächst wird ein Name für die entstehende MailformPlus Erweiterung definiert. Hierzu wird unter "Enter Extension Key" ein Name eingegeben (Bsp. "Anmeldungen"). Am besten wählt man einen kurzen und prägnanten Namen. Dieser wird auch als Präfix vor der neuen Tabelle stehen (Bsp. "tx_meinextensionname_tabellenname"). Unterhalb des Eingabefeldes befindet sich ein Link, der auf eine Seite mit Informationen für die Wahl eines Extension-Namens verweist. Hinweise für die Festlegung von Extension-Key, für Typo3-Erweiterung die auch veröffentlicht werden sollen, finden sich auf der Typo3-Website. Selbstverständlich sind die Hinweise auch für die eigenen Projekte interessant und hilfreich.

Anschließend werden die allgemeinen Informationen zur Extension festgelegt. Hierzu genügt ein Klick auf das Plus-Symbol neben dem Eintrag "General information". Um nur eine Tabelle anzulegen, sind viele der Angaben nicht notwendig. Dennoch sollten sie - insbesondere für den Fall der Weitergabe der Extension an Dritte - gemacht werden. Nachdem die Eingabe beendet ist, kann mit Update das Ergebnis bestätigt werden.

Nun muss für das Speichern der Daten des MailformPlus Formulars in eine Datenbank nur noch eine entsprechenden Tabelle angelegt werden. Auch diesmal öffnet ein Klick auf das Plus-Symbol neben dem Feld "New Database Tables" die entsprechenden Eingabemöglichkeiten. Die einzelnen Spalten werden direkt in Typo3 erklärt, daher wird hierauf an dieser Stelle nicht weiter eingegangen. Am Ende der Seite können neue Felder eingefügt werden, dazu ist ein Name für die Spalte zu definieren, in diesem Beispiel kommen die Felder Name, Vorname, Straße Plz und Ort für das Anmeldeformular in Frage. Die Felder können nur einzeln angelegt werden, für jedes Feld ist der Typ festzulegen und die Eingabe durch eine Klick auf "Update" abzuschließen. Anschließend kann jeweils ein weiteres Feld ergänzt werden.

Nachdem alle Felder angelegt sind, ist für das Erstellen der neuen Tabelle alles notwendige getan. Nun kann die Extension durch das Anklicken von "View result" ein letztes Mal kontrolliert werden und dann durch einen Klick auf "Write" endgültig fertiggestellt werden.

Damit die Tabelle nun auch in der Datenbank angelegt wird, muss die Extension nun im Extension Manager installiert werden. Anschließend sind die notwendigen Tabellen vorhanden und können mit den Formulardaten verknüpft werden. Übrigens kann die soeben erstellte Extension direkt über das Feld "Install Extension" im Dropdown-Menü installiert werden. Dort wird die Erweiterung mit dem zuvor festgelegten Namen in der festgelegten Kategorie (z.B. "Miscellaneous") angezeigt.

Mapping der MailformPlus Formularfelder in die Datenbank erstellen

Nachdem nun die Tabelle angelegt ist, kann das Mapping der MailformPlus Formulardaten zur Tabelle durchgeführt werden. Die Zuordnung der Tabellen erfolgt mit Hilfe von etwas Typoscript, das man in das Setup der Website einfügt.

Die Zuordnung Formularfeld zu Tabellensplate erfolgt in der folgenden Weise: fields.[NAME-DES-FORMULARFELDES].mapping = SPALTENNAME. Am Beispiel des Feldes "name" würde der entsprechende Eintrag so aussehen: fields.name.mapping = name .

Um das Ergebnis der Zuordnung und eventuell bestehende Fehler zu überprüfen, empfiehlt es sich, mit plugin.tx_thmailformplus_pi1.debug = 1 das Debugging zu aktivieren (Eintrag in der letzten Zeile).

Nachstehender Typoscript-Code ist mit einer Vielzahl von Kommentaren versehen, um das Verständnis zu erleichtern. Zusätzlich kann die Dokumentation vom MailformPlus wichtige weitere Hinweise geben. <code> </code>

plugin.tx_thmailformplus_pi1.saveDB = 1
plugin.tx_thmailformplus_pi1.saveDB {
######
#
# Hier wird die Tabelle definiert
#
######
dbTable = tx_meineextension_tabellenname


dbkey = uid
####
# Zuordnung Formulardaten zu Datenbanktabelle und Spalten
# Allgemein: fields.[NAME-DES-FORMULARFELDES].mapping = Name der Spalte in der Tabelle
# Alle in der Tabelle zu speichernden Einträge müssen über diesen Weg zugeordnet werden.
####
fields.name.mapping = name
fields.vorname.mapping = vorname
fields.strasse.mapping = strasse
fields.plz.mapping = plz
fields.ort.mapping = ort
fields.telefon.mapping = telefon
fields.fax.mapping = fax
fields.email.mapping = email

# Leer Felder sollen ebenso gespeichert werden, ohne dass sie mit einem Standardwert belegt werden
allFields.leaveEmptyFields = 1

####
# Hier können zusätzliche (automatisch) generierte Einträge in die Tabelle eingefügt werden
####

specialMapping = 1
specialMapping {

# Datum des Absendens Speichern. Format YYYY-MM-DD HH:SS
sub_datetime = tstamp

# IP speichern, um evtl. Missbrauch später verfolgen zu können.
logIP = logip

}
}
####
# Debugging aktivieren. So können die Ausgaben zunächst überprüft und Fehler leichter entdeckt werden.
# debug = 0 deaktiviert das Debugging
####
plugin.tx_thmailformplus_pi1.debug = 1

MySQL-Datenbank-Port per SSH tunneln

Um die Daten sicher über das Internet zu übertragen, ist eine verschlüsselte Verbindung zu empfehlen. Das Secure Shell Protocol (SSH) kann verschiedene TCP/IP-Verbindnugen tunneln. So ist es möglich den Port 3306 (Standardport des MySQL-Servers), sicher über das Internet zur Verfügung zu stellen. Mit Putty lässt sich die Portweiterlietung unter Windows ohne Schwierigkeiten umsetzen. Im Client wird unter Connections --> SSH --> Tunnels der lokale Port 3306 auf den Server-Port weitergeleitet. Anschließend die Verbindung aufgebaut. Im Eventlog kann kontrolliert werden, ob die Weiterleitung erfolgreich war.

MySQL-Datenbank mit der Office-Anwendung verbinden

Damit nun noch der getunnelte Port mit der lokalen Office-Datenbank funktioniert, ist zunächst der ODBC-Driver zu installieren. Anschließend wird eine Verbindung zur bestehenden Datenbank erstellt per ODBC. Wichtig: Der Server ist localhost für diese Datenbank (der Port wird weitergeleitet) und lokal darf kein MySQL-Server laufen. Details zur Einrichtung finden sich im Internet an vielen Stellen.

Schlussbemerkung

Mit dem beschriebenen Vorgehen ist es möglich, eine Datenbank von verschiedenen Orten und aus verschiedenen Quellen (z.B. ein Webformular oder eine Office Anwendung) mit Daten zu füllen. Dennoch bleiben die Daten konsistent und die Nutzer können ihre gewohnte Software verwenden. Darüberhinaus nutzt dieses Vorgehen mit MailformPlus, Typo3, SSH und evtl. OpenOffice nur kostenfreie Software. Damit ist die Implementierung einer solchen Lösung besonders kosteneffizient, da nur die Einrichtung bezahlt werden muss. Lizenzen entfallen und dennoch muss nicht auf Komfort und Funktionalität verzichtet werden.

Ansprechpartner

ilexius GmbH, Dipl.-Kfm. Thomas Schlüter

Rechtliches

Jegliche Haftung der ilexius GmbH bei Verwendung der dargestellten Software oder Vorgehensweisen ist ausgeschlossen. Die ilexius GmbH haftet nicht für mögliche Schäden die durch die Verwendung dieses Dokuments entstehen. Die Darstellung beruht auf Erkenntnissen aus der Arbeit der Mitarbeiter von ilexius. Es ist nicht auszuschließen, dass einzelne Aspekte bei anderen Systemen nicht zutreffen oder möglicherweise Probleme verursachen.

Das Dokument unterliegt dem Copyright der ilexius GmbH. Sollten Sie unsicher sein bzgl. der Nutzung dieses Dokuments wenden Sie sich an die Ansprechpartner des Dokuments.

Weblinks