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

Bibliothèques et frameworks PHP Discussion :

[PHPLIB] Phplib + firefox => fonctions appelées deux fois


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut [PHPLIB] Phplib + firefox => fonctions appelées deux fois
    Bonjour à tous,

    Comme vous pouvez le lire dans le titre, j'ai remarqué qu'en utilisant phplib et firefox, on se retrouve confronté à un problème : les fonctions sont appelées deux fois. Voici un exemple :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
     
    <?
    // Run session
    session_start() ;
     
    // include libraries
    include "../../include.php";
    include "Search.class.php";
    include "../User.class.php";
     
    // Instanciate UserList Object Scenario
    $O_Search = new Search() ;
     
    if ( isset( $_GET[ "act" ] ) && $_GET[ "act" ] == "End" ) {
     
    	// Finish scenario
    	$O_Search->End() ;
     
    } else if ( isset( $_GET[ "act" ] ) && $_GET[ "act" ] == "UpdateStatus" ) {
     
    	// Finish scenario
    	$O_Search->UpdateStatus() ;
     
    } else {
     
    	// Run scenario
    	$O_Search->Begin( true ) ;
    } 
    ?>
     
    -------------------- Méthodes de la classe -------------------------
     
    public function End() {
     
    		error_log("end\n", 3, 'log.txt');
     
    		parent::End( true ) ;
    		$s_TplMap = $this->TplMap() ;
     
    		try {
     
    			// no result found ?
    			$this->_AltNoResult() ;			
     
    		} catch ( ModelException $O_TplException ) {
     
    			$s_TplMap = $O_TplException->getTplMap() ;			
     
    		} catch ( TechnicException $O_TplException )  {
     
    			$s_TplMap = $O_TplException->getTplMap() ;			
     
    		}
     
    		$O_TplDisplay = new TplDisplay( new Tpl( $s_TplMap , true ) , BUFFER_ON ) ;
    		$O_TplDisplay->Display() ;
     
    	}
    Comme vous avez pu voir, j'ai mis un error_log() qui écrit dans mon fichier de log lorsque la méthode est appelée.

    Après l'appel de la page do.php, avec $_GET['act'] = 'End' (qui entraine l'appel de la méthode End() ), je constante que dans mon log j'ai :

    end
    end

    La fonction est appelée deux fois et celà seulement lorsque l'on utilise firefox. Dans le script présenté ca ne pose pas vraiment problème mais dans d'autres dans lesquels j'ai des insertions dans la BDD, je me retrouve avec :

    DELETE ...
    INSERT ...
    DELETE ...

    à la place de mon :

    DELETE ...
    INSERT ...

    Ce qui entraine la suppression des enregistrements venant d'être insérés!

    J'ai cherché des réponses à ce problème mais en vain.

    Avez-vous déjà entendu quelque chose à propos de ce problème ?

  2. #2
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Hello,

    Le PHP étant exécuté du côté du serveur (et non du client), je vois mal comment Firefox pourrait être en cause pour le coup...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 31
    Points : 12
    Points
    12
    Par défaut Rép
    Je sais je sais lol. Moi aussi je comprend pas! Je constate juste qu'avec IE j'ai pas le problème. J'ai trouvé des personnes qui apparemment ont le même problème. J'ai pu lire qu'apparemment Firefox soumet deux fois les formulaires : http://forums.mozillazine.org/viewtopic.php?p=3010677&

    La solution qu'il donne consiste à démarrer firefox en safe mode afin qu'il ne soumette qu'une fois les formulaires.

    Pour ce qui ont le meme problème que moi, il vous suffit de mettre sur votre page d'accueil :

    "Si vous utilisez Firefox, fermer le puis faites : démarrer -> éxécuter -> firefox -safe mode"

    Je rigole biensûr

    De plus, si on change error_log("begin\n", 3, 'log.txt'); par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     error_log("begin ".time()."\n", 3, 'log.txt');
    dans je log j'ai :

    [log]

    begin 1188917323
    begin 1188917325

    [/log]

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Même cas, j'ai trouvé l'origine chez moi
    Oui, je confirme, quand le client est firefox le serveur ne se comporte pas comme si c'était ie, OUI OUI tupac59LC a raison incroyable non !
    J'ai fait plein d'essais, tout se passe comme si TOUT le code s'exécutait 2 fois de suite avant d'envoyer le résultat au "Client" (mail envoyé deux fois etc ..., heureusement que j'avais une protection pour la mise à jour de la base de données lorsque l'on utilise deux fois le même formulaire sans le rafraichir, ... ah, là il y en a qui commence à avoir des idées sur l'origine du pb, non ? ...)
    Pour me convaincre de cet incroyable "effet papillon" j'ai même inséré cette séquence dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $pointdentree = $_SESSION['pointdentree'] ? $_SESSION['pointdentree'] : 0;
    $pointdentree+=1;
    $_SESSION['pointdentree']=$pointdentree;
    echo('coucou $pointdentree ='.$pointdentree);
    En tapotant sur actualiser la page sous ie, 1,2,3,4, etc défilait
    et sous firefox : 2,4,6,8 etc ...
    tout était exécuté deux fois et seul le résultat après la double exécution s'affiche ... donc pourquoi firefox envoie deux fois sa demande et n'affiche que le résultat ? (vu que cela ne peut pas venir su serveur, là je suis d'accord avec les réponses)

    Dans mon cas j'ai trouvé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    body {
      background-color: #99FFCC;
      background-image:url(.........../monimage.gif);
    ça, ça marche, et l'image de fond s'affiche bien, mais quand je ne mets pas d'image de fond donc :
    background-image:url(); c'est à dire pas d'image à afficher (ça arrive chez moi car les css sont paramétrés)
    alors là firefox poste tout seul ,sans rien ,dire le formulaire (avec les données préaffichées éventuelles) comme si l'usager avait cliqué sur envoyer et le retour du serveur est perdu, donc lors du vrai clic sur envoyer le serveur reçoit une deuxième les données et refait tout (envoil d'email, calcul, mise des bases de données, cookies, etc ...) ... Enfin, c'est mon explication

    Comme c'est pas évident à trouver à partir des symptômes j'espère que cela guidera les recherches des prochaines victimes car je n'ai pas trouvé de piste sur les forum (sans doute mal cherché :-) et il y a sans doute d'autre cas similaires où firefox s'affole

  5. #5
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    J'ai déjà eu ce problème à cause d'un img src="". Forcément firefox va effectuer une requete GET sur "/" donc charger la page 2x (Ce qui est d'ailleurs logique)

Discussions similaires

  1. [c# 2.0] ObjectDataSource requête appelée deux fois
    Par tscoops dans le forum ASP.NET
    Réponses: 8
    Dernier message: 24/01/2008, 14h05
  2. [Prototype] [Event] Fonction exécutée deux fois
    Par cereal59 dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 11/01/2008, 16h40
  3. Fonction appellé deux fois
    Par stephane92400 dans le forum JSF
    Réponses: 5
    Dernier message: 17/08/2007, 16h22
  4. Réponses: 6
    Dernier message: 17/08/2006, 19h16

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