Redirection après envoi d'un mail par formulaire

Fermé
Alex240 - 12 nov. 2013 à 10:27
 alex240 - 2 déc. 2013 à 10:23
Bonjour à tous,
plusieurs jours que je tente de trouver une solution à un problème qui m'est complétement obscure et étrange !!
En effet, j'ai déjà réalisé 2 ou 3 sites avec des formulaires de contact permettant d'envoyer un e-mail aux propriétaires des sites via form et fichier formmail.php qui va bien ! Mon soucis est que sur tous les sites A L'EXCEPTION DU DERNIER (en cours de réalisation), la redirection (lorsque le formulaire est correctement rempli et les données envoyées par e-mail) fonctionne parfaitement ! J'ai copié/collé les fichiers formmail.php (ou autre nom d'ailleurs...) d'un site à l'autre en modifiant les noms de champs, adresse email destinataire et autres... pourtant, pour le dernier site, la redirection ne fonctionne pas, on atterrie sur la page "formmail.php" sans que plus rien ne se passe (l'e-mail est quant à lui parfaitement envoyé !!!!).
Où peut donc bien se trouver le problème ? Une ligne à ajouter dans le htaccess peut-être ? Une différence d'autorisation chez l'hébergeur de ce site (1and1) par rapport à l'hébergeur des autres sites (ovh) ? Merci de m'aider !
A voir également:

5 réponses

tryan44 Messages postés 1288 Date d'inscription mardi 24 janvier 2012 Statut Membre Dernière intervention 26 octobre 2014 220
13 nov. 2013 à 11:14
Salut,

Simple suggestion :

Problème de header, du texte, html ou code hexadécimal invisible est envoyé avant la redirection ?
0
Bonjour,
merci pour ce début de réponse. Voici un le code du fichier php traitant l'envoi du mail. Si vous pouviez avoir la gentillesse d'y jeter un petit coup d'oeil pour voir quelque chose que je n'aurais vu....

$destinataire = "";

$pageName = "Contact";
$entete = "Prise de contact par formulaire - ";
$email_cc = "";
$email_bcc = "";
$cssform = "/styles/screenstyle.css";
$pageconfirme = "confirmation.html";
/*
si $pageconfirme n'est pas dédiée aux messages on peut y traiter
la variable $_GET['mailOK'] comme ceci :
if(isset($_GET['mailOK']))
echo "Your message have been sent";
*/
/*
fin des modifications
*/

$erreur = false;
$message = false;
$focus = "0";

# l'utilisateur a validé le formulaire
if (!empty($_POST)) {

# vérification des champs requis
if (empty($_POST['nom-prenom'])) {
$erreur = "Merci d'indiquer vos nom et prénom";
$focus = "1";
}
if (empty($_POST['telephone'])) {
$erreur = "Merci de renseigner un numero de telephone";
$focus = "2";
}
if (empty($_POST['adresse'])) {
$erreur = "Merci de renseigner votre adresse";
$focus = "3";
}
if (empty($_POST['profession'])) {
$erreur = "Merci de renseigner votre profession ou statut";
$focus = "4";
}
# email vide
if (empty($_POST['email'])) {
$erreur = "Merci de renseigner votre e-mail";
$focus = "5";
}
# vérification de l'email non vide
elseif (!empty($_POST['email'])) {
if(!preg_match(''^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4})$'',$_POST['email'])) {
$erreur = "Adresse e-mail non valide";
$_POST['email'] = "";
$focus = "6";
}
}
}

# pas d'erreur donc on continue
if(!$erreur) {

# traitement du tableau $_POST qui contient les paires name => value
$message_final = "";
foreach($_POST as $key => $value) {
# la boucle passe les champs vides ou non désirés
# pour passer d'autres champs les séparer par |
if (!strlen($value) || preg_match("/MAX_FILE_SIZE|Objet/i", $key)) continue;
$message_final .= "$key : ".strip_tags($value)."\n";
}
# formatage du message de confirmation affiché (option)
# conversion des sauts de ligne et des caractères spéciaux
$message = nl2br(htmlentities($message_final));
# si $objets est un tableau : Objet = select donc index = $_POST['profession']
if(is_array($objets))
$objet = "$entete ".$objets[$_POST['profession']];
# sinon r_Pseudo = input donc en français dans le texte !
else
$objet = "$entete ".$_POST['profession'];
# si l'email n'est pas renseigné on le remplace par celui
# du destinataire, en ajoutant une alerte au message
$final_mail = $_POST['email'];
if(empty($_POST['email'])) {
$final_mail = $destinataire;
$message_final .= "\nATTENTION : adresse email non connue.\n";
}
# en-têtes
$headers = "From: ".$final_mail;
if(strlen($email_cc))
$headers .= "\nCC: ".$email_cc;
if(strlen($email_bcc))
$headers .= "\nBCC: ".$email_bcc;
# hôte expéditeur
$message_final .= "Hôte : ".gethostbyaddr($_SERVER['REMOTE_ADDR']);
# si pièce jointe on ajoute l'en-tête spécifique avec séparateurs
if(strlen($piecejointe)) {
$boundary = "/-------".md5(uniqid(rand()))."-------/"; // séparateur
$headers .= "\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\"\n";
$message_final =
"This is a multi-part message in MIME format.\n--$boundary\n".
"Content-Type: text/plain; charset=ISO-8859-1\n".
"Content-Transfer-Encoding: 7bit\n\n".
"$message_final\n\n--$boundary\n".
"Content-Type: $mimetype; name=\"$name\"\n".
"Content-Transfer-Encoding: base64\n".
"Content-Disposition: attachment; filename=\"$name\"\n\n".
"$piecejointe\n--".
$boundary."--\n";
}

# envoi du mail
if (@mail($destinataire, stripslashes($objet), stripslashes($message_final), $headers)) {
@unlink($destination); // suppression de la pièce jointe
# si la page de redirection est renseignée
if(!empty($pageconfirme)) {
@header("Location: ".$pageconfirme."?mailOK=1");
exit;
}
} else {
$pageName = "Failed !";
$erreur = "Failed. Please try again.";
}

} else {

$pageName = "Error";

}
?>
0
Bonjour,
Personne pour répondre à mon problème et m'aider à trouver une solution !????!
0
Xavierdu34 Messages postés 216 Date d'inscription lundi 2 décembre 2013 Statut Membre Dernière intervention 10 octobre 2016 21
2 déc. 2013 à 07:59
Si ton site est construit par des includes et est en utf-8, il te faut encoder le fichier en utf8 sans bom.

Pour que le header soit envoyé, il faut que le header soit envoyé avant tout affichage sur la page (en plus clair, tu ne dois avoir aucune sortie html avant l'envoi des headers).

Un simple espace avant <?php fait foirer les headers.

Tiens nous au courant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,
En effet Xavier, vous avez vu tout juste ; j'ai trouvé mon erreur jeudi dernier (après plusieurs énervements !!!) et allais vous en faire part prochainement, pour que cela n'arrive pas à d'autre...
C'était bien un simple -espace- au début de la première ligne de code, devant la balise <?php> qui posait problème !
Merci en tout cas de votre réponse,
A+
Alex
0