[php] suppression entrée Bdd par date

Fermé
dubuducu Messages postés 391 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 19 mai 2010 - 11 juin 2008 à 14:19
prosciuto145 Messages postés 92 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 7 septembre 2009 - 7 juil. 2008 à 20:06
Bonjour,
je vous explique mon probleme,
je ne sais pas si c'est possible mais je souhaiterai avec votre aide savoir la methode pour supprimer au bout de 7 jours par exemple a compter de la $date (d'aujourdui) une entrée provenant d'un formulaire dans ma base SQL !
je recoi tous les jours des formulaires et je souhaiterai qu'ils aient donc une durée de vie de 7jours !

j'arrive a afficher la date d'aujourduid dans mes forms, aucun souci. je voudrai juste savoir comment faire le reste.

Merci d'avance pour vos reposnes :

4 réponses

samyghan Messages postés 73 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 28 janvier 2009 15
11 juin 2008 à 14:23
Je te donne une piste. Le timestamp (via la fonction time();), c'est une fonction qui renvois un chiffre qui s'incrémente a chaque seconde.

De la, tu peux stocker le timestamp actuel de ton entrée de formulaire via un :
<input type="hidden" value="<?php echo time(); ?>" name="timestamp" />

Il te sera trés facile de faire un calcul pour supprimer periodiquement les anciennes entrées :

60 (sec) * 60 (min) * 24 (heures) * 7 (jours) <= Lorsque timestamp actuel et timetamp de la base de donnée dépasse cet écart, tu supprime l'entrée via un DELETE FROM table WHERE [...]

Voilà =)
0
prosciuto145 Messages postés 92 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 7 septembre 2009 24
11 juin 2008 à 14:29
J'ai une question en rapport avec cela:
Est-il possible de lancer un script en permanence sur la base de donnees pour justement supprimer les donnees qui ont plus de 7 jours via des triggers ou procedure ou autre ?
Ou doit-on obligatoirement creer une seconde requete a chaque appel d'une premiere requete (si j'ai bien compris c'est ce que tu preconise).
0
samyghan Messages postés 73 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 28 janvier 2009 15 > prosciuto145 Messages postés 92 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 7 septembre 2009
11 juin 2008 à 14:31
Oui, je comprend ta question, et la je t'en retourne une nouvelle :

Quel est ton type d'hébergement web ? =)
0
dubuducu Messages postés 391 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 19 mai 2010 4
11 juin 2008 à 14:31
bon bin moi je suis pomé !
je vais tenter des petits trucs , merci quand meme pour la piste !
0
prosciuto145 Messages postés 92 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 7 septembre 2009 24
11 juin 2008 à 14:33
D'apres ce que j'ai compris il preconise cela:

A chaque requete que tu utilises, par exemple:

SELECT * FROM TABLE_EXEMPLE;

Tu fais en meme temps (juste avant)

DELETE FROM TABLE_EXEMPLE WHERE date>=7 jours

J'espere t'avoir aide
0
samyghan Messages postés 73 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 28 janvier 2009 15 > prosciuto145 Messages postés 92 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 7 septembre 2009
11 juin 2008 à 14:37
Oui juste avant le SELECT tu fais un DELETE.

Sauf que le DELETE serai peut être un peut plus compliqué :

DELETE FROM table WHERE (table.time + 604800) < table.time;
0
samyghan Messages postés 73 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 28 janvier 2009 15
11 juin 2008 à 14:34
Quel est ton problème, quesque tu le comprend pas ? je peux expliquer plus clairement quelques points si tu le souhaite =)
0
dubuducu Messages postés 391 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 19 mai 2010 4
11 juin 2008 à 14:38
si je comprend bien,
je crée un champ timestamp. je stocke l'entrée grace au input <input type="hidden" value="<?php echo time(); ?>" name="timestamp" />.

apres je ne vois pas clairement (synthaxiquement et logiquement ) la procédure pour créer la date d'expiration souhaitée.

quand a la procédure de supression, la requete, je vois tout a fait ce qu'il faut faire.

peux tu m'eclairer sur mes points sombres, merci
0
samyghan Messages postés 73 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 28 janvier 2009 15
11 juin 2008 à 14:42
Ben en fait, sauf dans le cas ou on dispose d'un hébergement pro avec un cron (taches qui peuvent être réalisé a intervalle particulier, par exemple une requete SQL), il t'est impossible de faire une requête qui s'exécute tous les 5min.

Cependant, il t'est possible de faire une fonction qui te permet de faire cette maintenance régulière de la base de donnée. Ducoup, c'est facile de la coller à plusieurs endroits afin que cette requête soit exécutée a chaque action sur cette table.
0
prosciuto145 Messages postés 92 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 7 septembre 2009 24 > samyghan Messages postés 73 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 28 janvier 2009
11 juin 2008 à 14:59
Ok, merci, finalement tu ma plus aide que dubuducu ^^
Bref, ty @+
0
samyghan Messages postés 73 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 28 janvier 2009 15 > prosciuto145 Messages postés 92 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 7 septembre 2009
11 juin 2008 à 15:02
Vos problèmes étaient similaires, j'espère que mon aide a pu lui être bénéfique aussi ;)
0
dubuducu Messages postés 391 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 19 mai 2010 4
11 juin 2008 à 17:01
juste une question :
je met dans mon form.php
INSERT INTO ... ( champ1, ....., now());

et dans ma bdd je crée le champs TIME ... TIME

cela maffiche l'heure d'aujourdui.est-ce la bonne methode pour pouvoir rajouter 7*24*60*60 secondes (je ne sais pas kombien cela fé) et repondre a mon probleme initial

REQUETE: DELETE ... FROM ... WHERE time+7*24*60*60 > time ???
*
voyez vous ?
0
prosciuto145 Messages postés 92 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 7 septembre 2009 24
11 juin 2008 à 20:52
DELETE FROM TABLE WHERE (CURRENT_DATE()-7) < 0
selon moi
0
samyghan Messages postés 73 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 28 janvier 2009 15 > prosciuto145 Messages postés 92 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 7 septembre 2009
30 juin 2008 à 23:04
Excusez moi du UP de plusieurs semaines (vacances :D). CURRENT_DATE() est une fonction relative au SGBD (Système de Gestion de Base de Donnée, comme Mysql ou Oracle pour ne citer que les plus connus).
Ce n'est en aucun cas une sytaxe SQL stricte.

Il est cependant possible d'utiliser cette fonction pour arriver a un résultat donné, cependant le code risque de ne plus etre aussi portable et polyvalent sur certains SGBD !

Sinon la méthode de calcul avec le timestamp (expliqué par dubuducu) est le meilleur moyen pour procéder avec précision (jusqu'a ce que le timestamp soit remis a 0 :D)
0
prosciuto145 Messages postés 92 Date d'inscription dimanche 6 mai 2007 Statut Membre Dernière intervention 7 septembre 2009 24 > samyghan Messages postés 73 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 28 janvier 2009
7 juil. 2008 à 20:06
Oui mais en quoi c'est interessant si on a des moyens tel que current_date() pour nous simplifié la vie ?
autant les utilisés nan ?
0