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

PHP & Base de données Discussion :

Inactivité pendant x temps = compte supprimé - comment faire? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut Inactivité pendant x temps = compte supprimé - comment faire?
    Bonjour,

    Je suis en train de développer un petit forum pour mes débuts en PHP. Pour l'instant je bute sur la maintenance des comptes... Je voudrais pouvoir supprimer un compte dès qu'il aura atteint un certain temps d'inactivité (automatiquement). Je suppose que cela implique un parcours quotidien de ma base de données pour vérifier tout ça. Comment automatiser ce processus? Le code pour supprimer le compte en question ne me pose pas de problème.

    Merci!

    webrider

  2. #2
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Salut,

    Ton problème c'est juste pour la tâche quotidienne ou pour connaitre aussi le code pour calculer le temps écoulé?
    Si tu veux ce code, il faut voir les timestamp. A la creation du compte, tu récupères le timestamp par requête SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT [...] start_timestamp = 'UNIX_TIMESTAMP()' [...]
    Ensuite, tu récupères le timestamp courtant et celui des comptes lors du processus, tu fais la soustraction de ceux-ci ce qui retourne un nombre de secondes. Tu convertis en heures, jours, et en conséquent tu supprimes le compte.

    Pour la tache automatisée aucune idée, moi ce que je ferai c'est qu'à chaque accès au forum (index.php), je lancerai ce script.

    A+

  3. #3
    Rédacteur
    Avatar de BrYs
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 014
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 014
    Points : 3 522
    Points
    3 522
    Par défaut
    L'idée de Anduriel est bonne quoi que il vaut mieux utiliser la fonction PHP time() pour eviter de charger mysql pour rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "INSERT [...] start_timestamp = '".time()."' [...];";
    Ensuite à chaque connexion tu update ton timestamp.

    Pour l'automatisation, tu fais tout simplement un script (une page) qui parcours tous les comptes et tu fais le différence entre le timestamp recupéré en bse et time() si c'est supérieur à njours (mois, années, ...) tu supprime.

    Pour la partie lancement de script, si tu as accès à ton serveur (ssh par exmple), et bien tu utilise les cron (crontab)., sinon http://www.webcron.org/

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 94
    Points : 120
    Points
    120
    Par défaut
    Pour ma part, j'utilise un système de ce genre pour supprimer les comptes non validés après 48h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $max_delay = 48 * 60 * 60;
    $sql_flush = "DELETE FROM ci_members WHERE m_lastip='0.0.0.0' AND m_lastin<(".time()." - $max_delay)";
    $req_flush = mysql_query($sql_flush);
    Bon, m_lastin est le champ qui contient le timestamp da la dernière connexion de l'utilisateur et m_lastip est son ip lors de sa connexion.
    Par défaut, elle est 0.0.0.0 c'est pour cela que je l'utilise.

  5. #5
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    Pour la suppression je crois que tu as tout ce qu'il faut.
    Pour le lancement de ta tache, tu peux aussi faire en faire un petit peu a chaque fois qu'un utilisateur se connecte.

    tu utilise le code de crazycat en rajoutant un LIMIT au DELETE.
    Du coup cela ne ralentit pas trop l'utilisateur et ca te permet de faire cela regulierement.
    If it's not broken, don't fix it.
    BiliBa Built on top of Zend Framework

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci à tous pour vos nombreuses réponses aussi intéressantes les unes que les autres!
    Ce que vous m'avez dit est tout ce que je voulais savoir donc voilà mon problème résolu!

    webrider

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Conception] Comment faire pour bloquer une valeur pendant 24H
    Par lolodelp dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/07/2006, 15h46
  2. Réponses: 11
    Dernier message: 18/02/2006, 19h39
  3. Comment faire une action, par rapport au temps
    Par Happy dans le forum OpenGL
    Réponses: 5
    Dernier message: 12/11/2005, 13h27
  4. Comment faire une mirroir en temps reels de mon ecran?
    Par pointer dans le forum DirectX
    Réponses: 7
    Dernier message: 04/06/2005, 02h56
  5. Réponses: 8
    Dernier message: 18/09/2002, 03h20

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