J’ai ajouté deux div recaptcha invisibles, mais lorsque j’ai vu le code dans l’élément inspect, un seul recaptcha invisible a été ajouté dans ma seule page. Mon code est:
Obtenir une référence à partir d’ invoquer par programme recaptcha
Pouvez-vous m’aider qu’est-ce que je fais mal?
Ci-dessous, une solution plus fiable à Peter et Alessandro répond lors de l’imbrication d’éléments.
Vous devez faire un rendu explicite sur chaque bouton de soumission
Avait le même problème. Après un peu de perplexité, je l’ai mis au travail.
A utilisé l’idée fournie par Alessandro et l’a faite pour que le formulaire soit automatiquement soumis en cas de succès.
Plusieurs invisibles reCaptcha V2 sur une seule page de manière dynamic
Code Github: https://github.com/prathameshsawant7/multiple-invisible-recaptcha
Étape 1>
Ajouter ci-dessous 2 bibliothèque Js sur la page
Étape 2>
Ajouter ci-dessous div dans les formes respectives.
Étape 3>
Créer init_recaptcha.js
Étape 3 – Appelez la fonction renderInvisibleReCaptcha en transmettant l’ID reCaptcha et la réponse createCallbackFn.
"use ssortingct"; var PS = PS || {}; var widget_1;var widget_2;var widget_3; var recaptcha_site_key = 'RECAPTCHA_SITE_KEY'; if( typeof PS.RECAPTCHA === 'undefined' ) { (function (a, $) { var retryTime = 300; var x = { init: function(){ if(typeof grecaptcha != 'undefined'){ //For Form 1 Initialization if($('#form1 #recaptcha-form-1').length > 0){ var callbackFn = { action : function(){ saveData('1'); //Here Callback Function } } /*--- 'recaptcha-form-1' - reCaptcha div ID | 'form1' - Form ID ---*/ widget_1 = x.renderInvisibleReCaptcha('recaptcha-form-1',x.createCallbackFn(widget_1,'form1',callbackFn)); } //For Form 2 Initialization if($('#form2 #recaptcha-form-2').length > 0){ var callbackFn = { action : function(){ saveData('2'); //Here Callback Function } } /*--- 'recaptcha-form-2' - reCaptcha div ID | 'form2' - Form ID ---*/ widget_2 = x.renderInvisibleReCaptcha('recaptcha-form-2',x.createCallbackFn(widget_2,'form2',callbackFn)); } //For Form 3 Initialization if($('#form3 #recaptcha-form-3').length > 0){ var callbackFn = { action : function(){ saveData('3'); //Here Callback Function } } /*--- 'recaptcha-form-3' - reCaptcha div ID | 'form3' - Form ID ---*/ widget_3 = x.renderInvisibleReCaptcha('recaptcha-form-3',x.createCallbackFn(widget_3,'form3',callbackFn)); } }else{ setTimeout(function(){ x.init();} , retryTime); } }, renderInvisibleReCaptcha: function(recaptchaID,callbackFunction){ return grecaptcha.render(recaptchaID, { 'sitekey' : recaptcha_site_key, "theme" : "light", 'size' : 'invisible', 'badge' : 'inline', 'callback' : callbackFunction }); }, createCallbackFn: function (widget,formID,callbackFn) { return function(token) { $('#'+formID+' .g-recaptcha-response').val(token); if($.sortingm(token) == ''){ grecaptcha.reset(widget); }else{ callbackFn.action(); } } } } a.RECAPTCHA = x; })( PS, $ ); } $(window).load(function(){ PS.RECAPTCHA.init(); });
Étape 4> Modifications de la validation de formulaire JS –
/* Execute respective Widget on form submit after form Validations */ function formSubmit(form){ var text = $.sortingm($('#text'+form).val()); if(text != ''){ switch(form){ case '1' : grecaptcha.execute(widget_1); break; case '2' : grecaptcha.execute(widget_2); break; case '3' : grecaptcha.execute(widget_3); break; } } }
Étape 5> Valider reCaptcha à partir du côté serveur –
RECAPTCHA_SECRET_KEY,'remoteip' => $_SERVER["REMOTE_ADDR"],'response' => $recaptcha_response); foreach ($test as $key => $value) { $req .= $key . '=' . urlencode(ssortingpslashes($value)) . '&'; } $req=substr($req, 0, strlen($req)-1); $path = 'https://www.google.com/recaptcha/api/siteverify?'; $response = file_get_contents($path . $req); $responseData = json_decode($response); if($responseData->success){ return true; }else{ return false; } } } // Validate reCaptcha if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == "POST" && !empty($_POST)) { $checkCapcha = false; $recaptcha = $_POST['g-recaptcha-response']; $checkCapcha = check_recaptcha($recaptcha); if($checkCapcha){ echo $_POST['textmsg']; exit; /** Perform Actions Here (Add,Update,Delete etc) **/ } else{ echo “reCaptcha Error”; } } echo "failed";exit; ?>
Étape 6> Réinitialiser le widget après l’appel du serveur –
// saveData will be automatically get called on grecaptacha.execute function saveData(form){ $.ajax( { type: 'POST', url: $("#form"+form).attr( 'action' ), data: $("#form"+form).serialize(), success: function( response ) { switch(form){ case '1' : grecaptcha.reset(widget_1); break; case '2' : grecaptcha.reset(widget_2); break; case '3' : grecaptcha.reset(widget_3); break; } } } ); }
Vous pouvez utiliser invisible recaptcha. Sur votre bouton, utilisez une balise telle que “formname = ‘rcaptchaformname” “pour spécifier le formulaire à soumettre et masquer une entrée de formulaire de soumission.
Cela vous permet de conserver la validation du formulaire html5 intacte, une seule interface recaptcha, mais plusieurs interfaces de bouton. Capturez simplement la valeur d’entrée “captcha” pour la clé de jeton générée par recaptcha.