gt4mike Posté 7 Novembre 2005 Posté 7 Novembre 2005 Bonjour tout le monde , 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 !!!! Mais lorsque le client rentre les informations, un autre mail part et là, le mail est parfait, il contient bien tous les champs enrichis 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.
NorSeb Posté 7 Novembre 2005 Posté 7 Novembre 2005 (modifié) 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. 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é 7 Novembre 2005 par NorSeb
gt4mike Posté 7 Novembre 2005 Auteur Posté 7 Novembre 2005 (modifié) 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é 7 Novembre 2005 par gt4mike
NorSeb Posté 7 Novembre 2005 Posté 7 Novembre 2005 (modifié) Merci, je vais fournir le code, mais avant dis moi ou tu veux que je le mette, j'éditerai mon précédent message. Tu aurais très bien pu le mettre dans ce message Et il n'est peut-être pas utile de mettre tout ton code... La partie d'envoi du mail sera sans doute suffisante. Modifié 7 Novembre 2005 par NorSeb
NorSeb Posté 7 Novembre 2005 Posté 7 Novembre 2005 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.
gt4mike Posté 7 Novembre 2005 Auteur Posté 7 Novembre 2005 Promis, je recommencerai plus , j'essaye de faire de mon mieux
NorSeb Posté 7 Novembre 2005 Posté 7 Novembre 2005 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"); }
NorSeb Posté 7 Novembre 2005 Posté 7 Novembre 2005 Promis, je recommencerai plus , j'essaye de faire de mon mieux <{POST_SNAPBACK}> Pas grave allez Tiens nous au courant de la suite des choses...
gt4mike Posté 7 Novembre 2005 Auteur Posté 7 Novembre 2005 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"
gt4mike Posté 7 Novembre 2005 Auteur Posté 7 Novembre 2005 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
NorSeb Posté 7 Novembre 2005 Posté 7 Novembre 2005 Le doute m'habite 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"); }
gt4mike Posté 7 Novembre 2005 Auteur Posté 7 Novembre 2005 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.comvar 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){ //fromtoma=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){ // datema=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){ // timema=a[i+1].split("#");at=v.match(ma[0]);if(!at){err=true}} else if (t==5){ // check this 2if(o1.length)o1=o1[a[i+1].replace(/(.*\[)|(\].*)/ig,"")];if(!o1.checked){err=true}} else if (t==6){ // the sameif(v!=MM_findObj(a[i+1]).value){err=true}}} elseif (!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=='');}
NorSeb Posté 7 Novembre 2005 Posté 7 Novembre 2005 C'est normal que ca donne le même résultat... Au temps pour moi. Je continue, ca va le faire
gt4mike Posté 7 Novembre 2005 Auteur Posté 7 Novembre 2005 J'ai passé tout le week end dessus ma femme commence a en avoir marre, merci de ton aide
NorSeb Posté 7 Novembre 2005 Posté 7 Novembre 2005 ma femme commence a en avoir marre Tu m'étonne ! 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é...
gt4mike Posté 7 Novembre 2005 Auteur Posté 7 Novembre 2005 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 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 ?
NorSeb Posté 7 Novembre 2005 Posté 7 Novembre 2005 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"; }}
gt4mike Posté 8 Novembre 2005 Auteur Posté 8 Novembre 2005 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. 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.
Dudu Posté 8 Novembre 2005 Posté 8 Novembre 2005 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. [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]
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant