Contrôle mail utilisateur

JoséJosé Member

Bonjour ,
dans la version 5-8-4, j'ai un contrôle du mail utilisateur récalcitrant quand je crée un nouvel utilisateur , il refuse la création au motif "mail déjà existant" si je renseigne ou "adresse mail invalide" si je ne renseigne pas. Est-il possible de neutraliser ce contrôle?
José

Réponses

  • Bonjour,

    Les contrôles de validité des emails pour les utilisateurs se font dans plxAdmin::editUsers()
    Pour le "mail déjà exitant" tu peux neutraliser le test correspondant à la ligne 488 comme ceci :

                    # controle de l'unicité de l'adresse e-mail
                    if(false and in_array($user['email'], $users_email)) {
                        return plxMsg::Error(L_ERR_EMAIL_ALREADY_EXISTS.' : '.plxUtils::strCheck($user['email']));
                    }
                    else if ($user['delete'] == 0) {
                        $users_email[] = $user['email'];
                    }
    

    Pour adresse mail invalide, pas sûr que cela soit une bonne idée, mais bon à la ligne 438:

                        # controle de l'adresse email
                        $email = trim($content[$user_id.'_email']);
                        if(isset($content[$user_id.'_newuser']) AND empty($email))
                            return plxMsg::Error(L_ERR_INVALID_EMAIL);
                        if(!empty($email) AND (true or !plxUtils::checkMail($email)))
                            return plxMsg::Error(L_ERR_INVALID_EMAIL);
    

    Note que l'adresse mail permet à utilisateur de récupérer ou demander son mot de passe. Donc si pas de mail, on fait comment ?

  • JoséJosé Member

    J'ai apporté les modifications, il me retourne encore adresse mail invalide. Il n'y aurait pas un bug la dessous?
    José

  • Effectivement. Il suffit de commenter le premier if :

                        # controle de l'adresse email
                        $email = trim($content[$user_id.'_email']);
                        # if(isset($content[$user_id.'_newuser']) AND empty($email))
                        #   return plxMsg::Error(L_ERR_INVALID_EMAIL);
                        if(!empty($email) AND !plxUtils::checkMail($email))
                            return plxMsg::Error(L_ERR_INVALID_EMAIL);
    
    

    L'E-mail n'est plus obligatoire

  • JoséJosé Member

    c'est pas encore ça: message mail invalide
    est-ce normal que les deux if retournent le message d'erreur ? A quel moment le mail est enregistré?

  • JoséJosé Member

    j'ai neutralisé les deux conditions juste pendant le temps de créer un nouvel utilisateur, ( Dans le programme, le mail est enregistré quelques lignes plus bas. )

    José

  • Je viens de faire le test.
    En rajoutant seulement un "false and " en début du "if" des lignes 436 et 488, je n'ai pas de souci pour laisser un email vide ou en doublon.
    Le mail a été rendu obligatoire pour réinitialiser le mot de passe. C'est une option dans "paramètres avancées".
    As-tu un intérêt particulier pour ne pas saisir le mail ?
    Tu vas devoir faire la modif à chaque mise à jour de PluXml.

  • JoséJosé Member

    Pour que cela fonctionne j'ai également ajouté "false and " à la ligne 438.
    cela m'interesse d'avoir les mails mais j'avais un blocage intempestif "mail invalide" ou "mail déjà existant"
    Merci

  • Ligne 438 : Cela veut dire que tu ne vérifies plus le format du mail ou que plxUtils::checkMail() fait mal le job avec ton mail (l'expression n'est peut-être pas correcte).
    Le mieux serait d'utiliser var_filter dans plxUtils::checkmail() plutôt que de ré-inventer la roue" :

    <?php
    $mails = array(
        'toto@heaven.com', 
        'bonjour',
        'je-suis-fou@lanvin'
    );
    
    foreach($mails as $m) {
        $n = filter_var($m, FILTER_VALIDATE_EMAIL);
        if(!empty($n)) {
            echo $n . PHP_EOL;
        } else {
            echo 'Mail invalide : ' . $m . PHP_EOL;
        }   
    }
    ?>
    

    Regarde si ton mail passe dans le code ci-dessus.

  • JoséJosé Member

    1° j'ai supprimé "false and " à la ligne 438.( le deuxième if ). j'ai gardé ceux de ligne 436 et 488

    2° j'ai modifié la fonction checkmail()

        public static function checkMail($mail) {
        $mails = array(
        'toto@heaven.com', 
        'bonjour',
        'je-suis-fou@lanvin'
    );
    foreach($mails as $m) {
        $n = filter_var($m, FILTER_VALIDATE_EMAIL);
        if(!empty($n)) {
            echo $n . PHP_EOL;
        } else {
            echo 'Mail invalide : ' . $m . PHP_EOL;
        }   
        }
    }
    

    3° je teste avec et sans adresse mail : dans les deux cas j'ai " adresse e-mail invalide"

  • Tu peux m'envoyer en privé l'adresse mail qui plante ?

  • Je t'ai donné un exemple pour tester la fonction filter_var().
    Pour remplacer la fonction plxUtils::checkmail(), c'est comme ceci :

    function checkmail($mail) {
        $mail = trim($mail);
        if(empty($mail) or strlen($mail) > 80) { return false; }
        return !empty(filter_var($mail, FILTER_VALIDATE_EMAIL));
    }
    
  • JoséJosé Member

    J'ai hésité à te rappeler concernant le code de la fonction filter_var()..... sans commentaire

    avec la nouvelle fonction plxUtils::checkmail(), cela ne fonctionne pas mieux. Que ce soit une adresse mail réelle ou une adresse bidon tonton@yahoo.fr

  • J'ai refait une installation complète de PluXml-5.8.4.
    Aucun souci avec les versions originale et modifiée de plxUtils::checkmail().
    tonton@yahoo.fr passe très bien.
    Tu n'as pas un souci avec un plugin ?

  • JoséJosé Member

    Plugins désactivés : pas de changements.
    Merci beaucoup .
    je vais recharger plxUtils et plxAdmin , tester et je reviendrai sur le forum.

Connectez-vous ou Inscrivez-vous pour répondre.