Bonsoir,
Je souhaite faire un formulaire de contact sur un de mes sites. J'utilise actuellement le code ci dessous pour un autre de mes sites. Il est tout à fait fonctionnel.
<?php
/*
********************************************************************************************
CONFIGURATION
********************************************************************************************
*/
// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
$destinataire = 'monadresse@gmail.com';
// copie ? (envoie une copie au visiteur)
$copie = 'oui'; // 'oui' ou 'non'
// Messages de confirmation du mail
$message_envoye = "Votre message nous est bien parvenu ! Vous allez être redirigé vers la page d'accueil.";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP. Vous allez être redirigé vers la page précédente.";
// Messages d'erreur du formulaire
$message_erreur_formulaire = "Vous devez d'abord envoyer le formulaire. Vous allez être redirigé vers la page précédente.";
$message_formulaire_invalide = "L'email n'a pas pu être envoyé. Tous les champs doivent être remplis et l'adresse email doit être exacte. Vous allez être redirigé vers la page précédente. ";
/*
********************************************************************************************
FIN DE LA CONFIGURATION
********************************************************************************************
*/
// on teste si le formulaire a été soumis
if (!isset($_POST['envoi']))
{
// formulaire non envoyé
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{
/*
* cette fonction sert à nettoyer et enregistrer un texte
*/
function Rec($text)
{
$text = htmlspecialchars(trim($text), ENT_QUOTES);
if (1 === get_magic_quotes_gpc())
{
$text = stripslashes($text);
}
$text = nl2br($text);
return $text;
};
/*
* Cette fonction sert à vérifier la syntaxe d'un email
*/
function IsEmail($email)
{
$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);
return (($value === 0) || ($value === false)) ? false : true;
}
// formulaire envoyé, on récupère tous les champs.
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$objet = (isset($_POST['objet'])) ? Rec($_POST['objet']) : '';
$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
{
// les 4 variables sont remplies, on génère puis envoie le mail
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" .
'Reply-To:'.$email. "\r\n" .
'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" .
'Content-Disposition: inline'. "\r\n" .
'Content-Transfer-Encoding: 7bit'." \r\n" .
'X-Mailer:PHP/'.phpversion();
// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};
// Remplacement de certains caractères spéciaux
$message = str_replace("'","'",$message);
$message = str_replace("’","'",$message);
$message = str_replace(""",'"',$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = str_replace("<","<",$message);
$message = str_replace(">",">",$message);
$message = str_replace("&","&",$message);
// Envoi du mail
if (mail($cible, $objet, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
echo "<meta http-equiv=Refresh content=4;url=http://www.adressesite.com>";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p>'.$message_formulaire_invalide.'</p>'."\n";
};
}; // fin du if (!isset($_POST['envoi']))
?>
<script type="text/javascript">
setTimeout(function() { window.history.go(-1); }, 5000);
</script>
Seulement, sur mon nouveau site, le formulaire ne contient pas de champs objet. Ne maitrisant pas le php, quelqu'un pourrait m'adapter le code afin que l'objet soit de la forme "Message de" .$nom.
Je vous en serais très reconnaissant.
Merci d'avance,
Adrien.
Je n'ai pas réellement compris ta question, pourrais-tu reformuler un peu mieu ?
Normalement si j'ai compris ce que tu voulais :
// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entréif (($nom != ) && ($email != ) && ($objet != ) && ($message != ))
{
// les 4 variables sont remplies, on génère puis envoie le mail
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= Message de :'.$nom.' ' . "\r\n" .
Le code que j'ai posté marche quand il y a 4 champs à remplir:
- Nom
- Objet
- Email
- Message
Seulement, je veux l'utiliser pour un formulaire de contact où il n'y a que 3 champs:
- Nom
- Email
- Message
Je veux que la variable Objet soit toujours de la forme "Message de $Nom", et non récupérée depuis un champ du formulaire de contact.
J'espère avoir été un peu plus clair
Tu ferras gaffe à la ligne 92 de ton script, tu as un " " "
Sinon essaye de remplacer // Envoi du mail
if (mail($cible, $objet, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
echo "<meta http-equiv=Refresh content=4;url=http://www.adressesite.com>";
}
Par
// Envoi du mail if (mail($cible, $nom, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
echo "<meta http-equiv=Refresh content=4;url=http://www.adressesite.com>";
}
Ca ne marche pas, ça indique le message $message_formulaire_invalide.
Il faut aussi remplacer
if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
{
// les 4 variables sont remplies, on génère puis envoie le mail
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" .
'Reply-To:'.$email. "\r\n" .
'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" .
'Content-Disposition: inline'. "\r\n" .
'Content-Transfer-Encoding: 7bit'." \r\n" .
'X-Mailer:PHP/'.phpversion();
// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};
Par
if (($nom != '') && ($email != '') && ($message != ''))
{
// les 4 variables sont remplies, on génère puis envoie le mail
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" .
'Reply-To:'.$email. "\r\n" .
'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" .
'Content-Disposition: inline'. "\r\n" .
'Content-Transfer-Encoding: 7bit'." \r\n" .
'X-Mailer:PHP/'.phpversion();
// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};
Dans le cas où tu voudrais que la personne ne remplisse pas de champ objet
Parfait ça marche ! Merci infiniment
Pour l'instant l'objet du mail est identique à la variable $nom. Comment faire pour que l'objet soit de la forme "Message de $nom" ?