Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Verouillage base de donnees, gestion d'agenda

2 réponses
Avatar
Phil
Bonsoir a tous,

But : gestion d'un agenda html/javascript - Php/MySql

Etat actuel (1 utlisateur !) :

Appel agenda.php?semaine=x
lecture bdd (where semaine=x)
affichage (template agenda.htm) de la grille de la semaine avec les rdv
deja saisies

L'utilisateur clic sur la grille (Jour/Heure)
fenetre/formulaire de saisie des infos (Client, lieu, ...)
validation -> enregistrement.php --> agenda.php?semaine=x (actualisation
de l'affichage)


Cette procedure fonctionne parfaitement, mais au final il y aura plusieurs
utilisateurs simultanement sur le meme agenda/bdd

l'orsqu'un utilisateur clic sur la grille (jour/heure) je veux rendre
inactif le clic pour les autres utilisateurs sur le meme jour.

Pour memoire, au moments de la saisie par un utilisateur, les autres
utilisateurs ont l'agenda affiché sur la meme semaine ou une autre ou sur
une autre fonction que l'agenda.

Comment s'avoir qui est connecté, comment l'empecher de saisir un rdv le
meme jour a la meme heure (ou en chevauchement sur l'autre saisie) ???

Merci d'avanse

Phil

2 réponses

Avatar
bruno at modulix
Phil wrote:
Bonsoir a tous,

But : gestion d'un agenda html/javascript - Php/MySql

Etat actuel (1 utlisateur !) :

Appel agenda.php?semaine=x
lecture bdd (where semaine=x)
affichage (template agenda.htm) de la grille de la semaine avec les rdv
deja saisies

L'utilisateur clic sur la grille (Jour/Heure)
fenetre/formulaire de saisie des infos (Client, lieu, ...)
validation -> enregistrement.php --> agenda.php?semaine=x (actualisation
de l'affichage)


Cette procedure fonctionne parfaitement, mais au final il y aura plusieurs
utilisateurs simultanement sur le meme agenda/bdd

l'orsqu'un utilisateur clic sur la grille (jour/heure) je veux rendre
inactif le clic pour les autres utilisateurs sur le meme jour.


Tu ne peux pas. Scénario (plus que probable):

- user1 affiche la page
- user2 affiche la page
- user2 clique
- user1 clique

Pour rendre le lien (ou bouton) inactif pour user1, il faudrait que le
serveur puisse forcer le reload de la page. Ce n'est pas techniquement
impossible (la page demandant elle-même son rafraichissement, soit avec
un reload, soit vi ajax), mais peu fiable (le temps que tout ça se
fasse, user1 peut avoir déjà cliqué à son tour) et très lourd (bonjour
la charge sur le serveur).

Par contre, tu peux bricoler ça avec un fichier de lock ou un
enregistrement dans la base. Cet enregistrement contient la référence du
jour (ou jour/heure ou etc...) à verrouiler, un timestamp et l'id de
session de l'utilisateur. Lorsqu'un utilisateur clique pour prendre un
RV, ton programme:
- regarde si la ressource est déjà verrouillée
- si oui,
-regarde si le verrou est encore valide (ie: timestamp + une durée
paramétrable)
- si oui, message d'erreur et sortie
- si non, verrouille et affiche le formulaire

Sans oublier bien sûr de déverrouiller sur validation ou abandon de la
saisie.

(warning: jamais mis ça en place moi-même, donc sous réserve)

La plupart des wikis (en tous cas MoinMoin et Trac...) gèrent ça, tu
devrais regarder comment ils font.

HTH
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

Avatar
Jean-Marc Molina
Phil wrote:
Cette procedure fonctionne parfaitement, mais au final il y aura
plusieurs utilisateurs simultanement sur le meme agenda/bdd

l'orsqu'un utilisateur clic sur la grille (jour/heure) je veux rendre
inactif le clic pour les autres utilisateurs sur le meme jour.


Aucun intérêt c'est le SGBD qui s'occupe de gérer la concurrence entre les
utilisateurs. Par contre si tu n'autorises qu'un événement par jour alors
c'est à toi d'implémenter cette règle.