8768 sujets

Développement web côté serveur, CMS

Bonjour,

Mon contact fonctionnait très bien jusqu'à ce que j'ajoute un input antispam.

Je dois faire une erreur dans le php car je ne reçois plus les emails et cela me renvoie sur nom-de-domain/contactform.php à la place de la page de remerciement mais je n'arrive pas à le corriger.

Pourriez vous m'aider svp

Voici le contact form
      <div class="col-lg-8 col-lg-offset-2 centered">
        <p>Fields marked with * are mandatory
    <br>Antispam, please answer the question with numbers <strong style="text-decoration: underline;">only</strong>
<br>What is two + two?</p>
        <form id="contact" method="post" class="form" role="form" action="contactform.php">
          <div class="row">
            <div class="col-xs-4 col-md-4 form-group">
              <input class="form-control" id="name" name="name" placeholder="Name*" type="text" required />
            </div>
            <div class="col-xs-4 col-md-4 form-group">
              <input class="form-control" id="email" name="email" placeholder="Email*" type="email" required />
            </div>
            <div class="col-xs-4 col-md-4 form-group">
              <input class="form-control" id="name" name="human" placeholder="Antispam *" type="text" required />
            </div>
          </div>
          <textarea class="form-control" id="message" name="enquiry" placeholder="Your enquiry*" rows="5" required /></textarea>
          <div class="row">
            <div class="col-xs-12 col-md-12">
              <button class="btn btn btn-lg" type="submit">Send Message</button>
            </div>
          </div>
        </form>
        <!-- form -->
      </div>

Et voici le php
<?php
 
$EmailFrom = $_REQUEST['email'];
$EmailTo = "email@domainname.com";
$Subject = "Enquiry form";
$Name = Trim(stripslashes($_POST['name']));
$Email = Trim(stripslashes($_POST['email']));
$Enquiry = Trim(stripslashes($_POST['enquiry']));
$human = Trim(stripslashes($_POST['human']));
 
// validation
$validationOK=true;
if (!$validationOK) {
echo "Error";
exit;
}
 
// prepare email body text
$Body = "";
$Body .= "Name: ";
$Body .= $Name;
$Body .= "\n";
$Body .= "Enquiry: ";
$Body .= $Enquiry;
$Body .= "\n";
 
// send email
$success = mail($EmailTo, $Subject, $Body, "From: $name <$EmailFrom>");
 
// redirect to success page
if ($success) && $human == '4'{
Header("Location: /thankyou.html" );
}
else{
echo "Error";
}
else if  $human != '4') {
    echo '<p>You answered the anti-spam question incorrectly!</p>';
    }
?>

J'ai rajouté
$human = Trim(stripslashes($_POST['human']));

et ce bout
&& $human == '4'

après
if ($success)

et depuis ce ne marche plus.

Quelle correction dois je faire afin que cela fonctionne car j'ai essayee plusieurs syntaxe mais ça ne marche toujours pas

En vous remerciant par avance de vos reponses

Cordialement
Bonsoir.

Il faut, je pense, englober les conditions du 'if' :
if ($success && $human == '4'){

après je ne saisis pas. Avec deux 'else', ce devrait être plutôt :
si Condition 1
alors 'header(etc)'
sinon si Condition 2
alors 'babla'
sinon 'autre chose'
Soit un 'if'... suivi d'une parenthèse puis un 'else if' suivi d'une parenthèse puis un 'else'...

Smiley smile
Salut,

Tu as des soucis de logique et de syntaxe dans ce code.
Voici comment tu pourrais corriger afin que ce soit un peu plus fonctionnel :
<?php
 
/*$EmailFrom = $_REQUEST['email'];
$EmailTo = "email@domainname.com";
$Subject = "Enquiry form";
$Name = Trim(stripslashes($_POST['name']));
$Email = Trim(stripslashes($_POST['email']));
$Enquiry = Trim(stripslashes($_POST['enquiry']));
$human = Trim(stripslashes($_POST['human']));*/

$EmailTo = "email@domainname.com";
$Subject = "Enquiry form";
$Name = trim(htmlspecialchars($_POST['name']));
$EmailFrom = trim(htmlspecialchars($_POST['email']));
$Enquiry = trim(htmlspecialchars($_POST['enquiry']));
$human = trim(htmlspecialchars($_POST['human']));
 
// validation
/* là ça ne sert à rien : tu assignes une valeur TRUE à $validationOK et ensuite tu testes si c'est FALSE... */
/*$validationOK=true;
if (!$validationOK) {
    echo "Error";
    exit;
}*/
 
// prepare email body text
/*$Body = "";
$Body .= "Name: " . $Name;
$Body .= "\n";
$Body .= "Enquiry: ";
$Body .= $Enquiry;
$Body .= "\n";*/

$Body = "Name: " . $Name . "\n";
$Body .= "Enquiry: " . $Enquiry . "\n";
 
// send email
// il faut vérifier si $human est de la valeur attendue avant d'envoyer le mail
// sinon ça ne sert à rien, ça n'est plus un antispam
if($human == '4'){
    $success = mail($EmailTo, $Subject, $Body, "From: $name <$EmailFrom>");

    if($success){
        Header("Location: /thankyou.html" );
    }else{
        echo "Error";
    }

}else{
    echo '<p>You answered the anti-spam question incorrectly!</p>';
}

/*pour les lignes suivantes, il y a de grosses fautes de syntaxe, il faudrait à la rigueur corriger comme après */
// redirect to success page
/*if ($success) && $human == '4'{
Header("Location: /thankyou.html" );
}
else{
echo "Error";
}
else if  $human != '4') {
    echo '<p>You answered the anti-spam question incorrectly!</p>';
    }*/

/*correction : */
/*if ($success && $human == '4'){
    Header("Location: /thankyou.html" );
}
else if ($human != '4') {
    echo '<p>You answered the anti-spam question incorrectly!</p>';
}
else{
    echo "Error";
}*/

Modifié par MatthieuR (30 May 2017 - 22:32)
Merci pour vos reponses
Voici mon nouveau code qui fonctionne parfaitement apres plusieurs essai et en tenant compte de vos messages
<?php
  
$EmailFrom = $_REQUEST['email'];
$EmailTo = "email@domainname.com";
$Subject = "Enquiry form";
$Name = Trim(stripslashes($_POST['name']));
$Email = Trim(stripslashes($_POST['email']));
$Enquiry = Trim(stripslashes($_POST['enquiry']));
$human = Trim(stripslashes($_POST['human']));

if ($human == '4'){
   // prepare email body text
   $Body = "";
   $Body .= "Name: ";
   $Body .= $Name;
   $Body .= "\n";
   $Body .= "Enquiry: ";
   $Body .= $Enquiry;
   $Body .= "\n";
  
   // send email
   $success = mail($EmailTo, $Subject, $Body, "From: $name <$EmailFrom>");
  
   // redirect to success page
   if ($success){
       Header("Location: /thankyou.html" );
   }else{
       echo "Error";
   }
}else{
    echo '<p>You answered the anti-spam question incorrectly!</p>';
}
?>