Bonjour,
Voilà dans mon travail, j'ai fait un petit systeme de permissions qui s'affiche du genre /id1/id2/id3 etc....
Alors sa fonctionne plutot bien.
Mais quand on supprimer un id dans la table, bas sa fait genre //id1/id2 donc sa retire pas le / mais sa supprime quand même l'id qui est parfait.
Voilà le code :
function editPERMS($bdd, $id, $table, $num, $act){
$permsCheck = new permissions($bdd, $table);
if($act == "ADD"){
if(!$permsCheck->permissions($num, $id)){
$req = $bdd->prepare("SELECT id_user FROM $table WHERE id=:id");
$req->execute(array(":id"=>$num));
$data = $req->fetch();
$val = $data['id_user']."/".$id;
$req->closeCursor();
$req = $bdd->prepare("UPDATE $table SET id_user=:id_user WHERE id=:id");
$req->execute(array(":id_user"=>$val, ":id"=>$num));
$req->closeCursor();
return true;
}
return true;
}
elseif($act == "REMOVE"){
if($permsCheck->permissions($num, $id)){
$val = NULL;
$req = $bdd->prepare("SELECT id_user FROM $table WHERE id=:id");
$req->execute(array(':id'=>$num));
$data = $req->fetch();
$id_user = explode('/', $data['id_user']);
foreach($id_user as $id_user1){
if($id_user1 == $id){
}
else{
$val .= '/'.$id_user1;
}
}
$req->closeCursor();
$req = $bdd->prepare("UPDATE $table SET id_user=:id_user WHERE id=:id");
$req->execute(array(":id_user"=>$val, ":id"=>$num));
$req->closeCursor();
return true;
}
return false;
}
else{
return false;
}
}
Il faut regarder dans la partie remove.
Image de la bdd avec le bug : http://prntscr.com/7oedcl
Sans le bug : http://prntscr.com/7oednv
Dans l'exemple, j'ai supprimer l'id_user 2, mais il peut être n'importe ou dans la valeur, sa vas faire pareil.
Cordialement;
Salut il faut changer ton système car il n'est pas optimisé. Créer une nouvelle table pour enregistrer les ID qui seront reliés à la table principal.
Exemple :
Table 1 : ID / NAME
Table 2 : ID / PARENT ID
Personelement pas trop envie de refaire 2 semaine de travail a cause de ça.
Mon systeme n'est peut etre pas optimisé mais fonctionnel donc je demande juste pouvoir évité les / a gogo au début après sa dérange pas plus que sa, car le site arrive a fonctionner quand même.
Cordialement;
Bonjour.
Mon systeme n'est peut etre pas optimisé mais fonctionnel
L'optimisation ne te paraît peut-être pas importante pour l'instant, mais c'est pourtant essentiel pour les sites web, car lorsque tu auras un flux de données conséquent sur ton site web, le manque de performance s'en fera ressentir.
Il est vrai que le côté fonctionnel d'un site est primordial, mais il ne faut surtout pas renier l'optimisation et il vaut mieux que tu fasse des modifications maintenant (même si ça représente 2 semaines de travail) que plus tard car ça représentera beaucoup plus de modifications du code à faire.
Encore ce site est pour l'usage de 15 personnes max, j'ai fait ce site pour notre équipe donc un maximum de 15 personnes donc 15 id ne vas pas vraiement faire ralentir quoi que ce soit...
MAis, je demande comment retirer tout de même c'est "/"
Tu as raison, ne prends pas en compte les conseils que peuvent te donner d'autres personnes, tu iras loin comme ça dans la programmation web.
Juste une petite remarque comme ça, utilises plutôt une virgule pour séparer des valeurs dans un champ d'une table MySQL au lieu d'un slash (lorsque tu ne veux pas ou que tu veux éviter les tables de jointures), ça t'évitera beaucoup de problèmes.
D'accord, je vais faire votre jointure, dans tout les cas si je doit changé pour le / bas, je dois changé tout....
Salut Remy, désolé que ma réponse ne te convienne pas. Si tu ne veux pas utiliser ma solution ( ca serait une erreur ) il faut utiliser la fonction explode http://php.net/manual/fr/function.explode.php
exemple :
$fruits = "banane/pomme/ananas";
$fruit = explode( '/', $fruits ) );
echo fruit[0]; // affichera banane
même si ça représente 2 semaines de travail :
C'est un mauvais argument, j'ai rapidement lu ton code et je pense que je peux le réduire 1/3 voir de moitier en l'optimisant. Economie de ligne = economie de temps.
Bonne continuation.
Non, c'ets bon j'avais fait en sorte que tout le systemes de permission soit dans des function se qui ma permis de relire les codes et les rendres plus optimisé.
Merci de vos reponses.
si tu veux garder un champ avec un tableau d'id il me semble que postgre offre cette possibilité.
cela sera plus propre qu'un explode.