Bonjour,
Je suis en train de faire un formulaire de contact en php et je voudrais écrire une fonction qui me permet de formater correctement la valeur transmise avec un minimum de sécurité tout en pouvant réutiliser la fonction pour différents champ d'autres formulaires.
Je me souviens avoir eu plein de problème lors de précédent développement concernant le traitement de mes formulaires notamment pour les caractères spéciaux (< ' é etc...).
Ma base de donnée est au format utf8_general_ci
Mes pages en UTF-8
et voici mon en-tête :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
J'ai ajouté suite à la connexion (mysql.php) la ligne suivante :
mysql_query("SET NAMES UTF8");
Pour l'exemple avec le champ nom
<input type="text" name="nom" id="nom" size="27" />
<input type="submit" value="Envoyer" name="form-contact" />
J'effectue le contrôle de validation comme ceci :
if(isset($_POST['form-contact'])){ //si le formulaire a été validé
if(isset($_POST["nom"]) && !empty($_POST["nom"])){
$nom = traitement_input($_POST["nom"], 5, 50, true, true, false);
// insertion bdd
echo $nom;
}
}
et voici ma fonction :
function traitement_input($champ, $mini, $maxi, $chaine, $majforce, $minforce){
if($majforce = true){
$champ = strtoupper($champ);
}
if($minforce = true){
$champ = strtolower($champ);
}
if($chaine = true){ // Pour chaine de caractères
$champ = sprintf("%s",$champ);
$champ = trim($champ);
}elseif($chaine = false){ // Pour un entier
$champ = sprintf("%d",$champ);
$champ = abs($champ);
$champ = intval($champ);
}
$champ = mysql_real_escape_string($champ);
$champ = strip_tags($champ);
if(strlen($champ) < $mini) {
$msg_error = $mini;
}elseif(strlen($champ) > $maxi) {
$msg_error = $maxi;
}else{
$msg_error = '';
}
return array($champ, $msg_error);
}
Pouvez-vous me donner votre avis qu'en au traitement de ce formulaire, si les contrôles sont suffisant et si ils ne poseront pas de problème à l'exploitation. Aurais-je des surprise concernant l'encodage des caractères ?
D'avance merci.