Page 1 sur 1

problème formulaire de contact!!

Posté : 06 avr. 2009, 17:03
par seldgine
Bonjour,

j'aurai besoin de votre aide svp!!
voilà j'ai créé un formulaire de contact en html et css puis en php sur une autre page.
En se qui concerne le design c'est bon, mon problème vient au niveau de l'envoi du message, lorsque je le test il apparait une simple page blanche, j'écris mon message et rempli tous les champs et lorsque je clique sur "envoyer" ben rien, pas de message d'erreur, pas de "message envoyé" ou"remplisser tous les champs" une page blanche puis aucune réception de message, a croire que ma page html ne reçois pas les informations de ma page php comme vous pouvez vous en douter je suis novice en php et là je suis un peu perdu!!
Je me suis trompé quelque part mais où???!!!
voici le code de ma page html:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>contact</title>
<link href="stylecontact.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body>
<div id="full">
<form method="post" action="contact.php">
<fieldset id="coordonnee">
<legend>Coordonnées
</legend>
<p>
<label class="text">Civilités</label>
<input class="radio" type="radio" id="civM" name="civ" /><label class="radioCheck" for="civM">M.</label>
<input class="radio" type="radio" id="civMme" name="civ" /><label class="radioCheck" for="civMme">Mme</label>
<input class="radio" type="radio" id="civMlle" name="civ" /><label class="radioCheck" for="civMlle">Mlle</label><span class="warning">*</span>
</p>
<p>
<label class="text" for="nom">Nom</label><input class="text" id="nom" name="nom" type="text" /><span class="warning">*</span>
</p>
<p>
<label class="text" for="email">Email</label><input class="text" id="email" name="email" type="text" /><span class="warning">*</span>
</p>
<hr />
</fieldset>

<fieldset id="connaitre">
<legend>Ecrivez votre message ci-dessous</legend>
<p>
<label class="text" for="message">Message</label><textarea class="text" cols="30" rows="15" id="message" name="message"></textarea><span class="warning">*</span>
</p>
<hr />

</fieldset>
<p class="envoy">
<label class="text"> </label><input id="validSearch" type="submit" value="Envoyer" />
</p>
</form>
</div>
</body>
</html>

puis voici le code de ma page php:


!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>contact</title>
</head>

<body>
<?php

if(isset($_POST) && isset($_POST['civ']) && isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['message'])){
extract($_POST);
if(!empty($civ) && !empty($nom) && !empty($nom) && !empty($message)){
$message=str_replace("\'","'",$message);
$destinataire="mon adresse [email protected]";
$sujet="contact site web";
$msg="nouveau message \n
civ : $civ \n
Nom : $nom \n
Email : $email \n
Message: $message";
$entete="From: $nom \n Replay-To: $email";
mail($destinataire,$civ,$sujet,$email,$msg,$entete);
echo "Le message a bien été envoyé.";
}
else{
echo "Vous n'avez pas rempli tous les champs.";
}
}
?>
</body>
</html>
Le code css me semble pas utile, mais si il vous le faut dites le moi!!!

Je vous remercie de l'aide que vous pourrez m'apporter!!

Posté : 06 avr. 2009, 17:27
par Ryle
Modération :
seldgine, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu édites ou postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

Posté : 06 avr. 2009, 17:44
par seldgine
ok, désolé je n'avais pas vu!! j'espère que c'est mieux comme cela!!?

Posté : 06 avr. 2009, 17:52
par Ryle
Ca manque un peu d'indentation, mais c'est déjà plus lisible :)

Donc, ton formulaire est envoyé via post à la page contact.php. C'est bien cette page là dont tu nous donnes le code et qui apparait en blanc ?

As-tu vérifié les valeurs contenues dans $_POST (avec un print_r($_POST) par exemple) ? Pour vérifier que tous les champs que tu tests avec isSet sont bien définis, sans quoi tu auras effectivement une page blanche (puisque pas de else :))

Regarde également le code source de ta page et vérifier ce qu'il contient :)

Posté : 06 avr. 2009, 20:26
par seldgine
merci pour la réponse, c'est un peu compliqué pour moi de te suivre car j'apprends le php petit a petit :?
le code que j'ai mis dans mon premier message, c'est 1:mon code html pour la forme avec un appel css pour le style puis en 2: ma page php, appelé par ma page html et c'est bien cette page qui s'affiche en blanc lorsque je test l'envoie du message!

je ne connaissais pas jusqu'ici la fonction print_r donc j'ai un peu du mal a l'utiliser même avec l'aide en lien je n'arrive pas a l'adapter a mon script!!
pourrais-tu me donner la solution stp?

sinon au niveau de mon script ne vois tu pas des choses qui font que cela ne fonctionne pas, des choses a modifier??

merci encore.

Posté : 07 avr. 2009, 01:38
par Nours312
La solution, NON, tu souhaites apprendre n'est-ce pas ... ?

dans ton code :

<body>
<?php

print_r($_POST);

if(isset($_POST) && isset($_POST['civ']) && isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['message'])){



devrai t'afficher un truc du style :

array(
[civ] => la valeur,
[nom] => la valeur,
...

)

Si ce n'est pas le cas, c'est qu'il y a un Bug en amont ... sinon, le Bug est en aval ... dans tous les cas, on progresse ! ;)

@+

Posté : 07 avr. 2009, 10:47
par seldgine
euhh!!, oups pris en flag!! oui je veux apprendre aussi bien sur je demande que ça :oops: !!

bon après une bonne vérification j'avais oublié un"=" sur ma page html...suite a cela j'ai testé et j'ai eu se message d'erreur, en incluant:
print_r($_POST);
j'obtiens se message.

Array ( [civ] => on [nom] => v [email] => [email protected] [message] => Bnbbqbnvj )
Warning: mail() expects at most 5 parameters, 6 given in /web/gouirriecjonath/www/contact.php on line 25
Le message a bien été envoyé.

sauf que pas de message reçu.
La ligne 25 correspond a:
mail($destinataire,$civ,$sujet,$email,$msg,$entete);
donc problème a se niveau il me semble, mais comment rectifier???!!

bon après avoir réfléchi un peu!! :D
j'ai déchiffré le message, donc, en fait c'est que j'ai rentré 5 paramètres dans mon script qui sont:
"civ"
"sujet"
"email"
"message"

or dans ma ligne 25 j'en ai mis 6 avec "entete" en plus et c'est la ou sa bloque!!!
j'ai modifié ou du moins essayé, j'ai retiré $entete de ma ligne 25 et la c'est bon il me mets message envoyé et je reçois un message sauf que dans le message sa correspond pas a se que j'ai écrit!!^^??
en sujet sa me met "aucun(e)" en adresse email sa me met "on [email protected]" le "on" ici est-il normal?? en civilité je n'ai rien puis en message sa me met "contact site web" et non le message que j'ai écrit???!! donc...ben comprends pas trop
:lol: :roll: :?

une idée peux être???

ah oui j'oubliai lorsque je ne remplie pas tous les champs, sa me mets pas le message"Vous n'avez pas rempli tous les champs." sa m'envoie le message quand même!!!???

merci.

Posté : 07 avr. 2009, 12:03
par Ryle
Alors on va procéder par étape :)

La première, l'envoi du mail. La fonction mail() de php prends en effet, comme le message d'erreur l'indique, au maximum 5 paramètres, mais pas n'importe quels paramètres :)
Description
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
Si tu regardes la documentation de cette fonction, tu verras que le premier paramète, c'est le mail du destinataire (qui naturellement doit exister ;)). Le second, c'est le sujet du mail. Cette info apparait dans l'objet du mail que tu reçois. Le troisième, c'est le corps du message que tu vas recevoir et le quatrième les entêtes (permettant de spécifier l'expéditeur, l'adresse de réponse qui au passage est Reply-To et non pas Replay-To ;))

En gros, une fois que tu as préparé l'objet, le corps et les entête, il ne faut dans ton cas, pas passer d'autres paramètres à la fonction mail() :
mail($destinataire,$sujet,$msg,$entete); 

Concernant l'affichage, juste après l'envoi de mail, tu fais un echo pour dire que le mail a été bien envoyé, mais tu affiches ce message sans avoir testé si le mail avait bien été envoyé ou pas, donc forcément.... :)

La fonction mail() retourne TRUE en cas de succès. Tu peux donc tester ce résultat pour afficher le message :
$succes = mail($destinataire,$sujet,$msg,$entete); 
if ($succes == TRUE) 
  echo "Le message a bien été envoyé."; 
else
  echo "Erreur lors de l'envoi du message :(";

Posté : 07 avr. 2009, 15:22
par seldgine
houawww tu es un chef!!!

c'est bon sa marche, franchement chapeau, même le message pour les champs non rempli s'affiche!!!
un grand merci pour ton aide puis quand même j'étais pas loin!!!lol :wink:

a oui il y a juste au niveau de la civilité ou sa me met "on" comment faire pour qu'il me dise "mr", "mde" ou "mlle"??

désolé je vais te t'embêter encore un peu mais j'aurais voulu savoir si il était possible, lorsque j'ai envoyé mon message et que ça ma bien mis"message envoyé" de faire une redirection direct sur la page d'accueil???

si oui comment?? merci encore.

Posté : 07 avr. 2009, 15:38
par Ryle
Pour le Mr/Mme/Mle, il te suffit de spécifier la valeur dans l'attribut value des case à cocher (sinon le formulaire se contente de t'indique que la case est cochée en lui donnant la valeur "on" par opposition à "off", mais vu que les cases pas cochées il ne les envois pas... 'fin bref ;))
<input class="radio" type="radio" id="civM" name="civ" value="M." /> 
(ou value="Mr", ou Monsieur, ou ce que tu veux récupérer comme valeur :))

Quant à la redirection, y a plusieurs solutions... la première consiste à utiliser la fonction header() pour rediriger l'utilisateur vers l'url de ton choix. L'avantage, c'est que si l'utilisateur appuie sur F5, ca ne te renvoi pas de nouveau mail. L'inconvénient c'est que tu ne pourras pas mettre le message de confirmation sur cette page, puisqu'il ne faut rien envoyer avant au navigateur avant un header(). Ceci étant, rien ne t'empêche de passer la valeur de $succes dans l'url de la page vers laquelle tu rediriges l'utilisateur, et d'afficher sur celle-ci le message correspondant (succès ou échec) en fonction de sa valeur :)

Les autres solutions consitent à faire une redirection en html ou en javascript pour que, au bout de x secondes, une nouvelle page se charge :)

Posté : 07 avr. 2009, 17:59
par seldgine
ok je comprends mieux maintenant, merci pour les explications!! je sais pas comment j'aurai fait sinon!!
pour avoir les valeurs "Mr", "mlle", "mde" j'ai juste a compléter mon code sur la page html avec les valeurs que tu m'as donné??!!

en gros sur mon code il ne me manque que value="Mr", value="Mlle",...

ok je te remercie, pour la redirection on verra je ferai surement cela en java ou html mais j'avais pas pensé au compte à rebours!!

sérieux merci de l'aide que tu m"as apporté, c'est cool!!
:D

Posté : 07 avr. 2009, 18:22
par albat
<parenthèse>
En français, l'abréviation de "Monsieur" est "M." et non "Mr", ni "Mr."
</parenthèse>

Posté : 07 avr. 2009, 21:56
par seldgine
Merci pour cette petite précision!! que ferions nous sans??!!! :wink:

Posté : 07 avr. 2009, 21:57
par albat
Ben... des fautes. ;)