Page 1 sur 1
comparer les dates
Posté : 21 avr. 2005, 19:36
par Florent
Bonjour
Ce que je veux faire :
J'ai une base et à chaque fois que je l'ouvre pour lire les données, j'aimerais supprimer des entrées trop "vieilles" par rapport à la date (enregistrée aussi) de création de l'entrée.
En fait dans cette base j'enregistre des messages, avec login, et date.
Et pour éviter qu'elle ne devienne trop volumineuse,si un message dépasse une date, j'aimerais le supprimer.
Seulement voilà je ne suis pas assez calé

Posté : 21 avr. 2005, 19:44
par Cyrano
Schématiquement, il te faut établir la date courante, ce que tu peux faire avec
date()
Après ça, il te faut créer une variable $dateformatee qui correspondra à la date courante obtenue moins le nombre de jours au delà duquel tu considères qu l'élément est obsolète dans ta base.
Ensuite, il te faut créer une requête DELETE ... WHERE champ_date < '". $dateformatee ."'
Précise si tu veux plus de détails

Posté : 21 avr. 2005, 19:51
par Florent
Ah merci, un début d'explication.
En fait il s'agit d'une messagerie interne à mon site. La base :
CREATE TABLE messages (
idmess tinyint(4) NOT NULL auto_increment,
date date NOT NULL default '0000-00-00',
heure time NOT NULL default '00:00:00',
sujet varchar(40) NOT NULL default '',
texte varchar(255) NOT NULL default '',
expediteur text NOT NULL default '',
destinataire text NOT NULL default '',
PRIMARY KEY (idmess)
) TYPE=MyISAM;
Donc la lecture des messages pour un membre est faisable si son login = destinataire
Ma messagerie fonctionne, lecture, envoi, suppression des messages.
Mais je ne sais pas me servir de date, alors pour la comparaison des dates, j'avoue avoir des difficultés.
Posté : 21 avr. 2005, 20:05
par Cyrano
Ben le problème se résume à déterminer à quelle date correspond la date courante - (le délai maximum), par exemple, date d'aujourd'hui - 30 jours en tenant compte des nombres de jours variables d'un mois à l'autre et éventuellement du changement d'année.
par rapport à mon explication précédente, le plus compliqué sera d'initialiser la variable $dateformatee.
il faut faire un petit algo pour déterminer ça:
- 1 récupérer la date du jour;
- 2 Isoler les éléments de la date en variable $jour, $mois et $annee;
- 3 initialiser une variable $delai (= 30 par exemple)
- 4 Soutraire $jour - $delai mais il faudra tenir compte du mois et éventuellement de l'année, et pour le mois de févrirer, tenir compte des années bissextiles donc prévoir l'utilisation de la fonction php checkdate()
- 5 reconstruire la date dan le même format que dans ta base de données, 0000-00-00 (année-Mois-Jour)
- 6 créer la requête montrée précédemment.
Posté : 23 avr. 2005, 08:11
par Florent
Merci.
Je verrais ça quand je serais plus calé.
En attendant j'irais faire ça manuellement dans la BDD.
Posté : 23 avr. 2005, 08:17
par Cyrano
Salut,
le problème, ce n'est pas d'être plus calé, tu es aussi capable que n'importe qui. Par contre, il te manque la "vision" du problème parce que tu essayes de le voir en programme terminé. Relaxe et prends la minute de réflexion pour décortiquer ton problème. Jette un coup d'oeil ==>
ICI <== pour saisir ce que je veux dire, ça va peut-être bien te faire aborder ta question sous un autre angle
Si tu arrives à modéliser ton truc, il ne te manquera que des mot du langage que tu veux utiliser, le PHP en l'occurence et il y aura toujours quelqu'un ici pour te les donner
Bon code
Posté : 23 avr. 2005, 19:59
par Florent
Je comprend bien.
Je maitrise assez bien VB et je commence le php.
C'est assez....différent.
J'ai trouver plusieurs solutions possible à mon problème.
Mais je n'en sais pas assez et je ne peu pas l'inventer

Posté : 23 avr. 2005, 20:16
par Cyrano
PHP != VB oui... et non
Quand tu conc¸ois un algorithme de programme, tu ne tiens en principe pas compte du langage dans lequel il sera ensuite écrit. Si ton alog est bien fait, tu peux le coder ensuite en VB ou en PHP ou en Cobol si ça te chante, le principe de programmation est le même. Les différences sont au niveau de la syntaxe et du vocabulaire.
Alors pour reprendre l'exemple de tes date et pour illustrer : tu peux isoler les éléments de date en récupérant des extrait de chaine par exemple: si ta date est au format AAAA-MM-JJ et contenu dans une variable , utilise la fonction PHP
substr() pour en isoler par exemple le jour, le mois et l'année dans trois variables indépendantes. Après, ça, c'est du calcul logique pour calculer que tu dois retirer par exemple 90 jours à la date du 15 mars 2004 : tu dois vérifier si l'année en cours est bissextile puisque le mois précédent est février, ce qui te donnera le nombre de jour de février, compter que au 1er janvier, tu n'auras pas enlevé assez de jour donc tu devras retirer 1 à l'année, etc... fais toi un croquis, c'est un cas d'école et j'ai planché là dessus en exercice.
Le codage en PHP, quand ton croquis sera fait, ce sera quasiment trivial après
[/php]
Posté : 24 avr. 2005, 11:16
par Ripat
PHP connait les années bissextiles et autres particularités du calendrier grégorien et offre toute une batterie de
fonctions qui permettent toutes sortes de calculs sur les dates. Pour ton problème je suggère ceci:
$jours_a_retirer = 90;
// Calcul dans PHP
$aujourd_hui = strtotime("now");
$trop_vieux = $aujourd_hui - ($jours_a_retirer*24*3600);
$trop_vieux = date("Y-m-d", $trop_vieux);
$query = "DELETE
FROM `ta_table`
WHERE date_col <= '".$trop_vieux."'";
Si PHP connait les dates, MySQL aussi et offre également des
fonctions complètes pour les calculs sur dates.
// Tout dans MySQL
$query = 'DELETE
FROM `ta_table`
WHERE DATE_SUB(CURDATE(), INTERVAL '.$jours_a_retirer.' DAY) <= date_col';
PS: Avant d'exécuter la requête, fais un essai à blanc en remplacant DELETE par SELECT. On ne sait jamais...
Posté : 30 avr. 2005, 18:44
par Florent
Ca ne marche pas.
Ca fait rien, merci quand même je vais faire carrément autrement.