pflumi
Beiträge: 66
Registriert: 13. Mai 2016, 11:13

Spamschutz yform-Formulare

12. Jul 2017, 16:47

Hi,

unter https://github.com/yakamara/redaxo_yfor ... mschutz.md wird eine Möglichkeit gezeigt, wie man via Zeitstempel Bot-Nachrichten ausschließen kann:

Code: Alles auswählen

php|validate_timer|Spamschutz|<?php echo '<input name="validate_timer" type="hidden" value="'.microtime(true).'" />' ?>|
validate|customfunction|validate_timer|yform_validate_timer|5|Spambots haben keine Chance|
function yform_validate_timer($label,$microtime,$seconds)
    {
        if (($microtime + $seconds) > microtime(true)) {
            return true;
        } else {
            return false;
        }
    }
Gibt es neben der Pipe-Notation auch eine funktionierende PHP-Schreibweise, also nach dem Schema:

Code: Alles auswählen

$yform->setActionField('php, array(validate_timer, ...'));
$yform->setValidateField('costumfunction', array("validate_timer, ..."));
Ich würde damit gerne dieses Formular hier ergänzen:

Code: Alles auswählen

<?php
		$yform = new rex_yform();
		$yform->setObjectparams('...');

		$yform->setValueField('fieldset', array("nachricht", "Nachricht eintragen"));
		$yform->setValueField('html', array("details", "<b><i>* Details</i></b><hr>"));
		
		$yform->setValueField('text', array("name","#placeholder:Ihr Name","Name: *"));
		$yform->setValidateField('empty', array("name","Sie haben keinen Namen angegeben."));

		$yform->setValueField('textarea', array("message","#placeholder:Nachricht hinterlassen","Ihre Nachricht: *"));
		$yform->setValidateField('empty', array("message","Sie haben noch keine Nachricht geschrieben."));

		$yform->setValueField('captcha', array("Bitte Verifizierungscode eingeben!","Falsche Verifizierung."));

		$yform->setActionField('db', array('rex_messages'));
		
		$yform->setActionField('showtext', array("Ihre Nachricht wurde gespeichert.",'<div class="gespeichert">',"</div>","1"));
		echo $yform->getForm();
		
?>

Benutzeravatar
anita
Beiträge: 700
Registriert: 25. Jan 2007, 10:25
Wohnort: Finsterwalde

Re: Spamschutz yform-Formulare

13. Jul 2017, 11:44

hi,

ich hab's so gemacht:

Code: Alles auswählen

$yform->setValueField('php', array("validate_timer","spamschutz","<?php echo '<input name=\"validate_timer\" type=\"hidden\" value=\"'.microtime(true).'\" />' ?>"));
$yform->setValidateField('customfunction', array('validate_timer', 'yform_validate_timer', '5', 'keine chance'));
Gruß Anita

javanita engineering, immer eine zündende Idee
http://www.javanita.com

Benutzeravatar
alexplus
Beiträge: 204
Registriert: 13. Feb 2007, 15:03
Wohnort: Heilbronn
Kontaktdaten: Website

Re: Spamschutz yform-Formulare

7. Aug 2017, 10:21

Hallo Anita, Hallo Pflumi,

Funktioniert alles wie gewünscht? Sind noch Fragen offen?

VG
Alex

pflumi
Beiträge: 66
Registriert: 13. Mai 2016, 11:13

Re: Spamschutz yform-Formulare

8. Aug 2017, 10:08

Hi Alex,

schön dass Du nachfragst.

Ich habe Anitas PHP-Schreibweise übernommen, doch leider funktioniert es bei mir nicht.

Vllt. habe ich auch die yform_validate_timer Funktion falsch eingebunden?!

Die Frage ist sicherlich banal, aber wo konkret binde ich das Skript am besten ein?

Hilfreich für Anfänger wäre es vllt., wenn man in die Hilfe neben der pipe-Notation auch die PHP-Schreibweise aufnehmen könnte...

Benutzeravatar
alexplus
Beiträge: 204
Registriert: 13. Feb 2007, 15:03
Wohnort: Heilbronn
Kontaktdaten: Website

Re: Spamschutz yform-Formulare

8. Aug 2017, 11:57

Code: Alles auswählen

$yform->setValidateField('costumfunction', array("validate_timer, ..."));
du hast aber nicht noch den Tippfehler drin aus deinem 1. Post mit "costumfunction" statt "customfunction"?

Benutzeravatar
alexplus
Beiträge: 204
Registriert: 13. Feb 2007, 15:03
Wohnort: Heilbronn
Kontaktdaten: Website

Re: Spamschutz yform-Formulare

8. Aug 2017, 11:58

Und die Funktion selbst packst du am besten in

/redaxo/src/addons/project/boot.php

pflumi
Beiträge: 66
Registriert: 13. Mai 2016, 11:13

