Page 1 sur 1

Formulaire de contact - rafraîchissement lors d'une erreur

Posté : 24 juil. 2007, 17:49
par thedesk
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.
<!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&eacute;t&eacute; du Groupe*&nbsp;:
			</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>&nbsp;
			</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*&nbsp;:
	  		</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&eacute;nom&nbsp;:
	  		</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&nbsp;:
	  		</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&nbsp;:
	  		</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&nbsp;:
	  		</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&nbsp;:
			</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&eacute;l&eacute;phone*&nbsp;:
			</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*&nbsp;:
			</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*&nbsp;:
			</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>&nbsp;
			</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>&nbsp;
			</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&eacute;t&eacute; les zones obligatoires (*).&nbsp;:</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.&nbsp;:</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&eacute;ro de t&eacute;l&eacute;phone est incorrect.&nbsp;:</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&eacute;.<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 :oops:), 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]

Posté : 24 juil. 2007, 17:57
par Ryle
Pour une case à cocher ou un bouton radio, l'attribut à utiliser est "checked" et pas "selected" ;)

Pour la seconde question, c'est parce que tu as plusieurs tabulation dans la valeur par défaut de ton champ :
<textarea name="message" alt="message" rows="10" cols="47" wrap="virtual">_
_________________
<?php
Colle ta baise php au textarea pour éviter cela :)

Et concernant les glyphes abscons, il s'agit en fait des entités html correspondantes aux accents et caractères spéciaux, et qui se retrouvent là parce que tu le demandes explicitement en utilisant la fonction htmlentities() :) .. sauf que si le mail n'est pas envoyé en html (avec les headers qui vont bien) mais en texte brut par défaut, ben ça fait ça :)

Posté : 27 juil. 2007, 11:06
par thedesk
Merci pour la réponse rapide et efficace.