-
Module multi user
Bonsoir à tous ou bonjour,
je viens vers vous car j'ai un soucis gênant sur un logiciel que je code...
C'est un module permettant de faire et de gérer des factures, il y a donc plusieurs utilisateurs,
Dans un 1er temps nous entrons les données du client dans l'entête de la facture (nom, prénom, adresse, etc ... du client), ensuite nous sommes redirigé sur une autre page qui permet de gérer le corps de la facture (les différentes lignes).
Elles sont ajoutées tour à jour et sont rattachés à la facture via sont id dans la barre d'adresse (variable $_GET).
Le soucis se déroule lorsque 2 utilisateurs au moins crées des factures au même moment, dans certain cas les 2 utilisateurs ont chacun leurs factures mais lorsque l'un des 2 ajoute une ligne, celle ci arrive souvent dans la facture de l'autre, ce qui vous en conviendrez est gênant :D
C'est là qu'est la question, je ne comprends pas comment cela est possible car l'id permettant de lier la ligne à la facture est dans la barre d'adresse ...
Dans d'autres cas (plus rare et moins gênant) les 2 utilisateurs se retrouvent sur une même facture et l'un deux est rejeté car j'ai codé une vérification d'ip sur la facture, de ce fait seulement le 1er à avoir demander cette page à le droit d'y accéder.
C'est codé en PHP 4 + SQL.
Si vous voulez plus de détails je suis près à les fournir.
Je vous remercie d'avance.
-
Salut,
c'est du débogage classique.
Trace ce qui se passe au moment du rafraichissement de la page suite au rajout d'une ligne dans le corps de la facture. Vérifie aussi que le détail d'une facture est bien rattaché au bon id de facture.
Ensuite, vu que le système est très simple et pour éviter qu'un petit malin puisse rajouter des lignes à n'importe quelle facture, j'espère que tu as mis des protections plus avancées qu'un simple id qui passe de page en page.
Pour le contrôle d'accès simultané, opter pour l'ip n'est pas très bon. Il vaut mieux permettre aux utilisateurs d'accéder en lecture aux factures simultanément et tu verrouilles uniquement l'accès au mode édition dès qu'un utilisateur le demande.
Pour des question de gestion de disponibilité, tu peux rajouter un timer : tant que des modifications sont enregistrées durant un laps de temps de 2min (par exemple), la facture est verrouillée en édition et suppression, si au delà du temps imparti ou suite à la validation des modifications, le verrou est supprimé. Si la libération intervient suite au dépassement du temps imparti, alors les modifications sont perdues. Tu peux mettre un chrono sur ta page qui décompte le temps avant la fin du mode édition. Les utilisateurs savent ainsi qu'au bout du temps restant et sans intervention de leur part, leurs modifs seront perdues.
-
salut,
pour compléter, si tes tables sont en innodb tu peux utiliser les mécanismes d'isolation, si elles sont en myisam tu devras poser des verrous de table selon les actions...