Suppression d'une ligne au bout d'1 semaine

Eléphant du PHP | 111 Messages

10 mars 2014, 21:02

Hello les amis :)

Je fais un site web et j'aimerais trouvé un systeme pour supprimer la ligne d'une table au bout d'1 semaine ?


J'aimerais savoir comment faire?

Pour m'aider, il vous faut le code source de quelle page?

Merci beaucoup

Eléphant du PHP | 243 Messages

10 mars 2014, 21:30

Bonsoir,

J'avais réalisé un script du même genre. Je m'explique :
Le script permettait de résilier des abonnements. Dés qu'un utilisateur souscrivait un abonnement d'un mois, j'ajoutais dans une base de donnée une date d'expiration ( date du jours + 30 jours ).
J'ai aussi créé un script qui a chaque exécution, comparait la date du jours avec la date d'expiration, et si la date d'expiration était inférieure, elle supprimait l'abonnement. Pour permettre l’exécution de ce script, j'avais mis en place un bot qui chargeait la page tous les jours à 00h00.

Donc en résumé, il faudrait définir pour chaque table une date d'expiration, et créer un fichier qui permettrait de comparer les dates et d'effectuer des modifications si la date venait à expirer.

Bonne soirée,
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Mammouth du PHP | 504 Messages

10 mars 2014, 21:56

Hello,
Donc en résumé, il faudrait définir pour chaque table une date d'expiration, et créer un fichier qui permettrait de comparer les dates et d'effectuer des modifications si la date venait à expirer.
Tu veux dire ligne à la place de chaque ligne, je pense. :D

Oui, c'est ça, chaque ligne a un champ date de création par exemple. Tu fais un script qui selectionne chaque ligne, tu scrute la date (avec mysql, c'est simple date du jour - 7 (regarde les opérations sur les dates)) et tu effaces toutes les lignes qui ont plus de 7 jours.

Tu peux par exemple faire un tache cron qui se déclenche à 00:01 tout les matins (j'ai jamais aimé les cron à minuit 00:00 :wink: )

Eléphant du PHP | 111 Messages

10 mars 2014, 21:59

Hello,
Donc en résumé, il faudrait définir pour chaque table une date d'expiration, et créer un fichier qui permettrait de comparer les dates et d'effectuer des modifications si la date venait à expirer.
Tu veux dire ligne à la place de chaque ligne, je pense. :D

Oui, c'est ça, chaque ligne a un champ date de création par exemple. Tu fais un script qui selectionne chaque ligne, tu scrute la date (avec mysql, c'est simple date du jour - 7 (regarde les opérations sur les dates)) et tu effaces toutes les lignes qui ont plus de 7 jours.

