Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2998 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  page executee en double et redirection

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

page executee en double et redirection

n°1516017
fluminis
Posté le 17-02-2007 à 20:39:23  profilanswer
 

Bonsoir à tous,
 
J'ai un probleme de redirection avec "header" que je ne comprends pas.
 
En gros, ma page est executée deux fois avant de faire effectivement la redirection :
 
1) page1.php affiche le formulaire
2) l'utilisateur soumet le formulaire et les données en post sont envoyées à page1.php
3) page1.php teste les données dans $_POST et s'il n'y a pas d'erreur
4) page1.php fait une redirection avec la fonction "header" vers page2.php
5) Au lieu d'atterir à page2, on revient sur page1.php
$_POST contient toujours les memes données
page1.php refait les meme tests et fait sa redirection vers page2.php
6) on arrive enfin vers page2.php
 
Est ce que vous avez deja eu un probleme similaire ?
 
 
Merci d'avance
 
fluminis


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
mood
Publicité
Posté le 17-02-2007 à 20:39:23  profilanswer
 

n°1516018
sielfried
Posté le 17-02-2007 à 20:42:34  profilanswer
 

Mets un exit juste après la redirection.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1516019
fluminis
Posté le 17-02-2007 à 20:43:08  profilanswer
 

il y en a un

n°1516022
sielfried
Posté le 17-02-2007 à 20:55:51  profilanswer
 

Ok dans ce cas essaie de réduire ton code à un exemple minimum et poste-le, ce sera plus facile de t'aider.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1516031
fluminis
Posté le 17-02-2007 à 21:29:06  profilanswer
 

une version epurée du code :
 
Page 1

Code :
  1. <?php
  2. include('includes/utils.inc.php'); //declaration de fonctions utiles
  3. logged(DEBUG, "acces page1.php" );
  4. if (!empty($_POST['ok'])) {
  5. //sumbit form
  6. //check required fields
  7. if(verifyFields('employes',$_POST)) {
  8.  //ok all the required fields are present
  9.  // on enregistre les info en base
  10.  logged(DEBUG, "Traitements de page1" );
  11. }
  12. logged(DEBUG, "Redirect from page1 to page2" );
  13. finalizeLog(); // ecrit tous les messages de log dans un fichier
  14. header('location: page2.php');
  15. exit;
  16. }
  17. ?>
  18. <form name="employes" method="post">
  19. <input type="hidden" name="ok" value="1" />
  20. ... //les champs du formulaires
  21. <input type="submit" name="button" value="GO" />
  22. </form>


 
et page 2

Code :
  1. <?php
  2. include('includes/utils.inc.php');
  3. logged(DEBUG, "acces page page2.php" );
  4. finalizeLog();
  5. ?>


 
j'obtiens dans mon fichier de log :

Code :
  1. acces page1.php
  2. Traitements de page1
  3. Redirect from page1 to page2
  4. acces page1.php
  5. Traitements de page1
  6. Redirect from page1 to page2
  7. acces page page2.php


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1516056
sielfried
Posté le 17-02-2007 à 22:52:12  profilanswer
 

Je dirais que c'est ton finalizeLog qui ne vide pas le buffer quand tu l'appelles, et du coup quand tu le fais sur page2 ça réaffiche ce que tu avais déjà loggé dans page1, + la nouvelle ligne.
 
Je vois pas d'autre explication.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1516061
fluminis
Posté le 17-02-2007 à 23:29:27  profilanswer
 

c'est pas ca...
 
J'ai supprimé du code presenté ici le traitement des données.
 
Et dans ce traitement, je fais :

Code :
  1. if (!empty($_SESSION['monId'])) {
  2.    $sql = "UPDATE ...";
  3.    logged(DEBUG, $sql);
  4. } else {
  5.    $sql = "INSERT ...";
  6.    logged(DEBUG, $sql);
  7. }


 
La premiere fois, l'id n'existe pas en session donc je fais une insertion en base de données et je stock l'id de l'enregistrement en session.
La deuxieme fois l'id existe en session donc je fais un update.
 
Au final, je vois dans mon log, qu'il a fait un insert la 1ere fois et un update la seconde.
 
Bref j'ai deja proccedé de même sur mes autres sites et je ne comprends pas pourquoi ca coince cette fois ci...

n°1516173
sielfried
Posté le 18-02-2007 à 16:35:17  profilanswer
 

J'ai testé rapidos chez moi là (en écrivant dans un fichier au lieu du log) et tout se déroule correctement, avec un seul passage dans page1. :spamafote:
 
Essaie avec des chemins absolus dans ton header sinon, on sait jamais. Normalement un header de redirection doit prendre un tel chemin, même si les chemins relatifs semblent marcher partout ou presque.
 
Enfin bon, y a une chance sur 1000 que ce soit ça...


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1516215
fluminis
Posté le 18-02-2007 à 20:06:56  profilanswer
 

merci d'avoir pris le temps de faire le test chez toi.
 
Je vais essayer avec des chemins absolus on sait jamais.

n°1516360
FlorentG
Unité de Masse
Posté le 19-02-2007 à 11:20:34  profilanswer
 

Ouais les navigateurs sont gentils. Maintenant si on veut respecter la norme, c'est chemins absolue et status-code 303 See Other (Donc passage d'une ressource non-cachable vers une ressource cachable)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  page executee en double et redirection

 

Sujets relatifs
Besoin d'aide sur un forum phpBB - ajout d'une pageDouble tri dans un Array pour un classement
Une page d'auto-inscription?!probleme d'overflow avec variables type Double [résolu]
elements en chargement dans une page ?problème d'alignement menu/page(html)
Fonction javascript adapter écran/pagerecuperer une partie d'une page web
Plus de sujets relatifs à : page executee en double et redirection


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR