Bug dans la classe Group (avec une solution)
yvalb Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre yvalb
- Inscrit le : 28/04/2011
- Site internet
- Groupes :
Sauf erreur de ma part, il y a un bug dans la fonction remove_member de la classe Group (fichier group.class.php) qui n'a pas été remarqué, probablement est-elle peu utilisée.
Donc voila le bug: si la valeur du champ user_id de la table user_groups vaut:
1|2|12|13|22|32|33|
l'application de remove_member(2,group_id) donne
1|113|2333|
au lieu de
1|12|13|22|32|33|
Je propose la correction suivante:
function remove_member($user_id,$idgroup)
{
global $Sql;
$user_groups=$Sql->query("SELECT user_groups FROM ".DB_TABLE_MEMBER." WHERE user_id = '".$user_id."'",__LINE__,__FILE__);
$user_groups = ltrim(str_replace('|'.$idgroup.'|','|','|'.$user_groups),'|');
$Sql->query_inject("UPDATE ".DB_TABLE_MEMBER." SET user_groups = '".$user_groups."' WHERE user_id = '".$user_id."'",__LINE__,__FILE__);
$members_group=$Sql->query("SELECT members FROM ".DB_TABLE_GROUP." WHERE id = '".$idgroup."'",__LINE__,__FILE__);
$members_group = ltrim(str_replace('|'.$user_id.'|','|','|'.$members_group),'|');
$Sql->query_inject("UPDATE ".DB_TABLE_GROUP." SET members = '".$members_group."' WHERE id = '".$idgroup."'",__LINE__,__FILE__);
}
A part cela, toutes mes félicitations pour phpboost et tous mes remerciements pour mon site que j'ai pu notablement rajeunir et améliorer grâce à lui.
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
La fonction remove_member() prend en paramètre l'id du membre et le groupe ou il doit être supprimé.
Es ce bien le cas dans ton cas de figure ?
je viens de relire la fonction et elle me semble correct. On supprime l'id groupe dans la table member en supprimant l'id du champ sérialisé.
yvalb Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre yvalb
- Inscrit le : 28/04/2011
- Site internet
- Groupes :
str_replace($user_id.'|','',$members_group)
donc élimine les séquences $user_id.'|' de la liste mais ne vérifie pas que cette séquence suit un début de ligne ou un '|'. Donc si on a un utilisateur '12' et que l'on veut effacer '2' on efface aussi bien "2|" dans "|2|" que dans "|12|" d'ou l'exemple que j'ai donné:
"1|2|12|13|22|32|33|" donne "1|113|2333|"
Les membres 2,12,22,32 ont été supprimés et on a inclus 113 et 2333 qui ne sont peut-être pas des id de membres.
Le problème est le même dans les deux parties de la fonction: effacer user_id de members_group ou effacer id_group de user_groups. Mais il a beaucoup plus de chances d'intervenir dans le premier que dans le deuxième car on a rarement plus de 10 groupes.
Le problème apparait par exemple quand on essaie de supprimer l'appartenance à un groupe d'un membre dans le panneau d'administration.
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Merci !
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie