Suppimer des données après x jours

joki84 -  
 Alain42 -
Bonjour,

Je suis en train de creer un script permettant de gérer l'affichage de bannières.

Pour cela, j'ai dans ma base de données, les tables suivantes :

CREATE TABLE `campagne` (
  `idcampagne` int(10) unsigned NOT NULL auto_increment,
  `nomcampagne` varchar(40) default '0',
  `regiecampagne` varchar(40) default NULL,
  `codecampagne` text,
  `typesupport` varchar(50) default NULL,
  `datedebutcampagne` date NOT NULL default '0000-00-00',
  `datefincampagne` date NOT NULL default '0000-00-00',
  `nombrepoints` int(10) default '0',
  PRIMARY KEY  (`idcampagne`)
) 


Je n'ai pas rencontré de problème majeur jusqu'à présent...mais la je stagne sur un probleme...

En fait comme vous pouvez le constater, il y a une date de debut et de fin de campagne. Je souhaite faire un script (executé par un cronjob) qui effacerait automatiquement les campagnes périmées depuis 10 jours. il faudra donc que j utilise la fonction DELETE...mais comment préciser WHERE datefincampagne < 10 jours??

Merci
Jonathan

7 réponses

alain42
 
Salut,

tu fais une variable avec la date du jour +10 jours

