[Javascript & php] formulair d'e mail

Résolu/Fermé
nina_bee Messages postés 18 Date d'inscription mardi 21 mars 2006 Statut Membre Dernière intervention 31 juillet 2007 - 5 mars 2007 à 12:04
 cr - 31 août 2007 à 04:03
bonjour je suis en train de finnaliser un site et pour cela j'ai besoin d'un formulaire de contact.
J'ai donc créé le formulaire de contact avec une fonction de vérification en javascript et l'envoi du formulaire à mon adresse mail. Une fois le message envoyé le visiteur est redirrigé vers une page "merci le message a été envoyé" et la possibilité de revenir à l'index.
Le problemem c'est que rien ne marche!!!
ni la vérification javascriptn ni l'envoi de mail, a chaque fois l'utilisateur est redirrigé vers la page suivante mais je ne reçois rien du tout. Si le formulaire est mal rempli l'alert javascript ne marche pas....
voila le code de ma page contact:
<script language="JavaScript" type="text/JavaScript">
<!--
var name = navigator.appName
var os=navigator.platform
	//alert("plateforme de l'utilisateur : "+os);
	if (name == "Microsoft Internet Explorer"){
		url=('<link href="mediashow-ie.css" rel="stylesheet" type="text/css" />');
	}else{
		url=('<link href="mediashow.css" rel="stylesheet" type="text/css" />');
	} 
	document.write(url);
	
function verif_formulaire()
{
 if(document.formulaire.mail.value == "")  {
   alert("Veuillez saisir votre adresse e-mail");
   document.formulaire.nom.focus();
   return false;
  }
 if(document.formulaire.wwww.value == "") {
   alert("Veuillez saisir l'adresse de votre site internet");
   document.formulaire.lieu.focus();
   return false;
  }
 if(document.formulaire.text.value == "") {
   alert("Veuillez saisir votre message");
   document.formulaire.text.focus();
   return false;
  }
 if(document.formulaire.mail.value.indexOf('@') == -1) {
   alert("veuillez saisir votre adresse mail au format monadresse@monadresse.fr");
   document.formulaire.mail.focus();
   return false;
  }
 if(document.formulaire.tel.value == "") {
   alert("Veuillez saisir votre numéro de téléphone");
   document.formulaire.tel.focus();
   return false;
  }
 var chkZ = 1;
 for(i=0;i<document.formulaire.tel.value.length;++i)
   if(document.formulaire.age.value.charAt(i) < "0"
   || document.formulaire.age.value.charAt(i) > "9")
     chkZ = -1;
 if(chkZ == -1) {
   alert("Veuillez saisir votre numéro de téléphone au format 01.55.49.22.10 ou 06.55.22.10");
   document.formulaire.tel.focus();
   return false;
  }
}//fin de la fonction de verification du formulaire
//-->
</script>
</head>


//Formulaire:
<form action="mail.php" method="post" name="contact" target="_self" id="contactmediashow" 
  enctype="application/x-www-form-urlencoded" onsubmit="return verif_formulaire()" >
    <input type="hidden" name="destinataire" value="nina_bee@hotmail.fr"  id="destinataire"/>
	<input type="hidden" name="objet" value="contact client" id="objet" />
	<p> 
 	<label for="mail" class="formText">Votre adresse e-mail professionnelle: </label><br>
	<span class="champs">
      <input name="mail" type="text" id="mail" size="40" onkeyup="javascript:couleur(this);" />
    </span></p>
  <p>
  	<label for="www" class="formText">Votre site web entreprise:</label><br>
	<span class="champs">
      <input name="www" type="text" id="www" size="40" onkeyup="javascript:couleur(this);" />
    </span> </p>
  <p>
  	<label for="text" class="formText">Votre message: </label><br>
     <span class="champs">
      <textarea name="text" cols="31" rows="15" id="text" onkeyup="javascript:couleur(this);"></textarea>
    </span>
    </p>
  <p>
  	<label for="tel" class="formText">Votre numéro de téléphone : </label><br>
	<span class="champs">
      <input name="tel" type="text" id="tel" size="40" onkeyup="javascript:couleur(this);"/>
    </span>
  </p>
  <p align="right" class="formText"><input type="submit" value="envoi" name="submit" onclick="return verif_formulaire()" /></p>
  </form>


et la page mail:
<p class="texteNormal">	<?php 
	
       $mail = mail($destinataire,$siteclient,$mailclient,$message,$tel);
       if(isset($mail)){ 
	   echo "Message envoyé";
	   }
	
	?></p>
	<p align="center"><a href="contact.php" class="lien">retour à la page de contact</a>&nbsp;-&nbsp;<a href="index.php" class="lien">retour à la page d'acceuil</a></p>

je ne sais pas si l'interaction javascript php bloque ou si j'ai fait une erreur quelque part...
Merci d'avance à tout ceux qui répondront
A voir également:

7 réponses

benkeeper Messages postés 81 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 26 janvier 2008 45
5 mars 2007 à 14:26
Bonjour,

Plusieurs choses à mon avis :

- tout d'abord pour ma part je n'utilise pas le balise label, je ne la connais pas, mais j'utilise des <input type="text" name="nom_champ" ...>
- votre formulaire n'a pas de nom, il faudrait rajouter dans la balise form la propriété suivante name="nom_formulaire".
- ceci fait on accède en javascript aux différentes entrées de la manière suivante : document.nom_formulaire.nom_champ.value, notamment dans le cas d'un champs texte, les champs "boutons radio" étant un poil plus complexes.

Dans la partie mail.php, les variables ne seront pas récupéré avec le code tel qu'il est. Il faut utiliser le tableau $_POST qui contient les variables passées en post.

Par exemple pour l'entrée de formulaire <input type="text" name="mail">, le script doit récupérer le contenu grâce à la variable $_POST['mail']. Autrefois il était souvent possible de récupérer cette valeur en tapant directement $mail dans le code, mais pour des raisons de sécurité maintenant il faut le plus souvent passer par des tableau globaux ($_POST pour les variables passée en mode post, $_GET pour les variables passées en mode get c'est à dire dans l'url).


Autrement je ne sais pas quel navigateur vous utilisez, mais Firefox dispose d'une "console javascript" très pratique pour le développeur car elle affiche les erreurs de javascript avec les lignes incriminées.


Ben :)
1
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
5 mars 2007 à 15:04
Juste une précision pour benkeeper : la balise label est très utile pour lier du texte (qui est dans cette balise) à un champ de saisie du formulaire : cliquer sur le texte revient à cliaquer sur l'input. Par exemple, dans le cas de radios boutons, c'est très utile pour ne pas avoir à aller cliquer sur ce petit machin rond : on peut cliquer sur le texte d'à côté. C'est ergonomiquement parlant un très bon point.

A part ça, je suis tout-à-fait d'accord avec ce que tu dis, à un détail prêt : son formulaire a déjà un nom : name="contact".

Donc, nina_bee, dans tout ton javascript, ce ne sont pas des document.formulaire.champ qu'il faut utiliser, mais des document.contact.champ. Ou alors, renomme le formulaire en name="formulaire", au choix.

Par ailleurs, pour débugger le javascript, je te conseille de l'utiliser sous Firefox : il a une console JavaScript très efficace ! ("Outils -> Console d'erreur" : tu vides tout ce qu'il y a dedans, tu recharges ta page, et au final tu y retrouves toutes les erreurs de ta page.)
0
nina_bee Messages postés 18 Date d'inscription mardi 21 mars 2006 Statut Membre Dernière intervention 31 juillet 2007
5 mars 2007 à 15:21
alors j'ai bien pris note et de mon coté j'ai corrigé certaine choses (dont le problème de nom du formulaire).
A présent ça marche....ou presque: mon code vérifie seulement que le premier champ n'est pas vide....
Quant au php c'est un oubli de ma part je n'ai pas mis tout le code (faut dire que je m'y perd un peu dans toutes ces pages car ça fait un bout de temsp que je suis bloquée sur cette page de contact... désolée)
alors voili mon code =p
page contact.php
<script language="JavaScript" type="text/JavaScript">
<!--
var name = navigator.appName
var os=navigator.platform
	//alert("plateforme de l'utilisateur : "+os);
	if (name == "Microsoft Internet Explorer"){
		url=('<link href="mediashow-ie.css" rel="stylesheet" type="text/css" />');
	}else{
		url=('<link href="mediashow.css" rel="stylesheet" type="text/css" />');
	} 
	document.write(url);
	
function verif_formulaire()
{
 if(document.contact.mail.value == "")  {
   alert("Veuillez saisir votre adresse e-mail");
   document.contact.nom.focus();
   return false;
  }
 if(document.contact.wwww.value == "") {
   alert("Veuillez saisir l'adresse de votre site internet");
   document.contact.lieu.focus();
   return false;
  }
 if(document.contact.text.value == "") {
   alert("Veuillez saisir votre message");
   document.contact.text.focus();
   return false;
  }
 if(document.contact.mail.value.indexOf('@') == -1) {
   alert("veuillez saisir votre adresse mail au format monadresse@monadresse.fr");
   document.contact.mail.focus();
   return false;
  }
 if(document.contact.tel.value == "") {
   alert("Veuillez saisir votre numéro de téléphone");
   document.contact.tel.focus();
   return false;
  }
 var chkZ = 1;
 for(i=0;i<document.contact.tel.value.length;++i)
   if(document.contact.age.value.charAt(i) < "0"
   || document.contact.age.value.charAt(i) > "9")
     chkZ = -1;
 if(chkZ == -1) {
   alert("Veuillez saisir votre numéro de téléphone au format 01.55.49.22.10 ou 06.55.22.10");
   document.contact.tel.focus();
   return false;
  }
}//fin de la fonction de verification du formulaire
//-->
</script>

//formulaire:
<p align="center">
  <form action="mail.php" method="post" name="contact" id="contact" onsubmit="return verif_formulaire(contact)" >
    <input type="hidden" name="destinataire" value="nina_bee@hotmail.fr"  id="destinataire"/>
	<input type="hidden" name="objet" value="contact client" id="objet" />
	<p> 
 	<label for="mail" class="formText">Votre adresse e-mail professionnelle: </label><br>
	<span class="champs">
      <input name="mail" type="text" id="mail" size="40" />
    </span></p>
  <p>
  	<label for="www" class="formText">Votre site web entreprise:</label><br>
	<span class="champs">
      <input name="www" type="text" id="www" size="40" />
    </span> </p>
  <p>
  	<label for="text" class="formText">Votre message: </label><br>
     <span class="champs">
      <textarea name="text" cols="31" rows="15" id="text" ></textarea>
    </span>
    </p>
  <p>
  	<label for="tel" class="formText">Votre numéro de téléphone : </label><br>
	<span class="champs">
      <input name="tel" type="text" id="tel" size="40" />
    </span>
  </p>
  <p align="right" class="formText"><input type="submit" value="envoi" name="submit" /></p>
  </form>
  </p>

mail.php
<?php
$destinataire = $_POST['destinataire'];
$objet = $_POST['objet'];
$mailclient = htmlentities("From: ".$_POST['mail']);
$siteclient = $_POST['www'];
$message = stripslashes(htmlentities($_POST['text']));
$tel = $_POST['tel'];
?>

<body>
...du code...
<p class="texteNormal">	<?php 
	
       $mail = mail($destinataire,$siteclient,$mailclient,$message,$tel);
       if(isset($mail)){ 
	   echo $destinataire." ".$siteclient." ".$mailclient." ".$message." ".$tel."<br>";
	   
	   echo "Message envoyé";
	   }
	?></p>
	<p align="center"><a href="contact.php" class="lien">retour à la page de contact</a>&nbsp;-&nbsp;<a href="index.php" class="lien">retour à la page d'acceuil</a></p>
</body>


deplus meme quand le premier champ est vide je suis redirrigée vers mail.php!!!
Quand à l'email il n'arrive jammais dans ma boite
Merci encore pour vos conseils, j'espere que vous saurez m'aider encore un peu
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
5 mars 2007 à 15:38
Autre erreur :

formulaire :
<input name="www" type="text" id="www" size="40" />
et, dans les tests JS :
if(document.contact.wwww.value == "") {

Un w de trop ! Donc il s'arrête là, c'est pour ça que les tests suivants ne sont pas fait :)
0
nina_bee Messages postés 18 Date d'inscription mardi 21 mars 2006 Statut Membre Dernière intervention 31 juillet 2007
5 mars 2007 à 15:55
re!!
merci d'avoir mis le doigt dessus. Maintenant mes champs sont vérifiés et si il sont vide ou si ils ne sont pas au bon format, l'alert s'affiche. Par contre quand le champs mail ou le champs www sont vides, je suis quand meme redirigée vers mail.php. Je ne comprend pas pourquoi?
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
5 mars 2007 à 16:01
Décidément :)

Bon, alors, je pense que le problème vient de là :
<input name="mail" type="text" id="mail" size="40" />

Tu ne définis pas de "value". Le value sera défini par le navigateur quand l'utilisateur aura mis un texte. Je suis prêt à parier que si au lieu de valider tout de suite, tu rentres du texte, puis l'efface, ça marchera correctement !
Donc, avant ça, mail.value n'existe pas. Et ne vaut donc pas "".

Essaie de définir ton champ comme cela :
<input name="mail" type="text" id="mail" size="40" value="" />

Idem, bien sûr, pour tous tes champs texte.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nina_bee Messages postés 18 Date d'inscription mardi 21 mars 2006 Statut Membre Dernière intervention 31 juillet 2007
5 mars 2007 à 17:14
coucou!! merci pour ton aide.malheureusement ca ne marche pas.... Par contre ca m'a donné une idée: en mettant value=" ", le champ mail et le champ www ne sont pas remplis au bon format donc je recois eune alerte et cette fois je ne passe pas à la page suivante. Bon c'est carrément de la bidouille mais ca marche alors merci!!!!=p
par contre je reste bloquée par le php (argh si pres du but....)
********^_^***********
0
hep... n'aurais tu pas oublié le return true à fin de la validation ?
0
sorry... j'avais pas tout lu.
Je comprends pas du tout ta syntaxe mail() !!
et si tu mettais $mail = mail($destinataire,$objet,$message);

su tu veux ajouter les autres infos, y faut les concaténer au message :
$mail = mail($destinataire,$objet,$message.$siteclient.$mailclient.$tel);
0