Re: Spamschutz yform-Formulare

10. Aug 2017, 12:44

Hallo Alex,

vielen Dank für Deine Hilfe! :) Es funktioniert jetzt.

Kurzes feedback:

Peinlich zuzugeben, aber es war tatsächlich der Rechtschreibfehler... :oops:

Die Funktion habe ich jetzt allerdings im Modul direkt.
Wenn ich sie in die boot.php des Project-Addons gelegt habe, bekam ich die Meldung, dass die Funktion nicht gefunden wurde.
Gibt es irgendwelche (Sicherheits-)Nachteile, weshalb man die Funktion nicht direkt ins Modul packen sollte?

pflumi
Beiträge: 66
Registriert: 13. Mai 2016, 11:13

Re: Spamschutz yform-Formulare

29. Aug 2017, 12:42

Hallo und mal wieder eine Frage in die Runde...

Ich nutze diese yform-Spamschutz-Funktion und das funktioniert auch gut.

Die Funktion Validate-Timer-Funktion

Code: Alles auswählen

function yform_validate_timer($label,$microtime,$seconds)
    {
        if (($microtime + $seconds) > microtime(true)) {
            return true;
        } else {
            return false;
        }
    }
habe ich in das Formular-Modul eingebunden.

Leider führt das bei der Indexierung von Search it dann zu einem Abbruch mit Fehlermeldung.

Ich würde die Funktion also gerne anders einbinden.

Kann mir jemand herlfen wie ich das konkret am besten mache?

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

Re: Spamschutz yform-Formulare

31. Aug 2017, 13:50

Die Fehlermeldung ist streng geheim...

pflumi
Beiträge: 66
Registriert: 13. Mai 2016, 11:13

Re: Spamschutz yform-Formulare

31. Aug 2017, 14:58

Grüß dich Ingo,

wieso sollte die Fehlermeldung streng geheim sein? Verstehe ich nicht...
Sie lautet: "Cannot redeclare yform_validate_timer() (previously declared in rex:///...)"
Bild
Aber darum gehts mir doch gar nicht. Wenn ich, wie gesagt, diese Funktion aus dem Modul herausnehme, funktioniert Search it einwandfrei.

Daher war doch meine Frage: Wie konkret kann ich dieses Script extern einbinden, damit es bei Aufruf im Modul zur Verfügung steht (...und Search it nicht beeinträchtigt) ?! :)

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

Re: Spamschutz yform-Formulare

31. Aug 2017, 17:24

Laut Fehlermeldung wird die Funktion yform_validate_timer mehrfach deklariert. Schau dir mal das hier an: http://php.net/manual/de/function.function-exists.php

Code: Alles auswählen

if (!function_exists('yform_validate_timer') {
    function yform_validate_timer () {
        // yadayada
    }
}

pflumi
Beiträge: 66
Registriert: 13. Mai 2016, 11:13

Re: Spamschutz yform-Formulare

1. Sep 2017, 09:51

Hi Ingo,

danke für Deine Hilfe! :D

Jetzt habe ich verstanden, wo der Fehler lag: Durch mehrfachen Einsatz des Moduls mit entsprechendem Formular wurde - weil die Funktion direkt im Modul ist - die Funktion mehrfach deklariert, wenn Search it gelaufen ist. Das hat zu der Fehlermeldung geführt.
Jetzt wird die Funktion nur noch deklariert, wenn sie noch nicht existiert.

Das hat das Problem gelöst.

Super, danke! :D

Was mich zu zwei weiteren Fragen führt: Wäre es dann nicht wirklich sinnvoller, die Funktion irgendwie aus dem Modul auszulagern? Und wenn ja, wie?

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

Re: Spamschutz yform-Formulare

1. Sep 2017, 12:29

Entweder über das in Redaxo mitgelieferte Project Addon oder https://github.com/FriendsOfREDAXO/theme
Oder du strickst dir was eigenes...

pflumi
Beiträge: 66
Registriert: 13. Mai 2016, 11:13

Re: Spamschutz yform-Formulare

1. Sep 2017, 14:12

Danke Ingo, genau das habe ich ja schon probiert und wollte ich wissen.
Ich habe eine yform_validate_timer.php in das lib-Verzeichnis im Project-AddOn gelegt.
Leider erhalte ich dann beim Ausfüllen des Formulars die Fehlermeldung:

Code: Alles auswählen

ERROR: customfunction "yform_validate_timer" not found
Irgendwas mache ich da falsch beim Einbinden. Hast Du einen Tipp?

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

Re: Spamschutz yform-Formulare

1. Sep 2017, 16:49

Über das lib Verzeichnis werden nur Klassen automatisch geladen. Du könntest die Funktion zb in der boot.php oder als statische Methode einer Klasse definieren.

Zurück zu „Allgemeines [R5]“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste