Fonction check_mail base de données

Fermé
pooley45 Messages postés 435 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 26 mars 2016 - 29 juin 2011 à 03:48
naruto-94 Messages postés 865 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 20 décembre 2012 - 29 juin 2011 à 07:44
Bonjour,

Mon souci est le suivant : j'ai relié le formulaire de mon site à ma base de données et simultanément envoie de mail avec récap des infos saisies. j'ai une fonction qui check la validité du mail (pas très pointilleuse je l'avoue mais ereg et eregi étant obsolètes depuis php 5.3.0)... :
function check_mail($var_mail){
		$flag=true;
		if (strlen($var_mail)<7) $flag=false;
		if (strpos($var_mail,"@")==false) $flag=false;
		if (strpos($var_mail,".")==false) $flag=false;
		return $flag;
	}

pas terrible car "azfde @ee/.fr" est un mail valide avec ça ... !


je l'appelle en include et je la déclare ainsi dans mon contact.inc.php :

if ($_POST["clic"]=="Envoyer") {
	if ($_POST["nom"]=="" || $_POST["prenom"]=="" || $_POST["comment"]=="" || $_POST["mail"]=="") {
		$msg="<br /><small>Merci de remplir les champs obligatoires.</small>";
	}
	
	if (check_mail($_POST["mail"])==false){
		$msg.="<br /><small>Veuillez saisir une adresse mail valide.</small>";
	}
	
	if($msg==""){

		$destinataire = "blabla@blabla.fr";
		$objet = "Nouveau contact !";
		$contenu="Une nouvelle demande de ".$_POST["prenom"]." ".$_POST["nom"]."\r\n";
		$contenu.="Société : ".$_POST["societe"]."\r\n";
		$contenu.="Mail : ".$_POST["mail"]."\r\n";
		$contenu.="Specifics : ".$_POST["comment"]."\r\n";
		
	//requete posée à la base
		$query="INSERT INTO contacts (nom,prenom,societe,mail,comment)";
		$query.="VALUES('".correction($_POST["nom"])."','".correction($_POST["prenom"])."','".correction($_POST["societe"])."','".check_mail($_POST["mail"])."','".correction($_POST["comment"])."')";
		
	//envoi de la requete
		$result=mysqli_query($my_connex,$query);
		
		mail($destinataire,$objet,$contenu);
		
		$merci=true;
	
	}
}


je reçois bien les infos par mail (tout y est bon le mail apparaît bien, etc) mais sur ma DB quand j'affiche ma table j'ai :

id	 nom	            prenom	 societe	   mail             comment
7	bo*****	     l****	          ***é         1	      blablablablabla


sachant que j'ai une fonction correction aussi (pas super efficace à en juger par le "é" pour un "é" saisit dans le champs sur le site)... :

function correction($chaine){
		$chaine=trim($chaine);
		$chaine=strtolower($chaine);
		$chaine=str_replace("&#039;","'",$chaine);
		return $chaine;
	}



1) Savez-vous pourquoi j'ai un "1" qui se met dans ma table alors que je reçois bien le mail ? (pour info j'ai mis ce champs en varchar 50 et en utf8_general_ci),

2) Avez-vous des fonctions de vérification de validité de mail qui soient pointilleuses à me proposer ?

3) "é" pour un "é" dans la table ... la fonction correction y est pour quelque chose ? (j'ai un charset=UTF-8 dans mes meta et mes interclassement sont en utf8_general_ci ...)


Merci beaucoup pour votre aide

1 réponse

naruto-94 Messages postés 865 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 20 décembre 2012 188
Modifié par naruto-94 le 29/06/2011 à 07:44
Salut,

1) Quand tu utilises la fonction check_mail() ça retourne 1 pour un paramètre (e-mail) valide ou 0 si ce n'est pas bon , donc quand dans ta requête tu fais un insert into ....... values(check_mail()) ça va enregistrer la valeur retourné par la fonction .
Pour faire la vérification d'un mail avant l'enregistrement dans la bdd suffit de faire une condition avant l'exécution de la requête .

/* si l'e-mail est bon ça retourne 1 donc la condition est bonne */
if(checkmail($_POST['mail']))
{
//envoie de la requête insert into ....... values($_POST['mail'])
}

2)
https://www.commentcamarche.net/faq/855-php-verifier-le-format-d-une-adresse-mail

Même chose , tu prends la fonction VerifierAdresseMail et tu la remplace par celle actuel et tu fais :

if(VerifierAdresseMail(htmlentitites($_POST['mail'])))
{
//envoie de la requete insert into ....... values($_POST['mail'])
}

3) Je pense qu'il suffit de faire un htmlentities($_POST['societe']) , htmlentitites ser à transformer les caractères spéciaux en entités html du genre é = é

d'ailleurs tu devrais utilisé htmlentities et addslashes pour éviter des failles / injection sql ..
1