Bonjour,

Je développe trois sites en HTML 5 pour un même groupe, qui sont hébergés tous les trois chez Amen et contiennent tous un formulaire de contact sur le même modèle. Sur deux des trois sites l'envoi de mail fonctionne (j'ai pour l'instant un traitement PHP très basique que je veux améliorer), mais sur le dernier, après avoir cliqué sur "Envoyer" on se retrouve face à une page blanche et aucun mail n'a été envoyé. Pourtant c'est quasiment un copié/collé des deux autres.

Voici mon formulaire :

<form action="traitement_formulaire.php" method="post">
	
					<div>
                        <p><label for="NOM">Nom <span style="color:red;">*</span> : </label></p>
                        <input type="text" name="NOM" id="NOM" required/>
					</div>
					<div>
                        <p><label for="E-MAIL">Adresse mail <span style="color:red;">*</span> : </label></p>
                            <input type="email" name="E-MAIL" id="E-MAIL"  required/>
					</div>
					<div>
                        <p><label for="ADRESSE">Adresse : </label></p>
                            <input type="text" name="ADRESSE" id="ADRESSE"/>
                    </div>
					<div>
                        <p><label for="ENTREPRISE">Entreprise <span style="color:red;">*</span> : </label></p>
                            <input type="text" name="ENTREPRISE" id="ENTREPRISE" required/>
                    </div>
					<div>
                        <p><label for="TELEPHONE">Numéro de téléphone <span style="color:red;">*</span> : </label></p>
                            <input type="text" name="TELEPHONE" id="TELEPHONE" required/>
					</div>
					
                    <div id="message_form">
						<div>	
							<p><label for="OBJET">Objet<span style="color:red;">*</span> : </label></p>
                            <input type="text" name="OBJET" id="OBJET" required/>
						</div>
						<div>
							<p><label for="MESSAGE">Votre message <span style="color:red;">*</span> : </label> </p>
                            <textarea name="MESSAGE" id="MESSAGE" required></textarea>
						</div>		
						<input type="submit" value="Envoyer" id="bouton_envoi"/>
					</div>
					</form>


Et le traitement_formulaire.php :
<?php 
$TO = "xxx@xxx.fr"; 

$h = "Depuis le site de xxx : " ; 

$message = ""; 

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

mail($TO, $subject, $message, $h); 

Header("Location: contactvalid.html#contenuprincipal"); 

?>


Voyez-vous quelque chose qui expliquerait le problème ?
J'ai eu beau faire des tests en reprenant les codes des sites qui fonctionne, rien ne change.
Autrement, est-il possible que la fonction mail() soit bloquée sur un nom de domaine et pas deux autres du même hébergeur ? C'est un peu problématique ... Smiley sweatdrop

Merci d'avance !
La page blanche sur un serveur de prod signifie probablement que tu as une erreur PHP qui s'est déclenchée. Il faut que tu regardes dans tes logs d'erreur ou que tu actives affiches l'affichage des erreurs pour voir d'où provient le problème.

Note aussi que $HTTP_POST_VARS est obsolète depuis PHP 4.1 et qu'il faut utiliser $_POST à la place.
Bonjour, merci pour vos réponses Smiley smile

FraiseTagada, j'ai affiché la console de Firefox et celle de Firebug en même temps, je ne trouve rien >< Oui en effet j'ai lu ailleurs que c'était obsolète et j'ai essayé avec $_POST entre temps, sans succès.

Felipe, désolée je ne sais pas ce que tu entends par appeler directement mail() depuis une page de test, tu veux dire que par exemple j'essaie d'ouvrir directement un fichier php qui l'appelle, sans avoir cliqué sur un bouton submit ? je ne vois pas très bien ^^; En tout cas si j'ouvre directement mon traitement_formulaire.php j'ai le même résultat, page blanche et pas de mail envoyé.
Nop pour l'IP c'est bon, il n'est pas sur la liste !
Modifié par lumya (08 Jul 2014 - 09:27)
lumya a écrit :

FraiseTagada, j'ai affiché la console de Firefox et celle de Firebug en même temps, je ne trouve rien &gt;&lt; Oui en effet j'ai lu ailleurs que c'était obsolète et j'ai essayé avec $_POST entre temps, sans succès.


Wow... les erreurs PHP ne s'affichent pas dans la console du navigateur.
Désolée je fais très très peu de PHP d'habitude et je ne sais pas vraiment comment afficher les erreurs... x) et Firebug ?
Merci pour ton amabilité et désolée d'avoir une fois osé poser une question ici et non sur Google, alors que ce n'est pas faute de faire déjà de multiples recherches avant de venir ouvrir un sujet ici. Il arrive donc que parfois, on oublie et on demande directement à la personne "en face" de nous puisqu'elle semble s'y connaître.
Je pense qu'il y a des manières un peu plus agréables de répondre plutôt que de d'abord poster un message juste pour me dire que je suis dans l'erreur sans autre précision, puis me balancer un tel lien. C'est dingue de se retrouver à culpabiliser de demander de l'aide sur un forum dédié...

Entre temps je me suis attelée à l'amélioration de mon traitement de formulaire, ce qui m'a amenée à transformer ma page contact.html en contact.php car j'avais besoin d'y intégrer un petit bout de code de PHP et de gérer une variable de session.
J'ai reproduit ceci sur les trois sites et encore une fois, ça fonctionne très bien sur les deux premiers. Sur celui qui posait déjà problème à la base, sur ma page contact le code PHP apparaît tel quel ! Et évidemment l'envoi du formulaire ne fonctionne toujours pas, sauf que cette fois au lieu d'une page blanche c'est mon code de traitement de formulaire qui s'affiche.

Sur ma page contact j'ai fait un session_start() tout au début et avant le formulaire j'ai ajouté ça :

<!-- Invitation à contacter, confirmation d'envoi ou message d'erreur en fonction du résultat du traitement du formulaire -->
					<?php
						if(isset($_SESSION['resultat']) AND !empty($_SESSION['resultat']))
						{	
							echo'<p style="color:red;text-indent:0;">'.$_SESSION['resultat'].'</p>';
						}
						else{
							echo '<p> Vous pouvez nous contacter via le formulaire ci-dessous. Les champs avec un <span style="color:red;">*</span> sont obligatoires.
					</p>';
						}
					?>


Et maintenant mon traitement ressemble à ça :

<?php 
		/********************
		*					*
		*  CONFIGURATION    *
		*					*
		*********************/
$TO = "xxx@xxx.fr"; 

$h = "Depuis le site de xxx : " ; 

//va permettre de récupérer la variable sur la page contact
session_start();
$_SESSION['resultat']="";

$message = ""; 

$msg_erreur ="";



