Page 1 sur 2

supprimer entrée après une date

Posté : 12 janv. 2009, 21:45
par Yiruko
Bonjour/Bonsoir!

j'aimerais savoir s'il est possible de supprimer un événement/champ dans une base de donnée par rapport à sa date?

Je m'explique: j'ai une base de donnée avec de nombreux champs mais bon celui qui m'intéresse dans ce cas est le champs date!

J'aimerais que quand la date inscrite dans la base de donnée est passé, le champ se supprime lui-même tout seul!

un exemple:
dans ma base de donnée j'ai:
champ1 | champ2 | ... | 2009-02-04 | ...

Voila j'aimerais que cette entrée ce supprime le 04/02/2009 est-ce possible?

Et si c'est possible d'avoir une petite aide pour la réalisation de ce script ou des pistes ce serait sympa!

Je pense que le php doit pouvoir faire ça mais je ne suis pas sur ... et puis je suis un peu débutant en plus dans ce domaine ><'

Merci de votre aide!
Jonathan

Posté : 12 janv. 2009, 22:02
par AB
Le plus simple que je vois, tu lances un cron (tâche automatisée) tous les jours par exemple à trois heures du matin et tu efface toutes les lignes dont les champs date sont inférieurs à la date actuelle.

Pour la comparaison des dates c'est très facile avec les fonction date de MYSQL (cf les tutos sur ce site ou dans la doc si cela ne suffit pas), quant à la requête c'est la syntaxe basique de delete.
Concernant les crons (ou taches automatisées) tu devrais trouver également de l'info dans les tutos.

Posté : 12 janv. 2009, 22:54
par Yiruko
ok je vais essayer de trouver ça... et j'espere qu'avec le peu de connaissance que j'ai j'y arriverais ^^' enfin au pire si je ne réussit pas, je pense que quelqu'un pourra m'aider ici ;)

Merci beaucoup à toi pour la piste ^^'

Edit: Voila j'ai regarder le tuto et je voulais comprendre un peu mieux le fonctionnement de ce "cron"

En fait d'après ce que je comprend c'est un site (ou une fonction unix) qui "simule" une connexion à la page demandé contenant le script php faisant ce que l'on veut faire et donc quand le script est lancé il effectue sa tâche et hop et ça ça se fait tout les intervalles de temps que l'on a demandé!

est-ce bien ça???

Posté : 12 janv. 2009, 23:44
par AB
Edit: Voila j'ai regarder le tuto et je voulais comprendre un peu mieux le fonctionnement de ce "cron"

En fait d'après ce que je comprend c'est un site (ou une fonction unix) qui "simule" une connexion à la page demandé contenant le script php faisant ce que l'on veut faire et donc quand le script est lancé il effectue sa tâche et hop et ça ça se fait tout les intervalles de temps que l'on a demandé!

est-ce bien ça???
Oui c'est bien ça, et pour cette raison on a intérêt que l'hébergeur propose cette fonctionnalité (la grande majorité le proposent).
Sinon il faut passer par des prestataires extérieurs cf http://www.phpfrance.com/forums/viewtop ... highlight=

Posté : 13 janv. 2009, 14:38
par Yiruko
ah je n'avais pas vu ce sujet, j'avais trouvé celui la: http://www.phpfrance.com/forums/voir_sujet-18338.php qui est situé dans le FAQ


hum j'ai donc un peu plus compris ce que c'était merci à toi!

Maintenant pour ce qui est de la fonction
en fait ce serait un truc de ce genre la : DELETE * FROM nom_de_la_table WHERE to_days(now()) > to_days(date_f)

(ou date_f serait la date à laquelle je veux supprimer ma fiche)

Est-ce bien un truc de ce genre là?

Merci d'avance!
Jonathan

Posté : 13 janv. 2009, 15:54
par blof
Bonjour,

plus simplement :
( date_f étant la date à laquelle tu veux supprimer ta fiche, je mettrais ">=" )

Code : Tout sélectionner

DELETE FROM nom_de_la_table WHERE NOW() >= date_f

Posté : 13 janv. 2009, 18:33
par Yiruko
hum mais si c'est égal ça la supprimerais le jour indiqué... hors je veux qu'elle reste jusqu'au soir ...


Pour ça j'aurais (si je me trompe pas) deux solutions:

