Hello !
Je me permets de solliciter votre aide car je galère avec un petit problème depuis un bon moment.
J'ai dans ma base de données une liste de catégories et de sous-catégories que l'utilisateur peut lui-même gérer (ajout, modification, suppression). Les sous-catégories sont liées aux catégories.
J'aimerais faire en sorte que l'utilisateur puisse gérer l'ordre/l'organisation de ces deux listes via la console d'admin. J'ai donc, dans chacune des deux tables, ajouté un champ "ordre" (int) qui permet de positionner chacun des enregistrements.
L'idée est la suivante : via une liste déroulante, l'utilisateur peut indiquer que la catégorie A positionnée en 2ème position viennent se placer en 3ème position. La catégorie B qui se trouve elle en 3ème position se retrouve alors automatiquement en 2ème place. C'est une sorte de switch en gros.
J'ai mis en place le système pour les catégories, et cela fonctionne très bien. En revanche, pour les sous-catégories, c'est une autre histoire.
En fait (et en gros), je compare la valeur sélectionnée par l'utilisateur via le formulaire de modification et la compare à celle déjà présente dans la bdd. Si elles sont différentes, je procède à l'update-switch
Voici mon code :
Bon, je sais pas si c'est très clair mais le fait est qu'avec les catégories, ce principe fonctionne bien mais pas pour les sous-catégories. En fait, pour ces dernières, cela ne fonctionne que dans un sens et c'est là que je m'arrache les cheveux ! Je peux dire que la sous-catégorie positionnée en 3 va se placer en 1, par exemple mais par l'inverse ! Lorsque je souhaite changer la position de la sous-catégorie placée en 1, celle-ci vient bien se placer en 3 mais le switch n'est pas effectué. Il y a alors deux sous-catégories placées en 3.
J'ai vérifié toutes les valeurs et toutes les requêtes et tout est en ordre, au bon endroit, au bon moment avec les bonnes valeurs ! Lors que j'exécute la requête switch via l'éditeur SQL de phpMyAdmin, elle fonctionne... Mais pas depuis la page ! Je deviens
Les variables $v_pos_select_souscat_val et $v_souscategorie_ordre sont des tableaux car je dois récupérer plusieurs valeurs à la suite provenant d'un nombre de champs inconnu, l'utilisateur pouvant ajouter des champs à sa guise... Mais enfin bref, de ce côté cela a l'air de fonctionner. J'ai les bonnes valeurs dans les bons index (sauf si je me trompe).
Je ne sais pas si j'ai été super clair ou assez précis mais si quelqu'un a développé quelque chose de similaire ou a une idée, c'est très volontiers que je l'écoute ! ^^
Merci d'avance pour votre aide !
EDIT
Je me permets de rajouter ceci :
Depuis l'éditeur sql, j'ai effectué l'opération suivante sur ma la table des sous-catégories :
Cela fonctionne impec ! Mais la même requête (avec les mêmes valeurs) envoyé depuis php, rien ne se passe !
Cela pourrait-il provenir de la table ou de la bdd ? Lorsque depuis phpmyAdmin je me rends dans l'onglet "structure" concernant cette table, j'ai le mention "Perte : 232 o" en rouge. Cela aurait-il un rapport ?
Modifié par LancelotKiin (24 May 2012 - 15:16)
Je me permets de solliciter votre aide car je galère avec un petit problème depuis un bon moment.
J'ai dans ma base de données une liste de catégories et de sous-catégories que l'utilisateur peut lui-même gérer (ajout, modification, suppression). Les sous-catégories sont liées aux catégories.
J'aimerais faire en sorte que l'utilisateur puisse gérer l'ordre/l'organisation de ces deux listes via la console d'admin. J'ai donc, dans chacune des deux tables, ajouté un champ "ordre" (int) qui permet de positionner chacun des enregistrements.
L'idée est la suivante : via une liste déroulante, l'utilisateur peut indiquer que la catégorie A positionnée en 2ème position viennent se placer en 3ème position. La catégorie B qui se trouve elle en 3ème position se retrouve alors automatiquement en 2ème place. C'est une sorte de switch en gros.
J'ai mis en place le système pour les catégories, et cela fonctionne très bien. En revanche, pour les sous-catégories, c'est une autre histoire.
En fait (et en gros), je compare la valeur sélectionnée par l'utilisateur via le formulaire de modification et la compare à celle déjà présente dans la bdd. Si elles sont différentes, je procède à l'update-switch
Voici mon code :
//Variable contenant la valeur récupérée via le formulaire
...$_POST etc.
$v_souscategorie_ordre[$l]
//Variable contenant la position actuelle de la sous-catégorie dans la liste...
...$query... etc.
$v_pos_select_souscat_val[$l]
//En cas d'égalité - la position n'a pas changé
if ($v_souscategorie_ordre[$l] == $v_pos_select_souscat_val[$l]) {
...
}
//Les deux variables ne sont pas égales - l'utilisateur a choisi un nouvelle position
elseif ($v_souscategorie_ordre[$l] != $v_pos_select_souscat_val[$l]) {
//On procède à l'update, au switch (update de la sous-catégorie déjà positionnée là où on aimerait mettre celle que l'on est en train de modifier)
//1)Formulation de la requête
$query_update_old_souscat = "UPDATE `t_souscategorie` SET `SOU_ORDRE` = '".$v_pos_select_souscat_val[$l]."' WHERE `SOU_ORDRE` ='".$v_souscategorie_ordre[$l]."' AND `SOU_CAT_NUM` = '".$sou_cat_num."'";
//2)Exécution de la requête
$result_update_old_souscat = mysql_query($query_update_old_souscat);
//Update de la sous-catégorie en cours de modification - on attribue la nouvelle position à la sous-catégorie qui est en train d'être modifiée
//1)Formulation de la requête
$query_update_souscat = "UPDATE `t_souscategorie` SET `SOU_NOM`='".$v_souscategorie[$l]."',`SOU_ORDRE`='".$v_souscategorie_ordre[$l]."' WHERE `SOU_CAT_NUM` = '".$v_cat_num."' AND `SOU_NUM` = '".$v_sousnum[$l]."'";
//2)Exécution de la requête
$result_update_souscat = mysql_query($query_update_souscat);
}
Bon, je sais pas si c'est très clair mais le fait est qu'avec les catégories, ce principe fonctionne bien mais pas pour les sous-catégories. En fait, pour ces dernières, cela ne fonctionne que dans un sens et c'est là que je m'arrache les cheveux ! Je peux dire que la sous-catégorie positionnée en 3 va se placer en 1, par exemple mais par l'inverse ! Lorsque je souhaite changer la position de la sous-catégorie placée en 1, celle-ci vient bien se placer en 3 mais le switch n'est pas effectué. Il y a alors deux sous-catégories placées en 3.
J'ai vérifié toutes les valeurs et toutes les requêtes et tout est en ordre, au bon endroit, au bon moment avec les bonnes valeurs ! Lors que j'exécute la requête switch via l'éditeur SQL de phpMyAdmin, elle fonctionne... Mais pas depuis la page ! Je deviens

