Bonjour,
J'ai un système d'enregistrement sur ma page d'accueil.
Il fonctionne de cette manière :

  • Le formulaire d'enregistrement apparaît
  • Si ses inputs renvoient un isset true, une variable $i est def sur 0 ($i = 0)
  • A chaque erreur détectée (email déjà existant, oubli d'un champ...) $i s'incrémente
  • Si $i=0 a la fin du processus de vérification, alors le formulaire passe en display: none et
    un autre formulaire apparaît. (Celui ci est directement dans le if).
  • Il y a donc rafraîchissement de la page. Le nouveau formulaire est un formulaire demandant un code. Si l'utilisateur se trompe de code, la page se rafraîchira pour afficher une erreur et la variable $i ne sera plus définie. J'ai donc rajoutée une condition qui est qu'un champ hidden de cet autre formulaire soit isset.
  • Cet autre formulaire est la validation par mail. Si le code rentré est le même que celui envoyé. Les informations, précédemment stockées dans des variables sont envoyées à la bdd.

Problème :
Les variables ayant stockées les données de l'utilisateur n'existent plus lors de la validation par mail.
Hypothèse:
Lorsque la page se rafraîchit pour que le formulaire de validation par mail apparaisse, les variables ayants stockées les données utilisateurs sont supprimées du fait du rafraîchissement.

Impossible de stocker ces variables dans un cookie car l'utilisateur pourrait les modifier après le processus de vérifications des erreurs.
Le problème est que je suis obligé de créer deux formulaires si je veux une validation par mail. Hors je ne peux pas présenter le formulaire de validation par mail avant même que l'utilisateur n'ai rentré ses informations.
Je pourrais envoyer les informations à la bdd dès l'envoi du premier formulaire. Avec une ligne "account_validate" portant la valeur 0 et 1 après l'envoi du second formulaire. Sauf que si je fais ça, même les comptes non validés occuperont la place d'un email ou d'un nom d'utilisateur. (renvoyant l'erreur "email déjà utilisé").

cordialement,
Mattéo Goudin

2 réponses


Lartak
Réponse acceptée

Bonjour.
Le plus simple est qu'à la validation du premier formulaire, du sauvegardes les données en BDD an ajoutant un champ token par exemple que tu génères juste avant de sauvegarder en BDD, tu envoies le mail avec un lien vers une page qui aura dans le lien le token envoyé par mail, lors de sa confirmation, tu fais la vérification du token s'il appartient bien à un compte utilisateur, si c'est le cas tu passes le champ token à NULL, par conséquence pour la connexion de l'utilisateur tu vérifies si le champ token est bien à NULL.

Sauf que si je fais ça, même les comptes non validés occuperont la place d'un email ou d'un nom d'utilisateur. (renvoyant l'erreur "email déjà utilisé").

Il te suffit par exemple d'ajouter un champ dans la table qui serait de type DATETIME, qui lorsqu'un enregistrement est sauvegardé (et non modifié) aurait le DATETIME du moment de la sauvegarde, ensuite tu n'as plus qu'à faire un CRONJOB tous les 48h ou 72h (par exemple) et qui ciblerait un script qui vérifierait si dans la table de la BDD, s'il y a des enregistrement dont le champ token n'est pas à NULL et qui aurait un DATETIME dont la valeur est > au délai fixé, de cette manière si le script en récupère lors de la requête SQL, il supprime les enregistrements correspondants, par conséquent tu libèreras des enregistrements de comptes qui n'auront pas été confirmés dans le délai fixé.

Tu peut pas passer par de l'ajax pour gérer tes formulaires? au moins ta page n'est pas recharger, tu peut perssister localement les data dans ton script js et valider à la volé les infos