Tu peux par exemple faire un tache cron qui se déclenche à 00:01 tout les matins (j'ai jamais aimé les cron à minuit 00:00 :wink: )
En clair, je fais un if qui examine toutes les lignes et si une ligne fais plus de 7 jours elles se suppriment directement?

Mammouth du PHP | 504 Messages

10 mars 2014, 22:11

<?php

$requete = "SELECT id, date FROM table WHERE date < (NOW()+ INTERVAL 7 DAY)'";
$resultat = mysql_query($requete);
while ($date_expire=mysql_fetch_array($resultat,MYSQL_ASSOC)) {
Tu delete ici... mysql WHERE id='".addslashes($date_expire['id'])."'
}
?>
ça doit ressembler à ça de tete.

La requete te selectionne que les lignes ou la date est expirée: date du jour - 7 jours.

Eléphant du PHP | 243 Messages

10 mars 2014, 22:13

Hello,
Donc en résumé, il faudrait définir pour chaque table une date d'expiration, et créer un fichier qui permettrait de comparer les dates et d'effectuer des modifications si la date venait à expirer.
Tu veux dire ligne à la place de chaque ligne, je pense. :D
Oui exacte !
En clair, je fais un if qui examine toutes les lignes et si une ligne fais plus de 7 jours elles se suppriment directement?
Oui voilà. Et pour le chargement automatique de la page à telle heure, comme l'a dit Damien, il faut passer par une tache cron.

Bonne soirée,
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 111 Messages

10 mars 2014, 22:20

<?php

$requete = "SELECT id, date FROM table WHERE date < (NOW()+ INTERVAL 7 DAY)'";
$resultat = mysql_query($requete);
while ($date_expire=mysql_fetch_array($resultat,MYSQL_ASSOC)) {
Tu delete ici... mysql WHERE id='".addslashes($date_expire['id'])."'
}
?>
ça doit ressembler à ça de tete.

La requete te selectionne que les lignes ou la date est expirée: date du jour - 7 jours.
Ceci est il bon?
<?php
include('config.php')
$requete = "SELECT id, date FROM duel WHERE date < (NOW()+ INTERVAL 7 DAY)'";
$resultat = mysql_query($requete);
while ($date_expire=mysql_fetch_array($resultat,MYSQL_ASSOC)) {
DELETE FROM duel WHERE id='".addslashes($date_expire['id'])."'
}
?>

Mammouth du PHP | 504 Messages

10 mars 2014, 22:23

$requete = "SELECT id, date FROM table WHERE date < (NOW()+ INTERVAL 7 DAY)'";
Il y a un apostrophes en trop.
$requete = "SELECT id, date FROM table WHERE date < (NOW()+ INTERVAL 7 DAY)";
teste SELECT id, date FROM table WHERE date < (NOW()+ INTERVAL 7 DAY) dans phpmyadmin et tu sauras. si ça te retourne bien les dates obseletes, c'est que la requete est bonne.

Mammouth du PHP | 504 Messages

10 mars 2014, 22:23

$requete = "SELECT id, date FROM table WHERE date < (NOW()+ INTERVAL 7 DAY)'";
Il y a un apostrophes en trop.
$requete = "SELECT id, date FROM table WHERE date < (NOW()+ INTERVAL 7 DAY)";
teste SELECT id, date FROM table WHERE date < (NOW()+ INTERVAL 7 DAY) dans phpmyadmin et tu sauras. si ça te retourne bien les dates obseletes, c'est que la requete est bonne.

Eléphant du PHP | 111 Messages

10 mars 2014, 22:39

$requete = "SELECT id, date FROM table WHERE date < (NOW()+ INTERVAL 7 DAY)'";
Il y a un apostrophes en trop.
$requete = "SELECT id, date FROM table WHERE date < (NOW()+ INTERVAL 7 DAY)";
teste SELECT id, date FROM table WHERE date < (NOW()+ INTERVAL 7 DAY) dans phpmyadmin et tu sauras. si ça te retourne bien les dates obseletes, c'est que la requete est bonne.

Voici se que sa ma répondu :

http://hpics.li/0d178ec

En clair toutes les tables, surement la colonne "Date" ne dois pas être bonne.

Mammouth du PHP | 504 Messages

10 mars 2014, 22:49

tu as bien testé:
SELECT id, date FROM duel WHERE date < (NOW()+ INTERVAL 7 DAY)
ta table est bien duel et ton champ qui contient la date s'appelle date ? d'ailleurs si c'est le cas change le nom du champ. date correspond aussi à une fonction php, ça peut induire en erreur.

Eléphant du PHP | 111 Messages

10 mars 2014, 22:55

tu as bien testé:
SELECT id, date FROM duel WHERE date < (NOW()+ INTERVAL 7 DAY)
ta table est bien duel et ton champ qui contient la date s'appelle date ? d'ailleurs si c'est le cas change le nom du champ. date correspond aussi à une fonction php, ça peut induire en erreur.
Oui j'ai bien testé

SELECT id, creation FROM duel WHERE creation < (NOW()+ INTERVAL 7 DAY)

J'ai modifier le nom de la colonne je l'ai appelé "Creation"

Voici la colonne :

http://hpics.li/b66ac54

Mammouth du PHP | 504 Messages

10 mars 2014, 22:59

SELECT id, creation FROM duel WHERE creation < (NOW() - INTERVAL 7 DAY)
peut etre mieux comme ça - pas +

Eléphant du PHP | 111 Messages

10 mars 2014, 23:03

SELECT id, creation FROM duel WHERE creation < (NOW() - INTERVAL 7 DAY)
peut etre mieux comme ça - pas +

Avec le moins sa marche ! :)

Mammouth du PHP | 504 Messages

10 mars 2014, 23:06

Oui, petite erreur d'inattention de ma part. :wink:

Tu lances un cron à minuit une tous les jours et voilà. :D

(si c'est résolu, bouton vert stp)