SQL-Felder mit Text-Ähnlichkeit

Einleitung

Hinweis: Diese Feature sind Teil der Visforms Subscription und in der freien Visforms Version nicht enthalten.

Manchmal wollen Sie in Ihren Formularen Text-ähnliche Felder anzeigen, deren Inhalte dynamisch während der Laufzeit des Formulars aus der Datenbank bezogen werden. Wenn sich der Inhalt der Datenbank ändert, so hat das entsprechende Feld bei der nächsten Anzeige automatisch auch die geänderten Inhalte. Bei diesem Vorgang kann auch auf die aktuellen Benutzereingaben und die Änderung der Benutzereingaben in anderen Feldern im Formular Bezug genommen werden.

Die Visforms Subscription bietet Ihnen 7 Text-ähnliche Feldtypen, deren Inhalte mit Hilfe von SQL-Select-Statements dynamisch aus der Datenbank erzeugt werden.

Die folgenden Text-ähnlichen Feldtypen besitzen eine SQL-Unterstützung:

  • Text
  • E-Mail
  • Datum
  • URL
  • Zahl
  • Telefon
  • Versteckt

Sie haben 2 Möglichkeiten durch 2 verschiedene SQL-Statements für die Ermittlung der Feldwerte aus der Datenbank:

Hinweis:

Systemvoraussetzungen

Die Visforms Subscription muss installiert sein.

Formale Anforderung an die beiden SQL Statements

Seitens Visforms haben diese beiden möglichen SQL-Statements nur eine einzige formale Bedingung hinsichtlich des Ergebnisses zu erfüllen:

Hinweis: Das SQL-Statement muss genau einen einzelnen Wert zurückliefern.

Es ist gleichgültig, unter welchem Namen der Wert zurückgegeben wird.
Im Vergleich zu den SQL-Statements für SQL-Felder mit Optionenlisten, muss kein as value im SQL-Statement enthalten sein.

Die folgenden SQL-Statements sind daher ausreichende und gleichberechtigte SQL-Statements:

Select ${user:name};

Select ${user:name} as username;

Select ${user:name} as test;

Felder mit bestimmtem Daten-Typ oder Daten-Format

Wenn Felder einen bestimmten Datentyp oder ein bestimmtes Datenformat erwarten, ist Folgendes zu beachten:

  • Das SQL-Statement muss sicherstellen, dass der Rückgabewert ebenfalls den passenden Typ sowie das richtige Format hat.

Beispiel für Feld-Typen, die ein bestimmtes Datenformat erwarten:

  • E-Mail: Das SQL-Statement muss einen Text zurückliefern, der ein gültiges E-Mail Format hat.
  • Datum: Das SQL-Statement muss einen Text zurückliefern, der einem Datum im konfigurierten Format entspricht.
    Das Datums-Format wird in der Feld-Konfiguration ausgewählt.
    Für das gewählte Datums-Format dd.mm.YYYY liefert das korrekte SQL-Statement etwa den Text 31.04.2024
  • URL: Das SQL-Statement muss einen Text in einem URL-Format zurückliefern: https://….
  • Zahl: Das SQL-Statement muss einen Text zurückgeben, der nur Zahlen ohne Leerzeichen enthält.

Ein Beispiel für ein Feld vom Typ Datum und dem konfigurierten Datums-Format dd.mm.YYYY:

select DATE_FORMAT(registerDate, '%d.%m.%Y') as date from #__users where id in ${input:user[]};

Mögliche Validierungen der Feld-Konfiguration muss erfüllt sein

Es muss sichergestellt werden, dass der Wert, den das SQL liefert auch alle anderen in der Feldkonfiguration hinterlegten Validierung erfüllt.
Dazu gehört etwa das Folgendes:

  • eine minimale oder maximale Anzahl an Zeichen,
  • ein höchster oder niedrigster Wert,
  • ein Mindest-Datum oder ein Höchst-Datum,
  • eine benutzerdefinierte Validierung.

