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

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
nitzer
Beiträge: 229
Registriert: 16. Okt 2006, 22:53
Wohnort: Erkrath
Kontaktdaten: ICQ Website

XForm zwei Felder in DB überprüfen

10. Nov 2014, 11:44

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.

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: XForm zwei Felder in DB überprüfen

10. Nov 2014, 12:10

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

gupi
Beiträge: 286
Registriert: 20. Nov 2008, 13:49
Wohnort: Elsdorf/Rheinland

Re: XForm zwei Felder in DB überprüfen

10. Nov 2014, 12:39

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
read the manual first

Benutzeravatar
nitzer
Beiträge: 229
Registriert: 16. Okt 2006, 22:53
Wohnort: Erkrath
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

10. Nov 2014, 17:39

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?

robo
Beiträge: 106
Registriert: 17. Aug 2012, 09:03
Wohnort: Wien
Kontaktdaten: Website

Re: XForm zwei Felder in DB überprüfen

10. Nov 2014, 21:50

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

gupi
Beiträge: 286
Registriert: 20. Nov 2008, 13:49
Wohnort: Elsdorf/Rheinland

Re: XForm zwei Felder in DB überprüfen

11. Nov 2014, 13:57

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
read the manual first

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

11. Nov 2014, 14:27

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
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

gupi
Beiträge: 286
Registriert: 20. Nov 2008, 13:49
Wohnort: Elsdorf/Rheinland

Re: XForm zwei Felder in DB überprüfen

11. Nov 2014, 16:30

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
read the manual first

Ingo
Beiträge: 782
Registriert: 24. Jun 2010, 00:34

Re: XForm zwei Felder in DB überprüfen

11. Nov 2014, 16:37

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...

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

11. Nov 2014, 16:43

genau Ingo,
das ist die Kombination die wichtig ist.. "emailfeld,datefeld"
lg
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

gupi
Beiträge: 286
Registriert: 20. Nov 2008, 13:49
Wohnort: Elsdorf/Rheinland

Re: XForm zwei Felder in DB überprüfen

11. Nov 2014, 16:47

Das stimmt natürlich. Ich habe total übersehen das hier eine Felderkombi geprüft wird.

LG
Gunter
read the manual first

Benutzeravatar
nitzer
Beiträge: 229
Registriert: 16. Okt 2006, 22:53
Wohnort: Erkrath
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

12. Nov 2014, 13:04

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?
Zuletzt geändert von nitzer am 12. Nov 2014, 13:07, insgesamt 1-mal geändert.

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

12. Nov 2014, 13:07

unique // validate|unique|emailfeld,datefeld|Sie haben heute bereits einen Eintrag gemacht|[table]
[table] beachtet ?

lg

jan
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

Benutzeravatar
nitzer
Beiträge: 229
Registriert: 16. Okt 2006, 22:53
Wohnort: Erkrath
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

12. Nov 2014, 13:11

Ist doch drin!

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

12. Nov 2014, 13:26

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
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

12. Nov 2014, 13:42

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
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

Benutzeravatar
nitzer
Beiträge: 229
Registriert: 16. Okt 2006, 22:53
Wohnort: Erkrath
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

12. Nov 2014, 16:20

OK, danke. Ich werde mir das mal reinziehen.
Vielleicht ist der Aufwand aber auch zu groß.

Grüße
Andreas

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

12. Nov 2014, 17:11

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
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/

Benutzeravatar
nitzer
Beiträge: 229
Registriert: 16. Okt 2006, 22:53
Wohnort: Erkrath
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

12. Nov 2014, 18:17

:-)

Benutzeravatar
nitzer
Beiträge: 229
Registriert: 16. Okt 2006, 22:53
Wohnort: Erkrath
Kontaktdaten: ICQ Website

Re: XForm zwei Felder in DB überprüfen

12. Nov 2014, 22:54

boah, ich glaub ich checke nicht :-(

Zurück zu „Allgemeines [R4]“