[PHP] - Formulaire de contact

Salut la Zone,

Je suis un grand débutant en PHP et me retrouve confronté à un problème qui me laisse perplexe…

J’ai récupéré un bout de code sur le net, l’ai configuré correctement (du moins je crois) en adaptant les variables à mon code et ai inclus le tout dans mon formulaire. Et là, c’est le drame.

Lorsque je clique sur Envoyer !, j’obtiens une erreur bien longue et bien moche :

'; } else if(empty($societe)){ echo 'Le societe est vide. '; } else if(empty($email)){ echo 'Le email est vide. '; } else if(empty($telephone)){ echo 'Le telephone est vide. '; } else if(empty($message)){ echo 'Le message est vide. '; } else { $mon_email = "xxx@xxx.com"; $mon_pseudo = "xxx"; $mon_url = "xxx"; $son_email = ''.$email.''; // Envoie du mail $entete = "From: " . $mon_pseudo . " <" . $son_email . ">\n"; $entete .= "MIME-Version: 1.0"; if (@mail($mon_email,$nom,$societe,$email,$telephone,$message,$entete)) { echo "Votre message a été envoyé. \n"; echo "Retour\n"; } else { echo "Un problème s'est produit lors de l'envoi du message.\n"; echo "Réessayez\n"; } //on ferme le else } //on ferme if(isset($_POST["Valider"])) } ?>

Mon objectif : recevoir un mail récapitulant les informations entrées dans les champs prévus à cet effet.

Je précise que, bien que grand novice en PHP, je me débrouille en HTML/CSS. J’ai toujours trouvé le bon script pour combler mes quelques besoins en PHP… Mais là, on dirait qu’il va falloir mettre les mains dans le cambouis !

Voici le code du formulaire :

[code]

Nom (requis) :

Société (requis) :

E-mail (requis) :

Téléphone :

Message (requis) :
[/code]

Et celui du script :

[code]<?php
if(isset($_POST[“Valider”]))
{
$nom = stripslashes($_POST[“nom”]);
$societe = stripslashes($_POST[“societe”]);
$email = stripslashes($_POST[“email”]);
$telephone = stripslashes($_POST[“telephone”]);
$message = stripslashes($_POST[“message”]);

if(empty($nom)){
echo ‘Le champ nom est vide.
’;
}
else if(empty($societe)){
echo ‘Le societe est vide.
’;
}
else if(empty($email)){
echo ‘Le email est vide.
’;
}
else if(empty($telephone)){
echo ‘Le telephone est vide.
’;
}
else if(empty($message)){
echo ‘Le message est vide.
’;
} else
{
$mon_email = "xxx@xxx.com";
$mon_pseudo = “xxx”;
$mon_url = “http://www.xxx.com/”;
$son_email = ‘’.$email.’’;

// Envoie du mail
$entete = “From: " . $mon_pseudo . " <” . $son_email . “>\n”;
$entete .= “MIME-Version: 1.0”;
if (@mail($mon_email,$nom,$societe,$email,$telephone,$message,$entete))
{
echo “Votre message a été envoyé.
\n”;
echo “<a href=”" . $mon_url . “”>Retour\n";
}
else
{
echo “Un problème s’est produit lors de l’envoi du message.\n”;
echo “<a href=”".$_SERVER[“PHP_SELF”]."">Réessayez\n";
}
//on ferme le else
}
//on ferme if(isset($_POST[“Valider”]))
}
?>[/code]

Merci d’avance !

Argl…

Pas vu le forum Webdev.

Merci de déplacer mon post avant que je me fasse rappeler à l’ordre !

Ben colles nous l’erreur que tu obtiens, ça nous simplifieras!

Hum… Comment te dire… Relis mon post ?

:):rolleyes::crying:

La balise form est coupée par la fermeture du premier div, ça n’a rien à voir avec ton problème mais j’aime bien chipoter.

Il manque des quotes aux attributs de ton submit (name=valider, pas bien)

Ton if(isset($_POST[‘Valider’])) fait référence à un “Valider” et non “valider”, fait gaffe à la casse.

Sinon le code Php me semble correct bien que mal présenté.
Ton erreur n’en est pas une, il affiche juste le source de ton php, on dirait que le serveur n’a plus envie de l’interpréter.
Tu as bien un serveur apache qui tourne dis moi ?
Ton code, mieux indenté (enfin AMHA) :

