Formulaire php envoyer uniquement les données complétées

AlexandraBr Messages postés 13 Statut Membre -  
VlkPr3s Messages postés 251 Statut Membre -
Bonjour à tous,

J'ai un formulaire de commande avec des champs obligatoire ( nom, adresse,...) et puis des champs non obligatoire ( quantité de produit souhaite, zone libre,...)
J'envoie le tout par mail, tout fonctionne mais j'aimerais rendre la réception plus lisible et n'afficher que les champs complète.
Pour le moment, le mail reçu reprend tout les champs même les champs vide.
J'aimerais que dans le mail reçu ne s'affiche que les champs complète.... Je suppose que ça ne doit pas être compliqué mais je coince....
Merci pour votre aide

4 réponses

  1. Thorak83 Messages postés 1140 Statut Membre 156
     
    Bonjour,

    Difficile de vous répondre sans informations complémentaires. Je dirais qu'il suffit de tester chaque variable avec l'envoi du mail. Mais ne sachant pas comment est envoyé le mail ...

    Cordialement
    0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,

    Comme le dit Thorak, on manque d'informations....
    Il faudrait que tu nous postes ici le code qui te permet de générer ton mail.

    PS: Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
    Explications disponibles ici :
    https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

    0
  3. AlexandraBr Messages postés 13 Statut Membre
     
    je vous mets un morceau de mon formulaire simplifié, je vous note beaucoup moins de champs que l'original...
    Mais je pensais que je devais paramètrer cela dans la page qui génère le mail, voilà déjà pourquoi je coince...

    <script type="text/javascript">
    //<![CDATA[
    
    function valider(){
    
    
      // On reteste le mail et le numéro de téléphone
     if(!(VerifMail() !== false && valider_numero() !== false)){return false}
     
     // Teste les champs qui ont la classe "nombre" dans le bloc ayant l'id "formulaire_commande"
     var champs = document.getElementById('formulaire_commande').getElementsByClassName('nombre');
     var verif_nombre = ""; 
     var str;
     var label;
     
     for (var i=0; i < champs.length; i++)
     {
      str = champs[i].value;
      if (isNaN(str)) 
      {
       // récupère le texte du label (qui est le parent) et concatène à verif_nombre
       label = champs[i].parentNode.textContent;
       verif_nombre += "\n- "+label;
      }
     }
     
     if(verif_nombre != "")
     {
      alert("le(s) champ(s): "+verif_nombre+"\n nécessite(nt) un nombre"); 
      return false;
     }
     else
     {
      return true;
     }
     
     // si la valeur du champ prenom est non vide
      if(document.formulaire_commande.nom.value != "" && 
         document.formulaire_commande.rue.value != "" && 
      document.formulaire_commande.code_postal.value != "" && 
      document.formulaire_commande.ville.value != "" && 
      document.formulaire_commande.telephone.value != "" &&
      document.formulaire_commande.mail.value != "" &&
      document.formulaire_commande.date_enlevement.value != "" 
      ) 
      {
        // les données sont ok, on peut envoyer le formulaire    
        return true;
      }
      else {
        // sinon on affiche un message
        alert("Les champs avec une * sont obligatoire");
        // et on indique de ne pas envoyer le formulaire
        return false;
      }
      
    
       
     }
     
    function VerifMail()
     {
       var regex = /^[a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,6}$/;
       if(!regex.test(document.formulaire_commande.mail.value))
       {
          alert("Veuillez entrez une adresse mail correcte")
       return false;
       }
    }
     
     
    
    function valider_numero() {
    var nombre = document.formulaire_commande.telephone.value;
    var chiffres = new String(nombre);
    
    // Enlever tous les charactères sauf les chiffres
    chiffres = chiffres.replace(/[^0-9]/g, '');
    
    
    // Nombre de chiffres
    compteur = chiffres.length;
    
    if ((compteur<9) || (compteur>10) )
    {
    alert("Veuillez saisir un numéro de téléphone valide");
    return false;
    }
    
    }
    
    
    
    
    
    </script>
    
    
    //il y a du code mais sans intérêt pour mon problème 
    
    
    <form method="post" action="cible2.php" onsubmit="return valider()" id="formulaire_commande" name="formulaire_commande">
    <p><label>Nom : <input type="text" name="nom" class="textfield" size="50" required="required"/></label>*
    </p>
    
    <p><label>Rue : <input type="text" name="rue" class="textfield" size="50" required="required"/></label>*
    </p>
    
    <p><label>Code postal : <input type="text" name="code_postal" class="textfield nombre"  size="10" required="required"/></label>*
    </p>
    <p><label>Ville : <input type="text" name="ville" class="textfield"  size="50" required="required"/></label>*
    </p>
    <p>
      <label>GSM : 
        <input type="text" name="telephone" class="textfield nombre" size="30" onblur="valider_numero();" required="required" /></label>*
      <br />
    <p><label>Adresse mail : <input type="text" name="mail" class="textfield" onchange="VerifMail();" required="required"/></label>*</p>
    
    
    <p>
      <label>Jus de pomme <input type="text" name="jus_pomme_litre" class="nombre" size="5" /> par 1 litre</label></p>
    
    <p><label>Jus de pomme input type="text" name="jus_pomme_pushup" class="nombre" size="5" /> par 3 litres push up</label></p>
    
    <p>
      <label>Jus de pommes-poires
        <input type="text" name="jus_pomme_poire_litre" class="nombre" size="5" /> par 1 litre</label></p>
    
    <p>
      <label>Jus de pommes-poires<input type="text" name="jus_pomme_poire_pushup" class="nombre" size="5" /> par 3 litres push up</label></p>
    
    <p><label>Jus de pomme-cerise <input type="text" name="jus_pomme_cerise_litre" class="nombre" size="5" /> par 1 litre</label></p>
    <p><label>Jus de pomme-cerise <input type="text" name="jus_pomme_cerise_cinq_litre" class="nombre" size="5" /> par 5 litre</label></p>
    
    
    <p id="buttons">
      <input type="submit" value="Envoyer" />
      <input type="reset" value="Recommencer" />
    </p>
    </p>
    
    </form>


    Et ci-dessous le code php du fichier "cible2.php", je pensais que c'était dans ce fichier que je devais régler mon problème mais apparemment non...

     <?php
    $msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement 
    remplis :<br/><br/>";
    $msg_ok = "Votre commande est bien transmise. <br/> Un email de confirmation vous sera envoyé.<br/><br/><br/>";
    $message = $msg_erreur;
    $destinataire ="alexandra.brouwers@gmail.com";
    
    define('MAIL_SUJET','Commande venant du site Ferme de la Waide');
     
    // vérification des champs
    if (empty($_POST['nom'])) 
    $message .= "Votre nom<br/>";
    if (empty($_POST['rue'])) 
    $message .= "Votre rue<br/>";
    if (empty($_POST['code_postal'])) 
    $message .= "Votre code postal<br/>";
    if (empty($_POST['ville'])) 
    $message .= "Votre ville<br/>";
    if (empty($_POST['telephone'])) 
    $message .= "Votre numéro de téléphone<br/>";
    if (empty($_POST['mail'])) 
    $message .= "Votre adresse e-mail<br/>";
    if (empty($_POST['date_enlevement'])) 
    $message .= "Veuillez entrer une date d'enlèvement<br/>";
     
    // si un champ est vide, on affiche le message d'erreur et on stoppe le script
    if (strlen($message) > strlen($msg_erreur)) {
       echo $message; die();
    }
     
    // sinon c'est ok => on continue
    foreach($_POST as $index => $valeur) {
      $$index = stripslashes(trim($valeur));
    }
     
    
     
    //Préparation de l'entête du mail:
    $mail_entete  = "MIME-Version: 1.0\r\n";
    $mail_entete .= "From: {$_POST['nom']} "
                 ."<{$_POST['mail']}>\r\n";
    $mail_entete .= 'Reply-To: '.$_POST['mail']."\r\n";
    $mail_entete .= 'Cc: '.$_POST['mail']."\n";
    $mail_entete .= 'Content-Type: text/html; charset="iso-8859-1"';
    $mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
    $mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
     
    // préparation du corps du mail
    $mail_corps  = "<p>Message de : $nom\n<br>";
    $mail_corps .= "Adresse : $rue, $code_postal $ville, $pays\n<br>";
    $mail_corps .= "Telephone : $telephone \n<br>";
    $mail_corps .= "Adresse mail : $mail \n<br>";
    
    
    
    $mail_corps .= "<p>Commande de produits locaux \n\n</p>";
    $mail_corps .= "<p>Jus de pomme : <strong>$jus_pomme_litre</strong> par 1 litre - <strong>$jus_pomme_pushup</strong> par 3 litre push up \n<br>";
    $mail_corps .= "Jus de pommes-poires : <strong>$jus_pomme_poire_litre</strong> par 1 litre - <strong>$jus_pomme_poire_pushup</strong> par 3 litre push up \n<br>";
    $mail_corps .= "Jus de pomme-cerise : <strong>$jus_pomme_cerise_litre</strong> par 1 litre - <strong>$jus_pomme_cerise_5litre</strong> par 5 litre \n<br>";
    
    
     
    // envoi du mail
    if (mail($destinataire,MAIL_SUJET,$mail_corps,$mail_entete)) {
      //Le mail est bien expédié
      echo $msg_ok;
    } else {
      //Le mail n'a pas été expédié
      echo "Une erreur est survenue lors de l'envoi du formulaire par email";
    }
     
    ?>


    Voilà...

    EDIT : Ajout du langage dans les balises de code.
    0
    1. Thorak83 Messages postés 1140 Statut Membre 156
       
      effectivement tout va se jouer dans cible2.php.
      Je vois bien la partie des champs obligatoires (zone // vérification des champs) mais je ne vois pas où sont les autres champs optionnels (qté, texte libre...) ? J'ai un peu de mal a comprendre le contenu de la variable $mail_corps. ($jus_pomme_poire_litre...)
      0
    2. AlexandraBr Messages postés 13 Statut Membre
       
      en fait, les gens complètent la quantité de bouteille de jus qu'ils veulent et ce sont ces infos qui doivent être envoyée par mail. Mais si ce n'est pas compléter, ce serait bien que l'intitulé ne s'affiche...

      Je n'ai pas mis tout le formulaire, juste quelque champs pour montrer le principe de mon code.
      Si ce n'est pas correct, dites le moi... Ca fonctionne mais il y a peut être de meilleure méthode, je ne fait pas souvent de php et c'est fort abstrait pour moi

      Merci pour votre aide
      0
  4. VlkPr3s Messages postés 251 Statut Membre 130
     
    Pourquoi tu utilises pas la méthode $_GET ou $_POST ainsi tu sais si le champ est vide en le testant

    if(!empty($_POST['q']) )) // si le champ est vide
    {
    $_POST['Login'] = htmlentities($_POST['Login'],ENT_QUOTES);
    }
    else
    {
    $_POST['Login'] = htmlentities($_POST['Login'],ENT_QUOTES);
    $_POST['q'] = htmlentities($_POST['q'],ENT_QUOTES);
    }


    bien à toi ;)
    0
    1. AlexandraBr Messages postés 13 Statut Membre
       
      Et si le champs est vide, il ne s'affichera pas dans le mail ?
      0
    2. VlkPr3s Messages postés 251 Statut Membre 130 > AlexandraBr Messages postés 13 Statut Membre
       
      Tu met une condition pour qu'il ne s'affiche pas dans le mail donc en gros tu ne récupère pas le post manquant
      0
    3. AlexandraBr Messages postés 13 Statut Membre
       
      Dans le bout de code que tu me note, 'login' correspond au nom du champs du formulaire ?
      0
    4. VlkPr3s Messages postés 251 Statut Membre 130 > AlexandraBr Messages postés 13 Statut Membre
       
      oui
      0
    5. AlexandraBr Messages postés 13 Statut Membre
       
      Par hasard, il n'y a pas une fonction qui évite de le faire pour chaque champs ?

      Merci pour ton aide, je testerai ça ce soir... je mets ça dans le même fichier que mon formulaire, c'est bien ça ?
      0