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

Fermé
AlexandraBr Messages postés 13 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 25 mars 2015 - 19 mars 2015 à 10:50
VlkPr3s Messages postés 235 Date d'inscription vendredi 30 mai 2014 Statut Membre Dernière intervention 27 juin 2016 - 25 mars 2015 à 13:21
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

Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
19 mars 2015 à 11:06
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
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
19 mars 2015 à 11:18
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
AlexandraBr Messages postés 13 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 25 mars 2015
Modifié par jordane45 le 20/03/2015 à 11:21
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
Thorak83 Messages postés 1051 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 décembre 2017 156
Modifié par Thorak83 le 19/03/2015 à 12:00
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
AlexandraBr Messages postés 13 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 25 mars 2015
23 mars 2015 à 20:50
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
VlkPr3s Messages postés 235 Date d'inscription vendredi 30 mai 2014 Statut Membre Dernière intervention 27 juin 2016 130
20 mars 2015 à 11:00
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
AlexandraBr Messages postés 13 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 25 mars 2015
23 mars 2015 à 20:51
Et si le champs est vide, il ne s'affichera pas dans le mail ?
0
VlkPr3s Messages postés 235 Date d'inscription vendredi 30 mai 2014 Statut Membre Dernière intervention 27 juin 2016 130 > AlexandraBr Messages postés 13 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 25 mars 2015
24 mars 2015 à 11:15
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
AlexandraBr Messages postés 13 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 25 mars 2015
24 mars 2015 à 20:13
Dans le bout de code que tu me note, 'login' correspond au nom du champs du formulaire ?
0
VlkPr3s Messages postés 235 Date d'inscription vendredi 30 mai 2014 Statut Membre Dernière intervention 27 juin 2016 130 > AlexandraBr Messages postés 13 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 25 mars 2015
25 mars 2015 à 11:42
oui
0
AlexandraBr Messages postés 13 Date d'inscription mercredi 30 juillet 2014 Statut Membre Dernière intervention 25 mars 2015
25 mars 2015 à 13:07
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