[RESOLU] Redirections deviennent folles !

Redirections deviennent folles ! [RESOLU] - PHP - Programmation

Marsh Posté le 11-10-2013 à 09:45:43    

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
Reply

Marsh Posté le 11-10-2013 à 09:45:43   

Reply

Marsh Posté le 11-10-2013 à 10:30:58    

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().

Reply

Marsh Posté le 11-10-2013 à 10:37:13    

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
Reply

Marsh Posté le 11-10-2013 à 11:36:56    

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...
Reply

Marsh Posté le 11-10-2013 à 11:38:14    

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
Reply

Marsh Posté le 11-10-2013 à 12:45:31    

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
Reply

Marsh Posté le 11-10-2013 à 13:02:07    

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
Reply

Marsh Posté le 11-10-2013 à 13:40:50    

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...
Reply

Marsh Posté le 11-10-2013 à 13:52:19    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed