Recaptcha formulier probleem

Status
Niet open voor verdere reacties.

marconist

Gebruiker
Lid geworden
11 jan 2006
Berichten
128
Goedenmiddag,

Mijn Captcha formulier wil een bericht niet verzenden. De verzendknop activeren geeft geen reactie.

Wat werkt wel:

Na het registreren van mijn website op de ReCaptcha's website
heb ik de beiden sleutels, site key in het HTML script en de Secret Key
in het PHP script vervangen.

Bij het aanroepen van het contact formulier op mijn website kan ik het
formulier gewoon invullen en ook de reCapTCHA aanvinken zonder foutmelding.
Alleen het verzenden lukt niet.
Ik zie dat het verzenden door het PHP script geregeld wordt, maar of daar iets fout zit weet ik niet.

De handleiding die ik gevolgd heb staat in URL
https://bootstrapious.com/p/bootstrap-recaptcha


Ik kan mij voorstellen dat jullie met die gegevens niks kunnen,
maar laat mij dan aub weten wat ik kan aanleveren.

Cees.
 
Laat je relevante code eens zien?
Zie je wel een recaptcha icoontje op je site?

Zo te zien gebruik je niet ReCaptcha V3. Die werkt automatisch en is stukken beter. Met ReCaptcha V2 kreeg ik bakken vol met spam.
 
Laatst bewerkt:
Recaptcha formulier probleem vervolg 1

Gezien mijn kennis van PHP en Java ben ik aangewezen op een duidelijke handleiding, en ja de V2 versie, noodgedwongen.
Ja het icoontje is zichtbaar met daarnaast het vakje dat ik heb aangevinkt, ik daar ook geen foutmelding.

Ik vermoed de je de PHP code bedoelt:

PHP:
<?php

// require ReCaptcha class
require('recaptcha-master/src/autoload.php');

// configure
// an email address that will be in the From field of the email.
$from = 'Demo contact form <demo@domain.com>';

// an email address that will receive the email with the output of the form
$sendTo = 'Demo contact form <demo@domain.com>';

// subject of the email
$subject = 'New message from contact form';

// form field names and their translations.
// array variable name => Text to appear in the email
$fields = array(
    'name' => 'Name',
    'surname' => 'Surname',
    'phone' => 'Phone',
    'email' => 'Email',
    'message' => 'Message'
);

// message that will be displayed when everything is OK
$okMessage = 'Contact form successfully submitted. Thank you, I will get back to you soon!';

// If something goes wrong, we will display this message.
$errorMessage = 'There was an error while submitting the form. Please try again later';

// ReCaptch Secret
$recaptchaSecret = '6LfexmEkA.........................VgMP8C';

// let's do the sending

// if you are not debugging and don't need error reporting, turn this off by error_reporting(0);
error_reporting(E_ALL & ~E_NOTICE);

try {
    if (!empty($_POST)) {

        // validate the ReCaptcha, if something is wrong, we throw an Exception,
        // i.e. code stops executing and goes to catch() block

        if (!isset($_POST['g-recaptcha-response'])) {
            throw new \Exception('ReCaptcha is not set.');
        }

        // do not forget to enter your secret key from https://www.google.com/recaptcha/admin

        $recaptcha = new \ReCaptcha\ReCaptcha($recaptchaSecret, new \ReCaptcha\RequestMethod\CurlPost());

        // we validate the ReCaptcha field together with the user's IP address

        $response = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);

        if (!$response->isSuccess()) {
            throw new \Exception('ReCaptcha was not validated.');
        }

        // everything went well, we can compose the message, as usually

        $emailText = "You have a new message from your contact form\n=============================\n";

        foreach ($_POST as $key => $value) {
            // If the field exists in the $fields array, include it in the email
            if (isset($fields[$key])) {
                $emailText .= "$fields[$key]: $value\n";
            }
        }

        // All the neccessary headers for the email.
        $headers = array(
            'Content-Type: text/plain; charset="UTF-8";',
            'From: ' . $from,
            'Reply-To: ' . $from,
            'Return-Path: ' . $from,
        );

        // Send email
        mail($sendTo, $subject, $emailText, implode("\n", $headers));

        $responseArray = array(
            'type' => 'success',
            'message' => $okMessage
        );
    }

} catch (\Exception $e) {
    $responseArray = array('type' => 'danger', 'message' => $e->getMessage());
}

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $encoded = json_encode($responseArray);
    header('Content-Type: application/json');
    echo $encoded;
} else {
    echo $responseArray['message'];
}


Cees
 

Bijlagen

  • email.png
    email.png
    6,1 KB · Weergaven: 26
Laatst bewerkt door een moderator:
Wat gebeurt er nu als je het verstuurd? Wat zie je dan?

En heb al debugging uitgevoerd?

- Heb je jouw e-mailadres en de sleutel aangepast?
- Staat foutafhandeling aan en op volledig?
- Gooi eens wat echo's in je if-else statements, zodat je weet wat er uitgevoerd wordt.

Waar gaat het dan volgens jouw fout?

En pas je bericht even aan met code-tags om je code.

En Java is niet van belang. dat is totaal wat anders dan JavaScript.
 
Laatst bewerkt:
Wat gebeurt er nu als je het verstuurd? Wat zie je dan?

En heb al debugging uitgevoerd?

- Heb je jouw e-mailadres en de sleutel aangepast?
- Staat foutafhandeling aan en op volledig?
- Gooi eens wat echo's in je if-else statements, zodat je weet wat er uitgevoerd wordt.

Waar gaat het dan volgens jouw fout?

En pas je bericht even aan met code-tags om je code.

En Java is niet van belang. dat is totaal wat anders dan JavaScript.

Beste Aar,
het enige wat ik je kan melden is, dat als ik op de Verzendknop druk er niets gebeurt, ook geen fout melding.
Verder kan ik jou helaas niet helpen met het beantwoorden van jouw overige vragen.
Ik bezit te weinig kennis van PHP, het is helaas niet anders.
Ik had gehoopt dat het betrouwbaar uitziende URL, waar ik alle scripts vond, geen probleem zou geven.
Ik heb alles exact, zoals daar is geschreven, overgenomen, maar helaas.
Cees
 
Dit voorbeeld werkt via AJAX.

Misschien toch maar even een makkelijker contactformulier zoeken? En daarbij meteen ReCaptcha V3 inbouwen? Want V2 is allang 'gekraakt'.

Ik kan wel een opzet van een goed contactformulier maken, als je wilt. Of heb je al de afhandeling van een formulier?
 
Laatst bewerkt:
Bij deze een basis opzet voor een contactformulier.

Lees goed de commentaren, en probeer het script hierop uit te breiden.
Als je logisch naar deze tutorial kijkt (dus niet alles copy/pasten), dan kan je wel uitvissen hoe ze daar de ReCaptcha V3 inbouwen, en moet dat ook in mijn voorbeeld lukken.

Ga je gang.
Mocht je er niet uitkomen. Laat even weten waar je op vastloopt.


PHP:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Je formulier</title>
    </head>
    <body> 
    <?php
    if($_SERVER['REQUEST_METHOD']=="POST") { // Controleren of het verstuurd is. 
        
        // We gaan wat validatie uitvoeren...
        
        $errors = []; // array voor foutmeldingen aanmaken!
        
        if(trim($_POST['naam']) == '') { // kijken of naam leeg is.
            $errors[] = 'Naam is niet ingevuld.';
        }
        
        if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { // kijken e-mail correct is ingevuld.
            $errors[] = 'E-mail is niet correct ingevuld.';
        }
        
        if(trim($_POST['bericht']) == '') { // kijken of bericht leeg is.
            $errors[] = 'Bericht is niet ingevuld.';
        }
        
        // Hier kan je ook de controle van ReCaptcha V3 inbouwen.
        
        // De validatieregels zijn uitgevoerd. VVanaf hier kijken we of de validatie volledig doorlopen wordt
        if(count($errors) > 0) { // er zijn wat velden niet goed ingevuld
            echo "Je hebt niet alles ingevuld:";
            foreach($errors as $error) {
                echo $error."<br>";
            }
        } else { 
            // Alles is goed ingevuld, hier kan je een mail-procedure plaatsen, en een bevestiging plaatsen
            // Controleer wel of de mail correct verzonden is met een if-else constructie die niet meer nieuw voor je zal zijn.
        }
    } else { // als er niet ge-POST is, dan willen we het formulier zien.
     ?>
    <!-- Hier komt je formulier, de method is POST, en action mag je leeg laten 
         Als voorbeeld hebben we hier de velden naam, email en bericht en een submitknop.
    -->   
    <?php
      }
     ?>
    </body>
</html>
 
Laatst bewerkt:
Dit is een voorbeeld van de reCaptcha v3 code die in het formulier van Aar kan worden geïntegreerd Het voorbeeld staat op de Google website
In het formulier moet "RECAPTCHA_SITE_KEY" worden vervangen door jouw site-key van recaptcha.

### Formulier en reCaptcha script
Code:
<form id="contactform" action="" method="post">
  <!--
  hier zet je de formulier invulvelden (naam, email, bericht)
  -->
  <button class="g-recaptcha" data-sitekey="RECAPTCHA_SITE_KEY"
  data-callback='onSubmit' data-action='submit'>Verzenden</button>
</form>
<script src="https://www.google.com/recaptcha/api.js"></script>
<script>
function onSubmit(token) {
  document.getElementById("contactform").submit();
}
</script>

Controle recaptcha v3 score
PHP:
if ($_POST['g-recaptcha'] < 0.5) {
   $errors[] = 'Inhoud van veld(en) lijkt sterk op een bot';
}
 
Laatst bewerkt:
Dit voorbeeld werkt via AJAX.

Misschien toch maar even een makkelijker contactformulier zoeken? En daarbij meteen ReCaptcha V3 inbouwen? Want V2 is allang 'gekraakt'.

Ik kan wel een opzet van een goed contactformulier maken, als je wilt. Of heb je al de afhandeling van een formulier?

Hi,
Ik ben al wat gevorderd en heb momenteel een Form.HTML bestand, althans ik heb het die extensie gegeven,
begint hiermee:

Code:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Integration Google reCAPTCHA v3 PHP</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://www.google.com/recaptcha/api.js?render=SITE_KEY"></script>
</head>
<body>
<section class="section">
<div class="container">
<div class="col-md-12">
<form method="POST" id="contact_form">
<h1 class="title">Google reCAPTCHA v3 PHP Example</h1>
............ etc.

En een .PHP bestand voor integratie van PHP-bestand naar serverzijde.
Ik vermoed dat ik het index.HTML bestand moet hernoemen naar index.PHP,
want anders staat het PHP bestand toch "buitenspel".

Ik snap dat niet zo goed, wil je mij daar wat meer over zeggen.?
is dat zo, en hoe gaat het dan.


mod: code in
Code:
[/noparse] tags gezet (met code knopje)[/COLOR][/I]
 
Laatst bewerkt door een moderator:
Als je hier al geen zekerheid over hebt, is het niet handig om anders eerst een basiscursusje PHP te doen?

In mijn geval is het formulier en het script éénzelfde .php-bestand
Kijk maar even goed naar mijn opzet.
 
PHP:
if ($_POST['g-recaptcha'] < 0.5) {
   $errors[] = 'Inhoud van veld(en) lijkt sterk op een bot';
}

Niet helemaal.
Je moet $_POST['token'] meegeven via CURL, en die response gebruiken voor de bot-verificatie

Dus dan wordt het zoiets:
PHP:
<?php
// Aanroep naar Google ReCaptcha API uitvoeren
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('secret' => RECAPTCHA_V3_SECRET_KEY, 'response' => $_POST['token'])));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$arrResponse = json_decode($response, true);
  
// Controleer of iemand een spam-bot is.
if($arrResponse["success"] !== '1' && $arrResponse["action"] !== $_POST['action'] && $arrResponse["score"] < 0.5) {
   $errors[] = 'Inhoud van veld(en) lijkt sterk op een bot';
}
?>

Voor marconist. Richt je met mijn opzet eerst maar eens op een werkend formulier.
Daarna kan je ReCaptcha V3 inbouwen.
 
Laatst bewerkt:
Niet helemaal.
Je moet $_POST['token'] meegeven via CURL, en die response gebruiken voor de bot-verificatie
Oops, ik was te snel. De token met secret sitekey moeten inderdaad in de backend worden gecontroleerd met Curl (of Socket).
 
