Bonjour,
J'ai un code Jquery qui vérifie tous les champs de mon formulaire de contact.
J'ai suivi le tuto de Grafikart sur le formulaire avancé mais impossible de connaitre l'adresse email de celui qui m'a contacté quand je laisse $url.

if($valid){
      $to = "contact@monsite.net";
      $sujet = $name." a contacté le site";
      $header = "From: $name <$email>";
      if(mail($to,$sujet,$url,$comment,$header)){
          $erreur = "Votre message nous ai bien parvenu";
          unset($name);
          unset($email);
          unset($url);          
          unset($comment);
      }
      else{
        $erreur = "une erreur est survenue";
      }

Par contre si j'enlève $url, je vois bien le nom et l'adresse email de l'envoyeur!

Il y a une erreur quelque part, si vous pouvez m'aider. Voici le code. Merci

<?php
if(!empty($_POST)) {
    extract($_POST);
    $valid = true;
    if(empty($name)){
      $valid=false;
      $erreurnom="Vous n'avez pas rempli votre nom";
    }
      if(!preg_match("/^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$/i",$email)){
      $valid=false;
      $erreuremail="Vous n'avez pas un email correct";
    }
      if(empty($email)){
      $valid=false;
      $erreuremail="Vous n'avez pas rempli votre email";
    }
      if(empty($comment)){
      $valid=false;
      $erreurmessage="Vous n'avez pas rempli votre message";
    } 
      if($valid){
      $to = "contact@monsite.net";
      $sujet = $name." a contacté le site";
      $header = "From: $name <$email>";
      if(mail($to,$sujet,$url,$comment,$header)){
          $erreur = "Votre message nous ai bien parvenu";
          unset($name);
          unset($email);
          unset($url);          
          unset($comment);
      }
      else{
        $erreur = "une erreur est survenue";
      }
    }         
}
?>
    <style type="text/css">
      #commentForm { width: 500px; }
      #commentForm label { width: 250px; }
      #commentForm label.error, #commentForm input.submit { margin-left: 253px; }
      .error-message {
        color: #eb5703;
      }
    </style>
    <body>

    <section>
    <span class="error-message"><?php if(isset($erreur)){ 
      echo "<p>$erreur</p>"; 
      } ?></span>
<form class="cmxform" id="commentForm" method="post" action="contact.php">
  <fieldset>
    <legend>Please provide your name, email address (won't be published) and a comment</legend>
    <p>
      <label for="cname">Name (required, at least 2 characters)</label>
      <input id="cname" name="name" minlength="2" type="text" value="<?php if(isset($name)) echo $name; ?>" required>
      <span class="error-message"><?php if (isset($erreurnom)) echo $erreurnom; ?></span>
    </p>
    <p>
      <label for="cemail">E-Mail (required)</label>
      <input id="cemail" type="email" name="email" value="<?php if(isset($email)) echo $email; ?>" required>
      <span class="error-message"><?php if (isset($erreuremail)) echo $erreuremail; ?></span>
    </p>
    <p>
      <label for="curl">URL (optional)</label>
      <input class="curl" type="url" name="url">
    </p>
    <p>
      <label for="ccomment">Your comment (required)</label>
      <textarea id="ccomment" name="comment" required><?php if (isset($comment)) echo $comment; ?></textarea>
      <span class="error-message"><?php if (isset($erreurmessage)) echo $erreurmessage; ?></span>
    </p>
    <p>
      <input class="submit" type="submit" value="Submit">
    </p>
  </fieldset>
</form>

    </section>

        <!--<script src="jquery.js"></script>-->
<script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>

<script src="js/jquery.validate.js"></script>
<script>
$.validator.setDefaults({
  submitHandler: function() { alert("submitted!"); }
});
$().ready(function() {
  // validate the comment form when it is submitted
  $("#commentForm").validate();
  // validate signup form on keyup and submit
  $("#signupForm").validate({
    rules: {
      firstname: "required",
      lastname: "required",
      username: {
        required: true,
        minlength: 2
      },
      password: {
        required: true,
        minlength: 5
      },
      confirm_password: {
        required: true,
        minlength: 5,
        equalTo: "#password"
      },
      email: {
        required: true,
        email: true
      },
      topic: {
        required: "#newsletter:checked",
        minlength: 2
      },
      agree: "required"
    },
    messages: {
      firstname: "Please enter your firstname",
      lastname: "Please enter your lastname",
      username: {
        required: "Please enter a username",
        minlength: "Your username must consist of at least 2 characters"
      },
      password: {
        required: "Please provide a password",
        minlength: "Your password must be at least 5 characters long"
      },
      confirm_password: {
        required: "Please provide a password",
        minlength: "Your password must be at least 5 characters long",
        equalTo: "Please enter the same password as above"
      },
      email: "Please enter a valid email address",
      agree: "Please accept our policy"
    }
  });       

            </script>
    </body>
</html>

9 réponses


woubi
Auteur
Réponse acceptée

Merci!
C'est parfait! J'ai juste remplacé les simple quotes par des doubles!

Signature fonction mail() :

bool mail ( string $to , string $subject , string $message , string $additional_headers , string $additional_parameters ]] )

Du coup dans ton code:

mail($to,$sujet,$url,$comment,$header)

Ton paramètre $url est considéré comme le message ( $message ) et ton paramètre $comment écrase le paramètre qui est sensé être les headers additionnels.

Même en enlevant ton paramètre $url pour savoir de qui provient le message, tu devrait utilisé les headers additionnels:

$headers = 'From: '.$name.' <'.$email.'>' . "\r\n";
woubi
Auteur

Merci,
Mon code devrait ressembler à cela ?

if($valid){
      $to = "contact@monsite.net";
      $sujet = $name." a contacté le site";
      $url = 'URL: <'.$url.'>' . "\r\n";
      $header = 'From: '.$name.' <'.$email.'>' . "\r\n";
      if(mail($to,$sujet,$url,$comment,$header)){
          $erreur = "Votre message nous ai bien parvenu";
          unset($name);
          unset($email);
          unset($url);          
          unset($comment);
      }
      else{
        $erreur = "une erreur est survenue, votre message n'a pas été envoyé, vous pouvez envoyer votre message à contact@monsite.net";
      }
    }

Non, même problème, que vient faire ce paramètre $url dans ta fonction mail()?

if (mail($to, $sujet, $comment, $header)) { ... }

Si tu veux vraiment garder $url t'a juste à le concaténer à $comment.

woubi
Auteur

Encore merci,
Je comprends pas vraiment...
Est-ce que je peux créer un autre header comme dans ton exemple :

$headers = 'From: '.$name.' <'.$email.'>' . "\r\n";

?
Du coup est ce que je suis sur la bonne voie en faisant cela ?

$header2 = 'URL: <'.$url.'>' . "\r\n";

Sinon je ne vois pas comment le concaténer à $comment pour avoir l'URL dans mon formulaire de contact ?

Elle est sensé te servir à quoi l'URL en question déjà ?

woubi
Auteur

C'est un champ non obligatoire dans mon formulaire. Puis-je utiliser les headers additionnels ?

Inutile de le mettre dans les headers.

$comment = $comment . '\n\nUrl: ' . $url;
woubi
Auteur

Merci,
Si j'ai bien compris, ce code devrait fonctionnait :

if($valid){
      $to = "contact@monsite.net";
      $sujet = $name." a contacté le site";
      $header = "From: $name <$email>";
      $comment = $comment . '\n\nUrl: ' . $url;
      if(mail($to,$sujet,$comment,$header)){
          $erreur = "Votre message nous ai bien parvenu";
          unset($name);
          unset($email);
         // unset($url);          
          unset($comment);
      }
      else{
        $erreur = "une erreur est survenue, votre message n'a pas été envoyé, vous pouvez envoyer votre message à contact@monsite.net";
      }
    }

Je ne peux pas l'essayer pour le moment car je n'ai pas de connexion à mon serveur mais je fais un retour dès que possible!
A +