J'essaie de faire une requête SQL, mais je dois vérifier si la valeur est une adresse électronique ..__ J'ai besoin d'un moyen de vérifier si $user
est une adresse électronique, car j'ai des valeurs d'utilisateur telles que celle-ci dans mon tableau .
test
test2
[email protected]
[email protected]
test392
[email protected]
etc...
Je dois faire en sorte que $useremail
vérifie $user
pour savoir s'il s'agit d'une adresse électronique. Je peux donc METTRE À JOUR les valeurs, WHERE user=test OR [email protected]
, etc.
$user = strtolower($olduser);
$useremail = "";
mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$useremail");
Ce n'est pas une bonne méthode et ne vérifie pas si l'e-mail existe mais vérifie s'il ressemble à un e-mail avec l'extension @ et domain.
function checkEmail($email) {
$find1 = strpos($email, '@');
$find2 = strpos($email, '.');
return ($find1 !== false && $find2 !== false && $find2 > $find1 ? true : false);
}
$email = '[email protected]';
$check = checkEmail($email);
if ( $check ) {
echo $email . ' looks like a valid email.';
}
Sans expressions régulières:
<?php
if(filter_var("[email protected]", FILTER_VALIDATE_EMAIL)) {
// valid address
}
else {
// invalid address
}
?>
La méthode la plus simple consiste à utiliser une expression régulière pour vérifier les adresses e-mail, même s’il existe un désaccord sur son exactitude. Ce processus est discuté en détail ici:
Utiliser une expression régulière pour valider une adresse email
Vous pouvez utiliser REGEXP dans MySQL pour sélectionner dans la base de données en fonction de votre expression régulière:
Vous pouvez utiliser des expressions régulières pour valider votre chaîne de saisie afin de déterminer si elle correspond à une adresse électronique:
<?php
$email = "[email protected]";
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
echo "Valid email address.";
}
else {
echo "Invalid email address.";
}
?>
De: http://www.totallyphp.co.uk/code/validate_an_email_address_using_regular_expressions.htm
EDIT: pour des expressions plus précises, reportez-vous à Travis answer sur cette question
Cette fonction is_email () vous donnera une réponse précise quant à savoir si la chaîne est une adresse électronique valide ou non. Autant que je sache, aucune autre solution ne le fera avec le même niveau d'autorité.
Si je comprends bien l'exemple, vous l'utiliseriez comme ceci
$user = strtolower($olduser);
$useremail = (is_email($user)) ? $user : '';
La fonction intégrée PHP est incomplète. Je suis l'auteur principal de is_email()
, alors je sonne ici comme une trompette, mais j'y ai consacré beaucoup de travail pour que personne d'autre ne soit obligé de le revoir.
J'utilise cette fonction depuis de nombreuses années sur des centaines de sites. Ce n'est probablement pas parfait, mais je n'ai jamais eu à me plaindre de faux négatifs (ou de positifs):
function validate_email($email) {
return (preg_match("/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/", $email) || !preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/", $email)) ? false : true;
}
if(filter_var($email, FILTER_VALIDATE_EMAIL))
{
echo 'This is a valid email address.';
echo filter_var($email, FILTER_VALIDATE_EMAIL);
//exit("E-mail is not valid");
}
else
{
echo 'Invalid email address.';
}
En dehors de toutes les suggestions de regex qui ne supportent généralement pas tous des TLD disponibles (y compris par exemple .info
et .museum
) et de la décision à venir de l'ICANN d'autoriser le chinois et l'arabe dans les URL (ce qui laisserait [a-z]
et \w
échouer) pour pour lequel l'expression rationnelle plus générique suivante est suffisante
([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)
Je voudrais également mentionner que faire un WHERE user=test OR [email protected]
est trop sujet aux erreurs. Mieux vaut utiliser un PK généré automatiquement dans la table et l’utiliser dans la clause WHERE
.
Je ne vois pas vraiment l'intérêt de mailregex stricts, longs et illisibles, conformes aux spécifications RFCxxxx. La meilleure solution consiste toujours à envoyer un courrier contenant un lien avec une clé d'activation à l'utilisateur final afin de lui permettre de confirmer l'adresse de messagerie. Informez-le également dans le formulaire. Si nécessaire, laissez l’utilisateur taper deux fois l’adresse électronique comme vous le faites pour les mots de passe.
Puisque tout le monde affiche son expression régulière, voici le mien: ^((([\w+-]+)(.[\w+-]+)*)|(\"[^(\|\")]{0,62}\"))@(([a-zA-Z0-9-]+.)+([a-zA-Z0-9]{2,})|[?([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})(.([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})){3}]?)$
À ma connaissance, il prend en charge tout le contenu de la spécification RFC, y compris beaucoup d'éléments que la plupart des gens n'incluent pas.
$user_email = "[email protected]";
function isEmail($user) {
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
return true
} else {
return false
}
}
if (isEmail($user_email)) {
// email is valid, run the query
mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$user_email");
}
$user_email = "email@gmailcom";
function isEmail($email) {
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
return true;
} else {
return false;
}
}
if (isEmail($user_email)) {
// email is ok!
} else {
// email not ok
}