Page 1 of 2
Aanmelden NMS spam
Posted: Sat Oct 26, 2013 8:53 am
by timdebuurman
Hoi,
Ik heb een aanmelding voor NMS, waar teveel spam op binnenkomt.
Aanmeldingen voor de nieuwsbrief voor emailadressen die duidelijk iet van de doelgroep zijn. (
goodsam@gmail.com,
behappy@yahoo.com, dat soort dingen)
Ik heb de aanmelding ervoor in de footer staan, waar geen ruimte is voor een Captcha.
Hoe zou ik hier een verborgen veld kunnen bijmaken die, als deze ingevuld is, het formulier niet verstuurd?
Dit is de standaard 'inschrijven-sjabloon' :
Code: Select all
{if $message ne ""}
<br /><span class="nms_message">{$message}</span><br />
{/if}
{$formstart}
{$formhidden}
{if $prompt_username ne ""}
{$prompt_username}: {$username}<br />
{/if}
{if $prompt_email ne ""}
Email: {$email}<br />
{/if}
{foreach from=$listids item=curr_id}
{$curr_id}
{/foreach}
{$submitbtn}
{$formend}
Hopelijk is hier een oplossing voor.
gr Tim
Re: Aanmelden NMS spam
Posted: Sat Oct 26, 2013 9:52 am
by Rolf
Re: Aanmelden NMS spam
Posted: Sat Oct 26, 2013 10:16 am
by staartmees
ik doe het heel, eenvoudig en effectief met een veld 'hoeveel is de som van twaalf en vijf voluit geschreven?' Dan controleren of er 'zeventien' staat of niet.
Re: Aanmelden NMS spam
Posted: Sat Oct 26, 2013 10:41 am
by timdebuurman
@Rolf
Bij deze uitleg wordt uitgegaan van Formbuilder, waarbij je inderdaad makkelijk een 'field validation' toe kan passen.
In mijn geval gaat het om het aanmeldformulier van NMS.
@staartmees
Ik heb geen ruimte om extra velden toe te voegen. Geen Captcha, maar ook geen extra invoerveld.
Re: Aanmelden NMS spam
Posted: Mon Oct 28, 2013 8:27 am
by Jos
Je kunt Formbuilder gebruiken, aangevuld met een udt die de daadwerkelijke aanmelding in NMS wegschrijft. Ik heb dat scriptje ergens liggen, ik wil best even zoeken als je interesse hebt.
Re: Aanmelden NMS spam
Posted: Mon Oct 28, 2013 11:00 am
by timdebuurman
Hoi Jos,
Ik heb wel een UDT ergens om het met een een keuzelijst/checkbox te doen, maar dat werkt niet goed.
Als je dat script hebt, graag.
gr Tim
Re: Aanmelden NMS spam
Posted: Mon Oct 28, 2013 12:03 pm
by timdebuurman
Thx!
Moet de UDT aangeroepen worden binnen Formbuilder (STart een gebruikers gedefineerde tag met de formulier resultaten) of dmv gebeurtenissen beheer?
Re: Aanmelden NMS spam
Posted: Mon Oct 28, 2013 12:14 pm
by Jos
Vanuit Formbuilder zelf, het veldtype wat je noemt, zou moeten werken.
Ik geloof dat ik dit zelf niet gebruikt heb, maar simpelweg een udt tag in de verzendbevestigingstemplate van het formulier gezet heb. In dat geval de udt wel expliciet voorzien van parameters gelijk aan de formbuilder veldnamen voor email en naam, dus zoiets als {nms_adduser naam=$fbvariabele e_mailadres=$fbvariabele}
Re: Aanmelden NMS spam
Posted: Mon Oct 28, 2013 2:23 pm
by timdebuurman
Jos,
Heb je je bericht met de udt weggehaald?
Ik had deze nog niet gekopieerd..
Re: Aanmelden NMS spam
Posted: Mon Oct 28, 2013 2:43 pm
by Jos
Ik niet... zal wel niet mogen ofzo... Wist niet dat dat ook voor UDT gold...
Re: Aanmelden NMS spam
Posted: Mon Oct 28, 2013 2:44 pm
by timdebuurman
mag vast wel...zal wel foutje zijn dan..
Wil je deze nog eens posten?
Re: Aanmelden NMS spam
Posted: Mon Oct 28, 2013 2:48 pm
by Jos
nee hoor... berichten vallen hier nooit zonder reden weg.
Probleem is dat ik het script wat ik had aan moest passen, omdat ik het zo gebruik dat ik formbuilder in de ene website heb en nms in een cmsms site onder een ander domein.
Die aanpassingen heb ik niet opgeslagen

