Eliminer les vieux messages automatiquement dans ma bd

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Eliminer les vieux messages automatiquement dans ma bd

par olivebcn » 24 sept. 2005, 11:02

C'est parfait ainsi, je vous remercie donc tous et un très bon week end à vous.

par HD » 24 sept. 2005, 10:50

c'est que ca marche
il te suffit d effacer maintenant les lignes qui commencent par echo

par Cyrano » 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.

par olivebcn » 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.

par Cyrano » 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

par HD » 24 sept. 2005, 10:44

tu as modifié quoi ?

par Cyrano » 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();
?>

par HD » 24 sept. 2005, 10:34

il ne supporte pas requetes imbriquées (min, max...) :?

par olivebcn » 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.

par smarties » 24 sept. 2005, 10:05

As tu un datetime dans ta table ???

par HD » 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

par HD » 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(); 
?>

par olivebcn » 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 ;

par HD » 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

par olivebcn » 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.