Page 1 sur 3

Mail chez online

Posté : 26 oct. 2005, 10:28
par Tim
Bonjour. Je débute en PHP et en PHP France aussi. J'aimerais mettre un formulaire sur un site. Lorsque l'utilisateur fait "envoyer", les données vont dans la base de données (ça, ça marche), et doivent également être envoyées par mail. Comme je suis chez Online, mon script ne fonctionne pas. Quand à leur support, je n'y comprend rien. Voilà mon code si quelqu'un veut bien m'aider. Merci.
Erreur qu'il me met : Warning: Duplicate headers found in formulaire_sc.php on line 51
__________________________________________________________
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
#text {
	border: thin solid #000000;
	text-align: center;
}
-->
</style>
</head>

<body>
<?php 
if(isset($_POST['nom'])){
$civilite = $_POST['civilite'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$adresse = $_POST['adresse'];
$cp = $_POST['cp'];
$ville = $_POST['ville'];
$rs = $_POST['rs'];
$pays = $_POST['pays'];
$telephone = $_POST['telephone'];
$fax = $_POST['fax'];
$email = $_POST['email'];
$catalogues=array();
foreach($_POST as $key=>$val){
	if(ereg('cb_' , $key)){
		$catalogue[] = $val;
	}
}
$cata=implode($catalogue,', ');
$link = mysql_connect("localhost","root", "") or die ("Erreur : " .mysql_error());
mysql_select_db("db");
$requete="INSERT INTO clients VALUES ('','$civilite','$nom','$prenom','$adresse','$cp','$ville','$rs','$pays','$telephone','$fax','$email','$cata')";
	if (mysql_query ($requete,$link)){
		echo "Ok";
		$template = file_get_contents('lecture.html');
		$recherche = array('${CIVILITE}','${NOM}','${PRENOM}','${ADRESSE}','${CP}','${VILLE}','${RS}','${PAYS}','${TELEPHONE}','${FAX}','${EMAIL}','${CATALOGUE}');
		$remplace = array($civilite,$nom,$prenom,$adresse,$cp,$ville,$rs,$pays,$telephone,$fax,"<a href=\"mailto: $email\">$email</a>",$cata);
		$message = str_replace($recherche,$remplace,$template);
		$sujet = "Demande de catalogue";
		$webmaster = "[email protected]";
		$headers  = "Content-Type:text/html;charset=iso-8859-1\n";
		$headers .= "Content-Transfer-Encoding: 8bit\n";
		$headers .= "From:$email\n";
		if(email($To, $sujet, $message, $headers)){
			echo "Données envoyées";
		}else{
			echo "Données non envoyées";
		}
		}else{
		echo "Erreur".mysql_error();
		}
	}
?>
</body>
</html>
Modération (Zeus) : utilise les balises
 et [code] quand tu met du code dans un post ;)[/color]

Posté : 26 oct. 2005, 10:56
par charabia
Tu as oublié de déclarer la variable $To

re

Posté : 26 oct. 2005, 11:02
par Tim
Je l'avais mis, ça ne change rien.
Pardon pour les balises, je n'ai pas l'habitude.

Posté : 26 oct. 2005, 11:20
par charabia
Essaies dans ce cas d'enlever
$headers .= "From:$email\n";
remplaces le par un
$From="webmaster";
et de mettre pour email :
email($From,$To,$sujet,$message,$headers)
:arrow: Juste des essais, parce que là je ne vois pas trop...

Posté : 26 oct. 2005, 11:38
par Tim
Non, ça ne fonctionne pas

Posté : 26 oct. 2005, 11:42
par charabia
Tiens, ça c'est un code qui vient de chez online pour test. Essaies le, si ça ne marche toujours pas...bé le problème doit venir d'eux.
<?php

// Format : bool online_sendemail(string To, string Sujet, string Message[, int IsTxt]);
// IsTxt : 0 pour du html, 1 pour du texte (defaut)

// Exemple d'utilisation de 'email()' pour envoyer des mails en .html (ou en texte)

// Remplacer cette ligne par le domaine concernée.
// Il sera utilisé pour renvoyer les erreurs au postmaster de ce domaine
$Domain = preg_replace("/^[^\.]+\./", "", $_SERVER["SERVER_NAME"]);

function online_sendemail($To, $Subject, $Content, $Txt=1)
{
  global $Domain;
  $From=$Replyto="webmaster";
  $Errors="postmaster@$Domain";
  $Headers  = "Return-path: $Errors\n";
  
  if ($Txt != 1)
  {
    $Headers .= "Content-Type:text/html;charset=iso-8859-1\n";
    $Headers .= "Content-Transfer-Encoding: 8bit\n";
  }

  return( email($From,$To,$Subject,$Content,$Replyto,$Headers));
}

// Exemple d'utilisation : On construit un fichier HTML minimal
// et on l'envoie au webmaster du domaine configuré plus haut.

$To = "webmaster@$Domain";
$Subject = "Test";
$Content = "<HTML><TITLE>TEST</TITLE><BODY><H1>H1</H1><B>Hello world !</B></BODY></HTML>";
$Txt = 0;

if (! online_sendemail($To, $Subject, $Content, $Txt))
{
  print "le mail n'a pas ete envoye<br>";
}
else 
{
  print "Le mail a ete envoye<br>";
}

?>

Posté : 26 oct. 2005, 11:53
par Tim
Je te remerci, je l'avais, mais je ne sais pas comment l'adapter à mon code. Il y a trop de questions sur ce que je dois remplacer et ce que je ne dois pas toucher.

Posté : 26 oct. 2005, 11:55
par charabia
Non ne l'adaptes pas à ton code pour la première étape. Lances ce code à partir d'une autre page déjà pour savoir si la fonction fonctionne sur ton compte. Si tu reçois bien le mail sans erreur, on avisera pour l'adaptation.

Posté : 26 oct. 2005, 12:18
par Tim
Ca marche (enfin, il me met "mail envoyé") et j'attend l'arrivée effective du mail.

Posté : 26 oct. 2005, 14:49
par charabia
C'est bizarre, essaies ça :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Document sans titre</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<style type="text/css"> 
<!-- 
#text { 
    border: thin solid #000000; 
    text-align: center; 
} 
--> 
</style> 
</head> 

<body> 
<?php 
if(isset($_POST['nom'])){ 
$civilite = $_POST['civilite']; 
$nom = $_POST['nom']; 
$prenom = $_POST['prenom']; 
$adresse = $_POST['adresse']; 
$cp = $_POST['cp']; 
$ville = $_POST['ville']; 
$rs = $_POST['rs']; 
$pays = $_POST['pays']; 
$telephone = $_POST['telephone']; 
$fax = $_POST['fax']; 
$email = $_POST['email']; 
$catalogues=array(); 
foreach($_POST as $key=>$val){ 
    if(ereg('cb_' , $key)){ 
        $catalogue[] = $val; 
    } 
} 
$cata=implode($catalogue,', '); 
$link = mysql_connect("localhost","root", "") or die ("Erreur : " .mysql_error()); 
mysql_select_db("db"); 
$requete="INSERT INTO clients VALUES ('','$civilite','$nom','$prenom','$adresse','$cp','$ville','$rs','$pays','$telephone','$fax','$email','$cata')"; 
    if (mysql_query ($requete,$link)){ 
        echo "Ok"; 
        $template = file_get_contents('lecture.html'); 
        $recherche = array('${CIVILITE}','${NOM}','${PRENOM}','${ADRESSE}','${CP}','${VILLE}','${RS}','${PAYS}','${TELEPHONE}','${FAX}','${EMAIL}','${CATALOGUE}'); 
        $remplace = array($civilite,$nom,$prenom,$adresse,$cp,$ville,$rs,$pays,$telephone,$fax,"<a href=\"mailto: $email\">$email</a>",$cata); 
        $message = str_replace($recherche,$remplace,$template); 
        $To = "[email protected]";
		$sujet = "Demande de catalogue"; 
        $webmaster = "[email protected]"; 
        $headers  = "Content-Type:text/html;charset=iso-8859-1\n"; 
        $headers .= "Content-Transfer-Encoding: 8bit\n";
        if(email($To, $sujet, $message, $webmaster, $headers)){ 
            echo "Données envoyées"; 
        }elseif{ 
            echo "Données non envoyées"; 
        } 
        else{ 
        echo "Erreur".mysql_error(); 
        } 
    } 
?> 
</body> 
</html>
Je suis un peu dans les choux sur ce coup...si ça ne marche pas j'espère que quelqu'un pourra t'aider :roll:

Posté : 26 oct. 2005, 14:51
par Tim
Bon, ça ne marche pas. En fait, je ne sais même pas où mettre mon domaine, puisque chez Online ils disent :
From : une adresse simple (sans le domaine). Le nom de domaine est automatiquement rajouté. Ce paramètre ne peut pas être vide.
To : adresse de destination. Ce champ ne peut pas être vide.
Sujet : sujet.
Message : corps du message. Limité à 100 Ko.
Reply-To : ce paramètre est facultatif. S'il est mis, il indique une adresse de retour. Cela doit être une adresse simple (sans le domaine). Le nom du domaine est automatiquement rajouté.

Posté : 26 oct. 2005, 14:59
par Tim
j'ai essayé ton script :
Parse error: parse error, unexpected '{', expecting '(' in formulaire_sc.php on line 52
Je cherche

Posté : 26 oct. 2005, 15:00
par charabia
Bon, ça ne marche pas. En fait, je ne sais même pas où mettre mon domaine, puisque chez Online ils disent :
From : une adresse simple (sans le domaine). Le nom de domaine est automatiquement rajouté. Ce paramètre ne peut pas être vide.
To : adresse de destination. Ce champ ne peut pas être vide.
Sujet : sujet.
Message : corps du message. Limité à 100 Ko.
Reply-To : ce paramètre est facultatif. S'il est mis, il indique une adresse de retour. Cela doit être une adresse simple (sans le domaine). Le nom du domaine est automatiquement rajouté.
Comme eux, tu ne mets pas ton domaine, donc si ton mail est webmaster@tondomaine, tu n'écriras que
$From=$Replyto="webmaster";
comme ils l'ont fait. le $ReplyTo doit correspondre à ton $webmaster.

Posté : 26 oct. 2005, 15:01
par charabia
Autant pour moi, tu as un } en trop :
elseif
		{ 
            echo "Données non envoyées"; 
        } 
       --> à enlever }

Posté : 26 oct. 2005, 15:06
par Truc
Salut, je me plante peut etre mais je ne connais pas la focntion email()
ça ne serai pas plustot:
mail($To, $sujet, $message, $webmaster, $headers)