Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Templates > phplib et phpBB
phplib et phpBB Forum d'entraide sur les moteurs de templates phplib et phpBB. Avant de poster -> FAQ gabarits phpBB2, Cours phpBB2 et Sources phpBB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/09/2007, 12h12   #1
Invité de passage
 
Inscription : février 2007
Messages : 31
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 31
Points : 3
Points : 3
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 :
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 ?
tupac59LC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 13h57   #2
Membre habitué
 
Inscription : mai 2002
Messages : 101
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : mai 2002
Messages : 101
Points : 106
Points : 106
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...
Cold Hand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2007, 16h00   #3
Invité de passage
 
Inscription : février 2007
Messages : 31
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 31
Points : 3
Points : 3
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 :
 error_log("begin ".time()."\n", 3, 'log.txt');
dans je log j'ai :

[log]

begin 1188917323
begin 1188917325

[/log]
tupac59LC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 00h32   #4
Invité de passage
 
Inscription : février 2008
Messages : 1
Détails du profil
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 :
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 :
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
tizanou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2008, 00h35   #5
Membre chevronné
 
Avatar de |PaRa-BoL
 
Inscription : novembre 2003
Messages : 737
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : novembre 2003
Messages : 737
Points : 782
Points : 782
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)
__________________
http://www.ape-project.org/
|PaRa-BoL est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h25.


 
 
 
 
Partenaires

Hébergement Web