Hallo,
Contao-Version: 2.11.11
efg-Version: 1.16.5 stable Build 9
ich habe mit efg ein Formular erstellt.
Die Daten des Formulars sollen mit POST in eine eigens erstellte Datenbanktabelle (tl_member_generator) gespeichert werden.
Vom Mitglied werden im Frontend nur 2 Felder sichtbar und auszufüllen sein.
Die restlichen Felder (hidden) sollen via Klasse mit Callback-Funktionen durch Berechnung und Bedingungen befüllt werden.
Ich habe dafür eine EfgCallbacks.php erstellt und diese in system/modules/efg gespeichert.
Darin habe ich folgenden Code geschrieben:
PHP-Code:
<?php
class EfgCallbacks extends Backend
{
public function exampleCalculate($arrSubmitted, $arrFiles, $intOldId, &$arrForm)
{
// Einschraenkung auf das Formular
if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_10') {
function xkey()
{
$xkey = "";
$slang = 15;
$string = "0123456789ABCDEF0123456EFGH";
mt_srand((double) microtime() * 1000000);
for ($i = 1; $i <= $slang; $i++) {
$xkey .= substr($string, mt_rand(0, strlen($string) - 1), 1);
}
return $xkey;
}
$vxname = 'Hase';
$msg = 'Fuchs';
$code = '22';
$upgrade = '31968000';
$vdate = time();
$vvalid = $vdate + $upgrade;
$lskey = xkey();
$hosts = $lhosts = $arrSubmitted['ldomain'] . $arrSubmitted['sdomain'];
$hival = strrev($hosts) . $upgrade;
$hostval = $hosts . $vvalid;
// Folgenden Formularfelder sollen automatisch befüllt und mit in die Datenbank gespeichert werden
$arrSubmitted['v_date'] = $vdate;
$arrSubmitted['v_valid'] = $vvalid;
$arrSubmitted['v_1key'] = md5($code . $hival . md5($lskey) . md5($vvalid) . $msg);
$arrSubmitted['v_2key'] = $lskey;
}
return $arrSubmitted;
}
}
?>
Das Formular hat als ['FORM_SUBMIT'] = 'auto_form_10'! Das ist soweit geprüft ( mit Firebug ) und in Ordnung.
Die vom User ausgefüllten Felder ldomain und sdomain , sowie die automatisch zu befüllenden Felder befinden sich unter gleichen Name in der Datenbank, wo die Daten gespeichert werden sollen.
Das Formular ist nur für registrierte Mitglieder sichtbar.
Desweiteren habe ich den Hook in der system/config/dcaconfig.php wie folgt registriert.
PHP-Code:
<?php /* Put your custom configuration here */
$GLOBALS['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks', 'exampleCalculate');
?>
Soweit alles wie in dieser Anleitung -> LINK.
Auch kein versehentliches Leerzeichen nach "?>".
So wird das Formular generiert im Browser ausgegeben.
HTML-Code:
<form enctype="application/x-www-form-urlencoded" method="post" id="f10" action="index.php/generator/articles/enter-serial-number.html">
<div class="formbody">
<input type="hidden" value="auto_form_10" name="FORM_SUBMIT">
<input type="hidden" value="bac16394459aeffe5effcf4b73cd450f" name="REQUEST_TOKEN">
<input type="hidden" value="2048000" name="MAX_FILE_SIZE">
<input type="hidden" value="2" name="pid">
<input type="hidden" value="" name="v_date">
<input type="hidden" value="" name="v_valid">
<input type="hidden" value="" name="v_1key">
<input type="hidden" value="" name="v_2key">
<input type="hidden" value="1" name="v_gCount">
<div class="input-wrapper block">
<label class="mandatory" for="ctrl_55"><span class="invisible">Mandatory field </span>Domain<span class="mandatory">*</span></label>
<input type="text" placeholder="www.domain.com" maxlength="30" required="" value="" class="text mandatory" id="ctrl_55" name="ldomain">
</div>
<div class="input-wrapper block">
<label for="ctrl_56">Subdomain</label>
<input type="text" placeholder="www.m.domain.com" maxlength="35" value="" class="text" id="ctrl_56" name="sdomain">
</div>
<div class="submit_container">
<input type="submit" value="Enter" class="submit" id="ctrl_43">
</div>
</div>
</form>
Nun zu meinem Problem...
Warum werden mir nur die vom User befüllten 2 Felder ldomain und sdomain in die Dadenbank gespeichert?
In Modul "Formular-Daten" (tl_formdata_details) werden die Daten jedoch komplett gespeichert.
Warum funktioniert die Callback-Funktion nicht für meine Datenbanktabelle?
Kann mir jemand bitte erklären was hier schief läuft oder evtl alternative Vorschläge machen?
Gruß
Steffen
Lesezeichen