Stéphane Robert Stéphane Robert - 2 months ago 18
Javascript Question

PHP Form, MailFonction and Google reCaptcha Validation Issue

I have a issue with the way ive program the captcha verification with the mail fonction.

The Captcha Success are working fine. When the captcha fail, i got the proper message into the form page, but PHP programation still let the email sent. I just need to know how can i set the mail function with the success part only.

Can anyone help me fix the reCaptcha validation?

Thank you.

Here is the PHP source code:

<?php
if (isset($_POST["submit"])) {

$url = 'https://www.google.com/recaptcha/api/siteverify';
$privatekey = "MASKED";

$response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADDR']);
$data = json_decode($response);

if(isset($data->success) AND $data->success==true){

header('Location: appel_de_service.php?CaptchaPass=True');

}else{

header('Location: appel_de_service.php?CaptchaFail=True');

}

$to = "MASKED";
$from = $_POST['courriel'];
$from_name = $_POST['nom_responsable'];
$subject = "Reception d'un appel de service ";
$nom_compagnie = $_POST['nom_compagnie']; // required
$adresse = $_POST['adresse']; // required
$ville = $_POST['ville'];
$province = $_POST['province'];
$code_postale = $_POST['code_postale'];
$nom_responsable = $_POST['nom_responsable'];
$courriel = $_POST['courriel'];
$telephone = $_POST['telephone'];
$marque = $_POST['marque'];
$numero_modele = $_POST['numero_modele'];
$garantie = $_POST['garantie'];
$description = $_POST['description'];
$disponibilite = $_POST['disponibilite']; // required
$coordonnees = $_POST['coordonnees']; // required

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= "Reply-to: $courriel";

$message = "
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<html>
<head>
<title>Appel de service (rempli sur le site internet)</title>
<style type=\"text/css\">
h1,h2,h3,h4,h5,h6 {
font-family: Cambria, \"Hoefler Text\", \"Liberation Serif\", Times, \"Times New Roman\", serif;
color: #272727;
}
</style>
</head>
<body>
<h2 style=\"font-size: 1.25em; font-family: Gotham, ╩╝Helvetica Neue╩╝, Helvetica, Arial, sans-serif;\">Vous avez re&ccedil;u une demande d'appel de service en ligne.</h2>
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\">
<tbody>
<tr>
<td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Informations sur l'adresse du service</h3></td>
</tr>
<tr>
<td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Nom de la compagnie</td>
<td width=\"313\" align=\"left\" valign=\"middle\">$nom_compagnie</td>
</tr>
<tr>
<td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Adresse</td>
<td align=\"left\" valign=\"middle\">$adresse</td>
</tr>
<tr>
<td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Ville</td>
<td align=\"left\" valign=\"middle\">$ville</td>
</tr>
<tr>
<td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Province</td>
<td align=\"left\" valign=\"middle\">$province</td>
</tr>
<tr>
<td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Code postale</td>
<td align=\"left\" valign=\"middle\">$code_postale</td>
</tr>
<tr>
<td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Nom du responsable</td>
<td align=\"left\" valign=\"middle\">$nom_responsable</td>
</tr>
<tr>
<td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">T&eacute;l&eacute;phone</td>
<td align=\"left\" valign=\"middle\">$telephone</td>
</tr>
<tr>
<td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Adresse courriel</td>
<td align=\"left\" valign=\"middle\">$courriel</td>
</tr>
</tbody>
</table>
<br>
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\">
<tbody>
<tr>
<td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Informations sur le produit</h3></td>
</tr>
<tr>
<td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Marque</td>
<td width=\"313\" align=\"left\" valign=\"middle\">$marque</td>
</tr>
<tr>
<td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Num&eacute;ro de mod&egrave;le</td>
<td align=\"left\" valign=\"middle\">$numero_modele</td>
</tr>
<tr>
<td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Garantie</td>
<td align=\"left\" valign=\"middle\">$garantie</td>
</tr>
<tr bgcolor=\"#D5D5D5\">
<td colspan=\"2\" align=\"left\" valign=\"middle\">Description du probl&egrave;me :</td>
</tr>
<tr>
<td height=\"75\" colspan=\"2\" align=\"left\" valign=\"top\">$description</td>
</tr>
</tbody>
</table>
<br>
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\">
<tbody>
<tr>
<td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Pr&eacute;f&eacute;rences pour le rendez-vous</h3></td>
</tr>
<tr>
<td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Disponibilit&eacute;</td>
<td width=\"313\" align=\"left\" valign=\"middle\">$disponibilite</td>
</tr>
<tr>
<td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Coordonn&eacute;es</td>
<td align=\"left\" valign=\"middle\">$coordonnees</td>
</tr>
</tbody>
</table>
</body>
</html>
";

// Always set content-type when sending HTML email

mail($to, $subject, $message, $headers);

}

?>

Answer

Resolved. The problem was the construction of the PHP if() and else() need to be after the Data collection filled into the form.

Here are the proper code :

<?php
if (isset($_POST["submit"])) {

    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $privatekey = "PRIVATE_KEY";

    $response = file_get_contents($url."?secret=".$privatekey."&response=".$_POST['g-recaptcha-response']);
    $data = json_decode($response);

    if(isset($data->success) AND $data->success==true){

        $to = "who@domain.com";
        $from = $_POST['courriel'];
        $from_name = $_POST['nom_responsable'];
        $subject = "Reception d'un appel de service ";
        $nom_compagnie = $_POST['nom_compagnie'];
        $adresse = $_POST['adresse'];
        $ville = $_POST['ville'];
        $province = $_POST['province'];
        $code_postale = $_POST['code_postale'];
        $nom_responsable = $_POST['nom_responsable'];
        $courriel = $_POST['courriel'];
        $telephone = $_POST['telephone'];
        $marque = $_POST['marque'];
        $numero_modele = $_POST['numero_modele'];
        $garantie = $_POST['garantie'];
        $description = $_POST['description'];              
        $disponibilite = $_POST['disponibilite'];
        $coordonnees = $_POST['coordonnees'];

        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
        $headers .= "Reply-to: $courriel";

        $message = "
        ";

        if(mail($to, $subject, $message, $headers)){
                    header('Location: appel_de_service.php?CaptchaPass');

        }else{
            echo "mail could not be sent";
        }
    }else{
                header('Location: appel_de_service.php?CaptchaFail');
    }

}else{
    header('Location: appel_de_service.php?CaptchaError');

}

?>