8722 sujets

Développement web côté serveur, CMS

Bonjour,

d'une manière générale, quelle méthode employez vous pour verrouiller temporairement un enregistrement pendant sa modification, en Php/MySql ?

un exemple:
- un champ dans un base de données Mysql qui peut être modifié à partir d'un script php
- lorsque un utilisateur, dans le script, est en position de pouvoir modifier le champ, personne d'autre ne peut le modifier tant qu'il n'a pas fini sa modification.

En ce moment j'expérimente en créant une table à part avec un enregistrement dont un champ peut prendre la valeur 0 ou 1.
A l'origine, la valeur est 1 (modification possible du champ).
Dès que l'utilisateur est en position de pouvoir modifier le champ, je teste que la valeur de ce champ est bien 1 (pour l'autoriser) et je la change de suite cette valeur à 0 par une requête ajax. Si la valeur avait été 0 j'aurais affiché un message comme quoi la modification est impossible. Quand l'utilisateur a validé la modification du champ, je rechange la valeur du champ à 1 pour permettre de nouvelles modifications par d'autres utilisateurs.

D'après mes premiers tests cela fonctionne, mais existe t-il d'autres façons de faire ou bien des procédures standardisées dans Php?

Je demande ça car récemment j'ai passé 2 jours à fabriquer une page de code pour créer des semaines ISO de calendrier, et ici on m'a appris qu'il existait la fonction setISODate lol... qui fait ça tout seul..
Modifié par lionel_css3 (03 Feb 2017 - 16:24)
Je ne pense pas qu'il y est vraiment de standard en la matière.

Ce que tu fais me paraît correct mais il faut prévoir en plus un délai pour débloquer l'article ou vérifier la session de ton utilisateur tout les x temps dès fois que l'utilisateur s'en soit allé sans enregistrer.

Il y a un mécanisme comme cela dans wordpress si tu veux observer comment c'est fait.
Hello !

Si j'ai bien compris la question, ton souci principal est la gestion des accès concurrents à des enregistrements dans une base de données, sache que le SGBD (MySQL ou autre) se charge déjà automatiquement de résoudre ce genre de problèmes. Si deux utilisateurs essaient de modifier simultanément un enregistrement, le SGBD va faire en sorte que la cohérence des données soit conservée - il est d'ailleurs possible de paramétrer la manière dont celà est fait.
GuillaumeBauer a écrit :
Hello !

Si j'ai bien compris la question, ton souci principal est la gestion des accès concurrents à des enregistrements dans une base de données, sache que le SGBD (MySQL ou autre) se charge déjà automatiquement de résoudre ce genre de problèmes. Si deux utilisateurs essaient de modifier simultanément un enregistrement, le SGBD va faire en sorte que la cohérence des données soit conservée - il est d'ailleurs possible de paramétrer la manière dont celà est fait.


Oui d'accord, mais moi je voudrais que le 'deuxième' a tenter de modifier une enregistrement reçoive un message afin qu'il soit avisé.
Administrateur
Ce qu'on peut prévoir dans ce cas-là, entre autres, c'est un appel AJAX qui vérifie régulièrement si quelqu'un n'est pas déjà en train d'éditer, et s'il faut afficher une notification.