8791 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis débutant en Php et pour mon portfolio je suis en train de développer un petit formulaire simpliste mais qui devrait faire son boulot.

Le problème, c'est que tout fonctionne, sauf que l'email que je reçois contient à chaque fois <html><html></html> et rien d'autre.

De plus, je ne reçois même pas le nom de l’expéditeur (nom, prénom, email), ni l'objet... Je suis herbergé chez 1&1 sur un mutualisé. La fonction mail() est normalement activée de base.

Voici mon fichier php (je me suis trompé dans le nom "verif.php" je le modifierai) :


<?php
$adresse="pierre.lenoble@free.fr";
$from="From: $prenom $nom <$email>\r\n";
$from.="Reply-To: $prenom $nom <$email>\n";
$from.="X-priority:3\n";
$texte="<html>";
$texte.="$texte";
$texte.="</html>";
$from.="MIME-Version: 1.0\r\n";
$from.="Content-Type: text/html ; charset=iso-8859-1";
//-- Echapper les injections de code 
$objet=htmlentities($objet) ; 
$nom=htmlentities($nom);
$prenom=htmlentities($prenom);
$texte=htmlentities($texte);
//-- Messages après envoi, ou tentative...
if(mail($adresse, $objet, $texte, $from))
echo("<center><font color=green><br /><br /><br /><h4>Message envoyé avec succès !</h2></font><br /><a href=/>Cliquez ici pour revenir à l'accueil</a></center>");
else
echo("<center><font color=red><br /><br /><br /><h4>Un problème est survenu lors de l'envoi du mail, merci de réessayer.</h4></font><br />Vous pouvez toujours me contacter avec ce <a href=\"mailto:$adresse\">lien</a>");
?>


Je vous remercie d'avance pour votre aide, j'ai sans doute fait une grosse boulette mais je ne demande qu'à apprendre. Smiley biggrin

A+
Salut Smiley smile

Je ne sais pas trop, je ne suis pas spécialiste du PHP, mais il me semble que tu omets quelques détails.

Regardes ici : http://www.siteduzero.com/tutoriel-3-35146-e-mail-envoyer-un-e-mail-en-php.html

Je te donne aussi un code que j'ai fais ( dont je me rappelle plus exactement comment il fonctionne, mais il fonctionne Smiley cligne )

<?php

   if (isset($_POST["sexe"]) && !empty($_POST['sexe']) && isset($_POST["nom"]) && !empty($_POST['nom']) && isset($_POST["prenom"]) && !empty($_POST['prenom']) && isset($_POST["adresse"]) && !empty($_POST['adresse']) && isset($_POST["code_postal"]) && !empty($_POST['code_postal']) && isset($_POST["ville"]) && !empty($_POST['ville']) && isset($_POST["pays"]) && !empty($_POST['pays']) && isset($_POST["telephone"]) && !empty($_POST['telephone']) && isset($_POST["adresse_mail"]) && !empty($_POST['adresse_mail']) && isset($_POST["commentaire"]) && !empty($_POST['commentaire']))// Contrôle si les variables ne sont pas vides .
    {
	$sexe =(htmlspecialchars($_POST['sexe'])); // On contrôle avec htmlspecialchars que le client ne rentre pas du code html qui pourrai être malveillant .
	$nom = (htmlspecialchars($_POST['nom']));
	$prenom = (htmlspecialchars($_POST['prenom']));
	$adresse = (htmlspecialchars($_POST['adresse']));
	$code_postal = (htmlspecialchars($_POST['code_postal']));
	$ville = (htmlspecialchars ($_POST['ville']));
	$pays = (htmlspecialchars ($_POST['pays']));
	$telephone = (htmlspecialchars ($_POST['telephone']));
	$adresse_mail = (htmlspecialchars ($_POST['adresse_mail']));
	$commentaire = (htmlspecialchars ($_POST['commentaire']));
	
	$destinataire = 'xxxxx';
	// Pour les champs $expediteur / $copie / $destinataire, séparer par une virgule s'il y a plusieurs adresses
	$expediteur = 'xxxx';
	$copie = 'xxxx';
	$copie_cachee = 'xxxxx';
	$objet = 'Un nouveau message provenant du site internet !'; // Objet du message
	
	$headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
	$headers .= 'Reply-To: '.$expediteur."\n"; // Mail de reponse
	$headers .= 'From: "Site internet "<'.$expediteur.'>'."\n"; // Expediteur
	$headers .= 'Delivered-to: '.$destinataire."\n"; // Destinataire
	$headers .= 'Cc: '.$copie."\n"; // Copie Cc
	$headers .= 'Bcc: '.$copie_cachee."\n\n"; // Copie cachée Bcc  
	
	$sujet = "Nouveau message provenant du site internet";
 
	$message  = " Voici ci-dessous les coordonnées et la demande du client :\r\n " ;
	$message .= " $sexe \n ";
	$message .= " $nom \n ";
	$message .= " $prenom \n ";
	$message .= " $adresse \n ";
	$message .= " $code_postal \n " ;
	$message .= " $ville \n " ;
	$message .= " $pays \n " ;
	$message .= " $telephone \n " ;
	$message .= " $adresse_mail \n\n " ;
	$message .= " $commentaire " ;// Contenu du message repris des variables envoyées par le formulaire de la page contact . 
	
	$heure = date("H");

	$result = mail( $destinataire, $sujet, $message, $headers);

	if( $result == true AND ( $heure >= 7 AND $heure <= 18))
	{
	echo  "<p>Bonjour ".$sexe." ".$nom."<br/> Les données nous ont été transférées , nous prendrons contact avec vous au plus vite </p>"; //  Il fait jour , on dit bonjour .
	}
	elseif ( $result == true AND ( $heure > 18 OR $heure < 7 )) 
	{
	echo "<p>Bonsoir ".$sexe." ".$nom."<br/> Les données nous ont été transférées , nous prendrons contact avec vous au plus vite .</p>"; // Il fait nuit , on dit bonsoir .
	}
	else 
	{
    echo "<p> Le message n'a pas été envoyé , une erreur est survenue, veuillez svp essayer ultérieurement !</p>" ; 
	} 
	}
	else // Si toutes les variables ne sont pas définies ou pleines , message d'erreur.
	{
    echo "<p> Le message n'a pas été envoyé car vous n'avez probablement pas correctement saisis tout les champs !</p>" ; 
	} 
	?>

Modifié par marc.suisse (17 Nov 2011 - 11:56)
Merci pour ta réponse.

En fait, dans mon fichier html j'ai également le js pour vérifier les champs.

Mais effectivement sur le site du zéro c'est pas codé de la même façon. Je sais pas quelle méthode je dois adopter, je vais sans doute montrer mes fichiers à mon prof de prog web histoire qu'il me guide.

J'aimerais vraiment réglé ce problème et avoir un formulaire une bonne fois pour toutes. Smiley murf

Je vais me pencher sur la méthode du site du zero et je testerai. Merci encore.
Modifié par SedeL (17 Nov 2011 - 12:08)
Salut Smiley cligne

Dans mon cas également un contrôle est fais en javascript avant, ce code PHP est dans le cas où le javascript ne serait pas fonctionnel sur le PC du client.

Mais poses la question à ton prof et tiens nous au courant, cela m'intéresse Smiley cligne
Malheureusement je n'ai pas eu le temps de le voir aujourd'hui. Je lui ai déjà demandé par e-mail mais il m'a juste dit de faire un phpinfo pour voir déjà comment c'était configuré côté serveur 1&1. Apparemment tout est bon, ça doit se passer dans mon code...

Je te tiens au courant de toute façon. Smiley cligne
Je me permets un double post vu que ça date d'avant-hier.

Alors pour info, j'ai codé quelque chose de plus simple en ayant rempli moi-même le code par des textes de test et là : CA FONCTIONNE PARFAITEMENT ! Mais dès que je remplace par mes variables, je reçois du n'importe quoi :

Dans le champ De : $email@zimbra29-e5.priv.proxad.net
Dans le champ répondre à : $prenom $nom <$email@zimbra29-e5.priv.proxad.net>
Objet : Aucun
Message : vide

