Bonjour.
D'après le code que vous montrez, si je récapitule, vous avez un formulaire qui contient seulement le ReCaptcha sur une page, puis un second formulaire qui serait sur une autre page et vous voudriez pouvoir faire la validation des deux formulaires en même temps.
Si c'est bien ça, ce n'est pas possible.
Recaptcha dans le fichier validation.php
Bonjour,
Je ne suis pas informaticien...
Il y a quelques années, grâce entre autre à ce forum, j'avais réalisé un formulaire de contact en html et sa validation en php.
Ce système fonctionnerait très bien s'il n'était pas l'objet d'attaque par des spams (jusqu'à 200 par jour).
Je pense donc lui ajouter le recaptcha de Google.
J'ai suivi ce que préconise Google:
- pas de problème pour mettre la clé publique dans formulaire.html
- pas de problème non plus pour vérifier la clé privée avec validation.php
Les choses se compliquent pour moi si je veux que validation.php continue à vérifier les champs ("Vous n'avez pas rempli ce champ") tout en vérifiant si le recaptcha a bien été coché ("Vous n'avez pas coché le recaptcha"). Je veux que l'envoi du formulaire ne se fasse que si les champs obligatoires ont bien été remplis ET QUE la case du recaptcha a bien été cochée. Seulement à ce moment là le message "Votre formulaire à bien ete transmis" doit apparaitre.
Voici donc ce que j'ai ajouté à mon formulaire formulaire.html
Voici ma page validation php
Et voici le code php, que j'ai testé (et qui fonctionne bien en test) et que je dois placer sur validation.php (oui mais comment??)
Votre aide serait vraiment la bienvenue, j'ai passé toute la nuit là dessus, mais ma compétence est très limitée.
Merci à vous.
Albert
11 réponses
Bonjour Lartak,
Merci de bien vouloir me répondre.
Non, je n'ai qu'un seul formulaire que j'ai nommé formulaire.html (ci-dessus).
J'y ai mis la partie du recaptcha "formulaire" (JavaScript + clé publique).
La validation se faire sur la page validation.php.
Je veux valider les champs et aussi le recaptcha coché....mais je ne sais pas faire....
Merci de votre aide
Je veux valider les champs et aussi le recaptcha coché....mais je ne sais pas faire....
De quels champs parlez vous ?
Dans le formulaire que vous montrez dans le premier bloc de code (formulaire.html), il n'y a que le ReCaptcha, l'input de type submit et l'input de type reset.
Je n'y vois aucun autre champs.
Pour simplifier la page au maximum, je n'ai laissé que ce qui concerne le recaptcha.
Voici l'integralité du formulaire.
page formulaire.html
D'accord, je comprends mieux.
Pour commencer, concernant le formulaire, vous avez un problème important concernant les options des select, il ne suffit pas juste de créer des balises option, il faut leur assigner les valeurs dans l'attribut value, soit par exemple :
Sinon vous ne pourrez jamais récupérer la valeur de l'option qui aura été sélectionné par l'utilisateur pour le select.
Ensuite, toujours pour le formulaire, vous pouvez profiter de la pré-validation de certains types d'input par le navigateur, comme par exemple pour l'email, en définissant le type d'input en tant que email, le navigateur vérifiera que le format saisi est valide lorsque l'utilisateur essaiera de soumettre le formulaire et empèchera la soumission du formulaire le cas échéant en lui indiquant au niveau de l'input qu'il doit modifier la valeur et autre chose aussi, pour les inputs qui doivent obligatoirement être remplis, ajouter l'attribut required, celà permettra au navigateur d'empécher la soumission du formulaire si les inputs qui ont cet attribut de défini dans le cas ou leur valeur n'est pas saisie par l'utilisateur, soit par exemple : <input type="text" name="portable" size="17" required>, si l'utilisateur ne rempli pas le champ, au moment de la soumission du formulaire le navigateur lui indiquera au niveau du champ que le champ est requis et qu'il doit le remplir.
Sinon pour en revenir à votre problème principal, il est vrai que votre code concernant la vérification des champs du formulaire complique le processus, je vous recommenderais plutôt, qu'au lieu de vouloir afficher directement les erreurs à chaque condition de chaque champ, de remplir une variable sous forme de tableau avec les messages d'erreurs et de les afficher à la fin, vous auriez par exemple quelque chose comme :
Car actuellement, vu votre code il n'est pas spécialement évident d'y placer la vérification du ReCaptcha, dans tous les cas, il faut bien sur faire la vérification de celui-ci avant d'envoyer le mail et ce serait dommage de faire une requête à l'API si d'autres erreurs ont pu être rencontrées avant, donc l'idéal est je pense de faire la vérification après toutes celles concernant le formulaire et avant d'envoyer ou non le mail et bien sur de ne faire saa vérification que si d'autres erreurs n'ont pas été trouvées avant.
Merci Lartak pour votre réponse détaillée.
Je me doute bien que mon formulaire (et son envoi) est loin d'être parfait, mais il fonctionne très bien: je récupère toutes les valeurs jours, mois, années, etc.
Vu mon très faible niveau en php, n'est il vraiment pas possible d'intégrer le code suivant au code de la page validation.php?
Merci de votre réponse
Vu mon très faible niveau en php, n'est il vraiment pas possible d'intégrer le code suivant au code de la page validation.php?
Je n'ai jamais dit le contraire, il vous suffit de l'ajouter avant la préparation et envoi de l'email.
Donc placer votre code du ReCaptcha juste avant la préparation de l'email et placer votre code de préparation/envoi d'email à la place de echo("<h2><center>OK</center></h2>"); dans la condition if ($decode['success'] == true) {.
Merci Lartak, je vais essayer
Ca marche Lartak!!!!
Je n'y croyais pas!
Ca marche même bien, j'ai tous mes textes de vérification du formulaire. Ce dernier n'est envoyé que si tout est bon. (cad si le recaptdha est aussi coché)
Merci vraiment beaucoup Lartak.
Celà fait 38 heures que je n'ai pas dormi, je vais me coucher l'esprit tranquille.
Encore merci!!!
De rien.
Juste pour information, tu peux facilement remplacer la boucle foreach par ceci : $connus = implode(' - ', array_values($connu));.
Soit :
À la place de :
La différence entre les deux, c'est qu'avec la fonction implode tu évites d'avoir un - à la fin d'inutile.
Bonjour Lartak,
Merci pour ton complément de réponse.
Le remplacement de la boucle foreach par la fonction implode ne fonctionne pas. Mais foreach fonctionne très bien. Pas de soucis pour moi, je continue avec foreach.
Bonne journée
Albert