Grundlagen

Es gelten die gleichen Grundlagen für SQL-Statement und Platzhalter-Ersetzung, wie bereits in dem vorangehenden Abschnitt beschrieben für die SQL-Felder mit Optionenlisten.

Gemeint sind insbesondere folgende Themen:

SQL-Statement für den einmaligen Default-Wert

Konfiguration

Wenn Sie im leeren Formular einen Standardwert einfügen wollen, können Sie festlegen, welche Art von Startwert für das Feld verwendet wird.
Wählen Sie in der Feld-Konfiguration, Reiter Grundeinstellungen für den Parameter Feld füllen mit die Option Wert aus individuellem SQL-Statement.
Schreiben Sie Ihr SQL-Statement in den Parameter Defaultwert SQL-Statement.

SQL-Statement für den einmaligen Default-Wert

Besonderheiten

Hinweis: Keine Input-Parameter des Joomla Input-Objektes verwenden.

In diesem Fall können Sie keine Input-Parameter des Joomla Input-Objektes verwenden. Eine Ersetzung der Input-Parameter ist beim Defaultwert nicht möglich, da Input-Parameter zu unerwarteten Ergebnissen führen können.

User-Parameter aus dem Joomla User-Objekt können verwendet werden. Der ermittelte Wert wird als Defaultwert im Formularfeld angezeigt und kann vom Benutzer jederzeit geändert werden.

SQL-Statement für den aktualisierten Feld-Wert

Konfiguration

Stellen Sie der Feld-Konfiguration, Reiter Grundeinstellungen die Option SQL-Feld auf Ja.
Anschließend werden Ihnen 3 weitere Optionen angezeigt:

  • Bei Änderung von nachladen.
  • Feldwert SQL-Statement.
  • SQL in Form Edit ausführen.
SQL-Statement für aktualisierte Feld-Werte

Besonderheiten

Hinweis: Der Feld-Wert wird immer automatisch ermittelt und kann nicht manuell durch den Benutzer geändert werden.

In diesem Fall können Sie Input-Parameter und User-Parameter der entsprechenden Joomla Objekte verwenden.

Konfiguration des SQL Statements mit Input-Parametern

Etwas Aufmerksamkeit wird notwendig, damit das SQL-Statement und seine wiederholte Ausführung bei Änderung von ausgewählten Benutzer-Eingaben funktioniert. Diese ausgewählten Felder mit ihren relevanten Benutzer-Eingaben fügen Sie in Form von Input-Parameter in das SQL-Statement ein.

Änderungen der Benutzer-Eingaben dieser Felder, die sogenannten Trigger-Felder, müssen eine Neuausführung des SQL-Statements auslösen. Hierzu dient die Liste der Reload-Trigger Felder in der Konfiguration des SQL-Feldes.

Hinweis: Es muss individuell konfiguriert werden, dass bei Änderung der Benutzer-Eingaben von ausgewählten Feldern, den sogenannten Trigger-Feldern, eine Neuausführung des SQL-Statements getriggert wird.

Damit bei Änderung einer Benutzer-Eingabe dieser Trigger-Felder das SQL-Statement mit dem entsprechenden Input-Parameter erneut ausgeführt wird, ist Folgendes zu beachten:

  • Alle Trigger-Felder müssen in der Liste der Reload-Trigger Felder des SQL-Feldes ausgewählt sein.
  • Alle Formularfelder, die als Input-Parameter im SQL-Statement verwendet werden, müssen in die Liste der Reload-Trigger Felder aufgenommen werden.
  • Felder, die in der Liste der Reload-Trigger Felder nicht zur Verfügung stehen, dürfen nicht als Input Parameter verwendet werden.

Hinweis: Nicht immer sind alle grundsätzlich möglichen Felder auch tatsächlich als Trigger-Felder einsetzbar. Sie stehen dann nicht als Trigger-Felder in der Liste der Reload-Trigger zur Verfügung.