Les variables $v_pos_select_souscat_val et $v_souscategorie_ordre sont des tableaux car je dois récupérer plusieurs valeurs à la suite provenant d'un nombre de champs inconnu, l'utilisateur pouvant ajouter des champs à sa guise... Mais enfin bref, de ce côté cela a l'air de fonctionner. J'ai les bonnes valeurs dans les bons index (sauf si je me trompe).
Je ne sais pas si j'ai été super clair ou assez précis mais si quelqu'un a développé quelque chose de similaire ou a une idée, c'est très volontiers que je l'écoute ! ^^
Merci d'avance pour votre aide !
EDIT
Je me permets de rajouter ceci :
Depuis l'éditeur sql, j'ai effectué l'opération suivante sur ma la table des sous-catégories :
UPDATE t_souscategorie SET `SOU_ORDRE` = SOU_ORDRE-1 WHERE SOU_ORDRE >'6' AND SOU_CAT_NUM='118'
Cela fonctionne impec ! Mais la même requête (avec les mêmes valeurs) envoyé depuis php, rien ne se passe !
Cela pourrait-il provenir de la table ou de la bdd ? Lorsque depuis phpmyAdmin je me rends dans l'onglet "structure" concernant cette table, j'ai le mention "Perte : 232 o" en rouge. Cela aurait-il un rapport ?

Modifié par LancelotKiin (24 May 2012 - 15:16)