select multiple, comparaison de tableaux et mise à jour dans la base de données

VaN
Mammouth du PHP | 1107 Messages

25 févr. 2009, 12:14

Bonjour,

voici mon problème.

J'ai 3 tables, PACKS, OPTIONS et LIENS_PACKS_OPTIONS. Un pack peut contenir 0, 1 ou plusieurs options. Ces liens sont symbolisés par une insertion dans la table LIENS_PACKS_OPTIONS, de cette manière :

Image

Ici, on voit que le pack 1 contient les options 1 et 2.

J'ai ensuite un formulaire, qui me permet de modifier un pack, avec <select multiple=multiple">, pour sélectionner les options à lui lier.

Mon problème est que j'aimerai au moment de la mise à jour, faire quelque chose de propre. Jusqu'à maintenant, lorsque j'avais ce type d'opération à faire, je supprimais tous les liens de ce pack dans la table LIENS_PACKS_OPTIONS, et je récréais les nouveaux liens. Mais je vois bien qu'il est possible de faire autrement :

En amont de la requête, faire une sorte de comparaison entre mon ancien tableau de liens, extrait de la base de données, et mon nouveau tableau de lien, qui provient du formulaire : et ensuite, faire les étapes suivantes :

1. Supprimer les liens de la table LIENS_PACKS_OPTIONS qui ne sont pas présents dans le tableau issu du formulaire.
2. Ajouter les liens issus du formulaire qui ne sont pas encore dans la table LIENS_PACKS_OPTIONS.

Mon problème est que je ne bloque pour faire cette comparaison entre les 2 tableaux. Pourriez-vous m'aider ?

Mais peut-être que la solution que je souhaite mettre en place n'est pas forcément meilleure que l'ancienne ? Est-elle plus gourmande ?

ViPHP
ViPHP | 1996 Messages

25 févr. 2009, 15:38

Je pense que tu as essayé array_diff() masi je pose quand même la question...
Cette fonction a l'air indiquée dans ton cas.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

VaN
Mammouth du PHP | 1107 Messages

25 févr. 2009, 16:44

Effectivement ça marche. j'ai juste dû reconstruire un peu l'un de mes tableaux, qui n'avait pas la même architecture que l'autre, et c'est bon.

Merci pour cette fonction, je ne pensais vraiment pas que PHP savait faire cela de lui même.