Bonjour,

J'essaie de faire un formulaire de contact pour mon site, tout simple, mais comme je débute en php j'ai un peu de mal. Le sujet a déjà été traité sur le site, j'ai trouvé pas mal de tutos mais je n'arrive toujours pas à voir où se trouve l'erreur. En gros, lorsque les champs sont vides ou l'adresse mail mal saisie, le message d'erreur (qui se trouve dans un span à la fin du formulaire) ne s'affiche pas - et rien d'autre ne se passe quand je clique sur le bouton "envoyer".

Merci d'avance pour votre aide !

Voici comment se présente le formulaire :

<div id="thanks" style="position:absolute; top:400px; left: 200px; font-family:'Bradley Hand ITC'; font-size:30px; color:#660000; font-weight:bolder;">

      <?php echo $merci;?>

 </div>

<div id="formulaire">
 <form action="" method="post" enctype="multipart/form-data" id="formulaire_contact">

<table width="500" border="0" cellspacing="2" cellpadding="4" style="font-family:'Bradley Hand ITC'; font-size:20px; font-weight:bolder;">
     <tr>
          <td width="180" >NOM *</td>
          <td width="180"> PRÉNOM </td>
      </tr>
      <tr>
          <td><input name="nom" type="text" id="nom" value="<?php if(isset($_POST'nom'])) echo htmlspecialchars($_POST'nom']);?>" size="25" style="background-color:#FFFFFF; height:25px; border-radius:4px; border-color:#660000;" /></td>
          <td><input name="prenom" type="text" id="prenom" value="<?php if(isset($_POST'prenom'])) echo htmlspecialchars($_POST'prenom']);?>" size="25" style="background-color:#FFFFFF; height:25px; border-radius:4px; border-color:#660000;" /></td>
     </tr>

     <tr>
         <td > SOCIÉTÉ</td>
         <td> EMAIL *</td>
       </tr>

     <tr>
          <td ><input name="societe" type="text" id="societe" value="<?php if(isset($_POST'societe'])) echo htmlspecialchars($_POST'societe']);?>" size="25" style="background-color:#FFFFFF; height:25px; border-radius:4px; border-color:#660000;" /></td>
         <td><input name="mail" type="text" id="mail" value="<?php if(isset($_POST'mail'])) echo htmlspecialchars($_POST'mail']);?>" size="25" style="background-color:#FFFFFF; height:25px; border-radius:4px; border-color:#660000;" /></td>
     </tr>

     <tr>                        
          <td colspan="2" align="left">MESSAGE *</td>
     </tr>
      <tr>
           <td colspan="2"> <textarea name="message" id="message" value="<?php if(isset($_POST'message'])) echo htmlspecialchars($_POST'message']);?>" style="width:430px; height:300px; border-radius:4px; border-color:#660000; background-color:#FFFFFF; color:#660000" rows="5"></textarea></td>
      </tr>

      <tr>
           <td colspan="2" align="left"><input name="envoyer" id="envoyer" type="button" value="Envoyer" style="margin-top:10px; background-color:#FFFFFF; color:#660000; font-size: 16px; font-weight:bold; border-radius:5px; padding:8px"/></td>
       </tr>
</table>
</form> 
<span style="position:absolute; width:500px; left:500px; top:350px; font-family:'Bradley Hand ITC'; font-size:30px; font-weight:bold; font-style:italic; color:rgba(204,0,0,1);">
        <?php echo $erreur;?>
</span>
</div>

Et voici la partie php que j'ai mise en en-tête sur la même page :

<?php 
$erreur="";
$merci="";
if(isset($_POST"envoyer"])){
    extract($_POST);

    if(!empty($nom)AND!empty($mail)AND!empty($message)){
        //vérification du champ "mail"
        if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\[a-z]{2,4}$#",$mail)){
            $nom=htmlspecialchars(addslashes($nom));
            $prenom=htmlspecialchars(addslashes($prenom));
            $societe=htmlspecialchars(addslashes($societe));
            $mail=htmlspecialchars(addslashes($mail));
            $message=htmlspecialchars(addslashes($message));

            //mise en forme du message que je vais recevoir
            $destinataire="xxxxxx@gmail.com";
            $sujet="Contact depuis mon site";
            $entete="From:".$nom."\r\n".    
            "Reply-To:".$mail."\r\n".
            "X-Mailer:PHP/" .phpversion();          
            mail($destinataire,$sujet,$message,$entete);

            unset($_POST, $message, $nom, $mail);

        }else{
            $erreur="Adresse email invalide";
        }

        //message qui doit s'afficher si le mail est bien parti
        if(mail($destinataire,$sujet,$message,$entete)){
            $merci="<p>Je vous remercie pour votre message</br>et m'engage à revenir vers vous rapidement</p>";
        }
    }

    else{
        $erreur="Veuillez remplir tous les champs obligatoires*";
    }
}
?>

