Page 1 sur 2

Problème formulaire suite à mise en place de captcha.

Posté : 20 mars 2022, 19:30
par vins1892
Bonjour à tous,

j'essaye de mettre en place un captcha pour protéger un formulaire de spams.

Le captcha fonctionne, mais la dernière partie qui consiste à renvoyer sur la page "Merci pour nous avoir contacté" ne fonctionne pas. Cela ramène vers une page blanche, mais je reçois bien les réponses du formulaire par mail.

Voici mon formulaire:

Code : Tout sélectionner

<form action="traitement2003.php" method="post"> <p> <label for="nom">Nom :</label> <input type="text" name="nom" id="nom"> </p> <p> <label for="sujet">Sujet :</label> <input type="text" name="sujet" id="sujet"> </p> <p> <label for="email">E-mail :</label> <input type="email" name="email" id="email"> </p> <p> <label for="message">Message :</label> <textarea name="message" id="message"></textarea> </p> <input type="hidden" id="recaptchaResponse" name="recaptcha-response"> <button>Envoyer</button> <script src="https://www.google.com/recaptcha/api.js?render=6LdoPuAeAAAAAD3VdvggAG3AgjBgAuy8xjfDVSxt"></script> <script> grecaptcha.ready(function() { grecaptcha.execute('6LdoPuAeAAAAAD3VdvggAG3AgjBgAuy8xjfDVSxt', {action: 'homepage'}).then(function(token) { document.getElementById('recaptchaResponse').value = token }); }); </script> </form>
Et mon fichier traitement.php

Code : Tout sélectionner

<?php // On vérifie que la méthode POST est utilisée if($_SERVER['REQUEST_METHOD'] == 'POST'){ // On vérifie si le champ "recaptcha-response" contient une valeur if(empty($_POST['recaptcha-response'])){ header('Location: index.html'); }else{ // On prépare l'URL $url = "https://www.google.com/recaptcha/api/siteverify?secret=6xxxxxxxxxx&response={$_POST['recaptcha-response']}"; // On vérifie si curl est installé if(function_exists('curl_version')){ $curl = curl_init($url); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); }else{ // On utilisera file_get_contents $response = file_get_contents($url); } // On vérifie qu'on a une réponse if(empty($response) || is_null($response)){ header('Location: index.php'); } else{ $data = json_decode($response); if($data->success){ if( isset($_POST['nom']) && !empty($_POST['nom']) && isset($_POST['sujet']) && !empty($_POST['sujet']) && isset($_POST['email']) && !empty($_POST['email']) && isset($_POST['message']) && !empty($_POST['message']) ){ // On nettoie le contenu $nom = strip_tags($_POST['nom']); $sujet = strip_tags($_POST['sujet']); $email = strip_tags($_POST['email']); $message = htmlspecialchars($_POST['message']); // Ici vous traitez vos données $msg = "Nom:\t$_POST[nom]\n"; $msg .= "E-Mail de contact:\t$_POST[email]\n"; $msg .= "Commentaires:\t$_POST[message]\n"; $recipient = "[email protected]"; $subject = "Formulaire de reservation au pays des Saveurs"; $mailheaders = "From: $_POST[email]\n"; $mailheaders .= "Reply-To: $_POST[email]\n\n"; mail($recipient, $subject, $msg, $mailheaders); } }else{ header("Location:http://www.paysdessaveurs.be/merci.html"); }}} }else{ http_response_code(405); echo "Méthode non autorisée"; } ?>
Merci pour votre aide.

Re: Problème formulaire suite à mise en place de captcha.

Posté : 20 mars 2022, 21:25
par or 1
il faut indenter le code correctement. cela permettra de se rendre compte plus facilement que la ligne
header("Location:http://www.paysdessaveurs.be/merci.html");
n'est pas au bon endroit.

Re: Problème formulaire suite à mise en place de captcha.

Posté : 21 mars 2022, 08:39
par vins1892
Merci pour votre réponse.
J'ai à nouveau essayé plusieurs fois et soit j'ai des parse error ou la page ne s'affiche toujours pas.

Code : Tout sélectionner

<?php // On vérifie que la méthode POST est utilisée if($_SERVER['REQUEST_METHOD'] == 'POST'){ // On vérifie si le champ "recaptcha-response" contient une valeur if(empty($_POST['recaptcha-response'])){ header('Location: index.html'); }else { // On prépare l'URL $url = "https://www.google.com/recaptcha/api/siteverify?secret=xxxxx&response={$_POST['recaptcha-response']}"; // On vérifie si curl est installé if(function_exists('curl_version')) { $curl = curl_init($url); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); }else { // On utilisera file_get_contents $response = file_get_contents($url); } // On vérifie qu'on a une réponse if(empty($response) || is_null($response)) { header('Location: index.php'); } else { $data = json_decode($response); if($data->success){ if( isset($_POST['nom']) && !empty($_POST['nom']) && isset($_POST['sujet']) && !empty($_POST['sujet']) && isset($_POST['email']) && !empty($_POST['email']) && isset($_POST['message']) && !empty($_POST['message']) ) { // On nettoie le contenu $nom = strip_tags($_POST['nom']); $sujet = strip_tags($_POST['sujet']); $email = strip_tags($_POST['email']); $message = htmlspecialchars($_POST['message']); // Ici vous traitez vos données $msg = "Nom:\t$_POST[nom]\n"; $msg .= "E-Mail de contact:\t$_POST[email]\n"; $msg .= "Commentaires:\t$_POST[message]\n"; $recipient = "[email protected]"; $subject = "Formulaire de reservation au pays des Saveurs"; $mailheaders = "From: $_POST[email]\n"; $mailheaders .= "Reply-To: $_POST[email]\n\n"; mail($recipient, $subject, $msg, $mailheaders); } }else { header("Location:http://www.paysdessaveurs.be/merci.html"); } } } }else { http_response_code(405); echo "Méthode non autorisée"; } ?>
Le "Location:http://www.paysdessaveurs.be/merci.html" n'est pas au bon endroit ou une une condition se termine par manquant?

Merci pour votre aide.

Re: Problème formulaire suite à mise en place de captcha.

Posté : 21 mars 2022, 13:04
par @rthur
Si tu as des parse error, il faut que tu les lises attentivement et les corriges, ou que tu nous les indiques pour qu'on puisse t'aider.

La fonction header('Location...); doit déclencher une redirection via les entête HTTP.
Or si ça passe dans les entêtes, ça veut dire deux choses pour que ça marche :
1) il ne faut pas qu'il y ait du texte ou du HTML ni même un espace, qui soit envoyé au navigateur avant la fonction header().
Et donc pas de message d'erreur non plus vu que le message d'erreur est envoyé en HTML ;)
2) il ne faut pas qu'il y ait non plus de HTML envoyé juste après le header('Location...') car le navigateur va recevoir des infos contradictoires de faire une redirection mais en même temps de lui envoyer du HTML qu'il est sensé afficher. Du coup ça peut provoquer des résultats instables.

:arrow: la solution pour éviter les problèmes, c'est de toujours (mais vraiment toujours toujours) faire suivre un appel à) header('location...'); par un exit;
Comme ça pas de risque de comportement bizarre.

Re: Problème formulaire suite à mise en place de captcha.

Posté : 21 mars 2022, 22:50
par vins1892
Merci pour votre réponse.

Il n'y a pas d'espace avant le header. J'ai aussi ajouté le exit, comme ceci:

Code : Tout sélectionner

else {header("Location:http://www.paysdessaveurs.be/merci.html"); exit; }
Plus de souci de "parse" non plus.

J'ai néanmoins toujours une page blanche qui pointe vers "http://www.paysdessaveurs.be/traitement2003.php" lorsque j'envoie le formulaire ...

Re: Problème formulaire suite à mise en place de captcha.

Posté : 22 mars 2022, 14:41
par @rthur
Moi j'ai un message d'erreur quand je clique sur ton lien...

Sinon pour les pages blanches, il faut regarder dans les logs d'erreur Apache/PHP (fais un phpinfo() pour savoir où est situé le fichier de log)

Re: Problème formulaire suite à mise en place de captcha.

Posté : 22 mars 2022, 23:03
par vins1892
Bonsoir,

quand je remplis le formulaire http://www.paysdessaveurs.be/contact2003.php, je n'ai pas de message d'erreur, mais une page blanche.
Quand je clique directement sur http://www.paysdessaveurs.be/traitement2003.php, j'ai une erreur: undefined function http_response_code() Ce n'est pas parce que le fichier n'est pas appelé par la méthode "post"?

Code : Tout sélectionner

if($_SERVER['REQUEST_METHOD'] == 'POST')
Le phpinfo.php m'indique ceci:
error_log no value no value

Je ne trouve nul part le php.ini ...

Merci pour votre aide et patience ...

Re: Problème formulaire suite à mise en place de captcha.

Posté : 22 mars 2022, 23:27
par or 1
https://www.php.net/manual/fr/function. ... e-code.php nous dit qu'il faut au moins php 5.4 pour que cette fonction existe.

Re: Problème formulaire suite à mise en place de captcha.

Posté : 24 mars 2022, 08:42
par vins1892
Bonjour,

je viens de configurer manuellement le fichier .ovhconfig (hébergement ovh start10M ...) et je suis désormais en version php 8.

Je n'ai plus de message d'erreur lorsque je clique sur le traitement du formulaire: http://www.paysdessaveurs.be/traitement2003.php

Malheureusement, lorsque je remplis le formulaire via http://www.paysdessaveurs.be/contact2003.php, j'ai toujours une page blanche qui s'affiche après l'envoi du formulaire ...
Les infos saisies dans le formulaire arrive bien sur mon mail: c'est l'affichage de la confirmation de l'envoi du formulaire qui ne s'affiche pas ...

Pas de trace d'un php.ini sur mon ftp ...
Le phpinfo.php est www.paysdessaveurs.be/phpinfo.php.

Merci à nouveau pour votre aide.

Re: Problème formulaire suite à mise en place de captcha.

Posté : 24 mars 2022, 10:37
par or 1
il faut indenter le code correctement. cela permettra de se rendre compte plus facilement que la ligne
header("Location:http://www.paysdessaveurs.be/merci.html");
n'est pas au bon endroit.

Re: Problème formulaire suite à mise en place de captcha.

Posté : 24 mars 2022, 12:26
par @rthur
Vu que tu es chez OVH, voici quelques pistes en cas de pages blanches ou pour accéder aux logs :
https://docs.ovh.com/fr/hosting/erreur- ... ver-error/
https://docs.ovh.com/fr/hosting/mutuali ... -mon-site/

Re: Problème formulaire suite à mise en place de captcha.

Posté : 24 mars 2022, 17:27
par vins1892
Les logs d'erreur ne semblent pas liés à mes essais (mon site n'est pas un site WP):
[Tue Mar 22 18:36:52 2022] [error] [client 185.191.34.215] [host paysdessaveurs.be] AH01264: script not found or unable to stat: /homez.547/paysdess/www/sistem.php
[Tue Mar 22 18:47:08 2022] [error] [client 124.40.255.186] [host paysdessaveurs.be] AH01264: script not found or unable to stat: /homez.547/paysdess/www/wp-login.php

Re: Problème formulaire suite à mise en place de captcha.

Posté : 24 mars 2022, 17:28
par vins1892
J'ai essayé d'aligner les { et les } pour clarifier le code:
<?php

// On vérifie que la méthode POST est utilisée
if($_SERVER['REQUEST_METHOD'] == 'POST')	{
    
	// On vérifie si le champ "recaptcha-response" contient une valeur
    if(empty($_POST['recaptcha-response']))	{
        header('Location: index.html');
											}else					
					{
		
		// On prépare l'URL
        $url = "https://www.google.com/recaptcha/api/siteverify?secret=6LdoPuAeAAAAAFHlp2UVA1tGDK06FTT8l11nfWJy&response={$_POST['recaptcha-response']}";
		
		// On vérifie si curl est installé
        if(function_exists('curl_version'))	{
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_HEADER, false);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            $response = curl_exec($curl);
											}else	{
            // On utilisera file_get_contents
            $response = file_get_contents($url);
													}
		
		// On vérifie qu'on a une réponse
        if(empty($response) || is_null($response))	{
            header('Location: index.php');
													}
		else			{
            $data = json_decode($response);
            if($data->success)	{
    
                if(
                    isset($_POST['nom']) && !empty($_POST['nom']) &&
                    isset($_POST['sujet']) && !empty($_POST['sujet']) &&
                    isset($_POST['email']) && !empty($_POST['email']) &&
                    isset($_POST['message']) && !empty($_POST['message'])
                )	{
                    // On nettoie le contenu
                    $nom = strip_tags($_POST['nom']);
                    $sujet = strip_tags($_POST['sujet']);
                    $email = strip_tags($_POST['email']);
                    $message = htmlspecialchars($_POST['message']);

                    // Ici vous traitez vos données

                    $msg = "Nom:\t$_POST[nom]\n";
					$msg .= "E-Mail de contact:\t$_POST[email]\n";
					$msg .= "Commentaires:\t$_POST[message]\n";

$recipient = "[email protected]";
$subject = "Formulaire de reservation au pays des Saveurs";

$mailheaders = "From: $_POST[email]\n";
$mailheaders .= "Reply-To: $_POST[email]\n\n";

mail($recipient, $subject, $msg, $mailheaders);

					}
								}else	{header("Location:http://www.paysdessaveurs.be/merci.html");
					exit;
										}		
						}	
					}

											}else	{
    http_response_code(405);
    echo "Méthode non autorisée";
													}
Dans mon éditeur Notepad ++, toutes les parenthèses semblent se fermer et s'ouvrir aux bons endroits ...

Encore merci pour votre aide.

Re: Problème formulaire suite à mise en place de captcha.

Posté : 24 mars 2022, 20:30
par or 1
le rendu de l'outil https://beautifytools.com/php-beautifier.php
<?php
// On vérifie que la méthode POST est utilisée
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // On vérifie si le champ "recaptcha-response" contient une valeur
    if (empty($_POST['recaptcha-response'])) {
        header('Location: index.html');
    }
    else {
        // On prépare l'URL
        $url = "https://www.google.com/recaptcha/api/siteverify?secret=xxxxx&response={$_POST['recaptcha-response']}";
        // On vérifie si curl est installé
        if (function_exists('curl_version')) {
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_HEADER, false);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            $response = curl_exec($curl);
        }
        else {
            // On utilisera file_get_contents
            $response = file_get_contents($url);
        }
        // On vérifie qu'on a une réponse
        if (empty($response) || is_null($response)) {
            header('Location: index.php');
        }
        else {
            $data = json_decode($response);
            if ($data->success) {
                if (isset($_POST['nom']) && !empty($_POST['nom']) && isset($_POST['sujet']) && !empty($_POST['sujet']) && isset($_POST['email']) && !empty($_POST['email']) && isset($_POST['message']) && !empty($_POST['message'])) {
                    // On nettoie le contenu
                    $nom = strip_tags($_POST['nom']);
                    $sujet = strip_tags($_POST['sujet']);
                    $email = strip_tags($_POST['email']);
                    $message = htmlspecialchars($_POST['message']);
                    // Ici vous traitez vos données
                    $msg = "Nom:\t$_POST[nom]\n";
                    $msg .= "E-Mail de contact:\t$_POST[email]\n";
                    $msg .= "Commentaires:\t$_POST[message]\n";
                    $recipient = "[email protected]";
                    $subject = "Formulaire de reservation au pays des Saveurs";
                    $mailheaders = "From: $_POST[email]\n";
                    $mailheaders .= "Reply-To: $_POST[email]\n\n";
                    mail($recipient, $subject, $msg, $mailheaders);
                }
            }
            else {
                header("Location:http://www.paysdessaveurs.be/merci.html");
            }
        }
    }
}
else {
    http_response_code(405);
    echo "Méthode non autorisée";
}
?>


Re: Problème formulaire suite à mise en place de captcha.

Posté : 26 mars 2022, 09:32
par vins1892
<?php
// On vérifie que la méthode POST est utilisée
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // On vérifie si le champ "recaptcha-response" contient une valeur
    if (empty($_POST['recaptcha-response']))
    {
        header('Location: index.html');
    }
    else
    {

        // On prépare l'URL
        $url = "https://www.google.com/recaptcha/api/siteverify?secret=6LdoPuAeAAAAAFHlp2UVA1tGDK06FTT8l11nfWJy&response={$_POST['recaptcha-response']}";

        // On vérifie si curl est installé
        if (function_exists('curl_version'))
        {
            $curl = curl_init($url);
            curl_setopt($curl, CURLOPT_HEADER, false);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            $response = curl_exec($curl);
        }
        else
        {
            // On utilisera file_get_contents
            $response = file_get_contents($url);
        }

        // On vérifie qu'on a une réponse
        if (empty($response) || is_null($response))
        {
            header('Location: index.php');
        }
        else
        {
            $data = json_decode($response);
            if ($data->success)
            {

                if (isset($_POST['nom']) && !empty($_POST['nom']) && isset($_POST['sujet']) && !empty($_POST['sujet']) && isset($_POST['email']) && !empty($_POST['email']) && isset($_POST['message']) && !empty($_POST['message']))
                {
                    // On nettoie le contenu
                    $nom = strip_tags($_POST['nom']);
                    $sujet = strip_tags($_POST['sujet']);
                    $email = strip_tags($_POST['email']);
                    $message = htmlspecialchars($_POST['message']);

                    // Ici vous traitez vos données
                    $msg .= "Nom:\t$_POST[nom]\n";
                    $msg .= "E-Mail de contact:\t$_POST[email]\n";
                    $msg .= "Commentaires:\t$_POST[message]\n";

                    $recipient = "[email protected]";
                    $subject = "Formulaire de reservation au pays des Saveurs";

                    $mailheaders = "From: $_POST[email]\n";
                    $mailheaders .= "Reply-To: $_POST[email]\n\n";

                    mail($recipient, $subject, $msg, $mailheaders);

                }
            }
            else
            {
                header("Location:http://www.paysdessaveurs.be/merci.html");
                exit;
            }
        }
    }

}
else
{
    http_response_code(405);
    echo "Méthode non autorisée";
}