Eliminer les vieux messages automatiquement dans ma bd

Eléphanteau du PHP | 20 Messages

24 sept. 2005, 08:24

Bonjour,

J'ai un petit script de chat et je désirerai éliminer les vieux messages, c'est à dire tous ceux dépassant les 100 entrées.

Quelle serait la bonne requête?

Merci beaucoup pour votre aide.

HD
Mammouth du PHP | 1181 Messages

24 sept. 2005, 08:28

quelle est la structure de ta bd ?
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Eléphanteau du PHP | 20 Messages

24 sept. 2005, 08:34

la voici:

CREATE TABLE `minichat` (
`id` int(11) NOT NULL auto_increment,
`login` varchar(255) NOT NULL default '',
`message` varchar(255) NOT NULL default '',


Merci à toi.

HD
Mammouth du PHP | 1181 Messages

24 sept. 2005, 08:57

// connexion à la bd à ajouter

$query="select count(id) from minichat";
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
$nbr_mssg = mysql_fetch_assoc($result);


if ($nbr_mssg > 100) {

$query="select min(id) from minichat";
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
$min = mysql_fetch_assoc($result);

$query="select max(id) from minichat";
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
$max = mysql_fetch_assoc($result);

$laisser = $min +100 ;
$id=$max ;

while ($id > $laisser) {

$query="DELETE FROM minichat WHERE id=$id";
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());

$id = $id -1 ;

}

}
je n'ai pas testé le code et il peut etre optimisé bien sur
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Eléphanteau du PHP | 20 Messages

24 sept. 2005, 09:10

Desole mais j'ai un message d'erreur, voici le code avec l'ajout de la connexion et la deconnexion de la bd:

<?
// connexion à la bd à ajouter
mysql_connect ('localhost','root','');
mysql_select_db ('test');

$query="select count(id) from minichat";
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
$nbr_mssg = mysql_fetch_assoc($result);


if ($nbr_mssg > 100) {

$query="select min(id) from minichat";
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
$min = mysql_fetch_assoc($result);

$query="select max(id) from minichat";
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
$max = mysql_fetch_assoc($result);

$laisser = $min +100 ;
$id=$max ;

while ($id > $laisser) {

$query="DELETE FROM minichat WHERE id=$id";
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());

$id = $id -1 ;


// on ferme la base
mysql_close();
}

}

?>

Fatal error: Unsupported operand types in
l'erreur selon lui provient de cette ligne :
$laisser = $min +100 ;

HD
Mammouth du PHP | 1181 Messages

24 sept. 2005, 09:17

1- met ton code entre les balises php comme je l'ai fait pour qu'il soit clair
2- mysql_close() devrait etre juste avant le ?>
3- essaie ce code et colle ici ce qui TOUT ce qui va s'afficher à l'ecran :
<?
mysql_connect ('localhost','root',''); 
mysql_select_db ('test'); 

$query="select count(id) from minichat"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 
$nbr_mssg = mysql_fetch_assoc($result); 
echo "$nbr_mssg <br>" ;

if ($nbr_mssg > 100) { 

$query="select min(id) from minichat"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 
$min = mysql_fetch_assoc($result); 

echo "min : $min <br>" ;

$query="select max(id) from minichat"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 
$max = mysql_fetch_assoc($result); 

echo "max : $max <br>" ;

$laisser = $min +100 ; 
$id=$max ; 

echo "laisser : $laisser<br>" ;

while ($id > $laisser) { 

$query="DELETE FROM minichat WHERE id=$id"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 

echo "supprimé numero : $id <br>" ;

$id = $id -1 ; 

} 

} 

mysql_close(); 
?>

"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

HD
Mammouth du PHP | 1181 Messages

24 sept. 2005, 09:35

il y avait une petite erreur : ce code va supprimer les messages les plus recents (et non les plus anciens)
nouveau code :
<? 
mysql_connect ('localhost','root',''); 
mysql_select_db ('test'); 

$query="select count(id) from minichat"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 
$nbr_mssg = mysql_fetch_assoc($result); 
echo "$nbr_mssg <br>" ; 

if ($nbr_mssg > 100) { 

$query="select min(id) from minichat"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 
$min = mysql_fetch_assoc($result); 

echo "min : $min <br>" ; 

$query="select max(id) from minichat"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 
$max = mysql_fetch_assoc($result); 

echo "max : $max <br>" ; 

$laisser = $max - 100 ; 
$id=$min ; 

echo "laisser : $laisser<br>" ; 

while ($id < $laisser) { 

$query="DELETE FROM minichat WHERE id=$id"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 

echo "supprimé numero : $id <br>" ; 

$id = $id + 1 ; 

} 

} 

mysql_close(); 
?> 
voila, s'il y a des erreurs colle ici tout ca que va t'afficher le navigateur
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Eléphant du PHP | 199 Messages

24 sept. 2005, 10:05

As tu un datetime dans ta table ???
Les 2 font la paire : coder ET commenter :wink:

Eléphanteau du PHP | 20 Messages

24 sept. 2005, 10:25

<? 
mysql_connect ('localhost','root',''); 
mysql_select_db ('test'); 

$query="select count(id) from minichat"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 
$nbr_mssg = mysql_fetch_assoc($result); 
echo "$nbr_mssg <br>" ; 

if ($nbr_mssg > 100) { 

$query="select min(id) from minichat"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 
$min = mysql_fetch_assoc($result); 

echo "min : $min <br>" ; 

$query="select max(id) from minichat"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 
$max = mysql_fetch_assoc($result); 

echo "max : $max <br>" ; 

$laisser = $max - 100 ; 
$id=$min ; 

echo "laisser : $laisser<br>" ; 

while ($id < $laisser) { 

$query="DELETE FROM minichat WHERE id=$id"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error()); 

echo "supprimé numero : $id <br>" ; 

$id = $id + 1 ; 

} 

} 

mysql_close(); 
?> 
Le message d'erreur est le même:

Array
min : Array
max : Array

Fatal error: Unsupported operand types in c:\archivos de programa\easyphp1-7\www\minichat.php on line 73

Pour Smarties, non je n'ai pas de datetime.

HD
Mammouth du PHP | 1181 Messages

24 sept. 2005, 10:34

il ne supporte pas requetes imbriquées (min, max...) :?
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Mammouth du PHP | 19672 Messages

24 sept. 2005, 10:39

C'est normal que tu récupères cet affichage, mysql_fetch_assoc retourne un tableau associatif. Proposition de corrigé :
<?php
mysql_connect ('localhost','root','');
mysql_select_db ('test');

$query="select count(id) from minichat";
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
$nbr_mssg = mysql_fetch_assoc($result);
echo "$nbr_mssg <br>" ;

if ($nbr_mssg > 100)
{
    $query="SELECT MIN(id) as mini FROM minichat";
    $result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
    $min = mysql_fetch_assoc($result);

    echo "min : ". $min['mini'] ."<br>\n" ;

    $query="SELECT MAX(id) as maxi FROM minichat";
    $result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
    $max = mysql_fetch_assoc($result);

    echo "max : ". $max['maxi'] ."<br>\n" ;
    $laisser = $max['maxi'] - 100 ;
    $id = $min['mini'] ;
    echo "Laissé : ". $laisser ."<br>\n" ;

    while ($id < $laisser)
    {
        $query="DELETE FROM minichat WHERE id = ". $id .";";
        $result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
        echo "Supprimé numero : ". $id ."<br>\n" ;
        $id++;
    }
}
mysql_close();
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

HD
Mammouth du PHP | 1181 Messages

24 sept. 2005, 10:44

tu as modifié quoi ?
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Mammouth du PHP | 19672 Messages

24 sept. 2005, 10:46

J'ai mis en autres
 echo "min : ". $min['mini'] ."<br>\n" ;
au lieu de
 echo "min : ". $min ."<br>\n" ;
en rajoutant un alias dans les requêtes SQL, pareil pour $max
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 20 Messages

24 sept. 2005, 10:47

Parfait je n'ai plus de message d'erreur

Par contre à chaque ajout de message, il me colle cela dans le navigateur

Array
min : 2
max : 8
Laissé : 3
Supprimé numero : 2

et il s'incrémente pour chaque ajout de message.

Mammouth du PHP | 19672 Messages

24 sept. 2005, 10:50

Je viens de m'apercevoir que j'en avais oublié un :
<?php
mysql_connect ('localhost','root','');
mysql_select_db ('test');

$query="select count(id) as nombres from minichat";
$result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
$nbr_mssg = mysql_fetch_assoc($result);
echo $nbr_mssg['nombres'] ."<br>\n" ;

if ($nbr_mssg > 100)
{
    $query="SELECT MIN(id) as mini FROM minichat";
    $result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
    $min = mysql_fetch_assoc($result);

    echo "min : ". $min['mini'] ."<br>\n" ;

    $query="SELECT MAX(id) as maxi FROM minichat";
    $result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
    $max = mysql_fetch_assoc($result);

    echo "max : ". $max['maxi'] ."<br>\n" ;
    $laisser = $max['maxi'] - 100 ;
    $id = $min['mini'] ;
    echo "Laissé : ". $laisser ."<br>\n" ;

    while ($id < $laisser)
    {
        $query="DELETE FROM minichat WHERE id = ". $id .";";
        $result = mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
        echo "Supprimé numero : ". $id ."<br>\n" ;
        $id++;
    }
}
mysql_close();
?>
Maintenant, est-ce que ton nombre de message reste correct indépendament de ce que ça t'affiche ? L'incrémentation est normale puisque ce n'est pas un nombre mais un numéro d'identifiant qui est inscrit.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: