Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Bonjour,
Lorsqu'un admin supprime un membre, il peut décocher l'option "supprimer tous les messages de l'utilisateur".
Quelqu'un saurait-il m'expliquer comment ça marche ?
Je cherche à synchoniser une base de membres d'une association avec mon forum, et la seule chose qui me manque pour finir ma mod c'est de remplacer ma méchante requête qui supprime toute la ligne de pun_users par qq chose qui garde les messages pour un "membre radié", avec ou sans son nom d'utilisateur d'ailleurs.
Hors ligne
Bonjour
Les tables de la base de données n'étant pas liées (pas de clés étrangère), le fait de décocher la case empêche simplement les requêtes qui suppriment les messages de ce membre.
Donc si tu écris une requête qui supprime un membre dans la table users, ses messages seront conservés.
Attention : regarde les lignes qui s'occupent de ça dans le fichier profil parce que les messages de ces membres doivent être modifié afin d'indiquer leur posteur comme des invités !
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Merci fanf73, effectivement ça marche en mettant l'id du posteur à 0 (guest) avant de le supprimer.
Résolu 
Hors ligne
@ http://fluxbb.org/forums/post/21930/#p21930
Si tu connais le pseudo des membres que tu avais effacé par erreur (et donc leur ID), il te suffit de faire un "update" dans la table "posts" pour mettre cet "ID" à tous les messages dont le posteur porte ce pseudo. En gros une requête du genre :
$db->query('UPDATE '.$db->prefix.'posts SET poster_id=ID_EN_QUESTION WHERE poster=\''.LE_PSEUDO.'\'') or error('Unable to update posts', __FILE__, __LINE__, $db->error());Dans l'absolu, le mieux à faire est de tourner sa souris 7 fois autour du bouton "Supprimer" avant d'effacer un membre.
Dernière modification par fanf73 (21-03-2009 10:50:14)
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Whaou ! même pas eu le temps d'éditer mon message là bas en réfléchissant à la sollution (que je ne trouvais d''ailleurs pas) qu'elle est déjà ici : t'es mon héro !
Dans l'absolu, le mieux à faire est de tourner sa souris 7 fois autour du bouton "Supprimer" avant d'effacer un membre.
Oui, et cette fois je vais me dépécher de sauvegarder ma base avant de tester ta requête !
Hors ligne
Bon, ça marche encore plus facilement sous phpmyadmin :
UPDATE pun_posts SET poster_id=[numéro à mettre] WHERE poster='Nom_d_utilisateur'Est-ce que je peux pas faire qqchose qui le ferait d'un coup pour tous, avec une requête récupérant le nom du posteur, cherchant où il se trouve dans "users", récupérant l'id correspondante et mettant le tout à l'id du message ? Je suis particulièrement débutant en sql... et un peu lent en php !
Dernière modification par new morning (21-03-2009 11:17:54)
Hors ligne
Est-ce que je peux pas faire qqchose qui le ferait d'un coup pour tous, avec une requête récupérant le nom du posteur, cherchant où il se trouve dans "users", récupérant l'id correspondante et mettant le tout à l'id du message ? Je suis particulièrement débutant en sql... et un peu lent en php !
Bon ben je m'en suis sorti pour finir : pas sûr que ce soit le plus élégant mais ça fonctionne:
<?php
mysql_connect ("localhost", "root", "");
mysql_select_db("forum");
$result = mysql_query("SELECT id, poster FROM pun_posts WHERE poster_id=1") or die(mysql_error());
while ($pun_post = mysql_fetch_array($result) )
{
$name = mysql_real_escape_string($pun_post ['poster']);
$result2 = mysql_query("SELECT id FROM pun_users WHERE username='$name'") or die(mysql_error());
while ($pun_users = mysql_fetch_array($result2) )
{
$pun_users_id = $pun_users['id'];
$pun_posts_id = $pun_post['id'];
mysql_query("UPDATE pun_posts SET poster_id='$pun_users_id' WHERE id='$pun_posts_id'") or die(mysql_error());
echo "Post number $pun_posts_id was attributed again to $name with id=$pun_users_id !<br />";
}
mysql_free_result($result2);
}
mysql_free_result($result);
mysql_close();Hors ligne
Est-ce que je peux pas faire qqchose qui le ferait d'un coup pour tous, avec une requête récupérant le nom du posteur, cherchant où il se trouve dans "users", récupérant l'id correspondante et mettant le tout à l'id du message ? Je suis particulièrement débutant en sql... et un peu lent en php !
Tu en as effacé tant que ça ? Oo
Pour ton script, j'espère que tu n'as pas trop de messages sur ton forum, sinon ça te prendre un certain temps à faire une recherche pour chaque message, j'aurais plutôt fait comme ça (et on doit encore pour simplifier avec une jointure, mais j'ai la flemme cet aprèm)
<?php
mysql_connect ("localhost", "root", "");
mysql_select_db("forum");
$result = mysql_query("SELECT id, poster FROM pun_posts WHERE poster_id=1 GROUP BY poster") or die(mysql_error());
while ($pun_post = mysql_fetch_array($result) )
{
$name = mysql_real_escape_string($pun_post ['poster']);
$result2 = mysql_query("SELECT id FROM pun_users WHERE username='$name'") or die(mysql_error());
if(mysql_num_rows($result2) == 1)
{
$pun_users = mysql_fetch_array($result2);
$pun_users_id = $pun_users['id'];
mysql_query("UPDATE pun_posts SET poster_id='$pun_users_id' WHERE poster='$name'") or die(mysql_error());
echo "Le membre ".$name." à retrouvé ses messages.<br />";
}
mysql_free_result($result2);
}
mysql_free_result($result);
mysql_close();Dernière modification par fanf73 (21-03-2009 18:13:54)
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Pour ton script, j'espère que tu n'as pas trop de messages sur ton forum, sinon ça te prendre un certain temps à faire une recherche pour chaque message, j'aurais plutôt fait comme ça (et on doit encore pour simplifier avec une jointure, mais j'ai la flemme cet aprèm)
Ha ouais, c'est mieux 
Le tient est plus logique et rapide, mais les deux marchent, et j'ai heureusement encore peu de messages (15OO environ).
Maintenant je cherche une solution pour remplacer les 'NULL' par des vrais "valeurs" NULL ou absence de valeur (bref, que ceux qui n'ont pas de signature se mettent pas d'un coup à signer NULL). Une suggestion ?
Hors ligne
Ha ben trouvé en fait : exporter, remplacer, importer : simple, rapide, efficace.
Hors ligne