par
loboblahz » 31 mai 2009, 15:48
Bonjour,
Je travailles depuis 1995 sur 4D, et j'ai aussi passé sur du PHP/MySQlL plusieurs de mes bases.
En effet le meilleur système pour le verrouillage est celui du TimeStamp. Personnellement
j'ai créé un système un peu plus évolué pour reproduire un peu la façon de faire de 4D avec
PHP et MySQL. Et c'est facilement mis en place, car générique.
Explications
1 - Un script PHP demande l'édition et le vérrouillage d'un enregistrement, je crée un identifiant unique pour le formulaire que je garde aussi dans un input caché du formulaire (plus loin il sera utilisé par un javascript). Je marque l'enregistrement dans la table concernée avec l'identifiant unique, et le timestamp de fin de vérrouillage (TimeStamp actuel + 5 minutes).
2 - Un script Javascript s'occupe depuis la page HTML qui contient le formulaire de faire une mise à jour
de ces valeurs dans l'enregistrement, il appelle toutes les 30 secondes un script de mise à jour qui va repousser le timestamp de 5 minutes (a condition que l'identifiant fourni soit le même que celui stocké dans l'enregistrement), ce qui permet de garder le verrouillage de manière indéfinie, tant que l'utilisateur a le formulaire affiché.
Deux cas sont géré aussi :
1 - L'utilisateur perd le formulaire (panne de courant, fermeture involontaire), il a 5 minutes pour le reprendre (redémarrer la machine et se reconnecter) car dans l'identifiant unique il y a aussi sont numéro d'utilisateur. Lorsque le serveur reçoit une nouvelle requête pour verrouiller l'enregistrement, il vérifie si l'utilisateur est le même, et si la dernière requête s'est produite il y a plus d'une minute.
Si les deux conditions sont remplies ou que l'enregistrement est toujours libre (non utilisé par quelqu'un d'autre entre deux) il donne un nouvel identifiant unique.
2 - Le script javascript reçoit la confirmation à chaque appel que son identifiant est toujours valable, si tel n'est pas le cas, il le masque (un simple changement de style CSS genre "document.getElementById('monformulaire').style.display='none';" et affiche un message. Cela protége non seulement d'une possible perte de connexion internet pendant plus de 5 minutes, mais aussi le fait qu'il ai pu charger l'enregistrement dans une autre fenêtre avec un autre identifiant. Dans ce dernier cas, c'est le dernier formulaire ouvert qui est valable. Ce cas est rare, mais il peut arriver, le cas concret, la connexion est perdue pendant 2 minutes avec le serveur, et elle réactivée avant que le javascript du formulaire en cours ai pu redemandé une mise à jour du timestamp. L'utilisateur peut dans ce laps de temps de quelques secondes ouvrir l'enregistrement dans une deuxième fenêtre.
Et ce qu'il ne faut pas oublié, c'est de supprimer tous les verrouillages fait par l'utilisateur une fois qu'il se déconnecte de ton application.
On peut même s'amuser en cas de perte de connexion avec le serveur de faire un message d'attente avec Javacript comme le fait 4D.
wow, je sais pas si j'ai été assez clair.
Bonjour,
Je travailles depuis 1995 sur 4D, et j'ai aussi passé sur du PHP/MySQlL plusieurs de mes bases.
En effet le meilleur système pour le verrouillage est celui du TimeStamp. Personnellement
j'ai créé un système un peu plus évolué pour reproduire un peu la façon de faire de 4D avec
PHP et MySQL. Et c'est facilement mis en place, car générique.
Explications
1 - Un script PHP demande l'édition et le vérrouillage d'un enregistrement, je crée un identifiant unique pour le formulaire que je garde aussi dans un input caché du formulaire (plus loin il sera utilisé par un javascript). Je marque l'enregistrement dans la table concernée avec l'identifiant unique, et le timestamp de fin de vérrouillage (TimeStamp actuel + 5 minutes).
2 - Un script Javascript s'occupe depuis la page HTML qui contient le formulaire de faire une mise à jour
de ces valeurs dans l'enregistrement, il appelle toutes les 30 secondes un script de mise à jour qui va repousser le timestamp de 5 minutes (a condition que l'identifiant fourni soit le même que celui stocké dans l'enregistrement), ce qui permet de garder le verrouillage de manière indéfinie, tant que l'utilisateur a le formulaire affiché.
Deux cas sont géré aussi :
1 - L'utilisateur perd le formulaire (panne de courant, fermeture involontaire), il a 5 minutes pour le reprendre (redémarrer la machine et se reconnecter) car dans l'identifiant unique il y a aussi sont numéro d'utilisateur. Lorsque le serveur reçoit une nouvelle requête pour verrouiller l'enregistrement, il vérifie si l'utilisateur est le même, et si la dernière requête s'est produite il y a plus d'une minute.
Si les deux conditions sont remplies ou que l'enregistrement est toujours libre (non utilisé par quelqu'un d'autre entre deux) il donne un nouvel identifiant unique.
2 - Le script javascript reçoit la confirmation à chaque appel que son identifiant est toujours valable, si tel n'est pas le cas, il le masque (un simple changement de style CSS genre "document.getElementById('monformulaire').style.display='none';" et affiche un message. Cela protége non seulement d'une possible perte de connexion internet pendant plus de 5 minutes, mais aussi le fait qu'il ai pu charger l'enregistrement dans une autre fenêtre avec un autre identifiant. Dans ce dernier cas, c'est le dernier formulaire ouvert qui est valable. Ce cas est rare, mais il peut arriver, le cas concret, la connexion est perdue pendant 2 minutes avec le serveur, et elle réactivée avant que le javascript du formulaire en cours ai pu redemandé une mise à jour du timestamp. L'utilisateur peut dans ce laps de temps de quelques secondes ouvrir l'enregistrement dans une deuxième fenêtre.
Et ce qu'il ne faut pas oublié, c'est de supprimer tous les verrouillages fait par l'utilisateur une fois qu'il se déconnecte de ton application.
On peut même s'amuser en cas de perte de connexion avec le serveur de faire un message d'attente avec Javacript comme le fait 4D.
wow, je sais pas si j'ai été assez clair.