IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Effacer 1 ligne 15 minutes après sa création


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Zephire
    Homme Profil pro
    en devenir
    Inscrit en
    Janvier 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : en devenir

    Informations forums :
    Inscription : Janvier 2018
    Messages : 23
    Par défaut Effacer 1 ligne 15 minutes après sa création
    Bonjour,
    tout est dans le titre !

    Sachant que:
    • Un trigger lance une action juste après ou juste avant son appel.

    • Un "événement" est déclenché par un "temps" déterminé.

    Il me faut donc un mélange des deux... En outre, j'ai lu que les triggers avaient des restrictions très fortes, ce qui semble interdire la création d'un événement à l'intérieur d'un trigger.
    Voici ce que je veux faire (comme dans le titre):
    Une ligne est insérée. 15 minutes après, cette ligne doit être effacée. Et le tout uniquement avec MySQL (si possible ....)
    Il faudrait un trigger qui se déclenche 15 minutes après le INSERT , et non pas "juste après"..... L'action serait donc un DELETE de la ligne.
    Vous avez une idée de la manière de procéder ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Une piste : si tu enregistres sa date de création dans chaque ligne, tu pourrais déclencher une procédure toutes les n minutes qui supprime les lignes plus âgées que 15 minutes
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre averti Avatar de Zephire
    Homme Profil pro
    en devenir
    Inscrit en
    Janvier 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : en devenir

    Informations forums :
    Inscription : Janvier 2018
    Messages : 23
    Par défaut
    C'est une table qui ne contient qu'1 seule ligne. Pour être plus explicite, il s'agit d'un token stocké dans la BDD dans le cadre de la réinitialisation d'un mot de passe.
    La personne rentre son adresse email, si ça match avec l'adresse stockée en BDD alors 1 token est créé, stocké en BDD et envoyé par mail. La validité de ce token en BDD doit être de 15 min.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Et si plusieurs personnes réinitialisent leur mot de passe dans le même quart d'heure, que se passe-t-il ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre averti Avatar de Zephire
    Homme Profil pro
    en devenir
    Inscrit en
    Janvier 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : en devenir

    Informations forums :
    Inscription : Janvier 2018
    Messages : 23
    Par défaut
    J'ai créé une petite TRANSACTION comprenant 2 requêtes :
    1° DELETE latable
    2° INSERT letokendelamortquitue
    (COMMIT, of course .....)

    Et ceci à chaque fois qu'un token est créé.

    Précision: il n'y a qu'un seul utilisateur. Le propriétaire du blog (oui, il s'agit d'un blog).

  6. #6
    Membre averti Avatar de Zephire
    Homme Profil pro
    en devenir
    Inscrit en
    Janvier 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : en devenir

    Informations forums :
    Inscription : Janvier 2018
    Messages : 23
    Par défaut
    Vous imaginez ? Tout ça pour créer une simple ligne auto-destructrice. Dans Mission Impossible ça avait l'air tellement simple ....

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 882
    Par défaut
    Salut Zephir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
     
    -- ======================
    -- Base de Données `base`
    -- ======================
     
    DROP DATABASE IF EXISTS `base`;
     
    CREATE DATABASE `base`
    	DEFAULT CHARACTER SET `latin1`
    	DEFAULT COLLATE       `latin1_general_ci`;
     
    USE `base`;
     
    -- ============
    -- Table `test`
    -- ============
     
    DROP TABLE IF EXISTS `test`;
     
    CREATE TABLE `test`
    ( `id`  integer unsigned  NOT NULL AUTO_INCREMENT primary key,
      `maj` TIMESTAMP(6)      DEFAULT current_timestamp(6),
      `val` varchar(255)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- =================
    -- Evènement `clean`
    -- =================
     
    DROP EVENT IF EXISTS `clean`;
     
    DELIMITER $$
    CREATE EVENT `clean`
    	ON SCHEDULE
    	EVERY 1 MINUTE
    	STARTS CURRENT_TIMESTAMP
    	ENDS   CURRENT_TIMESTAMP + INTERVAL 1 YEAR
    	ON COMPLETION PRESERVE ENABLE
    	DO BEGIN
    		DELETE FROM `test`
    		 WHERE maj < NOW() - INTERVAL 15 MINUTE;
    	END$$
    DELIMITER ;
     
    -- ========================
    -- Lancement du `scheduler`
    -- ========================
     
    SET GLOBAL event_scheduler = ON;
     
    -- ===
    -- FIN
    -- ===
     
    COMMIT;
    SET AUTOCOMMIT = 1;
    @+

  8. #8
    Membre extrêmement actif Avatar de ddoumeche
    Homme Profil pro
    Ingénieur recherche et développement
    Inscrit en
    Octobre 2007
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Singapour

    Informations professionnelles :
    Activité : Ingénieur recherche et développement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 711
    Par défaut
    Nul besoin d'effacer la ligne en dur, une date de suppression logique a T+15 suffit et si ton internaute est hors délai, un message personnalisé peut lui dire que son token a expiré.
    Cela permet également de pouvoir tracer les problèmes plus simplement.

    Un cron peut ensuite effacer les enregistrements obsolètes de cette table a J+30 par exemple, si tu as peur qu'elle ne grossisse démesurément

  9. #9
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 882
    Par défaut
    Salut ddoumeche.

    Vu que personne n'a traité la suppression d'une ligne, toutes les quinze minutes, dans une table, j'ai donné le script qui permet de le faire.

    Maintenant, la solution envisagée par Zephir me semble bien compliqué par rapport à sa demande :
    Citation Envoyé par Zephir
    La personne rentre son adresse email, si ça match avec l'adresse stockée en BDD alors 1 token est créé, stocké en BDD et envoyé par mail. La validité de ce token en BDD doit être de 15 min.
    En fait, il s'agit d'une demande qui se fait en deux temps.

    Il faut prévoir dans la table permettant d'identifier l'internaute, une colonne date+time destinée à indiquer la demande de modification du mot de passe.

    Dans un premier temps, l'internaute demande à modifier son mot de passe.
    On modifie la colonne date+time en mettant la date et l'heure de sa demande.
    On envoie un email afin de confirmer la validité de sa demande.

    Dans un second temps, l'internaute confirme sa modification, en cliquant sur le lien qui est donné par son email.
    Il suffit alors de vérifier, à partir de cette nouvelle colonne, que la confirmation s'est faite dans les temps à savoir moins de 15 minutes après la demande.

    Plusieurs remarques :

    1) Il est inutile de déclencher un événement toute les minutes pour supprimer les token dans une table, qui de toute évidence sera dans 99% vide.
    Cela consomme du temps cpu pour rien, parce que Zephir n'a pas envisagé toutes les solutions à son problèmes.

    2) Il est inutile de créer une table, destiné à gérer des "token".

    3) Vous perdrez l'information concernant la date+heure de la dernière demande de modification du mot de passe.

    4) Faites au plus simple. Évitez de gérer une usine à gaz !

    @+

Discussions similaires

  1. Zone de liste Access: Comment effacer une ligne apres update
    Par saroonette dans le forum VBA Access
    Réponses: 4
    Dernier message: 12/05/2014, 10h59
  2. [XL-2010] Effacer une ligne après copie dans un autre onglet
    Par cantegrouille dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/03/2013, 09h00
  3. [FSO] Effacer une ligne dans un fichier
    Par Johnbob dans le forum ASP
    Réponses: 4
    Dernier message: 30/05/2007, 16h23
  4. [langage] Effacer une ligne dans un fichier
    Par sebi77 dans le forum Langage
    Réponses: 2
    Dernier message: 01/01/2005, 12h43
  5. Effacer une ligne dans la table nat
    Par vbcasimir dans le forum Sécurité
    Réponses: 2
    Dernier message: 11/01/2004, 00h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo