[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • XForm zwei Felder in DB überprüfen
Seite 1 von 1

XForm zwei Felder in DB überprüfen

Verfasst: 10. Nov 2014, 11:44
von nitzer
Hallo,

ich Speicher Formularinhalte in eine Datenbanktabelle und müsste beim Abschicken des Form zwei Werte in der DB überprüfen, nämlich ein E-Mail-Adresse und ein Datum (Ymd). Es soll so Läufern, daß man nur einmal am Tag mit dieser E-Mailadresse einen Eintrag machen kann.

Wie lässt sich sowas umsetzen? Ich schätze mal custom-function, allerdings hat sich mir das noch nicht erschlossen.

Danke für eure Hilfe.

Re: XForm zwei Felder in DB überprüfen

Verfasst: 10. Nov 2014, 12:10
von RexDude
Ne built-in Lösung würde mich auch interessieren.

Meine Lösung war damals: XForm per PHP bauen und nach submit die Prüfungen machen. Wenn ok dann von Hand in die DB damit. Wenn nicht dann Fehlermeldung raus und der User muss halt dann dern Zurück Button betätigen und seine Daten korrigieren.

http://www.redaxo.org/de/forum/addons-f ... ml#p108487
http://www.redaxo.org/de/download/module/?modul_id=647

Re: XForm zwei Felder in DB überprüfen

Verfasst: 10. Nov 2014, 12:39
von gupi
Hallo,
ich denke da gibt es zwei Lösungsansätze:
  • 1. über eine Funktion die zum Extension Point "REX_XFORM_SAVED" aus "rex_xform_action_db" registriert wurde, oder
    2. über eine eigene XForm-Action Class basierend auf der Klasse "rex_xform_action_email"
Ich würde den 1. Ansatz (via EP) bevorzugen. Der bietet die bestmögliche Wiederverwendung auch bei Updates von XForm. Ich gehe davon aus, das die EP in allen zukünftigen Versionen erhalten bleiben.

Gruß
Gunter

Re: XForm zwei Felder in DB überprüfen

Verfasst: 10. Nov 2014, 17:39
von nitzer
hmm, ok.
Naja, nur der USer soll seine Daten nicht korrigieren, weil er nur einen Eintrag am Tag machen darf.
Es geht dabei um ein Gewinnspiel, bisher hatte ich geprüft ob die E-Mail-Adresse in der DB unique ist, aber das kann ich ja jetzt nicht mehr so machen.

Puuh, Extension-Point ist mal wieder etwas Neuland für mich.

Gibt's da irgendwo was zum Nachlesen für den Einstieg?

Re: XForm zwei Felder in DB überprüfen

Verfasst: 10. Nov 2014, 21:50
von robo
Ich hätte da einen rein theoretischen Ansatz, wie es funktionieren könnte, sofern du XForm per PHP baust, was übrigens sehr empfehlenswert ist, sobald es etwas komplexer wird!

-> zusätzliches Feld für Zeitstempel in DB-Tabelle anlegen
-> Zeitstempel per php (sql) immer auslesen und in ein value x-form-hidden-field packen
-> mit validate-field intfromto den Zeitstempel überprüfen (ob + 1 Tag)
-> wenn intfromto Validierung OK, neuen Zeitstempel setzen und auch neuen Eintrag machen (wenn nok kommt ja e nur die warning_message von intfromto)

LG
Robert

Re: XForm zwei Felder in DB überprüfen

Verfasst: 11. Nov 2014, 13:57
von gupi
nitzer hat geschrieben: Puuh, Extension-Point ist mal wieder etwas Neuland für mich.
Gibt's da irgendwo was zum Nachlesen für den Einstieg?
Das hier hilft möglicherweise: http://www.redaxo.org/de/doku/extension-points/
Das klingt übrigens sehr viel komplizierter als es tatsächlich ist:

Du benötigst eine Funktion die immer dann aktiv wird, wenn jemand das Formular ausgefüllt und abgeschickt hat.
Damit die Funktions ohne Eingriff in die X-Form Klassen aufgerufen wird, bedienst Du Dich eines bereits vorhandenen Extension Points, hier :REX_XFORM_SAVED

Beispiel für eine Funktion:

Code: Alles auswählen

<?php
function execute_ep($params) {
  $subject = $params['subject'];
  switch ($params['extension_point'])
  {
    case "REX_XFORM_SAVED":
      echo "<pre>".print_r($params,TRUE)."</pre>";
      break;
  }
}
?>
natürlich musst Du den Code innerhalb der Funktion auf Deine Bedürfnisse anpassen.
Jetzt musst Du die Funktion beim Extension-Point registrieren:

Code: Alles auswählen

rex_register_extension('REX_XFORM_SAVED','execute_ep');
und das machst Du in der "config.inc.php" eines Addons:

Code: Alles auswählen

<?php

$mypage = "tester"; // only for this file

if (!isset($_SESSION))
{
  session_start();
}

// ---------- Allgemeine AddOn Config


include $REX["INCLUDE_PATH"] . "/addons/tester/functions/general_functions_inc.php";

$REX['ADDON']['name'][$mypage] = $mypage; // name

$REX['ADDON']['version'][$mypage] = '1.0';
$REX['ADDON']['author'][$mypage] = 'Gunter Pietzsch';

rex_register_extension('REX_XFORM_SAVED','execute_ep');
 
Wichtig ist hier natürlich noch, dass die Include - Datei:

Code: Alles auswählen

include $REX["INCLUDE_PATH"] . "/addons/tester/functions/general_functions_inc.php";
deine Funktion enthält.

Ich hoffe ich habe das nicht zu kompliziert ausgedrückt
Gunter

Re: XForm zwei Felder in DB überprüfen

Verfasst: 11. Nov 2014, 14:27
von Jan.Kristinus
verstehe ich das falsch ? Müsste doch einfach so gehen:

datestamp Feld anlegen, welches nur das Datum beinhaltet was bei der Erstellung des Datensatzes gespeichert wird. Und dann nach unique prüfen. (emailfeld,datefeld).. siehe Beschreibung.

datestamp // datestamp|datefeld|Ymd|db|0
unique // validate|unique|emailfeld,datefeld|Sie haben heute bereits einen Eintrag gemacht|[table]

passt das ?

lg

jan

Re: XForm zwei Felder in DB überprüfen

Verfasst: 11. Nov 2014, 16:30
von gupi
ist das wirklich so?
Die Unique Prüfung stellt doch sicher dass ein Feld innerhalb der ganzen Tabelle einmalig ist. Das ist doch aber, durchaus gewollt, nicht der Fall wenn ein anderer User an diesem Tag aktiv geworden ist.
Dieser Weg geht nur wenn ich datum und z.B. die User-Id kombiniere, nur das Datum reicht hier meise Erachten nicht.

LG
Gunter

Re: XForm zwei Felder in DB überprüfen

Verfasst: 11. Nov 2014, 16:37
von Ingo
Jan.Kristinus hat geschrieben: datestamp // datestamp|datefeld|Ymd|db|0
unique // validate|unique|emailfeld,datefeld|Sie haben heute bereits einen Eintrag gemacht|[table]
ich schätz mal dass die kombination beider felder überprüft wird...

Re: XForm zwei Felder in DB überprüfen

Verfasst: 11. Nov 2014, 16:43
von Jan.Kristinus
genau Ingo,
das ist die Kombination die wichtig ist.. "emailfeld,datefeld"
lg

Re: XForm zwei Felder in DB überprüfen

Verfasst: 11. Nov 2014, 16:47
von gupi
Das stimmt natürlich. Ich habe total übersehen das hier eine Felderkombi geprüft wird.

LG
Gunter

Re: XForm zwei Felder in DB überprüfen

Verfasst: 12. Nov 2014, 13:04
von nitzer

Code: Alles auswählen

validate|unique|email,date|Sie haben heute bereits einen Eintrag gemacht|rex_gewinnspiel_weihnachten
Die Kombination funktioniert aber nicht. Ist das korrekt geschrieben?
Wenn ich nur auf ein Feld prüfe geht es natürlich.

Redaxo-Version ist 4.4.1 und Form 2.9.3.
Ginge das überhaupt schon in der Kombination?

Re: XForm zwei Felder in DB überprüfen

Verfasst: 12. Nov 2014, 13:07
von Jan.Kristinus
unique // validate|unique|emailfeld,datefeld|Sie haben heute bereits einen Eintrag gemacht|[table]
[table] beachtet ?

lg

jan

Re: XForm zwei Felder in DB überprüfen

Verfasst: 12. Nov 2014, 13:11
von nitzer
Ist doch drin!

Re: XForm zwei Felder in DB überprüfen

Verfasst: 12. Nov 2014, 13:26
von Jan.Kristinus
ach stimmt.. sah für mich wie eine 2. Zeile aus.. "eigentlich" sollte das gehen.. ich hoffe das ist kein bug..

PM mit ZUgang für mich zum nachsehen ?

lg

jan

Re: XForm zwei Felder in DB überprüfen

Verfasst: 12. Nov 2014, 13:42
von Jan.Kristinus
Vielen Dank f+r den Zugang..

Leider ist das nicht die aktuelle XForm Version .. deswegen geht das so nicht ..
Auch die REDAXO Version ist etwas älter, deswegen lässt sich die neue XFORM
nicht installieren.

D.h. entweder selbst direkt in der XForm das unique validate anpassen.
neue Variante ist hier: https://github.com/yakamara/redaxo_xfor ... ue.inc.php

oder halt redaxo updaten etc .. :)

lg

Re: XForm zwei Felder in DB überprüfen

Verfasst: 12. Nov 2014, 16:20
von nitzer
OK, danke. Ich werde mir das mal reinziehen.
Vielleicht ist der Aufwand aber auch zu groß.

Grüße
Andreas

Re: XForm zwei Felder in DB überprüfen

Verfasst: 12. Nov 2014, 17:11
von Jan.Kristinus
einfach die Klassen vergleichen und anpassen.. ich denke das ist überschaubar .. 30min für einen PHP Kenner .. für alle anderen halt etwas länger..
lg

Jan

Re: XForm zwei Felder in DB überprüfen

Verfasst: 12. Nov 2014, 18:17
von nitzer
:-)

Re: XForm zwei Felder in DB überprüfen

Verfasst: 12. Nov 2014, 22:54
von nitzer
boah, ich glaub ich checke nicht :-(