In folgenden Situationen stehen Felder nicht als mögliche Trigger-Felder zur Auswahl:

  • Folgende Feld-Typen sind nie auswählbar, da der Feld-Typ technisch nicht passt:
    • File Upload
    • Image Submit Button
    • Submit
    • Reset
    • Feld Trenner
    • Neue Seite
    • Standort
    • Signature.
  • Folgende aktivierte Feld-Optionen können unter Umständen nicht mit der Nutzung im SQL-Statement vereinbar sein:
    • Option Edit-only Feld.
      Für alle Feldtypen, die eine Edit-only Option besitzen.
    • Optionen Als Datenliste anzeigen im Feld-Typ Select-SQL
    • Option HTML Editor im Feld-Typ Textarea
  • Wenn das Feld in einer Bedingung verwendet wird, und dadurch eine logische Endlos-Schleife entstünde.
    Das Feld A triggert den Reload von Feld B und Feld B triggert den Reload von Feld A.

Es ist absolut notwendig sicherzustellen, dass die verwendeten Input-Platzhalter im SQL-Statement gleichzeitig als Felder in der Reload-Trigger-Liste enthalten sind.
Die Reload-Trigger-Liste konfigurieren Sie in der Feld-Konfiguration, Reiter Grundeinstellungen mit dem Formular-Parameter Bei Änderung von nachladen.

Hinweis: Ansonsten kann die Nutzung des Feldes zu unerwarteten Ergebnissen führen.

Hinweis: Bei einer unvollständigen Reload-Trigger-Liste kann es sogar dazu kommen, dass ein Formular gar nicht mehr abgeschickt werden kann.

Bei korrekter Konfiguration wird der Feld-Wert eines SQL-Feldes bei jeder Benutzereingabe automatisch sofort angepasst, wenn die Änderung in einem Reload-Trigger-Feld stattfindet.

Prinzipiell kann der Benutzer den Wert überschreiben, aber die Eingabe würde durch ein späteres Reload sofort wieder geändert und ist darüber hinaus nicht valide. Ist die Formular-Option SQL-Feld aktiviert, so validiert Visforms nach Absenden des Formulars Server-seitig, dass der mit dem Formular übermittelt Wert übereinstimmt mit dem Wert, der sich aus dem SQL-Statement ergibt. Stimmen die Werte in Folge einer manuellen Änderung im SQL-Feld nicht überein, wird das Formular als fehlerhaft zurückgeschickt und erneut angezeigt.

Die Feld-Option “SQL in Form Edit ausführen”

Option auf “Nein” gestellt

Wenn Sie diese Option auf Nein stellen, verhält sich das Feld beim Editieren des Formulars wie ein ganz normales nicht-SQL Feld. Es wird der in der Datenbank gespeicherte Wert verwendet. Dieser kann beim Editieren des Formulars durch den Editor manuell verändert werden. Es wird dann auch nicht mehr validiert, dass die Benutzereingabe übereinstimmt mit dem Wert, der sich aus dem SQL-Statement ergibt.

Diese Einstellung kann etwa sinnvoll sein, wenn das SQL Statement User-Parameter enthält. Der Benutzer, der das Formular ursprünglich übermittelt, muss nicht derselbe Benutzer sein, der die Daten später bearbeitet. Oder wenn Sie eine Form von Auto-Increment implementiert haben, die nicht bei jedem Editieren weiter hoch-zählen soll.

Hinweis: Verwenden Sie die Feldberechtigungen um zu steuern, wer den Wert verändern darf und wer nicht.

Option auf “Ja” gestellt

Wenn Sie diese Option auf Ja stellen, verhält sich das Feld wie ein SQL-Feld in der Formular-Ansicht. In diesem Fall setzen Sie das Feld am besten auf Read-only. Sie verdeutlichen damit, dass dies Daten sind, die der Benutzer nicht verändern soll.

Hinweis: Die Daten-Validierung von Visforms stellt sicher, dass die Daten auch tatsächlich nicht verändert werden.