Page 1 sur 1

Vérifier qu'une adresse mail entrée appartient @exemple.com

Posté : 11 nov. 2005, 16:05
par Mariton
Bonjour à tous,

J'ai très peu de connaissances en PHP et les seules connaissances que j'ai ont été acquises en lisant des pages codées en PHP donc ca va pas très loin :lol:

Je travaille actuellement sur un projet de site sous PHPMaximus (une évolution de Nuke) que beaucoup d'entre vous doivent connaître. Malheureusement, les codeurs de ce portail sont en vacances et je me suis dit que vous pourriez m'aider (même si je sais que le codage en PHP est assez spécifique :?

C'est pour cela que je vais vous poster la fonction sur laquel j'aimerai apporter la modif, pour que vous compreniez la logique, ainsi qu'un début de réponse qui m'a été donnée sur le site "officiel" :wink:

En gros, sur mon site, les gens devront s'incrire en tant que membres afin de pouvoir accéder aux rubriques principales. Pour l'inscription, un mail est demandé au futur membre pour valider l'inscription (jusque là, tout va bien :mrgreen: ) et il y a une fonction qui permet de vérifier que le mail entré n'existe pas déjà dans la BD, ne contient pas de caractères interdits etc... Moi j'aimerai que les membres soit obligés de rentrer un mail en @exemple.com pour pouvoir mieux gérer les membres (leur e-mail d'étudiant de l'école don je fais partie).

Voici donc la fonction concernée :
function ya_mailCheck($user_email) {
    global $stop, $user_prefix, $db, $ya_config;
    $user_email = strtolower($user_email);
    if ((!$user_email) || ($user_email=="") || (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$",$user_email))) $stop = "<center>"._ERRORINVIP."</center><br>";
    if ($ya_config['bad_mail'] > "") {
        $BadMailList = explode("\r\n",$ya_config['bad_mail']);
        for ($i=0; $i < count($BadMailList); $i++) {
            if (eregi($BadMailList[$i], $user_email)) $stop = "<center>"._IPBLOCKED." <b>".$BadMailList[$i]."</b></center><br>";
        }
    }
    if (strrpos($user_email,' ') > 0) $stop = "<center>"._ERROREMAILSPACES."</center><br>";
    if ($db->sql_numrows($db->sql_query("SELECT user_email FROM ".$user_prefix."_users WHERE user_email='$user_email'")) > 0) $stop = "<center>"._EMAILREGISTERED."</center><br>";
    if ($db->sql_numrows($db->sql_query("SELECT user_email FROM ".$user_prefix."_users WHERE user_email='".md5($user_email)."'")) > 0) $stop = "<center>"._EMAILNOTUSABLE."</center><br>";
    if ($db->sql_numrows($db->sql_query("SELECT user_email FROM ".$user_prefix."_users_temp WHERE user_email='$user_email'")) > 0) $stop = "<center>"._EMAILREGISTERED."</center><br>";
    return($stop);
}
J'aimerai donc insérer dans cette fonction un script qui déclencherait une erreur lorsque l'e-mail n'est pas en @exemple.com .

Voici ce que m'a répondu un forumeurs sur le site officiel :

Code : Tout sélectionner

$adresse_mail = "[email protected]"; $max_clip = explode("@", $adresse_mail); if($max_clip[1] == "exemple.com") { echo "ok le nom de domaine est correct"; } else { echo "pas correct"; }
Cette réponse permets d'avoir quelques éléments mais je pense qu'il faut retravailler dessus car la fonction que j'ai donné plus haut n'est pas prise en compte et ce script est indépendant et ne permet que de dire si l'adresse est bonne ou pas (enfin ca c'est ce que j'en ai déduit en le lisant :mrgreen: ).

Qu'en pensez-vous ?
Merci d'avance :wink:
A+

Posté : 12 nov. 2005, 16:08
par Mariton
Image

Posté : 12 nov. 2005, 19:00
par Dgse
Bonjour

et en modifant cette partie de code et en y inserant le @monsite.com
 if ((!$user_email) || ($user_email=="") || (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$",$user_email))) $stop = "<center>"._ERRORINVIP."</center><br>"; 
faudrait juste tester ce qu'il y a avant

@+ Dgse

Posté : 12 nov. 2005, 22:33
par Mariton
Oui mais apparamment, il y aurait deux parties :
$max_clip = explode("@", $adresse_mail)
et
if($max_clip[1] == "exemple.com")
C'est donc la 2e qu'il faudrait que j'insère dans les lignes que tu as citées mais comment j'insère la première partie ?

Je pense que je devrais plutôt utiliser une fontion avec =! plutôt que == pour ce dont j'ai besoin puisque je n'ai besoin d'afficher une erreur que si l'adresse n'est pas bonne, qu'en pensez-vous ?

Merci :wink:

Posté : 13 nov. 2005, 10:42
par Dgse
Bonjour

Je pense que tu devrais tester le nom de domaine dans ce code au moment d'envoyer , si le nom est correct tu l'insere ensuite dans la base.
$maxclip= substr($user_mail,-11);
if ((!$user_email) || ($user_email=="") || ($maxclip !="exemple.com") ||(!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$",$user_email))) $stop = "<center>"._ERRORINVIP."</center><br>";


PS : je ne peut pas tester..

@+ Dgse

Posté : 15 nov. 2005, 01:07
par Invité
Bon un des condeurs m'a donnée la solution :
function ya_mailCheck($user_email) { 
    global $stop, $user_prefix, $db, $ya_config; 
    $user_email = strtolower($user_email); 
    $email = explode("@", $user_email); 
    if ((!$user_email) || ($user_email=="") || (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$",$user_email))) $stop = "<center>"._ERRORINVIP."</center><br>"; 
    if ($ya_config['bad_mail'] > "") { 
        $BadMailList = explode("\r\n",$ya_config['bad_mail']); 
        for ($i=0; $i < count($BadMailList); $i++) { 
            if (eregi($BadMailList[$i], $user_email)) $stop = "<center>"._IPBLOCKED." <b>".$BadMailList[$i]."</b></center><br>"; 
        } 
    } 
    if ($email[1] != "espeme.com") $stop = "<center>"._EMAILNOTUSABLE."</center><br>"; 
    if (strrpos($user_email,' ') > 0) $stop = "<center>"._ERROREMAILSPACES."</center><br>"; 
    if ($db->sql_numrows($db->sql_query("SELECT user_email FROM ".$user_prefix."_users WHERE user_email='$user_email'")) > 0) $stop = "<center>"._EMAILREGISTERED."</center><br>"; 
    if ($db->sql_numrows($db->sql_query("SELECT user_email FROM ".$user_prefix."_users WHERE user_email='".md5($user_email)."'")) > 0) $stop = "<center>"._EMAILNOTUSABLE."</center><br>"; 
    if ($db->sql_numrows($db->sql_query("SELECT user_email FROM ".$user_prefix."_users_temp WHERE user_email='$user_email'")) > 0) $stop = "<center>"._EMAILREGISTERED."</center><br>"; 
    return($stop); 
} 
Merci pour votre aide :wink:

Posté : 15 nov. 2005, 01:09
par Mariton
Arg, j'étais pas loggé :roll:
Le message précédent était donc le miens, vous auvez compris :wink:

Posté : 15 nov. 2005, 01:27
par Moosh
Si tu es full admin de ton serveur il y a un package PECL pour filtrer les entrées

Posté : 15 nov. 2005, 10:25
par pitt
Sinon tu pourrais écrire un javascript qui verifierait au moment de la validation du formulaire l'email
si bon->on va a la page d'inscription
sinon->alerte qui dit qu'il faut que le mail se termine par @exemple.com

Posté : 15 nov. 2005, 10:59
par Moosh
Sinon tu pourrais écrire un javascript qui verifierait au moment de la validation du formulaire l'email
la validation par javascript doit toujours être revérifiée par le php de toute façon.

Si je désactive javascript

1° ca doit encore fonctionner
2° les mêmes contrôles doivent être fait.

Donc ca ne fait que "compliquer" le problème (mais améliorer l'ensemble si c bien fait)

entre () j'ai du mal à croire que tu sois le premier a te poser la question

As-tu regardé les anciens posts ?

Posté : 15 nov. 2005, 11:32
par pitt
Toutes mes excuses

Posté : 15 nov. 2005, 12:52
par Moosh
Toutes mes excuses
Il ne faut pas :-)

et

le "as-tu lu les anciens post" n'est pas pour toi

Posté : 15 nov. 2005, 13:49
par Moosh