Je pense donc que c'est effectivement dans mon code que ça plante. Mais je suis débutant en PHP donc j'ai beau tester des bidouilles, sans grand succès.

Voici mon code PHP :


<?php
$message='$texte';
$title='$objet';
$to="#######@fai.fr"; 
$headers = 'From: $email' . "\r\n" 
. 'Reply-To: $prenom $nom <$email>' . "\r\n" 
. 'X-Mailer: PHP/' 
. 'Content-Type: text/html'
. 'charset=iso-8859-1'
. phpversion();


if(mail($to,$title,$message,$headers,""))
echo("<center><font color=green><br /><br /><br /><h4>Message envoyé avec succès !</h2></font><br /><a href=/>Cliquez ici pour revenir à l'accueil</a></center>");
else
echo("<center><font color=red><br /><br /><br /><h4>Un problème est survenu lors de l'envoi du mail, merci de réessayer.</h4></font><br />Vous pouvez toujours me contacter avec ce <a href=\"mailto:$adresse\">lien</a>");
?>


Et mon formulaire :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Contact // Pierre LENOBLE.fr</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="fr" />
<link href="css/contact.css" rel="stylesheet" type="text/css" />
<link href="css/page.css" rel="stylesheet" type="text/css" />

<!-- JavaScript Formulaire -->

<script type="text/javascript" language="JavaScript">

function verification() 
{	
<!-- verification nom -->
if(document.formulaire.nom.value == "") {
	alert("Veuillez indiquer votre nom, merci.");
	document.formulaire.nom.focus();
	return false;
	}
	else
<!-- verification email -->
if(document.formulaire.email.value == "") {
	alert("Pas d'e-mail ? Je vais faire comment pour répondre ?");
	document.formulaire.email.focus();
	return false; 
	}
	else 
if(document.formulaire.email.value.indexOf('@') == -1) {
	alert("Veuillez indiquer une adresse e-mail valide, merci.");
	document.formulaire.email.focus();
	return false;
	}
	else
if(document.formulaire.objet.value == "") {
	alert("Veuillez entrer un objet, merci.");
	document.formulaire.objet.focus();
	return false ; 
	}
	else
<!-- verification champ text -->
if(document.formulaire.texte.value == "") {
	alert("Veuillez entrer votre message, merci.");
	document.formulaire.texte.focus();
	return false;
	}		
return true ;
}

</script>


<!-- Fin JavaScript Formulaire -->

</head>
<body>
<?php
include("php/header.php");
?>

<!-- CONTENU (Formulaire de contact) -->
<div id="page">
  <h2><img src="images/titlecontact.PNG" alt="title contact" width="441" height="55" /></h2>
  <p>Pour me contacter, veuillez utiliser les moyens mis à votre disposition ci-dessous.</p>
  <div id="contacts">
    
<form name='formulaire' action='requete.php' method='post' onSubmit="return verification()">
<h3>Formulaire de contact</h3>
<table>
<tr><td>Nom<span class="obligatoire">*</span> : </td><td><input name='nom' type='text' size='30' ></td></tr>

<tr><td>Prénom : </td><td><input name='prenom' type='text' size='30' ></td></tr>

<tr><td>E-mail<span class="obligatoire">*</span> : </td><td><input name='email' type='text' size='30'></td></tr>

<br />
<tr><td>Objet<span class="obligatoire">*</span> : </td><td><input name='objet' type='text' size='60'></td></tr>

<tr><td>Votre message<span class="obligatoire">*</span> : </td><td><textarea name='texte' cols='50' rows='20'></textarea></td></tr>

<tr><td><input name='annuler' type='reset' value='Annuler'></td><td>
<input name='soumettre' type='submit' value='Envoyer'></td></tr>
</table>
</form>
<p class="infosform">(*) : Champs obligatoires. Merci de les remplir pour l'envoi du formulaire.</p>
</div>
</div>


<?php
include("php/footer.php");
?>

</body>
</html>


Merci d'avance et désolé si j'ai fait une grosse boulette ! Smiley confused