[code]if(isset($_POST[“Valider”]))
{
$nom = stripslashes($_POST[“nom”]);
$societe = stripslashes($_POST[“societe”]);
$email = stripslashes($_POST[“email”]);
$telephone = stripslashes($_POST[“telephone”]);
$message = stripslashes($_POST[“message”]);

if(empty($nom)){
	echo 'Le champ nom est vide.<br/>';
}elseif(empty($societe)){
	echo 'Le societe est vide.<br/>';
}elseif(empty($email)){
	echo 'Le email est vide.<br/>';
}elseif(empty($telephone)){
	echo 'Le telephone est vide.<br/>';
}elseif(empty($message)){
	echo 'Le message est vide.<br/>';
}else{
	$mon_email = "xxx@xxx.com";
	$mon_pseudo = "xxx";
	$mon_url = "http://www.xxx.com/";
	$son_email = ''.$email.'';

	// Envoie du mail
	$entete = "From: " . $mon_pseudo . " <" . $son_email . ">\n";
	$entete .= "MIME-Version: 1.0";
	if (@mail($mon_email,$nom,$societe,$email,$telephone,$message,$entete))
	{
		echo "Votre message a été envoyé.<br />\n";
		echo "<a href=\"" . $mon_url . "\">Retour</a>\n";
	}else{
		echo "Un problème s'est produit lors de l'envoi du message.\n";
		echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez</a>\n";
	}
}

}[/code]

La question c’est pas de savoir si Apache tourne (il ne verrais même pas son code si un serveur web ne tournait pas, y aurait pas de réponse à sa requête). C’est plus de savoir si PHP est installé et si oui, s’il est bien couplé à apache.

Essaie de lancer une page qui ne contient que :

[code]<?php

echo ‹ Hello world ›;

?>[/code]

Et dis nous si ça fait la même chose. :slight_smile:

[quote=“Molokai, post:6, topic: 48505”]La question c’est pas de savoir si Apache tourne (il ne verrais même pas son code si un serveur web ne tournait pas, y aurait pas de réponse à sa requête). C’est plus de savoir si PHP est installé et si oui, s’il est bien couplé à apache.

Essaie de lancer une page qui ne contient que :

[code]<?php

echo ‘Hello world’;

?>[/code]

Et dis nous si ça fait la même chose. :)[/quote]

Bon… J’ai réinstallé Apache et on dirait que ça fonctionne. Mystère de l’informatique ?

En tous les cas, merci pour votre aide !

T’as réinstallé Apache ou un truc genre EasyPHP ? (Wampserver etc) Je doute fortement que ça venait d’apache ton soucis. :slight_smile:

Bon… Apparemment, il s’agissait bien d’Apache.

Je rebug en live du coup.

Je vous envoie tout ça dès que possible !

^^

Bon petit cours à l’arrache de ce qu’est un serveur web. :slight_smile:

Apache est un serveur web. Son rôle de base est de servir des objets statiques à la demande (par statique on entend sans qu’il y ai de la programmation préalable). Il peut faire plus, à condition de lui adjoindre des modules, comme par exemple PHP. Si tu couples le parseur PHP à Apache, tu vas pouvoir produire des pages calculé via programmation plutôt que des pages statique.

Si ton serveur te sert des pages PHP sans les interpréter (en gros il lit ton code PHP et le crache tel quel), ce qui semble être le cas, le soucis provient du couplage PHP → Apache. Mais pas d’Apache lui-même. Tu auras beau réinstaller Apache autant de fois que tu le veux, si tu ne trouves pas ce qui fait que le couplage Apache->PHP saute, ton bug persistera.

Pour identifier ton bug ce serait pas mal déjà de répondre à la question :

  • Tu utilises un truc tout en un style EasyPHP ou tu installes chaque module séparément ? (En prod et en dev)

[quote=« Molokai, post:10, topic: 48505 »]Bon petit cours à l’arrache de ce qu’est un serveur web. :slight_smile:

Apache est un serveur web. Son rôle de base est de servir des objets statiques à la demande (par statique on entend sans qu’il y ai de la programmation préalable). Il peut faire plus, à condition de lui adjoindre des modules, comme par exemple PHP. Si tu couples le parseur PHP à Apache, tu vas pouvoir produire des pages calculé via programmation plutôt que des pages statique.

Si ton serveur te sert des pages PHP sans les interpréter (en gros il lit ton code PHP et le crache tel quel), ce qui semble être le cas, le soucis provient du couplage PHP → Apache. Mais pas d’Apache lui-même. Tu auras beau réinstaller Apache autant de fois que tu le veux, si tu ne trouves pas ce qui fait que le couplage Apache->PHP saute, ton bug persistera.

Pour identifier ton bug ce serait pas mal déjà de répondre à la question :

  • Tu utilises un truc tout en un style EasyPHP ou tu installes chaque module séparément ? (En prod et en dev)[/quote]

Merci pour l’introduction : c’est plus clair !

J’ai installé EasyPHP et depuis, tout fonctionne. Cependant, une fois online, je reçois une autre erreur. Je me penche dessus dès que j’ai 5min histoire de tout bien détailler.

Yop yop yop !

J’ai tout remis à plat. Et ça ne fonctionne toujours pas…

J’ai suivi le tutorial que voici : http://wiki.mediabox.fr/tutoriaux/php/lenvoi-mail-php.

Ce qui me donne le code que voilà :

[code]<?php
$nom=$HTTP_POST_VARS[‘nom’];
$société=$HTTP_POST_VARS[‘société’];
$email=$HTTP_POST_VARS[‘email’];
$téléphone=$HTTP_POST_VARS[‘téléphone’];
$message=$HTTP_POST_VARS[‘message’];

/////voici la version MIME
$headers = “MIME-Version: 1.0\r\n”;

//////on détermine le mail en format text
$headers .= “Content-type: text/plain; charset=iso-8859-1\r\n”;

////on détermine l’expéditeur et l’adresse de réponse
$headers .= “From: $nom <$email>\r\nReply-to : $nom <$email>\nX-Mailer:PHP”;

////on définit le sujet, le destinataire et le corps du message
$subject="$société";
$destinataire="jeremiiogna@gmail.com";

////on formate les données du mail pour suivre la norme RFC 2045
$body = chunk_split(base64_encode($message));

if (mail($destinataire,$subject,$body,$headers)) {
echo “Votre mail a été envoyé”;
} else {
echo “Une erreur s’est produite”;
}
?>[/code]

J’arrive sur une nouvelle fenêtre m’indiquant que le message a bien été envoyé. Il n’en est rien…

Je désespère de comprendre le PHP un jour !

Merci d’avance !

PS : Pour mémoire, le site : http://www.leadbay.fr/

Un petit coup de main ?

Merci !

Salut,

Bon déjà $HTTP_POST_VARS c’est obsolète, on utilise plutôt $_POST.

Question habituelle : es-tu sûr que le mail ne soit pas parti ? Dans ce cas le soucis viendrait plutôt du récepteur (passé dans le spamm etc). Tu es hébergé où ? Bref faut plus d’info, t’as pas de message d’erreur là je vois mal comment on peut débuger. :slight_smile:

Je suis hébergé sur mon propre serveur.

Je ne suis pas certains que le mail soit parti. C’est toutefois ce qu’indique le message… D’où mon étonnement.

Ton propre serveur ? Tu as donc accès aux logs email du serveur ? Vérifie déjà là-bas si le mail est bien parti.

Essaie aussi un truc simple, un script avec juste ça dedans (en remplaçant l’adresse par une que tu peux consulter :

[code]<?php

mail(‘tonadresse@tondomaine.com’, ‘Sujet du message’, ‘Contenu du message’);

?>[/code]

Si tu reçois rien avec juste ça c’est qu’il y a un soucis sur ton serveur, sinon c’est ton code, mais niveau code je vois pas ce qui pose soucis.

Si tu es chez free, il faut activer un truc sur la freebox pour pouvoir envoyer des mails depuis ton propre serveur sur ta becane.

Pour rappel, mail() renvoie vrai s’il ne rencontre pas de probleme avec le serveur de mail. Il ne vérifie pas l’acheminement du mail (ce qui est logique). Donc voit ton serveur de mail, ca doit être lui le responsable

Vérifie dans ton php.ini que le smtp est correct.

C’est ce que je suis en train de faire. J’y connais rien là dedans. Googlisation de la chose et je reviens.