Mail chez online

Tim
Eléphanteau du PHP | 25 Messages

26 oct. 2005, 10:28

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]

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 oct. 2005, 10:56

Tu as oublié de déclarer la variable $To

Tim
Eléphanteau du PHP | 25 Messages

26 oct. 2005, 11:02

Je l'avais mis, ça ne change rien.
Pardon pour les balises, je n'ai pas l'habitude.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 oct. 2005, 11:20

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...
Modifié en dernier par charabia le 26 oct. 2005, 11:43, modifié 1 fois.

Tim
Eléphanteau du PHP | 25 Messages

26 oct. 2005, 11:38

Non, ça ne fonctionne pas

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 oct. 2005, 11:42

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>";
}

?>

Tim
Eléphanteau du PHP | 25 Messages

26 oct. 2005, 11:53

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.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 oct. 2005, 11:55

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.

Tim
Eléphanteau du PHP | 25 Messages

26 oct. 2005, 12:18

Ca marche (enfin, il me met "mail envoyé") et j'attend l'arrivée effective du mail.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 oct. 2005, 14:49

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:
Modifié en dernier par charabia le 26 oct. 2005, 15:02, modifié 1 fois.

Tim
Eléphanteau du PHP | 25 Messages

26 oct. 2005, 14:51

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é.
Le risque zéro n'existe pas...

Tim
Eléphanteau du PHP | 25 Messages

26 oct. 2005, 14:59

j'ai essayé ton script :
Parse error: parse error, unexpected '{', expecting '(' in formulaire_sc.php on line 52
Je cherche
Le risque zéro n'existe pas...

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 oct. 2005, 15:00

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.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

26 oct. 2005, 15:01

Autant pour moi, tu as un } en trop :
elseif
		{ 
            echo "Données non envoyées"; 
        } 
       --> à enlever }

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 oct. 2005, 15:06

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)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute