Aller au contenu

Traitement auto d'un formulaire par mail


gt4mike

Sujets conseillés

Bonjour tout le monde :rolleyes: ,

J'ai créé un formulaire en php "donnez nous votre opinion" (page opinion.php)avec les champs :

"civilité", "nom", "prenom", "email", "age', "formation suivie", "commentaires".

Les champs "age", "formation suivie" sont des listes modifiables dans la zone administration du site, donc des listes dynamiques.

Tous les champs sont obligatoires à la saisie.

Ce formulaire contient les boutons "apercu", "envoyer", et "effacer"

Sur la meme page j'ai un formulaire avec un bouton "voir les opinions dejà postées" (page commentaires.php)

Lorsque le client envoie le formulaire il est dirigé sur la page opinion.php ou il voit son commentaire. Ma base de données enregistre bien les données envoyées. Et le client voit bien son commentaire.

Je souhaiterai que l'administrateur recoive un mail qui récapitule les informations du formulaire, il sera ainsi prévenu de l'écriture du mail.

PROBLEME : des qu'un utilisateur se met sur la page, un mail part avec à l'intérieur ce message :

"Submit : Votre opinion nous interesse"

(en faite cet intitulé se trouve sur la page d'accueil du site sur un bouton qui permet d'accéder directement à cette page)

S'il quitte la page et qu'il revient, à chaque fois un mail contenant ces 5 mots part !!!! :angry:

Mais lorsque le client rentre les informations, un autre mail part et là, le mail est parfait, il contient bien tous les champs enrichis :rolleyes:

Alors avant de vous envoyer le code du formulaire et le code d'envoi du mail, je voudrais savoir si vous avez des pistes à me communiquer afin que je contrôle ou j'ai fais des erreurs.

Merci de votre aide, cela fait plusieurs jours que je bute sur ce probleme. :wacko:

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Alors avant de vous envoyer le code du formulaire et le code d'envoi du mail, je voudrais savoir si vous avez des pistes à me communiquer afin que je contrôle ou j'ai fais des erreurs.

:whistling: Ca serait mieux avec du code quand même....

Si tu es en php, il serait utile de controler la valeurs des variables envoyées par le formulaire. Si elles sont vides, tu n'envoie pas le formulaire. (idem pour la base de données d'ailleurs)

Si non tu stocke dans ta base le fait d'avoir envoyé le mail (un peu lourd à mon avis)

Ou alors tu redirige automatiquement sur une autre page...

Bref, des solutions, c'est pas ce qui manque :)

[EDIT]Essaye de poster dans le forum adéquat[/EDIT]

Modifié par NorSeb
Lien vers le commentaire
Partager sur d’autres sites

Merci, :) Je ne savais ou le poster, voici le code en question :

code de l'envoi du mail :

$datedujour=date("j M Y à H:i:s ");
$email = "moi_AT_free.fr";
while (list ($key, $val) = each ($_POST))
{
$message .= "$key : $val\n";
}
mail($email, "Un nouveau commentaire vient d'etre écrit le $datedujour", $message, "From: Formulaire");  

Code du formulaire édité

Merci :)

J'avais essayé cela aussi :

while (list($key, $val) = each($HTTP_POST_VARS)) {
   $message .= "$key : $val\n";
}

et cela

if(count($HTTP_POST_VARS)){
   while (list($key, $val) = each($HTTP_POST_VARS)){
      $body.="$key : $val\n";
   }  
}

if(count($HTTP_GET_VARS)){
   while (list($key, $val) = each($HTTP_GET_VARS)){
     $body.="$key : $val\n";
   }  
}

Modifié par gt4mike
Lien vers le commentaire
Partager sur d’autres sites

Merci, je vais fournir le code, mais avant dis moi ou tu veux que je le mette, j'éditerai mon précédent message. :huh:

Tu aurais très bien pu le mettre dans ce message :D

Et il n'est peut-être pas utile de mettre tout ton code... La partie d'envoi du mail sera sans doute suffisante.

Modifié par NorSeb
Lien vers le commentaire
Partager sur d’autres sites

Arrète d'éditer ton message screugneugneu !

L'intéret d'un forum est de mettre les messages les uns à la suite des autres de façon à avoir un semblant de chronologie !

Non mais... Je m'y perd moi maintenant.

Lien vers le commentaire
Partager sur d’autres sites

Dans ton while, tu fait la liste des variables envoyées par le formulaire ; fait une vérification du genre :

envoyer = true;
while (list ($key, $val) = each ($_POST))
{
 if ($val != "") { // Si $val n'est pas vide
   $message .= "$key : $val\n";
 }
 else { // sinon
   $envoyer = false;
   continue; // sortie du while
 }
}
if ($envoyer) {
 mail($email, "Un nouveau commentaire vient d'etre écrit le $datedujour", $message, "From: Formulaire");  
}

Lien vers le commentaire
Partager sur d’autres sites

Merci de ta réponse aussi rapide, voilà ce que j'ai mis :

$envoyer = true;
while (list ($key, $val) = each ($_POST))
{
if ($val != "") { // Si $val n'est pas vide
  $message .= "$key : $val\n";
}
else { // sinon
  $envoyer = false;
  continue; // sortie du while
}
}
if ($envoyer) {
mail($email, "Un nouveau commentaire vient d'etre écrit le $datedujour", $message, "From: Formulaire");  
}

Ca ne marche, j'ai toujours un mail vide composé des 5 mots cités dans mon précédent message des que je reviens sur la page.

Mais maintenant, losque je rempli les champs, dans le mail de confirmation j'ai en plus :

"envoyer : Envoyer votre opinion" :unsure:

Lien vers le commentaire
Partager sur d’autres sites

Alors, je viens de supprimer l'identité du bouton 'envoyer votre opinion" (qui était : "envoyer") et il n'apparait plus dans le mail lorsqu'on rempli tous les champs du formulaire.

Mais j'ai toujours un mail vide composé des 5 mots à chaque accés à la page :wacko:

Lien vers le commentaire
Partager sur d’autres sites

Le doute m'habite :blink: dans ton premier message tu dis :

Tous les champs sont obligatoires à la saisie.

Tu vérifie ça comment ?

Bref... Pour modifier ton code :

$envoyer = false;
while (list ($key, $val) = each ($_POST))
{
if ($val != "") { // Si $val n'est pas vide
 $message .= "$key : $val\n";
$envoyer = true;
}

}
if ($envoyer) {
mail($email, "Un nouveau commentaire vient d'etre écrit le $datedujour", $message, "From: Formulaire");  
}

Lien vers le commentaire
Partager sur d’autres sites

J'ai modifié, meme résultat.

Pour le contrôle des champs, je le fais via un javascript

Le code dans le formulaire est :

</form>
<form action="<?php echo $editFormAction; ?>" method="post" name="form3" onsubmit="YY_checkform('form3','nom','#q','0','Le champ nom est obligatoire','prenom','#q','0','Le champ prénom est obligatoire','email','#S','2','Le champ email est obligatoire ou mal rempli','civilite','#q','1','Le champ civilité est obligatoire','age','#q','1','Le champ age est obligatoire','formation','#q','1','Le champ formation est obligatoire','commentaires','#q','1','Le champ commentaires est obligatoire');return document.MM_returnValue">
<table align="center">
.
..
...

Le script est sur un fichier.js à la racine de mon site, son code est :

function YY_checkform() { //v4.71
//copyright (c)1998,2002 Yaromat.com
var a=YY_checkform.arguments,oo=true,v='',s='',err=false,r,o,at,o1,t,i,j,ma,rx,cd,cm,cy,dte,at;
for (i=1; i<a.length;i=i+4){
if (a[i+1].charAt(0)=='#'){r=true; a[i+1]=a[i+1].substring(1);}else{r=false}
o=MM_findObj(a[i].replace(/\[\d+\]/ig,""));
o1=MM_findObj(a[i+1].replace(/\[\d+\]/ig,""));
v=o.value;t=a[i+2];
if (o.type=='text'||o.type=='password'||o.type=='hidden'){
if (r&&v.length==0){err=true}
if (v.length>0)
if (t==1){ //fromto
ma=a[i+1].split('_');if(isNaN(v)||v<ma[0]/1||v > ma[1]/1){err=true}
} else if (t==2){
rx=new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-zA-Z]{2,4}$");if(!rx.test(v))err=true;
} else if (t==3){ // date
ma=a[i+1].split("#");at=v.match(ma[0]);
if(at){
cd=(at[ma[1]])?at[ma[1]]:1;cm=at[ma[2]]-1;cy=at[ma[3]];
dte=new Date(cy,cm,cd);
if(dte.getFullYear()!=cy||dte.getDate()!=cd||dte.getMonth()!=cm){err=true};
}else{err=true}
} else if (t==4){ // time
ma=a[i+1].split("#");at=v.match(ma[0]);if(!at){err=true}
} else if (t==5){ // check this 2
if(o1.length)o1=o1[a[i+1].replace(/(.*\[)|(\].*)/ig,"")];
if(!o1.checked){err=true}
} else if (t==6){ // the same
if(v!=MM_findObj(a[i+1]).value){err=true}
}
} else
if (!o.type&&o.length>0&&o[0].type=='radio'){
at = a[i].match(/(.*)\[(\d+)\].*/i);
o2=(o.length>1)?o[at[2]]:o;
if (t==1&&o2&&o2.checked&&o1&&o1.value.length/1==0){err=true}
if (t==2){
oo=false;
for(j=0;j<o.length;j++){oo=oo||o[j].checked}
if(!oo){s+='* '+a[i+3]+'\n'}
}
} else if (o.type=='checkbox'){
if((t==1&&o.checked==false)||(t==2&&o.checked&&o1&&o1.value.length/1==0)){err=true}
} else if (o.type=='select-one'||o.type=='select-multiple'){
if(t==1&&o.selectedIndex/1==0){err=true}
}else if (o.type=='textarea'){
if(v.length<a[i+1]){err=true}
}
if (err){s+='* '+a[i+3]+'\n'; err=false}
}
if (s!=''){alert('Vos informations sont incompletes ou contiennent des erreurs:\t\t\t\t\t\n\n'+s)}
document.MM_returnValue = (s=='');
}

Lien vers le commentaire
Partager sur d’autres sites

ma femme commence a en avoir marre

Tu m'étonne ! :D

Pour en venir (et en finir) à ton problème, il faut faire une vérification en php pour vérifier qu'il y a quelque chose à envoyer.

Le plus simple, pour que tu n'as pas à tout modifier et de tester la validité de au moins un des champs.

Par exemple, l'email... si le champ s'appelle 'email'

if (isset($_POST['email'])) {

$datedujour=date("j M Y à H:i:s ");
$email = "moi_AT_free.fr";
while (list ($key, $val) = each ($_POST))
{
 $message .= "$key : $val\n";
}
mail($email, "Un nouveau commentaire vient d'etre écrit le $datedujour", $message,  "From: Formulaire");  

}

de cette façon, le mail ne sera envoyé que si email est renseigné...

Lien vers le commentaire
Partager sur d’autres sites

Tu vois, par habitude, j'essaye toujours de me débrouiller tout seul dans mon coin, j'ai déjà passer beaucoup d'heures sur ce probleme.

En faite lorsque tu est la tete dedans, tu ne fais plus attention, et tu bloques comme moi, j'ai perdu trop d'heures!!!!

Et bien je peux te dire que ta solution MARCHE !

MERCI BEAUCOUP :D

PS : je vais me permettre une autre question NorSeb :

j'ai 2 champs masqués dans le formulaire, l'un ou je récupere l'IP dans le mail, l'autre, un champ intitulé

"<input type="hidden" name="MM_insert" value="form3">" qui permet l'insertion des variables dans la base de données

Evidement tu te doutes que dans le mail je vois apparaitre "MM_insert : form3", as-tu une solution pour empécher la variable d'apparaitre ?

Lien vers le commentaire
Partager sur d’autres sites

Evidement tu te doutes que dans le mail je vois apparaitre "MM_insert : form3", as-tu une solution pour empécher la variable d'apparaitre ?

<{POST_SNAPBACK}>

Tu as deux solutions :

- soit construire le contenu de ton mail proprement, c'est à dire en y mettant ce que tu veux manuellement. De cette façon, tout le reste n'y est pas. ;)

$message = $_POST['nom']."\n".$_POST['prenom']....;

- Soit tester pour empecher certaines valeurs d'être insérées au message (mais c'est pas le plus propre)

 while (list ($key, $val) = each ($_POST))
{
if ($key != "MM_insert") {
  $message .= "$key : $val\n";
 }
}

Lien vers le commentaire
Partager sur d’autres sites

Bonjour NorSeb,

Juste en passant, je suis surpris de n'avoir pas recu une notification par mail de ta réponse, toutes les autres j'en avais eu, me permettant ainsi de te répondre rapidement et puis, je ne sais pour quelle raison, je n'ai pas recu ta derniere réponse. :blink:

En faite dans une autre partie du site, le client envoi un autre formulaire et j'ai choisi la solution dont tu parles " construire le contenu de ton mail proprement, c'est à dire en y mettant ce que tu veux manuellement". Et il marche sans probleme. :) C'est un formulaire de demande d'informations, avec lui aussi des listes dynamiques.

Pour ce formulaire dont nous parlons dans ce topic, j'ai fais ce que tu m'as préconisé, c'est à dire :

while (list ($key, $val) = each ($_POST))
{
if ($key != "MM_insert") {
 $message .= "$key : $val\n";
}
}

et ca MARCHE

Merci infiniment et bonne continuation à toi et à toute l'équipe de ce site, j'ai été très agréablement surpris de ta réactivité et de tes réponses claires et précises.

C'est suffisament rare pour le préciser. B)

Lien vers le commentaire
Partager sur d’autres sites

Juste en passant, je suis surpris de n'avoir pas recu une notification par mail de ta réponse, toutes les autres j'en avais eu, me permettant ainsi de te répondre rapidement et puis, je ne sais pour quelle raison, je n'ai pas recu ta derniere réponse. :blink:

[HS] Certainement parce que tu es resté connecté sur le forum: dans ce cas aucun mail n'est envoyé (partant du principe que la personne est connectée, elle est censée voir elle-même les réponses).

Rester connecté ne veut pas forcément dire être actif sur le forum, çà peut vouloir dire ne pas s'être deloggué et avoir simplement fermé la fenêtre: dans ce cas tu restes "connecté" quelques minutes. Je pense que c'est ce qu'il a du t'arriver ;)

[/HS]

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...