Ajax HTML 5 JavaScript Création site CMS Comment Design Logiciels Programmation RSS SQL Scripts Mobiles
Accueil
FAQ-Forum
FluxBB
Bannière
Annonces publicitaires
Suppression utilisateurs
CMS
Construire un CMS
Liste des CMS
Drupal
Joomla
Tutoriels
Tutoriel Adsense
Création de site
Promotion site
Liste de tutoriels
Ressources
Logiciels
Scripts XML


Anti-spam: Script de suppression en bloc des utilisateurs fluxBB

Dans la première partie, nous avons vu comment supprimer massivement les spammers qui s'inscrivent sur les forums fluxBB (version 1.4).

Cette seconde partie introduit un script PHP à placer sur le site et qui réalise l'opération automatiquement.

On définit un spammeur comme utilisateur s'inscrivant pour ajouter son profil, avec un lien sur un site éventuellement douteux, et qui n'a pas jamais ajouté de billet ou dont les billets sont des spams et ont été supprimés.

Le script est plus élaboré que la commande SQL simple, car il va tester la table des messages pour vérifier que l'utilisateur n'en a posté aucun et ne se contente pas de consulter le nombre de messages dans la table utilisateur.
Ce dernier en effet n'est pas mis à jour par fluxBB après suppression d'un billet. C'est un compteur à sens unique!

Tables fluxBB

Outre les tables décrites dans la première partie, nous utiliserons cette fois la table posts.

Table posts:

  poster poster_id      
  pseudo de l'utilisateur son numéro d'identification      

On veut seulement de vérifier qu'un utilisateur n'a aucun billet.

Table topics:

  poster      
  pseudo de l'utilisateur      

Normalement le topic est supprimé quand le premier billet est supprimé aussi on n'utilisera pas cette table.

Requête

On reprend les requêtes données dans la première partie et on ajoute un traitement pour la table des messages.

Vérifier le nombre de messages pour un utilisateur (on fera le test pour tous les utilisateurs en fait):

$user = "xxxx";  
$query = SELECT * WHERE  poster='$user'
$hnd = mysql_query($query, $db_handler);
if(mysql_num_rows($hnd) == 0)
{
  echo "$user n'a aucun message.<br>";
}

Si le nombre de message est null, on peut mettre à jour le nombre de billets dans la table users:

UPDATE users SET num_posts='0' WHERE poster='$user'

Puis on ajoute au script les requêtes de suppression vues en première partie qui se basent sur la table users et les tables associées:

DELETE FROM bans WHERE username IN (SELECT username FROM users WHERE num_posts='0')
DELETE FROM reports WHERE reported_by IN (SELECT id FROM users WHERE num_posts='0')
DELETE FROM subscriptions WHERE user_id IN (SELECT user_id FROM users WHERE num_posts='0')
DELETE FROM users WHERE num_posts='0' AND id != '1'

On conserve l'entrée 1 qui est celle de l'invité, "Guest" en anglais, qui doit toujours rester présente.

Le script de suppression

include("config.php");

$hnd = mysql_query("SELECT username FROM users", $db_handler);
while($userlist = mysql_fetch_assoc($hnd))
{
  $user = $userlist['username'];
  $hndposts = mysql_query("SELECT * FROM $posts WHERE poster='$user'", $db_handler);
  if(mysql_num_rows($hndposts) == 0)
  {
       mysql_query("UPDATE users SET num_posts='0' WHERE username='$user'", $db_handler);
  }
}
mysql_query("DELETE FROM bans WHERE username IN (SELECT username FROM users WHERE num_posts='0')",  $db_handler);
mysql_query("DELETE FROM reports WHERE reported_by IN (SELECT id FROM users WHERE num_posts='0')",  $db_handler);
mysql_query("DELETE FROM subscriptions WHERE user_id IN (SELECT id FROM users WHERE num_posts='0')",  $db_handler);
mysql_query("DELETE FROM users WHERE num_posts='0' AND id != '1'",  $db_handler);

echo "Done!";

A cela on doit ajouter le code de connexion à la base de données, ce qui est inclut dans le script à télécharger...

Télécharger et utiliser

Pour utiliser le script, on le place dans le répertoire racine de fluxBB et on appelle directement le fichier à partir d'un navigateur.
Par exemple:

http://www.monsiteweb.com/forum/killbill.php 

Vous pouvez voir ce que fera le script sans modifier quoi que ce soit en activant provisoirement le drapeau DEBUG dans le code source:

$DEBUG = true;   

Script de suppression en masse d'utilisateurs sous fluxBB

Le fichier s'appelle killbill.php. Vous pouvez changer ce nom et lui donner un nom personnalisé.

Faites par précaution une sauvegarde de la base de données avec la commande export de PHPMyAdmin ou la fonction de votre panel d'administration, avant la première utilisation.

Tweet
© 2010-2011 Scriptol.fr