Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/04/2007, 19h21   #1
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
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 :
1
2
3
4
5
6
7
8

<?php
        
		
		$sql = "DELETE affich FROM produit WHERE ... "";
        $row=mysql_query($sql);
?>
et voici ma table :

Code :
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
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 20h33   #2
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
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 ?
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 20h34   #3
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
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.
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 20h36   #4
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
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).
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 20h37   #5
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
C'est la seule possibilité que j'ai ?
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 20h39   #6
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
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 ?
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 20h49   #7
Membre Expert
 
Inscription : octobre 2002
Messages : 1 141
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2002
Messages : 1 141
Points : 1 204
Points : 1 204
Envoyer un message via MSN à Raideman
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 :
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.
Raideman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 21h02   #8
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
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 ?
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 23h45   #9
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
Citation:
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 ?
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 02h18   #10
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 28
Points : 13
Points : 13
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
micka39 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 12h58   #11
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
Concernant le mktime() j'ai pas tout saisi :

Code :
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 :
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 :
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
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 14h05   #12
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
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 :
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 !
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 14h37   #13
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
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.
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 15h48   #14
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
Merci Bisûnûrs !

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

en gras ci-dessous :

Code :
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 :
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 !
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 15h58   #15
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
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 :
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);
?>
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 16h16   #16
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
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. ^^
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 16h31   #17
Membre expérimenté
 
Avatar de dj-julio
 
Inscription : décembre 2005
Messages : 742
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : décembre 2005
Messages : 742
Points : 576
Points : 576
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.
__________________
Mon Site/Cv.
dj-julio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 18h55   #18
Nouveau Membre du Club
 
Avatar de Angelik
 
Inscription : août 2006
Messages : 217
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : août 2006
Messages : 217
Points : 31
Points : 31
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++
Angelik est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h17.


 
 
 
 
Partenaires

Hébergement Web