PHP formulaire de + Google reCAPTCHA
C'est un peu bizarre que Google documents pour recaptcha n'est pas aussi utile que je pensais que ça allait être. On m'a demandé de prendre un courant formulaire existant (qui est de recevoir des envois quelques fois par jour) et de le mettre à jour avec Google nouveau recaptcha. Il y a beaucoup de tutoriels pour les vieux captcha, mais pas tant pour le nouveau. En gros, je veux juste un simple formulaire de capture, nom, email, message, puis remplacer mon actuel "anti-bot" en recaptcha (j'ai utilisé un champ que, fondamentalement vous a demandé ce que 2+2 a été et si vous avez entré n'importe quoi, mais de 4, il ne serait pas envoyer). Si les champs requis sont valides et recaptcha est valide, alors je tiens à m'envoyer un email avec le contenu des champs du formulaire.
Je suis allé à travers les étapes simples:
-
inscrit mon site pour obtenir les clés
-
ajouté ce morceau de code à l'intérieur de ma tête tag:
<script src='https://www.google.com/recaptcha/api.js'></script>
-
ajouté cet extrait à la fin de mon formulaire:
<div class="g-recaptcha" data-sitekey="#MYKEY#"></div>
À ce stade, le captcha s'affiche très bien. Mais la partie côté serveur est un peu déroutant.
C'est mon jour formulaire de contact avec le recaptcha montrant:
<form method="post" action="contact-post.php">
<label>Your Name (required):</label>
<input name="name" type="text" placeholder="Enter your name here">
<label>Email Address (required):</label>
<input name="email" type="email" placeholder="Enter your email address here">
<label>Your Message (required):</label>
<textarea name="message" placeholder="Write your message here"></textarea>
<div style="margin-top:20px;" class="g-recaptcha" data-sitekey="#MYKEY#"></div>
<input id="submit" name="submit" type="submit" value="Submit Form">
</form>
Et voici mon POST de la page (je suis pas sûr de l'endroit où ajouter dans le recaptcha code):
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$human = $_POST['human'];
$from = 'From: My Website';
$to = '[email protected]';
$subject = 'Request Form';
$body = "Name: $name \n E-Mail: $email \nMessage:\n$message";
if ($_POST['submit']) {
if ($email != '') {
if ($human == '4') {
if (mail ($to, $subject, $body, $from)) {
echo '<p>You have successfully submitted your information to PS4RS. Subscribers to our mailing list will begin to periodically receive updates.</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>';
}
} else if ($_POST['submit'] && $human != '4') {
echo '<p>You answered the anti-spam question incorrectly!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>';
}
} else {
echo '<p>You need to fill in all required fields!!</p><p><input type="button" value="Go Back" onclick="history.back(-1)" class="goback" /></p>';
}
}
?>
Toute aide est la bienvenue. J'ai l'impression que cela pourrait être une assez fréquent que les gens avec les gens, en essayant de le mettre en œuvre dans leurs formes de travail.
- FWIW, je l'ai abandonné Google re-captcha en faveur d'une coutume solution de captcha intégré dans mon cadre. Pour quelque raison que ce soit, je ne pouvais pas obtenir le widget pour afficher de manière fiable dans tous les navigateurs.
Vous devez vous connecter pour publier un commentaire.
Consultez ce lien:
https://developers.google.com/recaptcha/docs/verify
En quelques mots, vous devez faire une demande pour
Où YOUR_SECRET est le secret de la clé que vous avez reçue sur ReCAPTCHA site, USER_IP_ADDRESS peut être reçu par des
$_SERVER
tableau et RESPONSE_CAME_FROM_YOUR_FORM est une chaîne de caractères envoyée avec votre formulaire. Il est stocké dans$_POST['g-recaptcha-response']
.Vous pouvez le faire via
file_get_contents($url)
commeDans
$data
vous recevrez objet JSON contenantsuccess
de champ que vous recherchez. Si le succès est fausse, alors il n'est pas un être humain et vous devriezexit()
. Je vous suggère de vérifier ceci dans le début de votre programme.Mise à jour:
De décodage de l'objet JSON ressemble:
Mise à jour:
Parfois,
file_get_contents($url)
de ne pas être en mesure de mettre en place la connexion https sécurisée. Au lieu de cela, vous pouvez utiliseropen_https_url($url)
Rendre votre code ressemble:
Peut-être la réponse ci-dessus est un peu dépassé, puisque Google est maintenant à l'aide de reCaptcha nocaptcha. J'ai trouvé un moyen plus simple et plus complète réponse ici pour les utiliser avec votre séparée php fichier de mail.
La solution a un simple formulaire e-mail avec le nom et l'e-mail et un fichier php pour envoyer le formulaire. Vous devriez être en mesure d'aller à partir de là et de modifier votre formulaire en conséquence. La solution a fonctionné pour moi.
https://stackoverflow.com/a/27439796/3934886
et lien vers le tutoriel:
http://codeforgeek.com/2014/12/google-recaptcha-tutorial/