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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème formulaire suite à mise en place de captcha.

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

par vins1892 » 28 mars 2022, 21:05

Bonsoir;
je viens de modifier header("Location:http://www.paysdessaveurs.be/merci.html"); en header('Location:http://www.paysdessaveurs.be/merci.html').
Double quotes en simple quote.
Bonne nouvelle: cela fonctionne.
Mauvaise nouvelle: je reçois toujours des spams (au lieu de 10 par jour, 3 ou 4) ...
Grrh, y a-t-il encore quelque chose qui n'est pas correct dans mon formulaire?

Merci.

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

par vins1892 » 26 mars 2022, 23:29

Bonsoir,

je deviens dingue ...

J'ai placé le au niveau du traitement des données:
// 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);
header("Location:http://www.paysdessaveurs.be/merci.html");
La redirection vers la page "Merci" fonctionne, mais le mail reçu est le suivant:

Nom:\t$_POST[nom]\nE-Mail de contact:\t$_POST[email]\nCommentaires:\t$_POST[message]\n

Le fichier .php est désormais:
<?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']))	{
        echo "Méthode non autorisée";
											}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))	{
            echo "Méthode non autorisée";
													}
		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);
header("Location:http://www.paysdessaveurs.be/merci.html");

					}
								}else	{echo "Méthode non autorisée";
					exit;
										}		
						}	
					}

											}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.

par vins1892 » 26 mars 2022, 09:32

<?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";
}

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

par or 1 » 24 mars 2022, 20:30

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.

par vins1892 » 24 mars 2022, 17:28

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.

par vins1892 » 24 mars 2022, 17:27

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.

par @rthur » 24 mars 2022, 12:26

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.

par or 1 » 24 mars 2022, 10:37

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.

par vins1892 » 24 mars 2022, 08:42

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.

par or 1 » 22 mars 2022, 23:27

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.

par vins1892 » 22 mars 2022, 23:03

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.

par @rthur » 22 mars 2022, 14:41

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.

par vins1892 » 21 mars 2022, 22:50

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.

par @rthur » 21 mars 2022, 13:04

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.

par vins1892 » 21 mars 2022, 08:39

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.