[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • yForm Callback in PHP
Seite 1 von 1

yForm Callback in PHP

Verfasst: 28. Mai 2019, 02:06
von goldfoot
Hallo,
Eine Suche im Forum hat leider keine Antwort auf mein (vielleicht spezielles) Problem ergeben.
Ich baue gerade mit yForm ein Anmeldeformular für Veranstaltungen, die ein begrenztes Ticket-Kontingent haben. Der E-Mail-Versand und die Eintragung in eine Teilnehmer-Datenbank funktionieren prima, nun muss nur noch die Anzahl der verfügbaren Plätze bei Anmeldung reduziert werden.

Die Rahmenbedingungen sind wie folgt: Es gibt zwei Tabellen in denen die Veranstaltungen und die Anmeldungen gespeichert werden. Bei Anmeldung soll nun (idealerweise) vor dem Absenden der Bestätigungsemail und Speichern der Anmeldung die Anzahl der noch verfügbaren Plätze geprüft und ggf. reduziert werden. Dazu scheint die Callback-Action geeignet zu sein, jedoch finde ich keine Dokumentation, wie die Action in PHP genutzt werden kann. Ich muss PHP nutzen, da ich im Formular dynamische Inhalte ausgebe (das war mit der Pipe-Variante nicht zu bewerkstelligen).

Ich habe folgende Klasse (beispielhaft), und eine Funktion, die prüfen soll ob noch genug Plätze verfügbar sind:

Code: Alles auswählen

<?php
class my_class {
    public function check_availability($form)  {
        // Ausgewählte Veranstaltung identifizieren
        $event_id = $form->getParam("value_pool")['sql']['event_id'];
        
        // Prüfe ob noch genug Plätze verfügbar sind. Wenn ja, send E-Mail. Wenn nein, zeige entsprechende Meldung an.
        // [...]
    }
}

Ich habe in meinem Modul (Ausgabe) folgendermaßen probiert, den Callback auszulösen:

Code: Alles auswählen

$yform->setActionField('callback', project_class::check_availability());
// Error: Too few arguments to function project_class::form_callback()

$yform->setActionField('callback', project_class::check_availability($yform);
// Error: Call to undefined method rex_yform::getParam()
Wie kann also in PHP das Formular als Argument für den Callback so mitgegeben werden, dass ich die eingegebenen Daten des Users weiter verarbeiten kann?
Danke im Voraus für hilfreiche Hinweise.. :wink:

Gruß,
Julian

Re: yForm Callback in PHP

Verfasst: 28. Mai 2019, 10:34
von runstop64
Hi,

hast du schon versucht, den Namen der Callable als String zu übergeben? Im Moment rufst du sie ja direkt auf, sie soll aber erst vom Callback aufgerufen werden.

Code: Alles auswählen

$yform->setActionField('callback', 'project_class::check_availability');
Du solltest die Methode als static definieren, wenn du sie so aufrufst, um Fehlermeldungen zu vermeiden.

Code: Alles auswählen

public static function check_availability($form)  {

Re: yForm Callback in PHP

Verfasst: 28. Mai 2019, 13:56
von goldfoot
HI Daniel,
du hast mich auf die richtige Spur gebracht. So scheint es zu gehen:

Code: Alles auswählen

$yform->setActionField('callback', array('my_class::check_availability'));

Ausgaben, die per PHP (echo, var_dump) erzeugt werden, werden nach dem Absenden des Formulars angezeigt und auch die Daten aus dem Formular sind im Callback verfügbar.

Jetzt stellt sich nur noch die Frage ob man das Speichern der Daten in der Tabelle noch verhindern kann wenn es nicht genug Plätze gibt. Hast du dazu noch eine Idee? Danke für deinen hilfreichen Tipp!

Gruß,
Julian