11 réponses


Salut,

Remplace

<input name="envoyer" id="envoyer" type="button" value="Envoyer"

Par

<input name="envoyer" id="envoyer" type="submit" value="Envoyer"

Bisous

Petit point qui n'a rien à voir ...
Evites au plus possible d'utiliser les tableau pour la mise en forme .... et encore moins le style CSS dans le code HTML
(ou alors regarde ici)

Je vous remercie à tous les deux pour vos remarques. En fait, c'était plus compliqué que ça, j'ai dû modifier le fichier php.ini pour définir le serveur SMTP et le port. En revanche, maintenant j'ai comme message d'erreur "Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing" alors que dans mon code je définis bien l'en-tête avec "From: ... etc" et j'ai fait également la modif au niveau du fichier ini. Je ne comprends pas :(

Salut,

Ajoute en début de code

ini_set('sendmail_from', 'tonadresse@serveur.com');

Bisous

Bonjour,

ou tu vas dans ton fichier php.ini et tu recherche le mot "sendmail_from"
Tu enlèves le ";" devant s'il y a car cela désigne un commentaire.
Donc
;sendmail_from = you@yourdomain
en
sendmail_from = you@yourdomain
En remplacent you@yourdomain par ton adresse email.

J'avais déjà enlevé le point-virgule au niveau du fichier php.ini et j'ai rajouté le ini_set en début de code comme suggéré par Chokkan Web. Je ne recevais toujours pas les mails sur mon adresse, alors j'ai fait un print_r et l'erreur qui s'affiche est Warning: mail() [function.mail]: SMTP server response: 554 5.5.1 Error: no valid recipients

En gros mon adresse gmail définie pour le $destinataire n'est pas reconnue. Une idée ?...

Un truc tout con, tu testes en local ?
Parfois en local les envois de mail ne fonctionnent pas.

De ce que je vois dans ton message d'erreur il s'agit de ton smtp qui n'est pas configurer au niveau de ton php.ini.
Cherche smtp dans le fichier et la ou il est écrit stmp = tu remplace par le stmp qui est propre à ton FAI ( Fournisseur d'Accès Internet )
Ce lien peut aider . il t'indiquera le smtp de ton FAI.
Bon courage

Lotfi Berrahal, j'avais déjà configuré cette partie là et repris toutes les infos du fichier php.ini en en-tête de document (ini_set etc) puisque manifestement ça n'avait pas été pris en compte.

Pewel, bonne remarque : je n'avais testé qu'en local. J'ai mis la page en ligne en rajoutant un echo bidon ("C'est bien parti") lorsque le message est envoyé.

Et là je m'arrache les cheveux parce que : je n'ai plus de message d'erreur, l'echo s'affiche (j'en déduis que le mail est bien envoyé) mais il n'arrive pas sur ma boîte mail (j'ai vérifié, il n'est pas dans les spam). Au cas où, je précise que mon site est hébergé chez free et que l'adresse vers laquelle j'envoie les mails est chez gmail (je ne sais pas si ça joue ou pas)

En vous remerciant à tous pour votre patience

essaie voir ça :

//mise en forme du message que je vais recevoir
$destinataire= 'xxxxxx@gmail.com';
$sujet = 'Contact depuis mon site';
$message = $message;
$entete = 'From:'.$mail.'' . "\r\n" .
            'Reply-To: '.$mail.''. "\r\n" .
        'X-Mailer: PHP/' . phpversion();
mail($destinataire,$sujet,$message,$entete);

à la place de ton code.

Bonjour,

Quel est ton hébergeur ?