Re: Aanmelden NMS spam
Posted: Mon Oct 28, 2013 2:55 pm
by timdebuurman
Na wat rondzoeken op het forum heb ik deze gevonden:
Code: Select all
$gCms = cmsms();
$nms = cms_utils::get_module('NMS');
if(!is_object($nms))
return false;
if (!isset($params['name']) && !isset($params['email']) && !isset($params['list']))
return;
$name = '';
if (isset($params['name']))
$name = $params['name'];
$email = '';
if (isset($params['email']))
$email = $params['email'];
$list = '';
if (isset($params['list']))
$list = 1;
//This is a mandatory list ID all should belong to
//Add user to NMS
//array(1) -- represents the id of the mailing list to add them to. Change the 1 to whatever you want.
$nms->AddUser($email, array(1), $name);
//Set the confirmed flag to true (they clicked the checkbox -- that's enough)
$db =& $gCms->GetDb();
$db->Execute('UPDATE ' . cms_db_prefix() . 'module_nms_users SET confirmed = 1 where email = ?', array($email));
Dit werkt nu goed.
Enige is dat als het ' verborgen veld' wel ingevoerd wordt er een foutmelding verschijnt dat deze niet correct is ingevoerd.
Ik weet niet hoe slim de spam-bots zijn, maar zou mooier zijn als het formulier wel gewoon verstuurd wordt, maar dat de inschrijving in de nieuwsbrief niet gebeurt.
Dat zou toch iets in de UDT aangepast moeten worden en niet de validatie op het verborgen veld..
Re: Aanmelden NMS spam
Posted: Mon Oct 28, 2013 4:26 pm
by Rolf
Jos wrote:nee hoor... berichten vallen hier nooit zonder reden weg.
Helaas gebeurt dat wel eens... zonder duidelijke reden (in het log) zijn posts weg. Ook die van mijzelf.
Voorbeeldje
http://forum.cmsmadesimple.org/viewtopi ... 20&t=47192
Maar ik heb hier ook even in het log gekeken. Maar deze post is wel handmatig verwijderd. Heb navraag gedaan. De UDT gebruikte "Internals" van NMS en dat is niet gewenst. Jos, jij zult het beter snappen dan ik
De UDT die
timdebuurman gebruikt is erg "gevaarlijk". Dit in de zin dat je om de module heen een wijziging aanbrengt in de database. Je kunt daardoor op korte of lange termijn problemen veroorzaken in de module/website. Problemen bij upgrades of andere problemen die module-gerelateerd lijken maar veroorzaakt worden door de UDT...
Niet doen dus!! Lijkt me ook beter om dit
niet op het forum te laten staan!
Re: Aanmelden NMS spam
Posted: Mon Oct 28, 2013 10:57 pm
by Jos
Rolf wrote:De UDT die timdebuurman gebruikt is erg "gevaarlijk". Dit in de zin dat je om de module heen een wijziging aanbrengt in de database.
Rolf doelt waarschijnlijk op de laatste paar regels, onder
//Set the confirmed flag to true
De methode AddUser kan dat tegenwoordig al rechtstreeks regelen, daar heb je geen aparte database update voor nodig. Die database update kun je weglaten als je onderstaande gebruikt.
Code: Select all
$disabled = 0;
$confirmed = 1;
$nms->AddUser($email, array(1), $name, $disabled, $confirmed);