1) Soit mettre juste ">" et mettre ma tâche automatique très tôt le matin donc vers minuit et donc la fiche resterais valide jusqu'au soir.

2) Soit mettre comme tu m'as indiqué ">=" et mettre ma tâche automatique très tard le soir vers 23h par exemple

Est ce que je me trompe?


Par contre j'aurais une autre petite question un peu en rapport mais pas trop... si vous voulez que j'ouvre un autre topic prévenez moi mais bon voici ma question:
J'aimerais que certaines fiches ne se suppriment pas! et je voulais savoir si le fait de ne pas rentrer de date pourrais permettre d'avoir une durée de vie "infinie" ... mais bon la avec ce qu'on dit plus haut j'ai un doute, car si l'on rentre pas de date si je ne me trompe pas ça va être enregistré comme "0000-00-00" et donc ce sera forcément inférieur à la date du jour est-ce ça? ou ça fonctionnera?
et si ça ne fonctionne pas, comment permettre d'avoir une durée de validité infinie?

Merci beaucoup à vous pour votre aide ^^'
Jonathan

Posté : 13 janv. 2009, 18:58
par jojolapine
Pour ta deuxième question, il suffit de rajouter un champ "asauvegarder" disons, qui vaut soit 0 soit 1 (ou 1 veut dire pas de suppression), et ensuite pour ta requête de supression, tu rajoutes dans le where

Code : Tout sélectionner

WHERE [...] AND asauvegarder <> 1
Voilou

Posté : 13 janv. 2009, 19:05
par AB
Et sinon pour ta question précédente, cela dépend de ce que tu veux faire, mais à priori il est plus logique de supprimer après minuit plutôt qu'avant.

Posté : 13 janv. 2009, 19:06
par Yiruko
Mais la date sera bien 0000-00-00?

Edit (j'avais pas vu la réponse de AB ^^')
Et sinon pour ta question précédente, cela dépend de ce que tu veux faire, mais à priori il est plus logique de supprimer après minuit plutôt qu'avant.
Hum donc seulement le ">" suffirait? puisque ça se supprimera le lendemain matin non?

Posté : 13 janv. 2009, 19:30
par blof
hors je veux qu'elle reste jusqu'au soir ...
je voulais savoir si le fait de ne pas rentrer de date pourrais permettre d'avoir une durée de vie "infinie" ...
Si on admet que tu lances ta tâche planifiée "très tôt le matin" :

Code : Tout sélectionner

DELETE FROM nom_de_la_table WHERE NOW() > date_f AND date_f <> '0000-00-00'

Posté : 13 janv. 2009, 19:34
par AB
D'une manière générale il est conseillé si possible de lancer les tâches automatiques dans la nuit, quand le trafic visiteur est au minimum.

Posté : 13 janv. 2009, 19:41
par AB
hors je veux qu'elle reste jusqu'au soir ...
je voulais savoir si le fait de ne pas rentrer de date pourrais permettre d'avoir une durée de vie "infinie" ...
Si on admet que tu lances ta tâche planifiée "très tôt le matin" :

Code : Tout sélectionner

DELETE FROM nom_de_la_table WHERE NOW() > date_f AND date_f <> '0000-00-00'
Oui bien sûr il pourrait faire comme ça, mais je préférerais pour ma part une solution avec la méthode de jojolapine car sa méthode permet de garder la date du post. Ce qui pourra s'avérer fort utile (indispensable) par la suite pour faire du tri ou des recherches sur les dates.

Posté : 13 janv. 2009, 19:58
par blof
sa méthode permet de garder la date du post.
D'après ce que je comprends, il s'agit de la date limite d'existence de l'enregistrement.
Je ne trouve pas que l'idée de Yiruko soit si mauvaise ...

Posté : 13 janv. 2009, 20:12
par Yiruko
hum en fait je n'aurais besoin d'une date de fin que pour les fiches de courte durée (pour qu'elle se supprime mais aussi pour indiquer aux utilisateurs quand ça le sera!) par contre les événements longue durée je n'ai pas besoin de date! c'est pour ça que j'ai émis l'hypothèse de laisser le champs vide!

Donc je pense que la méthode de blof est la bonne non? puisque dans tout les cas, pour mes événement "infini", je n'aurais pas de date!

Merci de vos conseils!
Jonathan