Formulaire de contact - rafraîchissement lors d'une erreur
Posté : 24 juil. 2007, 17:49
Bonjour à tous,
Après avoir cherché sur différents forums et sites contenant des tutoriaux je me tourne vers vous concernant un formulaire de contact en php.
Deuxièmement (oui oui je sais une seule question mais bon
), mon champ Message semble toujours commencer par plusieurs tabulations, c'est assez désagréable visuellement; pourtant rien n'es entré dedans avant que l'utilisateur tape du texte. Et de plus, alors que je teste pour vérifier qu'il ne soit pas vide avant d'envoyer le mail, aucune erreur n'est affichée si l'utilisateur ne rentre rien dedans et le mail est envoyé avec ce champ vide.
Dernièrement, concernant l'encodage. Si par exemple l'utilisateur entre des é, è, à, etc.. dans les champs texte, le contenu du mail est tout bizarre avec des &blabla;. Je ne trouve pas comment remédier à ce problème.
Merci d'avance.[/b]
Après avoir cherché sur différents forums et sites contenant des tutoriaux je me tourne vers vous concernant un formulaire de contact en php.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>formulaire de contact</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="style.css" rel="stylesheet" type="text/css" />
<link href="favicon.ico" rel="shortcut icon" />
<script type="text/javascript" language="Javascript" src="script.js"></script>
<script type="text/javascript" language="Javascript">
function afficheservice(a){
if(a=="ETSSRA"){
document.getElementById('divcommercial').style.display = 'block';
document.getElementById('divsav').style.display = 'block';
document.getElementById('divtechnique').style.display = 'block';
document.getElementById('divrh').style.display = 'block';
document.getElementById('divautres').style.display = 'block';
}
else if (a=="ORCA"){
document.getElementById('divcommercial').style.display = 'block';
document.getElementById('divsav').style.display = 'block';
document.getElementById('divtechnique').style.display = 'block';
document.getElementById('divrh').style.display = 'block';
document.getElementById('divautres').style.display = 'block';
}
else if (a=="GMFF"){
document.getElementById('divcommercial').style.display = 'block';
document.getElementById('divsav').style.display = 'none';
document.getElementById('divtechnique').style.display = 'none';
document.getElementById('divrh').style.display = 'block';
document.getElementById('divautres').style.display = 'block';
}
else if (a=="GMFA"){
document.getElementById('divcommercial').style.display = 'block';
document.getElementById('divsav').style.display = 'none';
document.getElementById('divtechnique').style.display = 'none';
document.getElementById('divrh').style.display = 'block';
document.getElementById('divautres').style.display = 'block';
}
}
</script>
</head>
<body>
<table width="748" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td height="309" valign="top">
<script type="text/javascript">RunFoo("header.swf", "748", "309", "000000", "blabla");</script>
</td>
</tr>
<tr>
<td height="380" valign="top">
<table width="748" height="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="210" bgcolor="#131313" valign="top">
<table width="210" height:"100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top" height="" class="menu">
<script type="text/javascript">RunFoo("menu.swf", "210", "233", "000000", "Menu");</script>
<div id="commentaires">
Commentaires contact
</div>
</td>
</tr>
<tr>
<td bgcolor="#5D5D5D"><img alt="" src="images/spacer.gif" width="1" height="1">
</td>
</tr>
</table>
</td>
<!-- barre verticale gauche -->
<td width="22">
</td>
<!-- zone texte centrale -->
<td width="493" valign="top" style="padding-top:25;">
<?php
function formulaire($societe="",$particule="",$nom="",$prenom="",$adresse="",$ville="",$codepostal="",$telephone="",$email="",$service="",$message="") {
?>
<form action="<?php echo $PHP_SELF ?>" method="post" onSubmit="return verification();" >
<table border="0" class="tour" cellspacing="0" cellpadding="10" align="center">
<tr class="unite">
<td>Société du Groupe* :
</td>
<td width="80%"><?php $s = 'selected="true"'; ?>
<input type="radio" name="societe" value="ETSSRA" <?php if ($societe=='ETSSRA') { echo $s; } ?> onclick="afficheservice(this.value);" />ETSSRA
<input type="radio" name="societe" value="ORCA" <?php if ($societe=='ORCA') { echo $s; } ?> onclick="afficheservice(this.value);" />ORCA
<input type="radio" name="societe" value="GMFF" <?php if ($societe=='GMFF') { echo $s; } ?> onclick="afficheservice(this.value);" />GMFF
<input type="radio" name="societe" value="GMFA" <?php if ($societe=='GMFA') { echo $s; } ?> onclick="afficheservice(this.value);" />GMFA
</td>
</tr>
<tr class="unite">
<td>
</td>
<td width="80%"><?php $s1 = 'selected="true"'; ?>
<input type="radio" name="particule" value="M" <?php if ($particule=='M') { echo $s1; } ?> />M
<input type="radio" name="particule" value="Mme" <?php if ($particule=='Mme') { echo $s1; } ?> />Mme
<input type="radio" name="particule" value="Mlle" <?php if ($particule=='Mlle') { echo $s1; } ?> />Mlle
</td>
</tr>
<tr class="unite">
<td >Nom* :
</td>
<td width="80%">
<center>
<input type="text" name="nom" size="30" value="<?php echo trim(htmlentities($nom)) ?>" />
</center>
</td>
</tr>
<tr class="unite">
<td >Prénom :
</td>
<td width="80%">
<center>
<input type="text" name="prenom" size="30" value="<?php echo trim(htmlentities($prenom)) ?>" />
</center>
</td>
</tr>
<tr class="unite">
<td>Adresse :
</td>
<td width="80%">
<center>
<input type="text" name="adresse" value="<?php echo trim(htmlentities($adresse)) ?>" size="30" />
</center>
</td>
</tr>
<tr class="unite">
<td >Ville :
</td>
<td width="80%">
<center>
<input type="text" name="ville" size="30" value="<?php echo trim(htmlentities($ville)) ?>" />
</center>
</td>
</tr>
<tr class="unite">
<td >Code postal :
</td>
<td width="80%">
<center>
<input type="text" name="codepostal" size="10" value="<?php echo trim(htmlentities($codepostal)) ?>" />
</center>
</td>
</tr>
<tr class="unite">
<td>E-mail :
</td>
<td width="80%">
<center>
<input type="text" name="email" value="<?php echo trim(htmlentities($email)) ?>" size="30" />
</center>
</td>
</tr>
<tr class="unite">
<td >Téléphone* :
</td>
<td width="80%">
<center>
<input type="text" name="telephone" size="30" value="<?php echo trim(htmlentities($telephone)) ?>" />
</center>
</td>
</tr>
<tr class="unite">
<td>Votre remarque concerne* :
</td>
<td width="80%"><?php $s2 = 'selected="true"'; ?>
<div id="divcommercial" style="display: none;" ><input type="radio" name="service" value="Commercial" <?php if ($service=='Commercial') { echo $s2; } ?> />Le service commercial<br /></div>
<div id="divsav" style="display: none;" ><input type="radio" name="service" value="SAV" <?php if ($service=='SAV') { echo $s2; } ?> />Le service après-vente<br /></div>
<div id="divtechnique" style="display: none;" ><input type="radio" name="service" value="Technique" <?php if ($service=='Technique') { echo $s2; } ?> />Le service technique<br /></div>
<div id="divrh" style="display: none;" ><input type="radio" name="service" value="RH" <?php if ($service=='RH') { echo $s2; } ?> />Le service ressources humaines<br /></div>
<div id="divautres" style="display: none;" ><input type="radio" name="service" value="Autres" <?php if ($service=='Autres') { echo $s2; } ?> />Autres<br /></div>
</td>
</tr>
<tr class="unite">
<td valign="top">Message* :
</td>
<td width="80%">
<center>
<textarea name="message" alt="message" rows="10" cols="47" wrap="virtual">
<?php
/*Caractères interdits pour ne pas avoir de &xxx dans le mail à cause de la protection cross site scripting */
if (ereg("[]%~#`$&|}{^[><]",$message)) {
echo "Certains caractères utilisés dans le message sont interdits: []%~#`$&|}{^[><]"; $erreur=1; }
else {
echo trim(htmlentities($message)); }
?>
</textarea>
</center>
</td>
</tr>
<tr class="unite">
<td>
</td>
<td width="80%">
<center>
<br />
<input type="submit" name="Submit" value="Envoi" alt="Envoi" style="background-color:#00ff00" title="Envoyer" onmouseover="this.style.color='#ff0000'" onmouseout="this.style.color='#000000'" onmousedown="this.style.color='#ff9900'" /><input type="reset" name="Reset" value="Annulation" alt="Annulation" style="background-color:#00ff00" title="Annuler" onmouseover="this.style.color='#ff0000'" onmouseout="this.style.color='#000000'" onmousedown="this.style.color='#ff9900'" />
</center>
</td>
</tr>
<tr class="unite">
<td>
</td>
<td width="80%">Les champs marqués d'une * sont obligatoires.
</td>
</tr>
</table>
<?php
}
/*Si la variable $Nom n'existe pas, cela signifie que le formulaire n'a pas encore été complété. La fonction formulaire() est alors appelée pour l'afficher. Si la variable $Nom existe, les données sont récupérées dans les variables.*/
if(!isset($nom)) {
formulaire();
}
else {
/*choix de l'adresse de destination, fonction de la société et du service*/
$destinataire='[email protected]';
$from_email = trim(htmlentities($_POST['email']));
$entetedate = date("D, j M Y H:i:s +0100"); // Offset horaire
$entetemail = "From: $from_email \n"; // Adresse expéditeur
$entetemail .= "Cc: \n";
$entetemail .= "Bcc: \n"; // Copies cachées
$entetemail .= "Reply-To: $from_email \n"; // Adresse de retour
$entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;
$entetemail .= "Date: $entetedate";
$message = "\n";
$message .= "Société : ".trim(htmlentities($_POST['societe']))."\n";
$message .= "Service : ".trim(htmlentities($_POST['service']))."\n";
$message .= "\n";
$message .= "".trim(htmlentities($_POST['particule']))." ";
$message .= "".trim(htmlentities($_POST['nom']))." ";
$message .= "".trim(htmlentities($_POST['prenom']))."\n";
$message .= "\n";
$message .= "".trim(htmlentities($_POST['adresse']))."\n";
$message .= "".trim(htmlentities($_POST['codepostal']))." ";
$message .= "".trim(htmlentities($_POST['ville']))."\n";
$message .= "\n";
$message .= "Email : ".trim(htmlentities($_POST['email']))."\n";
$message .= "Tel : ".trim(htmlentities($_POST['telephone']))."\n";
$message .= "\n";
$message .= "\n".trim($_POST['message'])."\n";
/*Vérification champs obligatoires ok*/
if (empty($_POST['nom']) || empty($_POST['message']) || empty($_POST['telephone']) || empty($_POST['societe']) || empty($_POST['service'])) {
echo "<p class='red'>Vous n'avez pas complété les zones obligatoires (*). :</p>";
$erreur=1;
}
/*Vérification validité du mail*/
if (!empty($_POST['email'])) {
if (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-_.]?[0-9a-z])*\\.[a-z]{2,4}$",$_POST['email']) && ($erreur<>1)){
echo "<p class='red'>L'adresse e-mail est incorrecte. :</p>";
$erreur=1;
}
}
/*Vérification validité du numéro de téléphone*/
if (!empty($_POST['telephone'])){
if (!eregi("^([0-9]){10}$",$_POST['telephone']) && ($erreur <>1)){
echo "<p class='red'>Le numéro de téléphone est incorrect. :</p>";
$erreur=1;
}
}
/*Si erreur on relance le formulaire*/
if ($erreur==1) {
formulaire($_POST['societe'],$_POST['particule'],$_POST['nom'],$_POST['prenom'],$_POST['adresse'],$_POST['ville'],$_POST['codepostal'],$_POST['telephone'],$_POST['email'],$_POST['service'],$_POST['message']);
}
else {
if( @mail($destinataire, "[CONTACT]", $message, $entetemail) ) {
echo "Message envoyé.<br>";
}
else {
echo "Echec lors de l'envoi.<br>";
}
}
}
?>
</form>
</td>
<!-- barre verticale droite -->
<td width="23">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="22">
</td>
</tr>
<tr>
<td height="19" bgcolor="#FFFFFF" class="footer" align="center">
<table width="80%">
<tr align="center">
<td>
<a href="contenu905.html"><img src="images/logoETSSRA.png" /></a>
</td>
<td>
<a href="contenu916.html"><img src="images/logoORCA.png" /></a>
</td>
<td>
<a href="contenu917.html"><img src="images/logoGMFformations.png" /></a>
</td>
<td>
<a href="contenu918.html"><img src="images/logoGMFaccueil.png" /></a>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="41"> </td>
</tr>
</table>
</body>
</html>
Mon premier problème concerne le rafraîchissement de ma page lorsque l'on rentre dans un cas d'erreur: les champs texte et le champ message garde effectivement ce qui avait été inscrit dedans, mais les 3 zones de bouton radio sont réinitialisées. Je voudrais donc que si une personne clique sur des boutons raido et si elle entre dans un cas d'erreur, le rafraîchissement ne perde pas ces informations.Deuxièmement (oui oui je sais une seule question mais bon
Dernièrement, concernant l'encodage. Si par exemple l'utilisateur entre des é, è, à, etc.. dans les champs texte, le contenu du mail est tout bizarre avec des &blabla;. Je ne trouve pas comment remédier à ce problème.
Merci d'avance.[/b]