FriendsOfREDAXO/yform_spam_protection

Kein verstecktes Formularfeld oder ähnliches generiert (Redaxo 5.11, YForm 3.4.1)

fabian-negt-3tech opened this issue · 8 comments

Hallo,

ich habe das yform_spam_protection of einem Redaxo-System (5.11.0) installiert und den Output eines Formulartemplates um den dazugehörigen Code (PHP-Schreibweise) ergänzt:
$yform->setValueField('spam_protection', array("honeypot","Bitte nicht ausfüllen.","Ihre Anfrage wurde als Spam erkannt und gelöscht. Bitte versuchen Sie es in einigen Minuten erneut oder wenden Sie sich persönlich an uns.", 0));

Es ist YForm 3.4.1 installiert.

Wenn ich das Formular auf der Webseite untersuche, dann sehe ich an der Stelle, an der ich ein Honeypot-Input oder ähnliches erwarten würde, nichts. Ich kenne die Arbeitsweise des AddOns nicht und bin daher verunsichert, ob dies das korrekte Verhalten des AddOns ist, oder ob hier ein Fehler vorliegt.

Falls es ein Fehler ist, woran könnte das liegen?

Bitte kopiere doch mal den ganzen Formularcode von deinen Formular hier rein.

LG

Hier ist der Input des Moduls:

<?php
  $form = new MForm();
  $form->addFieldset('Sidebar'); 
  $form->addTextField(1, array('label' => 'Title')); 
  $form->addTextField(2, array('label' => 'Subtitle'));  
  $form->addMediaField(1, array('label' => 'Image')); 
  $form->addTextAreaField(3, array('label' => 'Text', 'class' => 'redactorEditor2-minimal')); 
  $form->addTextField(4, array('label' => 'Link V-Card')); 
  echo $form->show(); 

Hier ist der Output des Moduls:

<?php 
  $media = rex_media::get('REX_MEDIA[1]'); 
  $title = $media ? $media->getTitle() : ''; 
  $alt = !empty($title) ? $title : $this->getValue('name'); 
  ?>
<div class="px-10 py-10 md:px-20">

    <div class="flex flex-col-reverse justify-between gap-10 lg:flex-row xl:gap-20">

        <div class="w-full xl:w-2/6 lg:mr-10">
            <img src="<?= rex_media_manager::getUrl('', "REX_MEDIA[1]") ?>" alt="<?= $alt ?>" class="hidden max-w-sm lg:block grayscale-filter">
            <h3 class="mt-4 text-2xl font-semibold font-display">
                REX_VALUE[1]
            </h3>
            <p class="text-lg font-light font-body">
                REX_VALUE[2]
            </p>
            <div class="mt-4 font-light font-body">
                REX_VALUE[3 output=html]
            </div>
        </div>

        <div class="w-full xl:w-4/6">

            <?php

                $yform = new rex_yform();
                $yform->setObjectparams('form_name', 'table-rex_contact_inquires');
                $yform->setObjectparams('form_action', rex_getUrl('REX_ARTICLE_ID'));
                $yform->setObjectparams('form_wrap_class', 'mt-2');
                $yform->setObjectparams('form_ytemplate', 'tailwind');
                $yform->setObjectparams('form_showformafterupdate', 0);

                // Kontaktdaten
                $yform->setValueField('html', ['', '<div class="flex flex-col py-5 border-b border-gray-200">']);
                $yform->setValueField('html', ['', '<div class="text-xl font-body">{{contact_form_contact_details}}</div>']);
                $yform->setValueField('text', array('name' => 'name', 'label' => '', 'attributes' => '{"placeholder": "{{contact_form_label_name}} *", "required": "required"}'));
                $yform->setValueField('email', array('name' => 'email', 'label' => '', 'attributes' => '{"placeholder": "{{contact_form_label_email}} *", "required": "required"}'));
                $yform->setValueField('text', array('name' => 'phone', 'label' => '', 'attributes' => '{"placeholder": "{{contact_form_label_phone}} (optional)"}'));
                $yform->setValueField('html', ['', '</div>']);

                // Nachricht
                $yform->setValueField('textarea', ['name' => 'message', 'label' => '{{contact_form_message}}', 'attributes' => '{"placeholder": "{{contact_form_message_placeholder}}", "required": "required"}']);

                // Dateiupload
                $yform->setValueField('upload', array('upload', '{{attachment}}', '0,10000', '.pdf,.odt,.doc,.docx,.xls,.xlsx,.png,.jpg,.jpeg,.zip', '0', 'min_err,max_err,type_err,empty_err,delete_file_msg'));
                $yform->setValueField('php', array('php_attach', '{{attach_file}}', '<?php if (isset($this->params[\'value_pool\'][\'files\'])) { $this->params[\'value_pool\'][\'email_attachments\'] = $this->params[\'value_pool\'][\'files\']; } ?>'));

                $yform->setValueField('html', ['', '<div class="flex flex-col items-center justify-between gap-4 py-5 md:flex-row">']);
                $yform->setValueField('checkbox', array("consent", '<div class="text-sm font-medium font-body">{{form_consent_short}}*:</div><div class="text-xs font-thin font-body">{{form_consent}}  (<a href="' . rex_getUrl(50, rex_clang::getCurrentId()) . '" target="_blank" class="underline hover:text-orange-500">{{form_consent_link_label}}</a>)</div>', "0 or 1", "1"));
                $yform->setValueField('html', ['', '</div>']);
                $yform->setValueField('html', ['', '<div class="py-5">']);
                // Die folgende Zeile soll das "yform_spam_protection" AddOn aktivieren, aber es wird kein HTML generiert
                $yform->setValueField('spam_protection', array("honeypot","Bitte nicht ausfüllen.","Ihre Anfrage wurde als Spam erkannt und gelöscht. Bitte versuchen Sie es in einigen Minuten erneut oder wenden Sie sich persönlich an uns.", 0));
                $yform->setValueField('html', ['', '</div>']);
                $yform->setValueField('html', ['', '<div class="py-5">']);
                $yform->setValueField('submit', array('submit', '{{form_submit}}', '', '', '', 'w-full lg:w-1/3 bg-orange-500 py-4 text-center font-display font-medium uppercase text-white border border-orange-500 duration-100 ease-linear hover:text-orange-500 hover:bg-white'));
                $yform->setValueField('html', ['', '</div>']);

                $yform->setValidateField('empty', array("consent", "{{form_accept_consent}}"));

                $yform->setActionField('tpl2email', ['inquiry3', 'info@beispiel.com']);
                $yform->setActionField('redirect', [rex_getUrl(58, rex_clang::getCurrentId())]);
                echo $yform->getForm();

                $prefilledMessage = rex_get('product', 'string');

            ?>

        </div>
    </div>
</div>

Sieht erstmal korrekt aus. Hast du im Quellcode geschaut, ob an der entsprechenden Stelle wirklich nichts ausgegeben wird? Der letzte Parameter (wert: 0) den kannst du Mal auf 1 stellen und schauen, ob Debug-Infos ausgegeben werden.

Ansonsten Mal mit der Funktion des Addons näher vertraut machen. Vermutlich geht alles.

Quellcode ist an der betreffenden Stelle leer.
Habe den Parameter auf 1 gesetzt und folgende Debug Infos wurden ausgegeben.

array:1 [
    "query" => "DELETE FROM rex_tmp_yform_spam_protection_frequency  WHERE createdate < (NOW() - INTERVAL 300 SECOND)"
]
array:4 [
    "query" => "SELECT count(`createdate`) AS `count` FROM rex_tmp_yform_spam_protection_frequency WHERE `ipv4` = INET_ATON(:ipv4) AND `ipv6` = :ipv6"
    "params" => array:2 [
        ":ipv4" => "ip.ze.nsi.ert"
        ":ipv6" => false
    ]
    "fullquery" => "SELECT count(`createdate`) AS `count` FROM rex_tmp_yform_spam_protection_frequency WHERE `ipv4` = INET_ATON('ip.ze.nsi.ert') AND `ipv6` = ''"
    "count" => 1
]
[]

Ansonsten Mal mit der Funktion des Addons näher vertraut machen. Vermutlich geht alles.

Bei den Optionen des AddOns fällt mir jetzt keine Einstellung ins Auge, die das Verhalten erklärt. Und die Doku ist ja nun auch nicht super umfangreich. Ich wüsste nicht, wo ich noch schauen sollte (außer den gesamten Quellcode des AddOns durchzugehen, aber das ist ja nicht Sinn der Sache)

Hier funktioniert das so.
In R 5.12.0, yform 3.4.1 und SpamProtection 1.1.0 funktioniert alles
Im Zweifel AddOn Reinstallieren, Cache Löschen.

@fabian-negt-3tech wenn du möchtest, frag doch Nils, ob ich mir das mal in eurem Projekt anschauen darf. Wir kennen uns schon seit langer Zeit.

@marcohanke deine Vorschläge (Addon reinstallieren, Cache löschen) haben dieselbe Wirkung wie Homöopathie. Das hilft hier nicht weiter.

Homeöopathie hat bei dir also nicht geholfen? Schade eigentlich. Dann verschreib doch einfach mal nen richtigen Hammer, vielleicht klappts ja damit. Oder bist du nur als Privatarzt tätig?

Geschlossen, aufgrund fehlender Rückmeldung und fehlender Reproduzierbarkeit. Bei Bedarf gerne wieder öffnen.