$today=time(); //timestamp unix du jour
$today_plus_dix=$today+(3600*24*10); // auquel on rajoute le nombre de secondes correspondant a 10 jours
$date_peromption=date('Y-m-d",$today_plus_dix); //mise au format date mysql (a verifier ?)

et tu utilises ca pour ta condition WHERE datefincampagne > $date_peromption

@lain
0
joki84
 
Bonjour,

Merci pour ton aide Alain..mais j ai un autre souci maintenant...En fait je souhaite que le systeme m'envoi un email en m'indiquant les campagnes qui ont été supprimmées...J'ai donc tenté de la manière suivante mais cela ne fonctionne pas...

<?php
 
include ('dbconnect.php');
 
$today=time(); //timestamp unix du jour
$today_plus_dix=$today+(3600*24*10); // auquel on rajoute le nombre de secondes correspondant a 10 jours
$date_peromption=date('Y-m-d',$today_plus_dix); // mise au format MySql
 
$sql=mysql_query("SELECT * FROM campagne WHERE datefincampagne > '$date_peromption'");
 
$from_email = "support@voilou.fr";
$entetemail = "From: $from_email \n"; // Adresse expéditeur
$entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;
$msg = "Bonjour, \n";
$msg .= "\n";
$msg .= "Les campagnes suivantes ont été supprimées de la base :\n";
$msg .= "\n";
$msg .= "$nomcampagne de la régie $regiecampagne \n";
$msg .= "\n";
$msg .= "Bonne Journée !\n";
 
$sql=mysql_query("DELETE * FROM campagne WHERE datefincampagne > '$date_peromption'");
if(mysql_num_rows($sql))
{
mail(support@voilou.fr,'Des campagnes ont été supprimées',$msg,$entetemail);
exit;
}
 
// on ferme la connexion à mysql
mysql_close();
 
?>


Qu'est ce qui cloche???
0
alain42
 
salut,

il te manque un bout de code pour finir ton extraction apres le SELECT

$sql=mysql_query("SELECT * FROM campagne WHERE datefincampagne > '$date_peromption'");
//il faut sortir les donnees de la zone memoire par une boucle while
$liste=""; 
while($ligne=mysql_fetch-array($sql)){
 $liste.=$ligne['nomcampagne']." de la regie ".$ligne['regiecampagne']."\n"; // on construit la liste
}


$from_email = "support@voilou.fr";
$entetemail = "From: $from_email \n"; // Adresse expéditeur
$entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;
$msg = "Bonjour, \n";
$msg .= "\n";
$msg .= "Les campagnes suivantes ont été supprimées de la base :\n";
$msg .= "\n";
$msg .= "$liste;
$msg .= "\n";
$msg .= "Bonne Journée !\n";


a une erreur de frappe pres ?

Bye
0
joki84
 
Bonjour Alain,

En fait lorsque je lance le script, les données ne sont pas supprimées de la base...Pourtant tout a l air en ordre...

<?php 

include ('dbconnect.php');

$today=time(); //timestamp unix du jour
$today_plus_dix=$today+(3600*24*10); // auquel on rajoute le nombre de secondes correspondant a 10 jours
$date_peromption=date('Y-m-d',$today_plus_dix); // mise au format MySql

$sql=mysql_query("SELECT * FROM campagne WHERE datefincampagne > '$date_peromption'");
//il faut sortir les donnees de la zone memoire par une boucle while
$liste=""; 
while($ligne=mysql_fetch-array($sql)){
 $liste.=$ligne['nomcampagne']." de la regie ".$ligne['regiecampagne']."\n"; // on construit la liste
}


$from_email = "support@voilou.fr";
$entetemail = "From: $from_email \n"; // Adresse expéditeur
$entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;
$msg = "Bonjour, \n";
$msg .= "\n";
$msg .= "Les campagnes suivantes ont été supprimées de la base :\n";
$msg .= "\n";
$msg .= "$liste";
$msg .= "\n";
$msg .= "Bonne Journée !\n";

$sql=mysql_query("DELETE FROM campagne WHERE datefincampagne > '$date_peromption'");
if(mysql_num_rows($sql))
{
mail(support@voilou.fr,'Des campagnes ont été supprimées',$msg,$entetemail); 
exit;
}

// on ferme la connexion à mysql
mysql_close(); 

?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alain42
 
Ta requette semble correcte:

DELETE FROM campagne WHERE datefincampagne > '$date_peromption'

ou essayes:

"DELETE FROM campagne WHERE datefincampagne > '".$date_peromption."' "


Mais fais un echo $date_peromption; pour voir si cette date est bien au meme format que celles qui sont dans ta table

au passage j'ai fait une faute a peremption j'ai mis peromption ?

Mais ce n'est pas ce qui gene

Supprimes aussi le exit; apres mail(.........
Il te fait sortir de ta condition inutilement, tu court-circuite mysql_close()

J'ai aussi fait une grosse erreur genante cette fois ci a:

while($ligne=mysql_fetch-array($sql))

il faut:

while($ligne=mysql_fetch_array($sql))
under score a la place du tiret !

tu peux aussi faire un echo mysql_num_rows($sql); apres ta requette;
$sql=mysql_query("SELECT * FROM campagne WHERE datefincampagne > '$date_peromption'");
pour voir si il en trouve bien

et pour voir le format des dates dans ta base un echo $ligne['datefincampagne']; dans ta boucle while

normalement elle devrait etre au format 2007-10-15

Excuses moi mais je galere avec un clavier qwerty, je suis (tres) loin de chez moi

@lain
0
joki84
 
Bonjour,

Voila j'ai reussi a faire fonctionner le script...j ai juste modifier le parametre temps...

Par contre le probleme est que le systeme m'envoit pas l'email contenant les campagnes qui ont été supprimées...

<?php 

include ('dbconnect.php');

$today=time(); //timestamp unix du jour
$today_plus_dix=$today-(3600*24*1); // auquel on rajoute le nombre de secondes correspondant a 10 jours
$date_peromption=date('Y-m-d',$today_plus_dix); // mise au format MySql

$sql=mysql_query("SELECT * FROM campagne WHERE datefincampagne < '".$date_peromption."'") or die('Impossible de selectioner les données dans la base'.mysql_error());
//il faut sortir les donnees de la zone memoire par une boucle while
$liste=""; 
while($ligne=mysql_fetch_array($sql)){
 $liste.=$ligne['nomcampagne']." de la regie ".$ligne['regiecampagne']."\n"; // on construit la liste
}


$from_email = "system@voilou.fr";
$entetemail = "From: $from_email \n"; // Adresse expéditeur
$entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;
$msg = "Bonjour, \n";
$msg .= "\n";
$msg .= "Les campagnes suivantes ont été supprimées de la base :\n";
$msg .= "\n";
$msg .= "$liste";
$msg .= "\n";
$msg .= "Bonne Journée !\n";

$sql2=mysql_query("DELETE FROM campagne WHERE datefincampagne < '".$date_peromption."'") or die('Impossible de supprimer les données dans la base'.mysql_error());
if(mysql_affected_rows($sql2))
{
mail('support@voilou.fr','Des campagnes ont été supprimées',$msg,$entetemail); 
}



// on ferme la connexion à mysql
mysql_close(); 

?>
0
Alain42
 
Salut

Bizarre ça:
$sql2=mysql_query("DELETE FROM campagne WHERE datefincampagne < '".$date_peromption."'" or die('Impossible de supprimer les données dans la base'.mysql_error());
if(mysql_affected_rows($sql2))
{
mail('support@voilou.fr','Des campagnes ont été supprimées',$msg,$entetemail);
}


remplace plutot par:

$req_sql2="DELETE FROM campagne WHERE datefincampagne < '".$date_peromption."'";
$nb_suppr=mysql_query($sql2) or die('Impossible supprimer les données dans la base'.mysql_error());
// l'instruction DELETE renvoie le nombre supprimes
if($nb_supp>0)
{
mail('support@voilou.fr','Des campagnes ont été supprimées',$msg,$entetemail); 
}
0