Fonction check_mail base de données
pooley45
Messages postés
526
Statut
Membre
-
naruto-94 Messages postés 904 Statut Membre -
naruto-94 Messages postés 904 Statut Membre -
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)... :
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 :
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 :
sachant que j'ai une fonction correction aussi (pas super efficace à en juger par le "é" pour un "é" saisit dans le champs sur le site)... :
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
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("'","'",$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
A voir également:
- Fonction check_mail base de données
- Fuite données maif - Guide
- Fonction si et - Guide
- Base de registre - Guide
- Supprimer les données de navigation - Guide
- Formules mathématiques de base - Télécharger - Études & Formations
1 réponse
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) 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 ..