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

MVC PHP Discussion :

Pb quand action exécuté trop rapidement


Sujet :

MVC PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 34
    Points : 20
    Points
    20
    Par défaut Pb quand action exécuté trop rapidement
    Bonjour,

    je suis en train de mettre en place une appli en PHP et Zend et je me retrouve confronté à un gros problème soulevé par mes utilisateurs.

    Sur des liens de mon appli, les utilisateurs double-clique sur les liens (au lieu d'un seul) et du coup la même action est appelé une 2ème fois avec que la 1ère n'est pas terminé. Ce qui cause des plantages au niveau session (perte de données).

    Je suis presque nouveau avec Zend, mais là je ne sais pas du tout comment régler ce souci.

    Désolé d'avoir mis Urgent, mais je dois livrer cet appli demain soir pour une démo, et si j'ai pas trouvé de solutions ça risque de poser de graves soucis.

    Merci

  2. #2
    Membre actif Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Points : 233
    Points
    233
    Par défaut
    J'ai du mal à voir comment ça peut être possible.
    Les liens sur lesquels le problème se produit sont des liens classiques ou alors des liens avec requête Ajax ou bien des liens de type submit (avec soumission de formulaire) ?

  3. #3
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Citation Envoyé par cefabien Voir le message
    Bonjour,

    je suis en train de mettre en place une appli en PHP et Zend et je me retrouve confronté à un gros problème soulevé par mes utilisateurs.

    Sur des liens de mon appli, les utilisateurs double-clique sur les liens (au lieu d'un seul) et du coup la même action est appelé une 2ème fois avec que la 1ère n'est pas terminé. Ce qui cause des plantages au niveau session (perte de données).

    Je suis presque nouveau avec Zend, mais là je ne sais pas du tout comment régler ce souci.

    Désolé d'avoir mis Urgent, mais je dois livrer cet appli demain soir pour une démo, et si j'ai pas trouvé de solutions ça risque de poser de graves soucis.

    Merci
    Bonjour,

    Cela peut poser des soucis si vous utilisez AJAX ou quelconques traitements javascript mais si ces liens pointent simplement vers une autre URL je ne vois pas de problème.

    Si un traitement est executé par Javascript lors d'un clic sur ces liens, il faut que lors du premier clic tu créé un compteur, lors d'un second clic vérifie si la durée de ce compteur est supérieure à 1seconde par exemple.

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Si un traitement est executé par Javascript lors d'un clic sur ces liens, il faut que lors du premier clic tu créé un compteur, lors d'un second clic vérifie si la durée de ce compteur est supérieure à 1seconde par exemple.
    Ou encore désactiver le lien tant que le premier traitement n'est pas terminé...

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    merci pour vos réponses,

    je n'ai pas d'ajax ni de javascript dans mon code (tout simplement que ça m'est interdit).

    En ce qui concerne mes liens, ils sont comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a tabIndex='5' href="<?php echo $this->url(array('controller'=>'analyse', 'action'=>'index'),null,false); ?>">Le projet</a>
    et donc s'il y a double-clique, le 2ème clique est exécuté avant la fin de la 1ère.

  6. #6
    Membre actif Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Points : 233
    Points
    233
    Par défaut
    Et que fait ton action index du contrôleur analyse ?

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    oulà il fait beaucoup de choses :p

    les choses les plus importantes, c'est qu'il récupère des données de session et en créé d'autres.
    Mais j'utilise aussi, et le problème vient peut être de là. J'utilise donc l'action postDispatch() pour afficher mon header et mon entête.

    J'explique pourquoi je ne fais pas ça dans l'init, car si dès fois le header dois changer d'aspect durant l'utilisation de l'appli, ce ne sera pas faisable dans l'init.

    Mais le lien que j'ai mis en exemple est juste un exemple, le pb s'applique à tous les liens ainsi que les boutons.

    Je me demandais s'il n'y avait pas un truc à mettre en plus dans le bootstrap...

    Voici le mien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <?php
    error_reporting(E_ALL|E_STRICT);
    ini_set('display_errors', 1);
    date_default_timezone_set('Europe/Paris');
     
    //Mise en place des répertoires et chargement des classes
    set_include_path('.'
    	. PATH_SEPARATOR . './library'
    	. PATH_SEPARATOR . './application/models/'
    	. PATH_SEPARATOR . './application/mesclasses/'
    	. PATH_SEPARATOR . get_include_path());
    include "Zend/Loader.php";
    define('FPDF_FONTPATH','fpdf/font/');
    include "fpdf/cellpdf.php";
     
    Zend_Loader::registerAutoload();
     
    //Chargement de la configuration
    $config 	= new Zend_Config_Ini('./application/config.ini',null,true);
    $aide   	= new Zend_Config_Ini('./application/aide.ini',null,true);
    $glossaire	= new Zend_Config_Ini('./application/glossaire.ini',null,true);
    $registry = Zend_Registry::getInstance();
    $registry->set('config', $config);
    $registry->set('aide', $aide);
    $registry->set('glossaire', $glossaire);
     
    //Démarrage de la session
    Zend_Session::forgetMe(); //Détruit la session à la fermeture du client.
    Zend_Session::start();
     
    //Mise en place du contrôleur
    $frontController = Zend_Controller_Front::getInstance();
    $frontController ->throwExceptions(false);
    $frontController ->setControllerDirectory('./application/controllers');
    Zend_Layout::startMvc(array('layoutPath'=>'./application/layouts'));
     
    //Helper Doctype
    $doctypeHelper = new Zend_View_Helper_Doctype();
    $doctypeHelper->doctype('XHTML1_STRICT');
     
    //run!
    $frontController ->dispatch();
    ?>
    Une idée ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Salut,

    tu pourrais utiliser une variable de sessions comme verrou.. Un peu comme te le proposais Eusebe.

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    oui je comprends bien cette solution, mais ça ne va pas marcher car le double-clique va vider automatiquement (apparemment) tout ou presque tout ce qui se trouve en session. Donc cette variable verrou en session se trouvera elle aussi supprimer ou effacer.

    De plus, je me rends compte que cet effacement peut être partielle, c'est à dire, qu'un tableau en session peut avoir seulement une partie de ses index supprimé et pas une autre....

    Je sais pas si j'ai bien expliqué...?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    oups désolé j'avais un peu lu le sujet en diagonale.. mais là j'avoue que je ne vois absolument pas ce qui cause le problème

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 215
    Points : 171
    Points
    171
    Par défaut
    Bonjour,

    Je crois avoir une solution :

    Fais pointer ton lien vers un url de redirection, si tu fais pointer le lien vers un fichier qui contient seulement un header de redirection, cela peut résoudre le problème non ? la page contenant le lien disparaitra du navigateur je pense (pas testé), essai de jouer avec ça ou alors en html, je pense que tu as plus de chance avec une meta-refresh, avec un message genre "traitement en cours".

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 34
    Points : 20
    Points
    20
    Par défaut [RESOLU]
    J'ai trouvé,

    apparemment c'est le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zend_Session::forgetMe();
    dans le bootstrap qui foutait la grouille.

    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exécution trop rapide
    Par fakarovic dans le forum Débuter
    Réponses: 4
    Dernier message: 10/07/2011, 00h43
  2. Réponses: 3
    Dernier message: 28/11/2007, 15h44
  3. [VBA-E] Liaisons qui ne se mettent pas à jour (macro trop rapide?)
    Par minikisskool dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 21/11/2005, 09h36
  4. Horloge 2x trop rapide!
    Par rgy834 dans le forum Administration système
    Réponses: 6
    Dernier message: 24/10/2005, 21h08
  5. Compte à rebours trop rapide
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2005, 20h57

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