IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Verrouillage au moment de modification


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de achos
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 147
    Points : 84
    Points
    84
    Par défaut Verrouillage au moment de modification

    Bonjour tout le monde.
    J'ai un formulaire qui contient un bouton modification pour effectuer des modification sur les enregistrements dans ce formulaire.
    je voudrai qu'au moment ou je clic sur modifier pour l'enregistrement en cours (il est identifié par son id) cet enregistrement et verouiller au niveau de la BDD et aucun d'autre utilisateur ne pourra le modifier jusqu'a ce que, soit : je valide la modification , soit l'annuler.

    aprés des recherches concernant le verouillage au niveau de BDD j'ai trouvé que Mysql ne permet que le verouillage au niveau de la table, et pas au niveau de ligne. donc toute la table sera verouiller et ce n'est pas normale si un autre utilisateur veut modifier un autre enregistrement dans la même table au même temps que moi, il doit attendre jusqu'à ce que je termine.

    Donc vous voyé le pb.

    Merci d'avance.

  2. #2
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 360
    Points : 197
    Points
    197
    Par défaut
    si tu peux modifier ta table rajoute une colonne qui prendra une valeur du genre 0 ou 1

    quand ce champ est à 1 il peut être modifié et quand il est à 0 personne ne peut le modifier


    ce champ s'actualise à chaque fois qu'une modif est effectuée et se remet à jour quand tu valides ou annules la modif

    cela peut te permetre de ne bloquer qu'une ligne dans ta table sans faire appel à des fonctions complexes

    désolé pour l'orthographe

  3. #3
    Membre régulier Avatar de achos
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 147
    Points : 84
    Points
    84
    Par défaut
    Merci por la réponse;
    j'ai bien compris ton algorithme et j'ai même procéder à sa réalisation et ca fonctionne trés bien.
    mais j'ai un ptit souci, si par hasard l'utilisateur ferme la fenêtre, sans valider ni annuler la modification, cette ligne restera toujours bloqué donc comment résoudre ce problème ?
    J'ai pensé d'executer un script qui débloque la ligne au moment du déchargement de la feuille mais je sais pas comment.
    Merci

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 360
    Points : 197
    Points
    197
    Par défaut
    je comprent pas le probleme peut l'explique avec un exemple je suis désoler mais j'ai quelque soucis avec les explication abstraite je prefaire le concrais lol

    j'ai besoin de savoir quel utilisateur tu parle (celui que tu dis qui quitte c?est celui qui a fait la modif ou c'est celui qui doit valider pour que la ligne soit de nouveau libre d'acces)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Problème récurrent hélas : on ne maitrise pas la sortie de l'application.

    Pour le problème de déverouillage en cas de sortie brutale, tu peux mettre en place un système de timeout pour ton blocage (définir que le blocage ne peut pas durer plus de x secondes sans activité, et redéfinir la date régulièrement quand tu traites la donnée sensible).
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  6. #6
    Membre régulier Avatar de achos
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 147
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par teen6517
    je comprent pas le probleme peut l'explique avec un exemple je suis désoler mais j'ai quelque soucis avec les explication abstraite je prefaire le concrais lol

    j'ai besoin de savoir quel utilisateur tu parle (celui que tu dis qui quitte c?est celui qui a fait la modif ou c'est celui qui doit valider pour que la ligne soit de nouveau libre d'acces)
    Je m'explique :
    - j'ai la page "index" qui contient un bouton modifier, ce bouton ouvre une 2ème page "modif" où il ya le formulaire pour faire la midfication.
    - on a 2 utilisateur "user1" et "user2".
    - "user1" clic sur le bouton modifier de la page "index" : a ce moment à l'affichage de la page "modif" l'enregistrement en cours est verouiller dans la BDD.
    - si "user2" veut modifier le même enregistrement il aurra un msg "enregistrement en cours de modification par un autre user"

    donc pour que l'enregistrement soit déverouiller on a 2 cas :
    + soit "user1" clic sur bouton valider modifcation (toujours dans la page modif)
    + soit "user1" clic sur bouton annuler modifcation (toujours dans la page modif)

    Mon souci c'est : si par hasard "user1" a fait un 3ème cas : fermer la page "modif" via le bouton fermer en haut a droite de l'ecran.
    alors l'enregistrement restera toujours verouiller, et si "user2" veut acceder à la modification de cet enregistrement il aurra toujours le msg d'avertissement.
    Donc comment faire pour remedier a ce problème.

    J'espère que je me suis bien expliqué.

  7. #7
    Membre régulier Avatar de achos
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 147
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par ratapapa
    Problème récurrent hélas : on ne maitrise pas la sortie de l'application.

    Pour le problème de déverouillage en cas de sortie brutale, tu peux mettre en place un système de timeout pour ton blocage (définir que le blocage ne peut pas durer plus de x secondes sans activité, et redéfinir la date régulièrement quand tu traites la donnée sensible).
    je trouve cette idée geniale, mais comment faire pour appliqué tout ça, pourriez vous me guidé.


  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Tu peux par exemple créer une table qui listera les dates de blocage avec l'id de la variable.
    A chaque fois qu'un enregistrement est bloqué, tu crées/modifies la date correspondant à l'id.
    S'il existe déjà un une date pour un enregistrement et que celle-ci est antérieure au timeout que tu as défini, c'est une sortie brutale, donc on considère l'enregistrement non bloqué.

    Si ton traitement est vraiment trop long, tu mets à jour régulièrement la date de blocage de l'enregistrement.
    A la fin de ton traitement quand tu libères ta variable tu supprimes l'enregistrement.

    La méthode que je te propose allourdit pas mal le code et la base, et donc baisse les performances de l'appli.
    Ce genre de gestion des conflits peut servir à des données très sensibles étant manipulées par un grand nombre d'utilisateurs, mais dans ce cas je pense qu'à la base il y a un mauvais choix du langage (les semaphores en C sont merveilleuses pour ca )
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 360
    Points : 197
    Points
    197
    Par défaut
    desolé mais la je vois pas de petit script qui pourait t'aider
    je debut en php l'idees que je t'es fillait etait une astuce que javais utilisé en c# pour un programme de videotheque mais ce probleme ne ce posait pas puisque laplication n'est utiliser que sur un seul post est on lutiliser lors de la création d'un emprunt on avait besoin de sortir les DVD qui étaient deja sortie


    desolée je vois pas comment t'aider
    son idées a ratapapa est bonne mais jai aucune idées de comment y proceder

  10. #10
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    si tu peux passer le moteur MySql en InnoDB, hésite pas, tu pourras utiliser les transactions.
    Vive les roues en pierre

  11. #11
    Membre régulier Avatar de achos
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 147
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par Djakisback
    Salut,
    si tu peux passer le moteur MySql en InnoDB, hésite pas, tu pourras utiliser les transactions.

    Comment faire ?

  12. #12
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    J'ai causé un peu vite, j'ai déjà fait ca en pl/sql - oracle mais avec plusieurs scripts php c'est différent. (je suis pas sur que cela soit faisable, si quelqu'un a plus d'infos...)
    Vive les roues en pierre

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/09/2011, 17h15
  2. Réponses: 3
    Dernier message: 11/12/2009, 09h16
  3. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 16h37
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Réponses: 11
    Dernier message: 23/07/2002, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo