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

Langage PHP Discussion :

Eviter le télescopage entre utilisateurs dans la saisie d'un formulaire


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Assistant data manager
    Inscrit en
    Février 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant data manager

    Informations forums :
    Inscription : Février 2015
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Eviter le télescopage entre utilisateurs dans la saisie d'un formulaire
    Bonjour !
    Je crée ce sujet car je travaille dans un petit laboratoire où j'ai développé une application pour saisir des données sur des études scientifiques.
    Mon problème est le suivant : deux utilisateurs peuvent remplir en même temps un formulaire lié à un même enregistrement de ma base de données MySQL. Normalement, la façon dont j'ai développée est conçue pour minimiser ce risque d'erreur, mais il n'est pas nul. J'aimerais donc le rendre nul !

    J'ai déjà réfléchi au problème et voici les pistes que j'ai trouvées :
    -Mes formulaires sont par défauts en mode lecture seul, un bouton est présent pour pouvoir rentrer des modifications. Une fois les modifications terminées, l'utilisateur clique sur un bouton sauvegarder, la base se met à jour, et le formulaire réapparaît en mode modification. Donc je peux envoyer dans une table de la base de données l'information que le formulaire est en cours de modification, et empêcher les autres utilisateurs de le mettre en mode modification tant que c'est le cas. Problème : qu'en est-il de la libération du formulaire ? Ok, il sera libéré avec le bouton "Sauvegarder", mais si l'utilisateur ne clique pas dessus ? S'il ferme son navigateur à l'arrache ? J'imagine qu'en JQuery je peux envoyer un message au serveur sur une fermeture du navigateur, mais il faut savoir qu'on a aussi des coupures de wifi de temps en temps (cartes wifi de certains ordinateurs vraiment pas terrible), bref, il y a un risque non négligeable que le signal de libération n'arrive jamais et que le formulaire se retrouve bloqué définitivement jusqu'à mon intervention.

    -Envoi constant toutes les 5 secondes d'un signal à Jquery disant que le formulaire est occupé (ce qui mettrait une table de base de données à jour qui serait consultée à chaque fois qu'on veut modifier un formulaire) : ça me paraît réaliste, mais toujours le problème de coupure de réseau... Au moins, ça ne bloquerait pas définitivement l'accès à un formulaire, mais ça poserait le souci que sur une coupure, deux personnes peuvent être en même temps en train de modifier le même formulaire si la deuxième arrive pendant une coupure de quelques secondes du premier, mais déjà, le risque est bien plus faible. Vu que nos bases ne sont pas très lourdes, je ne pense pas que ça congestionnerait énormément le serveur. Qui plus est, chaque personne étant loguée, je peux faire apparaître le nom de l'utilisateur bloquant le formulaire. C'est la solution à ma portée qui me paraît la plus fiable (à part que je ne sais pas encore modifier le contenu d'une base de données avec JQuery mais je peux apprendre, après si vous pouvez simplement me confirmer que c'est techniquement réalisable, ça m'arrangerait toujours^^).

    Voilà, aucune des solutions n'est cependant fiable à 100% (même si la deuxième me paraît quand même très bien). J'hésite à mettre en place une solution avec un timer, ça me paraît assez risqué...

    Merci pour votre attention !

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu peux utiliser une solution intermédaire : des colonnes lock_user et lock_date, qui contiennent l'id de l'utilisateur qui bloque la ligne et la data à laquelle le blocage est mis en place, en conjonction avec une durée de vie du verrou.

    L'idée étant que si il y a déjà un verrou au nom de l'utilisateur 1 lorsque l'utilisateur 2 d'accéder au formulaire, tu peux vérifier si la durée de vie n'a pas été dépassée. Si le verrou est périmé, tu peux le supprimer et le remplacer par un nouveau verrou au nom l'utilisateur 2.
    Et inversement, lorsque l'utilisateur 1 veut valider ses modifications, il faut vérifier que le verrou est toujours au nom de l'utilisateur 1 (des fois qu'il ait expiré et été fauché par l'utilisateur 2 entre temps)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Assistant data manager
    Inscrit en
    Février 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant data manager

    Informations forums :
    Inscription : Février 2015
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Merci pour ta réponse !
    Donc l'idée, ce serait que le client vérifie que son verrou n'ait pas été fauché par un autre utilisateur, je n'y avais pas pensé. Ça augmente la fiabilité, même si ça pose le souci que si l'utilisateur 2 a fait une saisie assez longue, il devra tout retaper (bon après, j'empêche mes utilisateurs de faire des saisies longues). Ou sinon, il demande à l'utilisateur 2 de déconnecter pour que le verrou se remette sur le 1. Vu qu'on est une petite structure je peux tout à fait faire apparaître le login du 2.
    Merci beaucoup, je pense que je vais mettre ça en place, me reste plus qu'à me faire un tuto Jquery Ajax ^^

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Une autre solution est l'emploi d'une websocket.

    Quand un utilisateur arrive sur la page il est connecté à une websocket qui transmet immédiatement un changement d'état à tous ses clients :
    - Si un utilisateur passe en édition il envoi un message sur la socket au serveur qui diffuse à tous les autre clients => le mode édition leur est bloqué
    - Dès qu'un utilisateur à terminé sont édition ou que la connexion est perdue le serveur redébloque l'édition en rediffusant un message aux utilisateur.

    Ca à l'avantage d'être instantané et de ne pas rester coincer devant un formulaire en attendant un timeout; La contrainte c'est que c'est un peu compliqué à mettre en place

  5. #5
    Membre à l'essai
    Homme Profil pro
    Assistant data manager
    Inscrit en
    Février 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant data manager

    Informations forums :
    Inscription : Février 2015
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Merci, je ne connaissais pas cela ! La solution est simple je vais réfléchir à l'incorporer, il faudra que je voie comment insérer le cas de l'utilisateur déjà en modification qui aurait eu une coupure de wifi mais ça m'a l'air jouable.
    Merci bien !

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/05/2007, 20h46
  2. Comment eviter les doubons dans une requête?
    Par jyms2006 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/03/2006, 15h08
  3. comment eviter des doublons dans un sous formulaire ??
    Par azde7015 dans le forum Access
    Réponses: 2
    Dernier message: 21/02/2006, 10h03
  4. [HTML] Eviter la censure dans une infobulle (forum phpbb)
    Par Angkorr dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 25/01/2006, 18h53
  5. Eviter plusieurs OR dans une requete SELECT
    Par zoubidaman dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/06/2004, 06h56

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