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

  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU] Redirections deviennent folles !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Redirections deviennent folles !

n°2206385
ghmpou
Posté le 11-10-2013 à 09:45:43  profilanswer
 

Bonjour,
 
depuis hier mon site rencontre un problème étrange, alors que jusqu'ici tout fonctionnait parfaitement : les pages sur lesquelles j'ai crée une redirection :

Code :
  1. <META HTTP-EQUIV='Refresh' CONTENT='0;URL=\"javascript:history.go(-1)\"'>
  2. ou
  3. <META HTTP-EQUIV='Refresh' CONTENT='0;URL=\"unepage.php\"'>


 
ne réagissent plus correctement.
 
Exemple : lors d'un login sur le site, le visiteur devrait être redirigé vers la page d'accueil : marche pas.
Pire, lors d'un appel à cette page php, qui ajoute une "gomette" virtuelle à un profil utilisateur, la page tourne en boucle et me rajoute des gomettes a l'infini !!

Code :
  1. <?php
  2. session_start(); // On démarre la session AVANT toute chose
  3. if (!$_SESSION['rank'])
  4. {
  5. print('
  6.    <p align="center">RIEN A FAIRE LA PETIT SCARRABE ...</p>
  7.    ');
  8. }
  9. elseif ($_SESSION['rank'] < 8)
  10. {
  11. print('
  12.    <p align="center">RESERVE AUX GRANDES PERSONNES ...</p>
  13.    ');
  14. }
  15. else
  16. {
  17. //connexion
  18. include ('blabla/blabla/conf.inc.php');
  19. mysql_connect("$host", "$user", "$pass" );
  20. mysql_select_db("$base" );
  21. $id_user = $_GET['id_user'];
  22. $g = $_GET['g'];
  23. $req = mysql_query('SELECT bonusmalus FROM KFWod_users WHERE id_user="'.$id_user.'"');
  24. $data = mysql_fetch_array($req);
  25. $bonusmalus = $data['bonusmalus'];
  26. if ($g == "moins" )
  27. {
  28.  $bonusmalus = $bonusmalus - 1;
  29. }
  30. elseif ($g == "plus" )
  31. {
  32.  $bonusmalus = $bonusmalus + 1;
  33. }
  34.     mysql_query('UPDATE KFWod_users SET bonusmalus="'.$bonusmalus.'" WHERE id_user="'.$id_user.'"');
  35. mysql_close();
  36. echo "<META HTTP-EQUIV='Refresh' CONTENT='0;URL=\"javascript:history.go(-1)\"'>";
  37. }
  38. ?>


 
Qu'est ce qui se passe depuis hier ?? Une idée ?


Message édité par ghmpou le 11-10-2013 à 13:02:25

---------------
www.bubbleburstband.com
mood
Publicité
Posté le 11-10-2013 à 09:45:43  profilanswer
 

n°2206399
olivthill
Posté le 11-10-2013 à 10:30:58  profilanswer
 

javascript:history.go(-1)


Si ça ne marche pas, c'est que le javascript est désactivé, ou que l'historique est désactivé, ou autres choses.
 
En PHP, habituellement, on fait les redirections avec la fonction header(), voir http://fr2.php.net/manual/en/function.header.php :

 header('Location: mapage.php'); exit();


 
Pour faire un go(-1), on enregistre la page précédente avant d'aller sur la page, et on la fournit plus tard dans header().

n°2206402
ghmpou
Posté le 11-10-2013 à 10:37:13  profilanswer
 

Alors pour te répondre, avec quelques infos en plus :
 
Je viens de tester sur mon portable sous Xubuntu avec chromium : la redirection de login fonctionne bien, en gros les redirections vers des pages définies ça a l'air de marcher.
 
Par contre avec l'exemple de la page que j'ai fourni, toujours une boucle sur ma page, qui pour la peine me fait tourner le script indéfiniment.
Bref je veux bien me passer du go(-1) mais je ne comprends pas comment faire autrement.
Pour utiliser un header() il faut le placer en tout début de page non ?
Ce qui a priori ne peut pas fonctionner sur tout mon site...


---------------
www.bubbleburstband.com
n°2206423
SICKofitAL​L
misanthrope
Posté le 11-10-2013 à 11:36:56  profilanswer
 

Un header n'est pas forcement en début de page, par contre tu ne peux pas le faire préceder par un autre, ce qui arrive si une erreur est survenue dans ton code et donc que du texte a déjà été envoyé au browser.
Sinon oui, en général, on envoit un header 'location' pour rediriger, pas un history.go(-1) qui ne fonctionnera pas si le JS est désactivé ou pour d'autres raisons. Une solution est de passer en param dans ton url la page source, et en fonction de celle-ci rediriger au bon endroit.


---------------
We deserve everything that's coming...
n°2206424
olivthill
Posté le 11-10-2013 à 11:38:14  profilanswer
 

ghmpou a écrit :

Pour utiliser un header() il faut le placer en tout début de page non ?


On peut avoir header() tout en bas d'une page de code PHP, ou au milieu ou au début.
La seule chose qui compte, c'est d'appeler header() avant d'appeler des echo(), print(), printf() et d'autres choses qui envoient des données au navigateur de l'utilisateur.

 


Message édité par olivthill le 11-10-2013 à 11:38:31
n°2206467
ghmpou
Posté le 11-10-2013 à 12:45:31  profilanswer
 

SICKofitALL a écrit :

Un header n'est pas forcement en début de page, par contre tu ne peux pas le faire préceder par un autre, ce qui arrive si une erreur est survenue dans ton code et donc que du texte a déjà été envoyé au browser.
Sinon oui, en général, on envoit un header 'location' pour rediriger, pas un history.go(-1) qui ne fonctionnera pas si le JS est désactivé ou pour d'autres raisons. Une solution est de passer en param dans ton url la page source, et en fonction de celle-ci rediriger au bon endroit.


Je pense que je vais faire ça oui, me servir d'une variable dans l'URL pour rediriger!
 
Je reviens vous dire ....


---------------
www.bubbleburstband.com
n°2206472
ghmpou
Posté le 11-10-2013 à 13:02:07  profilanswer
 

Bon ben je viens d'essayer avec le header() : ça marche !
 
Reste à savoir pourquoi sur mon site ça avait fonctionné un moment, puis plus.
 
En tout cas je vais essayer d'intégrer ça partout dans le site désormais.
 
Merci beaucoup à vous tous


---------------
www.bubbleburstband.com
n°2206485
SICKofitAL​L
misanthrope
Posté le 11-10-2013 à 13:40:50  profilanswer
 

Tant mieux ! :)
Une des raisons possible sur le fait que ca déconne est celle que j'ai évoquée plus haut : une erreur est survenue, du coup ca envoit du texte à ton browser, avec un header implicite, ce qui flingue de fait ton header à toi. Dans ton code j'ai remarqué par exemple que lorsque tu te connectes à mysql, tu ne checks pas l'eventualité d'une erreur de connexion. Si ca arrive, tu as un message, du style un warning ou un fatal je sais plus, mais dans les deux cas ton header sera caduque ;)


Message édité par SICKofitALL le 11-10-2013 à 13:41:30

---------------
We deserve everything that's coming...
n°2206491
ghmpou
Posté le 11-10-2013 à 13:52:19  profilanswer
 

Ok je vois le principe.
 
J'avoue que je code un peu avec les pieds, dans la mesure ou je fais pas attention (pas bien je sais) à créer des conditions de vérif de connexions / script qui renvoi erreur ou non , etc...


---------------
www.bubbleburstband.com

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

  [RESOLU] Redirections deviennent folles !

 

Sujets relatifs
RedirectionsRedirections
Problème avec les "à" qui deviennent des "�"Aménager un shell pour gérer les redirections > et 2>
2 Redirections à partir d'un bouton Java[EXCEL2007] Problèmes de format (chiffre deviennent dates ; graphes)
[C++] Problème de redirections des I/O standards[REGLE](jsuis une boulet) Calques deviennent des liens !!
Pb avec les redirections invisibles OVHProbleme de session lors des redirections
Plus de sujets relatifs à : [RESOLU] Redirections deviennent folles !


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)