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 :

[Conception] suppression automatique à intervalles réguliers


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut [Conception] suppression automatique à intervalles réguliers
    Bonjour tout le monde !

    Voilà j'aimerais supprimer une donnée automatiquement et à intervalles réguliers. Concrètement, je souhaiterais que toutes les semaines, une donnée soit automatiquement remise à zéro.

    Ainsi j'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
    <?php
            
    		
    		$sql = "DELETE affich FROM produit WHERE ... "";
            $row=mysql_query($sql);
    ?>
    et voici ma table :

    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
    `id` int(11) NOT NULL,
      `sid` int(11) NOT NULL default '0',
      `pseudo` varchar(80) NOT NULL default '',
      `nom` varchar(80) NOT NULL default '',
      `prenom` varchar(80) NOT NULL default '',
      `spec` text NOT NULL,
      `url` varchar(150) NOT NULL default '',
      `email` varchar(80) NOT NULL default '',
      `photoarticle` text NOT NULL,
      `lecteurarticle` text NOT NULL,
      `parrain` varchar(80) NOT NULL default '',
      `affich` tinyint(4) NOT NULL default '0',
      `cat` int(11) NOT NULL,
      `newsletter` varchar(4) NOT NULL,
    Merci de votre aide

    PS : affich comptabilise le nombre d'affichage

  2. #2
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Un compte à rebours serait-il approprié ? Lors de l'expiration (disons au bout d'une semaine par exemple) celui-ci revient à sa valeur initiale et re - décompte ? nan ?

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Par défaut
    Il te faut utiliser une tâche planifiée (aka cron) qui te permet sur le serveur sur lequel tu héberges tes données de déclencher un script selon un intervalle de temps que tu peux définir.
    Renseigne toi auprès de ton hébergeur pour voir si ce service est disponible.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Par défaut
    Sinon tu as la méthode bourrin qui consiste à placer ce script dans une page comme ton index. A chaque fois que l'index est ouvert tu compares la date du jouer avec la derniere date a laquelle tu as fait la suppréssion. C'est moins propre mais peut être OK si tu n'as que celà à faire (vu que ton script est pas trop gros c'est pas bien grave).

  5. #5
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    C'est la seule possibilité que j'ai ?

  6. #6
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    on a répondu en même temps. Personnellement, je préfèrerai passer par cette deuxième méthode. Comment m'y prendre concrètement ?

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Par défaut
    ou la j'avais pas bien lu ton code. Deja tu peux pas faire un delete sur un champ de ta base de données. Tu peux soit delete une ligne de ta base de données (avec tous ses attributs, id affic etc...) ou alors mettre à jour le champ affic. (update affic='' where id=XXX).

    C'est c'est pour la concéption de ta base.
    Bon si j'ai bien compris tu veux réninitialiser le nombre d'affichages à 0 à un moment donné.

    Dans ce cas, tu rajouter dans ta table un champ date_mise_a_jour de type DATE.

    Ensuite tu crées un script dans un fichier a part.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $date_jour=date('Y-m-d');
    $requete="update tatable set affic=' ' where date_mise_a_jour<'".$date_jour."'";
    mysql_query($requete)
    Dans ton index tu rajoutes include("fichier.php");

    ce fichier va remettre à 0 tous les jours le compteur.

  8. #8
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Merci Raideman

    Un petit truc : comment je fais pour remettre à 0 tous les 7 jours par exemple ? ou faire un intervalle supérieur à 1 jour ? tu vois ?

  9. #9
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Dans ce cas, tu rajouter dans ta table un champ date_mise_a_jour de type DATE.
    A quoi me sert le champ date_mise_a_jour et surtout, comment celui-ci est "alimenté" si je puis dire ?

    Si j'ai bien compris, si ce champs(date_mise_a_jour) est inférieur à la date ($date_jour), mon champ affich est remis à 0.

    Vous voyez ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Par défaut
    D'apres que j'ai compris , lors de l'insertion dans ta db tu fais un mktime() et tu rajoute l'equivalent de 7 jour dans date_mise_a_jour et une fois que date_mise_a_jour est egal au timestamp ou superieur tu supprime

  11. #11
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Concernant le mktime() j'ai pas tout saisi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    $date_mise_a_jour = mktime(0, 0, 0, date("m"), date("d")+7, date("y"));
    echo "Dans une semaine nous serons le ".date("d/m/y", $date_mise_a_jour);

    Maintenant, comment je l'insère dans ma base (date_mise_a_jour) et à partir de quelle page ? En effet, si ce code est en index, l'insertion dans ma base sera toujours décalé d'un jour par jour et mon compteur jamais remis à 0 ?

    Ainsi en reprenant le code de Raideman comment puis-je intégrer $date_mise_a_jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    $date_jour=date('Y-m-d');
    $requete="update tatable set affich=' ' where date_mise_a_jour<'".$date_jour."'";
    mysql_query($requete)
    Sinon en cherchant un peu sur les forums j'ai ce code pour réinitialiser un compteur à 0 et par jour :


    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
     
     
    <?php 
      $nom = date("Y-m-d"); 
      $query = mysql_query("SELECT * FROM produit WHERE date_mise_a_jour='$nom'" ) or die("");
      $nb = mysql_num_rows($query);
      if($nb == '0'): 
        $sql = "INSERT INTO produit VALUES('$nom','1')";
      else : 
        $sql = "UPDATE compte_jour SET nb = nb + 1 WHERE date_mise_a_jour='$nom'";
      endif; 
     
      // le resultat se trouve dans
      echo $nb[nb];
     
    ?>
    J'ai besoin de votre aide pour remettre tout ça en ordre

    Merci d'avance

  12. #12
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Pour reprendre tout ce post à l'endroit, je prends quelques minutes pour résumer :

    Voilà; je propose à mes internautes un lien qu'ils peuvent insèrer dans leur page. Ce lien redirige vers ma page index.php et comptabilise pour eux un hit à chaque visite.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = mysql_query("update sbbproduit set affich=affich+1 where id='$id'")or die(mysql_error());
    mysql_close();
    Aussi, je souhaiterais que le compteur de hits (affich) soit automatiquement remis à 0 au bout de 7 jours.

    Les posts précédents me permettent de cerner un peu mieux le problème mais j'ai du mal à concevoir l'insertion d'une date + 7 pour la comparer à la date actuelle.

    Si date + 7 < date actuelle == remise à 0

    Merki tt le monde !

  13. #13
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Si tu ne veux pas t'ennuyer avec ton hébergeur, tu peux utiliser ce genre de service :

    http://crontab.fr/login.php

    On doit en trouver d'autres sur le net, mais je n'ai plus les adresses.

    Concrètement, tu donnes l'URL de la page que tu veux exécuter périodiquement et ça la lance. Tu n'as plus qu'à mettre ton script dans cette page et donner l'URL de cettedite page.

  14. #14
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Merci Bisûnûrs !

    Concernant le script, j'utilise quoi pour remettre le compteur de chaque membre à 0 ?

    en gras ci-dessous :

    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
    `id` int(11) NOT NULL,
      `sid` int(11) NOT NULL default '0',
      `pseudo` varchar(80) NOT NULL default '',
      `nom` varchar(80) NOT NULL default '',
      `prenom` varchar(80) NOT NULL default '',
      `spec` text NOT NULL,
      `url` varchar(150) NOT NULL default '',
      `email` varchar(80) NOT NULL default '',
      `photoarticle` text NOT NULL,
      `lecteurarticle` text NOT NULL,
      `parrain` varchar(80) NOT NULL default '',
      `affich` tinyint(4) NOT NULL default '0',
      `cat` int(11) NOT NULL,
      `newsletter` varchar(4) NOT NULL,
    Actuellement, lorsqu'un visiteur est redirigé vers mon application, mon script enregistre 1 affichage et 1 affich. J'aimerais remettre à 0 "affich" périodiquement ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = mysql_query("update sbbproduit set affichages=affichages+1,affich=affich+1 where id='$id'")or die(mysql_error());
    mysql_close();
    Voilà, lol j'ai un peu de mal...je te l'accorde !

  15. #15
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Ben par exemple tu fais une page toto.php que tu mets sur ton serveur.

    Le cron appellera donc cette page.

    (Quand on te demande l'URL du script à exécuter ça sera donc : http://www.monsite.com/toto.php)

    Et cette page n'aura juste ça :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    include('connexionalabase.php');
     
    $sql = "UPDATE sbbproduit
            SET affichages = 0";
            /* mise à jour de tous les enregistrement de la table */
     
    mysql_query($sql);
    ?>

  16. #16
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    http://www.webcron.org/
    http://cron.hiwit.org/

    Peut-être un peu plus évolué que le lien précédent niveau ergonomie.

    Après, je te laisse chercher. ^^

  17. #17
    Membre chevronné Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Par défaut
    je confirme ce que bisûnûrs à dit ; je rajoute même que WebCron est bien sympatique !!
    Il t'envoit même un mail en cas de problème lors de l'exécution de ton script.

  18. #18
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Bonjour tout le monde !

    Désolé pour le retard ! La méthode de bisûnurs est tout indiquée et fonctionne parfaitement. Je passe par WebCron que je conseille d'ailleur Très agréable à utiliser.

    Merci de tous vos posts et @bientôt++

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

Discussions similaires

  1. [Conception]Suppression automatique d'anciennes entrées
    Par choups76 dans le forum Modélisation
    Réponses: 5
    Dernier message: 19/04/2007, 10h16
  2. Réponses: 4
    Dernier message: 25/02/2006, 14h54
  3. Suppression automatique d'un package
    Par byloute dans le forum Debian
    Réponses: 1
    Dernier message: 22/02/2006, 11h11
  4. suppression automatique des enregistrements
    Par abdou.sahraoui dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/08/2005, 13h45
  5. Traitement à intervalle régulier
    Par jagboys dans le forum MFC
    Réponses: 2
    Dernier message: 04/07/2005, 23h20

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