// Cette fonction sert à vérifier la syntaxe d'un email
    function validerEmail($email)
    {
    $value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(? [decu]? [decu]?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(? [decu]?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);
    return (($value === 0) || ($value === false)) ? false : true;
    }

//Cette fonction sert à valider le champ numéro de téléphone

	function validerNumero($tel) {
		//Retourne true s'il est valide, sinon false.
		return preg_match('`^0[1-8]([-. ]?[0-9]{2}){4}$`', $tel) ? true : false;
	}	
	
	
		/********************
		*					*
		*    TRAITEMENT     *
		*					*
		*********************/
		
while (list($key, $val) = each($_POST)) { 

	//vérification nom
	if ($key == "NOM")
	{
		if ($val == "")
		{
			$msg_erreur .= "Merci de renseigner un nom.<br/>";
		}
		else
		{
			$message .= "$key : $val\n\n";
		}
	}
	//vérification mail
	if ($key == "E-MAIL")
	{
		if (validerEmail($val)!= true)
		{
			$msg_erreur .= "Adresse mail manquante ou non valide.<br/>"; 	
		}
		else
		{
			$message .= "$key : $val\n\n";
		}
	}

		//adresse (pas obligatoire)
	if ($key == "ADRESSE" && $val !="")
	{
			$message .= "$key : $val\n\n";
	}
	
		//vérification entreprise
	if ($key == "ENTREPRISE")
	{
		if ($val == "")
		{
			$msg_erreur .= 'Merci de renseigner le nom de votre entreprise.<br/>'; 	
		}
		else
		{
			$message .= "$key : $val\n\n";
		}
	}

	//vérification téléphone
	if ($key == "TELEPHONE")
	{
		if (!(validerNumero($val)))
		{
			$msg_erreur .= htmlentities("Numéro de téléphone manquant ou non valide.") ."<br/>"; 	
		}
		else
		{
			$message .= "$key : $val\n\n";
		}
	}
	
		//vérification objet
	if ($key == "OBJET")
	{
		if ($val == "")
		{
			$msg_erreur .= "Merci d'indiquer l'objet de votre message.<br/>"; 	
		}
		else
		{
			$message .= "$key : $val\n\n";
		}
	}
	
		//vérification message
	if ($key == "MESSAGE")
	{
		if ($val == "")
		{
			$msg_erreur .= 'Merci d\'indiquer votre demande dans l\'espace "message".'; 	
		}
		else
		{
			$message .= "$key : $val\n";
		}
	}
} 

		/********************
		*					*
		*   SI VALIDE	    *
		*					*
		*********************/
//si rien n'est listé dans la variable d'erreurs
if ($msg_erreur=="")

{		
	//envoi	
	mail($TO, $subject, $message, $h); 

	//variable de résultat
	$_SESSION['resultat']=htmlentities("Votre message a bien été envoyé.");

	//redirection
	Header("Location: contact.php#contenuprincipal"); 
}

		/********************
		*			 *
		*   SI INVALIDE	    *
		*				*
		*********************/

//s'il y a des erreurs
else
{
	//variable de résultat pour que l'utilisateur voit ce qu'il a oublié/mal rempli
	$_SESSION['resultat']=$msg_erreur;
	
	//redirection
	Header("Location: contact.php#contenuprincipal"); 
}

?>


Et vraiment, je n'ai aucun souci sur les deux autres sites alors que ce code est un copié/collé de celui qu'ils ont Smiley sweatdrop
Hello,

Une question bête: Le port 25 est-il bien ouvert sur ton serveur? La fonction mail() l'utilise pour ses envois Smiley cligne

EDIT: "même serveur" Donc j'imagine que le port en question est ouvert. J'ai lu de travers, désolé ...

Bye,
Yokii
Modifié par Yokii (08 Jul 2014 - 17:45)
Ce n'est pas grave merci quand même d'avoir cherché une hypothèse Smiley cligne C'est surprenant que le php ne semble carrément pas être interprété sur ce site en particulier ! Malheureusement je n'ai pas le droit de vous indiquer un lien tant que la mise en ligne officielle n'a pas eu lieu...
Après, tu peux toujours tenter d'afficher les erreurs php de la manière suivante:


error_reporting(E_ALL);
ini_set("display_errors", 1);
 


Le code étant à placer avant toute instruction PHP. Tu verras surement un warning ou un fatal error s'afficher.
Rien ne s'affiche Smiley sweatdrop

J'ai tenté le script proposé ici, et je le met bien en tout premier dans des balises php, résultat il s'affiche tel quel en haut de ma page Smiley confus

Si j'essaie la fonction mail directement dans ma page contact.php, de manière à ce que je sois censée recevoir un mail simplement en affichant cette page (que j'ai bien mise en ligne), il ne se passe rien... Aucun message reçu,ceci dit le code php ne s'affiche pas non plus tel quel sur la page.
C'est normal que tu ne puisse voir ton PHP, c'est un langage exécuté coté serveur.

Tu ne peux donc voir que ce que le PHP te retourne. C'est pour cela que tu ne vois rien: Ton serveur a rencontré une erreur en exécutant ton code, et ne te retourne rien, surement parce que les paramètres de ton serveur masque les erreurs et avertissements PHP (qui sont très moches).

Va faire un tour ici, pour de plus amples informations concernant ce langage.

Ce que je te conseil:
Utilise un outil comme wamp ou easyPHP, qui te permettrons d'émuler un serveur sur ton ordinateur et ainsi de pouvoir avoir la main sur l'affichage des erreurs.

Exécute ensuite ton script "en local" et regarde ce que ça donne. C'est très difficile de te fournir une réponse sans avoir un message.

Tu trouveras tout un tas de tutos pour installer wamp sur le net.

Bye,
Yokii
Merci pour tes conseils !

Avec UwAmp, je n'ai aucun souci Smiley biggrin Pas de php écrit tel quel et le traitement_formulaire.php s'exécute correctement, ainsi que le bout de code php de ma page contact qui récupère une variable de session. Je ne reçois juste aucun mail mais en local il me semble que c'est normal.

Je ne vois toujours pas de message d'erreurs mais il semble qu'il n'y en a pas ceci dit...

Sur le serveur de l'hébergeur j'ai essayé un phpinfo() mais je n'obtenais rien (pour la raison que tu m'expliquais Yokii je suppose). Ca fonctionne en local mais je ne suis pas sûre que dans ce cas ça ait un grand intérêt ? Car le but est à priori d'avoir certaines infos sur l'hébergeur...
Pour le phpinfo(), cela fonctionne, il doit te retourner un tableau avec les paramètres de ton php.ini, entre autre.

Pour tester ton mail en local, tu peux suivre cette procédure. Mais a priori, tu n'a pas de souci. Fait tout de même fonctionner ton code en local, sait-on jamais!