Jump to content

[résolu] Une verification des e-mails avant inscriptions


Recommended Posts

Bonjour a tous,

je me rend compte que j'ai pas mal de client avec des mails du style : wonadoo, hormail, gmaik, orangz ect.... du coup il sne reçoivent pas les mails...

y a t-il un moyen fr faire un verif des mails (du genre, ils rentrent 2 fois leur mail pour vérification) lors de l'inscription ?

Merci a tous, bon week end.

EDIT, je résume les différents post qu'il y a eu ici :

Voici donc une solution :

dans authentication.php, vers la ligne 46 on a :


if (Tools::isSubmit('submitAccount'))
{
   $create_account = 1;
   $smarty->assign('email_create', 1);
   if (!Validate::isEmail($email = Tools::getValue('email')))
   $errors[] = Tools::displayError('e-mail not valid'); 



On rajoute en dessous :


elseif (Tools::getValue('email') != Tools::getValue('email_verify'))
       $errors[] = Tools::displayError('adress no match'); 



Ce qui donne :


if (Tools::isSubmit('submitAccount'))
{
   $create_account = 1;
   $smarty->assign('email_create', 1);

   if (!Validate::isEmail($email = Tools::getValue('email')))
       $errors[] = Tools::displayError('e-mail not valid');    
//Ici la ligne rajoutée
   elseif (Tools::getValue('email') != Tools::getValue('email_verify')) 
       $errors[] = Tools::displayError('adress not match');  
//Fin de la ligne          
   elseif (!Validate::isPasswd(Tools::getValue('passwd')))
       $errors[] = Tools::displayError('invalid password');    
   elseif (Customer::customerExists($email))
       $errors[] = Tools::displayError('someone has already registered with this e-mail address');    
   elseif (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) AND !(Tools::getValue('months') == '' AND Tools::getValue('days') == '' AND Tools::getValue('years') == ''))
       $errors[] = Tools::displayError('invalid birthday'); 



Ensuite dans authentication.tpl :

reperer ce bout de code :




{l s='E-mail'}
       <input type="text" class="text" id="email" name="email" value="{if isset($smarty.post.email)}{$smarty.post.email}{/if}" />
*
 



et rajouter en dessous :

  



{l s='E-mail verify'}
       <input type="text" class="text" id="email_verify" name="email_verify" value="{if isset($smarty.post.email_verify)}{$smarty.post.email_verify}{/if}" />
*
 



Ce qui donne :




{l s='E-mail'}
               <input type="text" class="text" id="email" name="email" value="{if isset($smarty.post.email)}{$smarty.post.email}{/if}" />
*

// ICI LA PARTIE A RAJOUTER


{l s='E-mail verify'}
               <input type="text" class="text" id="email_verify" name="email_verify" value="{if isset($smarty.post.email_verify)}{$smarty.post.email_verify}{/if}" />
*
 
// FIN DE LA PARTIE A RAJOUTER


{l s='Password'}
               <input type="password" class="text" name="passwd" id="passwd" />
*
{l s='(5 characters min.)'}




Voila pour le check de l'émail

Ne pas oublier d'aller traduire le message d'erreurs (mail not match) et le label "email_verify" dans le BO.


Si en plus vous voulez désactiver le copier coller sur cette partie émail, il y a un bout de code java-script a rajouter :

Donc dans authentication.php

On a ligne 11:

//CSS ans JS file calls
$js_files = array(
   _THEME_JS_DIR_.'tools/statesManagement.js' 
);
$errors = array();



on change ca en :

//CSS ans JS file calls
$js_files = array(
   _THEME_JS_DIR_.'tools/statesManagement.js', _THEME_JS_DIR_.'noEmailCopy.js' ); // ici on rajoute une ligne qui indique ou est le code JS.
$errors = array();



Puis copier le script présent en pièce jointe (noEmailCopy.js) dans le dossier js de votre thème.

Fonctionne sur IE 7&8;/FIREFOX 3/SAFARI/CHROME mais ne fonctionne pas sur Opera

noEmailCopy.zip

Link to comment
Share on other sites

Oui c'est plutot génant, la double entrée serait intéressante. C'est une information importante pour la relation commerciale et en plus c'est le login du client qui ne pourra pas se connecter.

de la meme facon j'ai un certain pourcentage de clients qui intervertissent prénom et nom, j'ai pourtant bien ajouté "Nom de famille" mais il y en a toujours. Mais là on peut pas faire grand chose ou alors il faudrai controler que le prénom existe dans une liste tres complete et si il n'y est pas une question du style "etes vous sur d'avoir entré votre prénom", utopique? peut etre pour bientot qui sait?

Link to comment
Share on other sites

Salut,

Bon j'ai avancé un peu sur le problème cette aprem, je crois avoir trouvé une petite solution (a tester avant bien entendu :) )

Rappel : J'utilise presta 1.1

Alors dans authentication.tpl, repérer ce code :




{l s='E-mail'}
       <input type="text" class="text" id="email" name="email" value="{if isset($smarty.post.email)}{$smarty.post.email}{/if}" />
*




et rajouter en dessous :



{l s='E-mail verify'}
       <input type="text" class="text" id="email_verify" name="email_verify" value="{if isset($smarty.post.email_verify)}{$smarty.post.email_verify}{/if}" />
*



Donc cela rajoute un autre formulaire email avec la variable email_verify

Ensuite dans authentication.php

Ligne 46 , repérer :


if (Tools::isSubmit('submitAccount'))
{
   $create_account = 1;
   $smarty->assign('email_create', 1);
   if (!Validate::isEmail($email = Tools::getValue('email')))
   $errors[] = Tools::displayError('e-mail not valid');




Et rajouter en dessous :

           
   elseif (Tools::getValue('email') != Tools::getValue('email_verify'))
       $errors[] = Tools::displayError('adress no match');



ce qui donne :


if (Tools::isSubmit('submitAccount'))
{
   $create_account = 1;
   $smarty->assign('email_create', 1);

   if (!Validate::isEmail($email = Tools::getValue('email')))
       $errors[] = Tools::displayError('e-mail not valid');    
//Ici la ligne rajoutée
   elseif (Tools::getValue('email') != Tools::getValue('email_verify')) 
       $errors[] = Tools::displayError('adress not match');  
//          
   elseif (!Validate::isPasswd(Tools::getValue('passwd')))
       $errors[] = Tools::displayError('invalid password');    
   elseif (Customer::customerExists($email))
       $errors[] = Tools::displayError('someone has already registered with this e-mail address');    
   elseif (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) AND !(Tools::getValue('months') == '' AND Tools::getValue('days') == '' AND Tools::getValue('years') == ''))
       $errors[] = Tools::displayError('invalid birthday');




D'apres mes test effectué en local ca marche (version 1.1)

J'espere ne pas avoir fais de bêtise dans ce bout de code sur le fonctionnement de PS, je ne pense pas, j'ai tester ensuite de modifier l'email une fois inscrit pas de soucis.

par contre je n'ai pas encore trouvé comment empêcher le copier / coller.

Dite moi si ca marche chez vous.

Link to comment
Share on other sites

Re Jolvil, bonsoir Ma2x,

Idem pour moi, cela fonctionne nickel sur la 1.2.4! C'est top!
Par contre où puis-je modifier le terme "e-mail verify" et mettre à la place "vérification email" ? car je pense que quelques inconditionnels du français de base vont se demander ce que c'est que cette ligne...
J'ai aussi effectué un test en erreur volontaire, pas de soucis, ça refuse l'inscription tant que le mail n'est pas corrigé.
Merci pour ta réponse,

Cdlt,

Mandrake.

Link to comment
Share on other sites

Salut mandrake,

Il te suffit de changer tout les 'email_verify' par 'verification_email' , mais ce sont des variables ou des identifiants propre au code Html et php, personne ne les vois donc (sauf si on regarde les sources). La plupart des variables sont en anglais dailleurs.

Le truc que les client verrons par contre c'est le 'email not match' que tu pourrais changer (je l'avais mis pour tester). Il pourrais etre reformulé plus joliment en anglais. N'oublie pas par ailleurs qu'il nécessite aussi la traduction via le BO pour qu'il s'affiche en FR. (dans la partie message d'erreur)

Link to comment
Share on other sites

Re,

Je pense avoir trouvé une ptite soluce pour le click droit et la selection à l'aide d'un petit java-script :

Il faut tout d'abord installer le script no_select.js dans le répertoire js de votre thème.

Ensuite

toujours dans authentication.php , au début du fichier ligne 11 on a :

//CSS ans JS file calls
$js_files = array(
   _THEME_JS_DIR_.'tools/statesManagement.js' 
);
$errors = array();



On rajoute en dessous:

   _THEME_JS_DIR_.'no_select.js'



Ce qui donne :

//CSS ans JS file calls
$js_files = array(
   _THEME_JS_DIR_.'tools/statesManagement.js',  // attention à la virgule à rajoutée
   _THEME_JS_DIR_.'no_select.js' // ligne à rajoutée
);
$errors = array();



Voila, normalement le clic droit et la sélection sont désactivés uniquement sur la case émail pas les autres.

testé sur IE et firefox (en local), je n'ai pas les autres navigateur sur mon PC à la maison, j'regarderais demain.

Dite moi si c'est ok pour vous. (en local of curz :) )

Good night !

EDIT : je viens de me rendre compte que cela bloque le copier/coller et le select de la case email de la partie "deja enregistrée" ... je regarderai demain.

no_select.zip

Link to comment
Share on other sites

Salut Jolvil,

Bah si l'utilisateur ne peux pas sélectionner ce qu'il veux copier, ctrl-c / ctrl-v ne sert plus a grand chose ;) , sauf si effectivement il copie/colle son mail avant, mais ca reste assez rare je pense.

Ou alors on interdit le select et clique droit sur toute les cases email, mais niveau ergonomie c'est pas top :( .

Je vais voir si il y a moyen de desactivé le ctrl-v ctrl-c quand même au cas ou.

Link to comment
Share on other sites

Hello,

MAJ : J'ai changer le script pour qu'il désactive le ctrc-c ctrl-v.

Autre chose si l'on veux que le script ne fonctionne que sur l'émail lors de l'inscription, il faut changer et mettre le bout de code


$js_files = array(  _THEME_JS_DIR_.'tools/statesManagement.js',  _THEME_JS_DIR_.'no_select.js' );



Dans le bloc de code ligne 28

if (Tools::isSubmit('SubmitCreate'))
{
   if (!Validate::isEmail($email = Tools::getValue('email_create')))
       $errors[] = Tools::displayError('invalid e-mail address');
   elseif (Customer::customerExists($email))
       $errors[] = Tools::displayError('someone has already registered with this e-mail address');    
   else
   {
       $js_files = array(  _THEME_JS_DIR_.'tools/statesManagement.js',  _THEME_JS_DIR_.'no_select.js' ); // ligne a rajouter
       $create_account = 1;
       $smarty->assign('email_create', Tools::safeOutput($email));
       $_POST['email'] = $email;
   }
}



Du coup il le fera uniquement sur la ligne d'émail de l'inscription, et plus sur la ligne émail de la connexion au compte client.

Pensé bien a remettre la ligne d'origine par contre (ligne 11).

//CSS ans JS file calls
$js_files = array(
   _THEME_JS_DIR_.'tools/statesManagement.js'
);



A tester en local avant comme d'hab ;)

Dite moi si c'est ok pour vous.

no_select.zip

Link to comment
Share on other sites

super ca marche bien sur chrome, IE7 et FF. En fait le no select ne fonctionne pas sur Chrome, là le CtrlC et Ctrl V est desactivé sur chrome donc c'est bon. Merci ! Juste un truc que j'ai noté: apres le message d'erreur, la selection et le copié collé est à nouveau possible mais c'est déja pas mal !

Link to comment
Share on other sites

Yop,

Bon j'ai encore modif un peu le script pour que ca soit plus propre.

Du coup j'ai laissé possible la sélection, j'ai juste désactivé le click droit et les ctrl-c/v (sur les 2 champs email et email_verify). Je trouvais ca plus ergonomique pour l'utilisateur, de plus ca règle le fait que ca ne fonctionnais plus une fois le "mail no match" affiché.

Donc : dans authentication.php on laisse ligne 11 :

//CSS ans JS file calls
$js_files = array(
   _THEME_JS_DIR_.'tools/statesManagement.js', _THEME_JS_DIR_.'no_select.js' );
$errors = array();



Et il y a juste a remplacer le no_select.js

Ca marche sous Firefox / IE 8 / Safari / Chrome mais pas sur Opera.

no_select.zip

Link to comment
Share on other sites

Salut à tous

il me semble qu'il y a quelque part dans 1.2.4 une fonction ou un module qui envoi un lien de validation par mail. C'est une info complémentaire qui doit intéresser pas mal d'entre nous !

a+


Il y a une modif qui fait ca je crois... mais le client qui veux passé une commande rapidos a peut etre pas envi d'aller dans son mail pour activer son compte ?
Link to comment
Share on other sites

jolvil, je compte sur toi pour tester


Testé, ca à l'air tout bon ! :cheese:

Chrome, IE7, FF3 OK, il y a juste Opera qui ne le prend pas en compte mais il est assez peu utilisé

Safari je ne sais pas


Safari est ok (il existe une version pour windows).

Sinon effectivement sur Opera, ca ne fonctionne pas, mais Opera ne prends pas en compte toute les petites modif en JS qui touche un peu aux standard :)
Link to comment
Share on other sites

  • 4 months later...
  • 1 month later...
  • 4 months later...
  • 1 month later...
  • 1 year later...
  • 10 months later...
  • 1 year later...
  • 6 months later...

Bonjour,

 

J'ai testé cette fonctionnalité sur la version 1.5.4 et effectivement cela ne marche pas.

Le PB est que l’événement 

window.onchange

 n'est pas prise en compte à l'arrivé dans cette page donc le script n'est pas exécuté.

 

Une solution possible :

utiliser l’événement onclick car (l'utilisateur doit forcément cliquer sur la page)

 

window.onclick = function() {
disableEmailCopy();
}
Edited by Hamida (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...