it-swarm.com.de

Wie man ein Recaptcha zum Kontaktformular hinzufügt

Ich habe versucht, die Methode von diese Frage zu verwenden, aber es hat bei mir nicht funktioniert. Ich erhalte immer diesen Fehler, nachdem ich das Formular abgeschickt habe:

Schwerwiegender Fehler: Objekt vom Typ JInput kann nicht als Array in der contact.php-Zeile 76 verwendet werden ...

Zeile 76 sieht so aus:

$res = $dispatcher->trigger('onCheckAnswer',$post['recaptcha_response_field']);

Mein Kontaktformular:

<div id="contact">
            <div id="message"></div>

            <form method="post" action="<?php
    echo JURI::root() ?>modules/module/tmpl/form/contact.php" name="contactform" id="contactform">

            <fieldset>

            <input name="name" type="text" id="name" size="30" value="" placeholder="<?php
    echo $params->get('contactname'); ?>" onfocus="this.placeholder = ''" onblur="this.placeholder = '<?php
    echo $params->get('contactname'); ?>'"/>

            <br />
            <input name="email" type="text" id="email" size="30" value="" placeholder="<?php
    echo $params->get('contactmail'); ?>" onfocus="this.placeholder = ''" onblur="this.placeholder = '<?php
    echo $params->get('contactmail'); ?>'"/>

            <br />
            <input name="subject" type="text" id="subject" size="30" value="" placeholder="<?php
    echo $params->get('contactsubject'); ?>" onfocus="this.placeholder = ''" onblur="this.placeholder = '<?php
    echo $params->get('contactsubject'); ?>'"/>

            <br />
            <textarea style="width: 275px;" name="comments" cols="40" rows="3" id="comments" style="width: 350px;" placeholder="<?php
    echo $params->get('contactcomment'); ?>" onfocus="this.placeholder = ''" onblur="this.placeholder = '<?php
    echo $params->get('contactcomment'); ?>'"></textarea>
            <br />
            <br /> 
            <?php
                JPluginHelper::importPlugin('captcha');
                $dispatcher = JDispatcher::getInstance();
                $dispatcher->trigger('onInit','recaptcha');

            ?>
            <div id="recaptcha"></div>
            <input type="submit" class="submit" id="submit" value="<?php
    echo $params->get('contactbutton'); ?>" />

            </fieldset>

            </form>

            </div>

contact.php

define( '_JEXEC', 1 );
define( 'JPATH_BASE', realpath(dirname(__FILE__))."/../../../..");
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe = JFactory::getApplication('site');
$mainframe->initialise();
$user = JFactory::getUser();
$session = JFactory::getSession();
jimport( 'joomla.application.module.helper' );

$db = JFactory::getDBO();
$db->setQuery("SELECT params FROM #__modules WHERE module = 'module'");
$module = $db->loadObject();
$moduleParams = new JRegistry();
$moduleParams->loadString($module->params);


if(!$_POST) exit;

function isEmail($email) {
    return(preg_match("/^[-_.[:alnum:]][email protected]((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|Gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email));
}

if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");

$name     = $_POST['name'];
$email    = $_POST['email'];
$subject  = $_POST['subject'];
$comments = $_POST['comments'];

$address = $moduleParams->get('contactemail');
$contactsent = $moduleParams->get('contactsent');
$contactthanks = $moduleParams->get('contactthanks');
$contactmsgsubmitted = $moduleParams->get('contactmsgsubmitted');
$errorname = $moduleParams->get('errorname');
$erroremail = $moduleParams->get('erroremail');
$erroremailinvalid = $moduleParams->get('erroremailinvalid');
$errorsubject = $moduleParams->get('errorsubject');
$errorcomments = $moduleParams->get('errorcomments');
$errorcaptcha = $moduleParams->get('errorcaptcha');
$errorcaptchainvalid = $moduleParams->get('errorcaptchainvalid');


if(trim($name) == '') {
    echo '<div class="error_message">' . $errorname . '</div>';
    exit();
} else if(trim($email) == '') {
    echo '<div class="error_message">' . $erroremail . '</div>';
    exit();
} else if(!isEmail($email)) {
    echo '<div class="error_message">' . $erroremailinvalid . '</div>';
    exit();
}

if(trim($subject) == '') {
    echo '<div class="error_message">' . $errorsubject . '</div>';
    exit();
} else if(trim($comments) == '') {
    echo '<div class="error_message">' . $errorcomments . '</div>';
    exit();
}

$post = JFactory::getApplication()->input->post;
$dispatcher = JEventDispatcher::getInstance();
JPluginHelper::importPlugin('captcha');
$res = $dispatcher->trigger('onCheckAnswer',$post['recaptcha_response_field']);
if(!$res[0]){
    die('<div class="error_message">' . $errorcomments . '</div>');
}


if(get_magic_quotes_gpc()) {
    $comments = stripslashes($comments);
}

$e_subject = 'You\'ve been contacted by ' . $name . '.';

$e_body = "You have been contacted by $name with regards to $subject, their additional message is as follows." . PHP_EOL . PHP_EOL;
$e_content = "\"$comments\"" . PHP_EOL . PHP_EOL;
$e_reply = "You can contact $name via email, $email";

$msg = wordwrap( $e_body . $e_content . $e_reply, 70 );

$headers = "From: $email" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;

if(mail($address, $e_subject, $msg, $headers)) {

    echo "<fieldset>";
    echo "<div id='success_page'>";
    echo "<center><h1> $contactsent </h1>";
    echo "$contactthanks <strong>$name</strong>, $contactmsgsubmitted</center>";
    echo "</div>";
    echo "</fieldset>";

} else {

    echo 'ERROR!';

}
1
Frostbourn
$post['recaptcha_response_field']

sollte sein

$post->get('recaptcha_response_field')
1
Dmitry Rekun