Vous n'êtes pas identifié(e).
Bonjour à tous,
J'ai un formulaire qui va me permettre de gérer des droits utilisateurs sur une catégorie précise de fichiers.
J'ai donc mis de multiples boutons radios afin de déterminer ceux qui peuvent ou non voir la catégorie en question.
Voici un rapide aperçu du formulaire :
[img align=http://internet.umour.free.fr/users_rights.png]http://internet.umour.free.fr/users_rights.png[/img]
J'ai créé une table "users_rights" qui est reliée à "users" par une jointure.
Lorsque je valide le formulaire avec les radios cochés, ça ne fonctionne pas. voici mon code :
code qui boucle les boutons radios :
code qui traite le formulaire : si les utilisateurs ont déjà une permission sur la table, on met à jour. S'ils n'ont pas de permissions sur la catégorie, alors on crée une ligne dans la table.
foreach ( $_POST['user'] as $key => $val ) {
$sql -> requete("UPDATE `$db_name`.`users_rights`
SET category_id=".$_POST['CategoryID'].", user_id='.$key.'
WHERE category_id=".$_POST['CategoryID']."",1);
if (mysql_affected_rows()==0) {
$sql -> requete("INSERT INTO `$db_name`.`users_rights`
(category_id, user_id) values ('".$_POST['CategoryID']."', '$key')",2);
}
}
je n'arrive pas vraiment à comprendre ce qui va pas, j'espère avoir été précis dans mon explication.
Merci pour votre aide,
Laurent
Dernière modification par laurent (27-06-2012 14:18:29)
Hors ligne
Bonjour,
Si en général il vaut mieux éviter de créer des enregistrements en base de données pour notifier une absence de valeur, il n'en est pas de même pour un contrôle des droits d'accès / droits utilisateurs. La bonne pratique consiste à définir des droits pour tous les utilisateurs par catégorie avec une valeur par défaut à false (aucun droit par défaut), et de mettre à jour (autoriser) au cas par cas.
Au lieu de faire une boucle PHP dans laquelle vous executez jusqu'à deux requêtes, ce qui est contre performant, et si vous ne désirez pas vous attirer les foudres de votre administrateur base de données, le mieux que je puisse vous conseiller c'est de faire un implode sur les false et un implode sur les true (invisible et visible respectivement) et de ne faire que deux requêtes de mise à jour sous la forme
Ceci est une bonne pratique pour effectuer votre tâche.
Cordialement,
Jc
Dernière modification par Jc (27-06-2012 14:55:08)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonjour,
merci pour votre conseil.
Avec cette méthode, si je suis amené à ajouter 2 utilisateurs par exemple, et que mon intranet contient 150 dossiers avec des privilèges, il faut que lorsque je crée l'utilisateur, je lui mettre directement 150 fois ses privilèges à 0 ?
Egalement, que doit contenir "AND user_id IN ('$list_nonvisible');" comme contenus ? Il faudrait déclarer plus haut par exemple "$list_nonvisible = 1, 2, 3, 4, 5...); ?
Merci
Dernière modification par laurent (27-06-2012 14:57:40)
Hors ligne
Egalement, que doit contenir "AND user_id IN ('$list_nonvisible');" comme contenus ? Il faudrait déclarer plus haut par exemple "$list_nonvisible = 1, 2, 3, 4, 5...); ?
Merci Grand maître )
Hors ligne
Bonjour,
Pour les $list j'avais déjà répondu:
...le mieux que je puisse vous conseiller c'est de faire un implode sur les false et un implode sur les true (invisible et visible respectivement)...
Quand c'est géré correctement au niveau base de données, avec un trigger une petite procédure stockée et des valeurs par défauts correctement définis vous n'avez pas de code à écrire pour cela. Par contre avec votre système, si vous avez 150 utilisateurs, la mise à jour génère entre 150 et 300 requêtes au SGBRD. Ca peut vous valoir un motif. Mais bon j'ai rien dit.
Si vous connaissez les implode en PHP, ce dont je ne doute pas, il suffit d'un
En gros vous pouvez faire votre mise à jour sur 10 000 utilisateurs en 2 requêtes et 4 lignes de code sans impacter aucun serveur à condition, il est vrai, que votre schéma soit cohérent et que vos indexs de tables soient posés correctement. Je conviens cependant que ceci reste théorique dans la mesure où personne ne mets en place un formulaire de mise à jour de droits affichant 10k utilisateurs sur une seule page.
Dernière modification par Jc (27-06-2012 15:13:53)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne