supprimer entrée après une date

Eléphanteau du PHP | 24 Messages

12 janv. 2009, 21:45

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

ViPHP
AB
ViPHP | 5818 Messages

12 janv. 2009, 22:02

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.

Eléphanteau du PHP | 24 Messages

12 janv. 2009, 22:54

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???

ViPHP
AB
ViPHP | 5818 Messages

12 janv. 2009, 23:44

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=

Eléphanteau du PHP | 24 Messages

13 janv. 2009, 14:38

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

Eléphant du PHP | 170 Messages

13 janv. 2009, 15:54

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

Eléphanteau du PHP | 24 Messages

13 janv. 2009, 18:33

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

ViPHP
ViPHP | 3607 Messages

13 janv. 2009, 18:58

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

ViPHP
AB
ViPHP | 5818 Messages

13 janv. 2009, 19:05

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.

Eléphanteau du PHP | 24 Messages

13 janv. 2009, 19:06

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?

Eléphant du PHP | 170 Messages

13 janv. 2009, 19:30

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'

ViPHP
AB
ViPHP | 5818 Messages

13 janv. 2009, 19:34

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.

ViPHP
AB
ViPHP | 5818 Messages

13 janv. 2009, 19:41

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.

Eléphant du PHP | 170 Messages

13 janv. 2009, 19:58

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 ...

Eléphanteau du PHP | 24 Messages

13 janv. 2009, 20:12

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