8791 sujets

Développement web côté serveur, CMS

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 :


//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 Smiley biggol

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 ? Smiley confus
Modifié par LancelotKiin (24 May 2012 - 15:16)
question pour essayer d'y voir plus clair :
tu n'as pas oublié de sélectionner ta base de données dans ton script avant de commencer à faire les requêtes ?

sinon (ça m'étonnerais que ça pose pb mais sait-on jamais) : essaye de supprimer les guillemets autour de tes chiffres dans la clause where (si c'est bien du champ numérique dans ta base de données)

UPDATE t_souscategorie SET `SOU_ORDRE` = SOU_ORDRE-1 WHERE SOU_ORDRE >6 AND SOU_CAT_NUM=118

Modifié par sanchodellavega (25 May 2012 - 11:10)
Hello !

Je ne pense pas que ce soit un problème de connexion avec la base de données. Le reste des requêtes s'effectue correctement, sauf erreur. Il n'y a que celle-ci qui pose problème ! ^^

Je vais faire quelques tests au niveau des guillemets, on sait jamais, effectivement !

Sinon, il va falloir que je trouve une autre solution. Mais j'avoue ne pas trop comprendre pourquoi cette requête fonctionne dans "les deux sens" sur ma table concernant les catégories et seulement dans "un sens" sur celle relative aux sous-catégories (après, j'ai peut-être une erreur perdue au milieu de mon code que je n'ai pas encore trouvée) !

Mais merci de la réponse ! Smiley cligne