Niet helemaal.
Je moet $_POST['token'] meegeven via CURL, en die response gebruiken voor de bot-verificatie

Dus dan wordt het zoiets:
PHP:
<?php
// Aanroep naar Google ReCaptcha API uitvoeren
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('secret' => RECAPTCHA_V3_SECRET_KEY, 'response' => $_POST['token'])));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$arrResponse = json_decode($response, true);
  
// Controleer of iemand een spam-bot is.
if($arrResponse["success"] !== '1' && $arrResponse["action"] !== $_POST['action'] && $arrResponse["score"] < 0.5) {
   $errors[] = 'Inhoud van veld(en) lijkt sterk op een bot';
}
?>

Voor marconist. Richt je met mijn opzet eerst maar eens op een werkend formulier.
Daarna kan je ReCaptcha V3 inbouwen.

heb al een werkend formulier.
 
Kan je die laten zien? Ik neem aan op mijn opzet?
 
Kan je die laten zien? Ik neem aan op mijn opzet?

De opzet vond ik toch wat te kort door de bocht.
Ik heb wel kennis van jouw opzet genomen, en de daarbij behorende tutorial.
Volgens deze tutorial ben ik te werk gegaan, alleen het formulier van die tutrial vond ik niet goed.
Dat bracht mij op een ander URL die wel een goed formulier liet zien.
Dat heb ik geinstalleerd inclusief de vereiste codes en het bijbehorende PHP script.
Vandaar mijn vraag hoe ik het php bestand kan samen gaan in het formulier script.
Je kunt het URL vinden op: https://www.tutsmake.com/google-recaptcha-v3-demo-example-php/

Met behulp van jouw tutorial
 
Maar begin eerst eens met mijn opzet, en bouw eerst het formulier op. Dan heb je meteen een solide basis met een goed formulier, en goede validatie.
Als dat werkt is stap 2 de ReCaptcha.

Je bent immers een beginner, en je moet niet teveel hooi op je vork nemen. Dan overzie je het hele project niet meer.

Dus bouw eerst mijn script maar verder uit tot een werkend formulier.
 
Laatst bewerkt:
je kan het ook zo doen dan hebje iets dat onafhakelijk werkt
https://www.phpzag.com/build-your-own-captcha-script-with-php/

Die zijn allang gekraakt en vaak ook nog eens onduidelijk. Ik heb vaak gehad dat letters op elkaar leken door de 'bewuste vervuiling' aan streepjes, en dat ik het fout had.
Je kan natuurlijk als alternatief ook een vraag stellen, maar ik vind dit altijd weer een extra stap. Zo was ik eens op een site over scooters, die mij een typische scootervraag stelde die ik niet kon beantwoorden. Tja, bye bye!

ReCaptcha is nog steeds een van de betere omdat die ook met hun algoritme de bot-nets en spammers eruit pikt.
Ook is dese onzichtbaar en bespaart extra kliks van de gebruiker.
Erg makkelijk en vriendelijk in gebruik.

En nee, kom niet aan met je Google rants. We weten dat je geen Google liefhebber bent ;-)
 
Laatst bewerkt:
je kan het ook zo doen dan hebje iets dat onafhakelijk werkt
https://www.phpzag.com/build-your-ow...ript-with-php/
Een 'image captcha' wordt in 0.3 sec opgelost. Bijvoorbeeld met deze software

captcha.jpg

ReCaptcha is nog steeds een van de betere omdat die ook met hun algoritme de bot-nets en spammers eruit pikt.
Voor ReCaptcha V1 t/m ReCaptcha V3 is er helaas ook software die dit kan omzeilen. Het grote voordeel van ReCaptcha V3 is inderdaad dat je 'm als bezoeker niet ziet en daardoor veel spam'ers kwijt bent. Ook controleert ReCaptcha V3 op black-listed IP's. Iemand die de juiste software heeft en echt gericht bezig is met spam'en kan het omzeilen maar dat zijn er gelukkig maar weinig. Op dit moment vind ik ReCaptcha V3 de beste verhouding hebben in antispam en gebruikersvriendelijkheid.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan