Pour mon site, j'utilise un formulaire de contact qui fonctionne mais n'est pas optimiser lorsqu'il s'agit d'indiquer une erreur dans un ou plusieurs champs c'est à dire que si l'utilisateur fait une erreur (champs vide ou mal inscrit), un message apparaît au dessus indiquant un problème sans dire le ou lesquels.
J'ai cherché un autre formulaire qui indique chacune des erreurs et j'ai essayé de les fusionner. De prime à bord, ça semble fonctionner mais de un, le code n'est certainement pas optimisé et de deux, il y a un champs (téléphone) que je ne rend pas obligatoire mais la fusion l'impose.
J'ai essayé par moi-même en suivant des tutoriaux mais j'ai beaucoup de mal à mettre en pratique. J'ai donc besoin de votre aide afin que mon code soit plus propre et bien fonctionnel comme je le souhaite.
Voici mon code :
<script language="javascript" type="text/javascript">
function validation_avt_envoi()
{
var lancer="oui";
if(document.getElementById("nom").value=="")
{
alert("Vous devez indiquer votre nom");
lancer="non";
}
else if(document.getElementById("email").value=="")
{
alert("Vous devez saisir votre mail");
lancer="non";
}
else if(document.getElementById("email").value.indexOf("@")==-1 || document.getElementById("email").value.indexOf(".")==-1)
{
alert("Votre mail ne semble pas correct, corrigez-le");
lancer="non";
}
else if((document.getElementById("telephone").value.length<10 || document.getElementById("telephone").value.length>10))
{
alert("Vous devez indiquer un numéro de téléphone valide de 10 chiffres");
lancer="non";
}
else if(document.getElementById("objet").value=="")
{
alert("Vous devez saisir le sujet du message ");
lancer="non";
}
else if(document.getElementById("message").value=="")
{
alert("Vous devez saisir le sujet du message ");
lancer="non";
}
if(lancer=="oui")
document.getElementById("contact").submit();
}
</script>
<!-- SLIDE MENU -->
<?php include("menu_slide.php"); ?></div>
<!-- BANNIERE -->
<div class="banniere"><?php include("banniere.php"); ?></div>
<!-- MENU -->
<?php include("menu.php"); ?></div><br />
<!-- CONTENU DU SITE -->
<div class="contenu">
<div class="contenu_gauche">
<h1>- Nous contacter -</h1><br />
Si vous avez des questions, que vous avez besoin de précisions ou que vous souhaitez obtenir un rendez-vous, il vous suffit d'utiliser l'une des trois méthodes ci-dessous :<br /><br />
<ul>
<li>En appelant le numéro de téléphone suivant : xxx</li>
<li>En cliquant sur <a href="redirect-mailto.php">ce lien</a> afin d'utiliser votre logiciel de messagerie*<br />
<li>En remplissant le formulaire suivant :</li>
</ul>
<br />
<?php
/*
********************************************************************************************
CONFIGURATION
********************************************************************************************
*/
// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
$destinataire = '[email protected]';
// copie ? (envoie une copie au visiteur)
$copie = 'oui';
// Action du formulaire (si votre page a des paramètres dans l'URL)
// si cette page est index.php?page=contact alors mettez index.php?page=contact
// sinon, laissez vide
$form_action = '';
// Messages de confirmation du mail
$message_envoye = "Votre message nous est bien parvenu. Vous en recevrez une copie dans votre boîte mail (vérifiez votre dossier Spam si vous ne le voyez pas).";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer s'il vous plaît.";
// Message d'erreur du formulaire
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis, que l'email soit sans erreur et que le téléphone possède bien 10 chiffres (si vous l'avez indiqué).";
/*
********************************************************************************************
FIN DE LA CONFIGURATION
********************************************************************************************
*/
/*
* 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']) : '';
$telephone = (isset($_POST['telephone'])) ? Rec($_POST['telephone']) : '';
$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é
$err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin
if (isset($_POST['envoi']))
{
/* les 4 premières variables $nom,$email,$objet,$message sont obligatoires, par-contre le $telephone il peut être soit vide, soit pas vide ET Valide, donc tu dois définir $telIsValide comme ça:*/
$telIsValide=( preg_match("#^[\d]{10}+$#", $telephone)==1 && !empty($telephone) ) || empty($telephone) ;
if ( !empty($nom) && !empty($email) && !empty($objet) && !empty($message) && $telIsValide ) //$telIsValide retourne soit true soit false ici.
{
if(!empty($telephone)) //on ajoute le numéro de tel dans $message s'il n'est pas vide.
{
$message.= "\n \nMon numéro de téléphone : ".$telephone;
}//elle manque une fermeture de if( !empty($telephone) ) ici
// les 4 variables sont remplies, on génère puis envoie le mail
$headers = 'From:'.$nom.' <'.$email.'>' . "\r\n";
//$headers .= 'Reply-To: '.$email. "\r\n" ;
//$headers .= '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
$caracteres_speciaux = array(''', '’', '"', '<br>', '<br />', '<', '>', '&', '…', '’', '‘');
$caracteres_remplacement = array("'", "'", '"', '', '', '<', '>', '&', '...', '>>', '<<' );
$objet = html_entity_decode($objet);
$objet = str_replace($caracteres_speciaux, $caracteres_remplacement, $objet);
$message = html_entity_decode($message);
$message = str_replace($caracteres_speciaux, $caracteres_remplacement, $message);
// Envoi du mail
$num_emails = 0;
$tmp = explode(';', $cible);
foreach($tmp as $email_destinataire)
{
if (mail($email_destinataire, $objet, $message, $headers))
$num_emails++;
}
if($num_emails>0)
{
echo '<p>'.$message_envoye.'</p>';
}
else
{
echo '<p>'.$message_non_envoye.'</p>';
};
}
else
{
echo '<p>'.$message_formulaire_invalide.'</p>';
$err_formulaire = true;
}
}; // fin du if (!isset($_POST['envoi']))
if (($err_formulaire) || (!isset($_POST['envoi'])))
{
// afficher le formulaire
echo '
<form id="contact" name="contact" method="post" action="'.$form_action.'">
<fieldset><legend>Vos coordonnées</legend>
<table>
<tr>
<td>
<label for="nom">Nom : </label><br /><br />
<label for="email">Email : </label><br /><br />
<label for="telephone">Téléphone : </label><br /><br />
</td>
<td>
<input type="text" id="nom" name="nom" value="'.stripslashes($nom).'" placeholder="Obligatoire" size="40px" /><br /><br />
<input type="text" id="email" name="email" value="'.stripslashes($email).'" placeholder="Obligatoire" size="40px" /><br /><br />
<input type="text" id="telephone" name="telephone" value="'.stripslashes($telephone).'" placeholder="Non obligatoire*" size="15px" /><br /><br />
</td>
</tr>
</table>
</fieldset>
<fieldset><legend>Votre message :</legend>
<table>
<tr>
<td style="vertical-align :top;">
<label for="objet">Objet : </label><br /><br />
<label for="message">Message : </label><br /><br />
</td>
<td>
<input type="text" id="objet" name="objet" value="'.stripslashes($objet).'" placeholder="Obligatoire" size="52px" /><br /><br />
<textarea id="message" name="message" cols="50" rows="7" placeholder="Obligatoire">'.stripslashes($message).'</textarea><br /><br />
</td>
</tr>
</table>
</fieldset>
<br />
<div style="text-align:center;"><input type="reset" value="Effacer le formulaire" /> <input type="submit" name="envoi" value="Envoyer le message" onclick="validation_avt_envoi();" /></div>
</form>';
};
?>
</div>
</div>
Je vous remercie d'avance.