J'ai exactement le même soucis.
J'ai fait un formulaire flash/php (méthode POST) qui marche parfaitement seul, mais quand je l'intègre à mon site:
- Firefox refuse de taper certains caractères (chiffres, @, etc.)
- Internet Explorer n'arrive pas à envoyer le mail ("erreur php").
J'ai tout essayé, ça fait 4 jours complets que je tente les solutions trouvées sur les forums ou les tutos, et RIEN ne résouds mon soucis!!! Apparemment ça viendrait des balises html ou xml de la page qui accueille le formulaire (utf-8, etc.) mais je ne suis même pas sûre puisque même ces changements ne fonctionnent pas, donc je suis ouverte à toute tentative.
Pitié, aidez-moi!
Pour voir le soucis:
[ Lien ]rubrique "contact".
Voici la page qui accueille le formulaire (dans l'animation Flash) (je pense que le soucis vient de cette page puisque sans elle le formulaire fonctionne):
<code>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script src="http://obscurantisorder.free.fr/kompersonne/Scripts//AC_RunActiveContent.js" type="text/javascript"></script>
</head>
<body>
<table border="0" align="center" cellpadding="0" cellspacing="0" margintop="1px">
<tr>
<td valign="top"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#3,0,0,0"
width="850" height="800" align="center" margintop="20px">
<param name="SRC" value="http://obscurantisorder.free.fr/kompersonne/labo/site.swf" />
<param name="QUALITY" value="high"/>
<param name="SCALE" value="exactfit" />
<param name="wmode" value="transparent">
<embed src="http://obscurantisorder.free.fr/kompersonne/labo/site.swf" width="850" height="800" align="center" pluginspage="http://www.macromedia.com/shockwave/download/"
type="application/x-shockwave-flash" quality="high" wmode="transparent" scale="exactfit"> </embed>
</object></td>
</tr>
</table>
</tr>
</table>
</body>
</html>
</code>
Voici mon php:
<code>
<?php
function decoder($texte){
$texte = utf8_decode($texte); // converti en iso-8859-1
$texte = stripslashes($texte); // élimine les anti-slashs d'échappement
$texte = nl2br($texte); // converti les retours en <br />
$texte = trim($texte); // élimine les '\n', '\r', '\t' etc
return $texte;
}
$erreurPHP="";
/* Paragraphe à decommenter pour tester le script php seul, sans le fla
$_POST['sujet'] = 'formulaire Test';
$_POST['messageHtml'] = '<html><body>Salut<br /> mon cher<br /><br />Bye</body></html>';
$_POST['messageText'] = "Salut mon cher Bye";
$_POST['expediteur'] = "expediteur@fai.fr";
$_POST['mailReponse'] = "expediteur@fai.fr";
*/
if(isset($_POST['sujet']))$sujet = $_POST['sujet'];
else $erreurPHP .= "Variable 'sujet' non transmise\n";
if(isset($_POST['messageHtml']))$messageHtml = $_POST['messageHtml'];
else $erreurPHP .= "Variable 'message' non transmise\n";
if(isset($_POST['messageText']))$messageTexte = $_POST['messageText'];
else $erreurPHP .= "Variable 'message' non transmise\n";
if(isset($_POST['expediteur']))$expediteur = $_POST['expediteur'];
else $erreurPHP .= "Variable 'expediteur' non transmise\n";
if(isset($_POST['mailReponse']))$mailReponse = $_POST['mailReponse'];
else $erreurPHP .= "Variable 'mailReponse' non transmise\n";
if($erreurPHP != "") echo "erreurPHP=".urlencode(utf8_encode($erreurPHP));
else
{
$to = "anais@kom-personne.com";
$sujet = decoder($sujet);
$expediteur = decoder($expediteur);
$messagehtml = decoder($messageHtml);
$messageTexte = utf8_decode($messageTexte);
//-----------------------------------------------
//GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML
//-----------------------------------------------
$frontiere = '-----=' . md5(uniqid(rand()));
//-----------------------------------------------
//HEADERS DU MAIL
//-----------------------------------------------
$headers = 'From: '.$expediteur.' <'.$mailReponse.'>'."\n";
$headers .= 'Return-Path: <'.$mailReponse.'>'."\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"'."\n";
$headers .= 'Content-Transfer-Encoding: 8bit';
//-----------------------------------------------
//MESSAGE TEXTE
//-----------------------------------------------
$message = "This is a multi-part message in MIME format\n\n";
$message = "--$frontiere\n";
$message .= "Content-Type: text/plain; charset=UTF-8\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";
$message .= $messageTexte."\n\n";
//-----------------------------------------------
//MESSAGE HTML
//-----------------------------------------------
$message .= "--$frontiere\n";
$message .= "Content-Type: text/html; charset=UTF-8\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";
$message .= $messageHtml."\n\n";
$message .= "--$frontiere--\n";
$mail_OK = mail($to, $sujet, $message, $headers) ;
if (!$mail_OK)
{
$erreurPHP .= "Problème lors de l'envoi du mail";
}
echo "erreurPHP=".urlencode(utf8_encode($erreurPHP));
}
?>
</code>
Et enfin, mon Action Script:
<code>
import mx.controls.TextInput;
import mx.controls.TextArea;
import mx.controls.CheckBox;
import mx.controls.Button;
// On référence les occurences de compos pour profiter du typage strict
var tiEmail:TextInput = this.email_ti;
var taCommentaire:TextArea = this.commentaire_ta;
var taSortie:TextArea = this.sortie_ta;
var cbLettre:CheckBox = this.lettre_cb;
var mcEnvoyer:Button = this.envoyer_mc;
// Initialisation des compos
taSortie["depthChild0"]._visible = false; // hack pour remplacer les 4 lignes ci-dessus
taSortie.setStyle("color", "0xffffff");
taSortie.setStyle("fontStyle", "italic");
taSortie.setStyle("textAlign", "center");
taSortie.label.selectable = false;
cbLettre.label = "Recevoir la lettre d'information";
// Ordres de tabulation
tiEmail.tabIndex = 3;
cbLettre.tabIndex = 4;
taCommentaire.tabIndex = 5;
mcEnvoyer.tabIndex = 6;
var email:String;
var recevoirLettre:Boolean;
var commentaire:String;
// Fonctions outils
function afficherEnSortie(pChaine:String):Void
{
taSortie.text = pChaine;
}
function reinitFormulaire():Void
{
tiNom.text = tiPrenom.text = tiEmail.text = taCommentaire.text = "";
cbLettre.selected = false;
}
function validerFormulaire ():String
{
email = tiEmail.text;
commentaire = taCommentaire.text;
recevoirLettre = cbLettre.selected;
var erreurs:String = "";
if (email == "") erreurs += "Merci de remplir le champ 'email'" + newline;
else
{
var atIndex:Number = email.indexOf("@");
var dotIndex:Number = email.indexOf(".", atIndex);
trace(atIndex + " " + dotIndex);
if (atIndex == -1 || dotIndex == -1 || dotIndex - atIndex <= 1)
erreurs += "L'email n'est pas valide" + newline;
}
return erreurs;
}
function formerMessageText ():String
{
var message:String = "Formulaire :";
message += "Origine : " + this._url + "\r\n";
message += "Adresse email : " + email +"\r\n";
if (recevoirLettre)
message += "Personne souhaitant recevoir la lettre d'information.\r\n";
if (commentaire != "")
message += "Commentaire :\r\n";
message += commentaire;
return message;
}
function formerMessageHtml ():String
{
var message:String = "<html><head><style type='text/css'> p{font: 12px Arial} </style></head><body>";
message += "<h4>Formulaire : </h4>";
message += "<p>Origine : " + this._url + "</p>";
message += "Adresse email : <a href='mailto:" + email + "'>" + email +"</a></p>";
if (recevoirLettre)
message += "<p>Personne souhaitant recevoir la lettre d'information.</p>";
if (commentaire != "")
message += "<p><u>Commentaire :</u><br />";
message += commentaire;
message += "</p></body></html>";
return message;
}
function envoyerMail ():Void
{
mcEnvoyer.enabled = false;
var envoyeur:LoadVars = new LoadVars();
var receveur:LoadVars = new LoadVars();
envoyeur.sujet = "Formulaire";
envoyeur.messageText = formerMessageText ();
envoyeur.messageHtml = formerMessageHtml ();
envoyeur.expediteur = email;
envoyeur.mailReponse = email;
receveur.onLoad = onMailEnvoye;
envoyeur.sendAndLoad("formulaireTEST3.php", receveur, "POST");
afficherEnSortie("Envoi en cours...");
}
function onMailEnvoye (pSuccess:Boolean):Void
{
mcEnvoyer.enabled = true;
if (!pSuccess)
{
afficherEnSortie("Problème avec le script PHP.");
}
else if (this.erreurPHP == "")
{
afficherEnSortie("L'envoi s'est terminé avec succès.");
reinitFormulaire();
}
else
{
afficherEnSortie("Erreurs PHP : \n" + this.erreurPHP);
}
}
</code>
Merci!!!