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

  FORUM HardWare.fr
  Programmation
  PHP

  header location

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

header location

n°1847885
tete278
Posté le 06-02-2009 à 12:22:41  profilanswer
 

Bonjour à tous,
 
J'utilise un script php pour vérifier l'autorisation d'accès à certaines pages. Supposons par exemple que l'internaute arrive sur page1.php, un script vérifie si une variable de session donnée existe et dans la négative envoie vers connexion.php
Dans connexion.php se trouve la ligne

Code :
  1. header('Location: page1.php');


Cela fonctionne bien mais je souhaiterais que page2.php puis page3.php etc. agissent de même ce qui fait qu'il faudrait que le code ne comprenne pas

Code :
  1. header('Location: page1.php');

mais plutot

Code :
  1. header('Location: quelque chose qui renvoie vers la page appelante quelque soit la page appelante');

J'ai beau avoir cherché dans les messages existants, j'avoue ne pas savoir comment faire.
 
Une âme charitable accepterait-elle de se pencher sur mon problème ? Merci d'avance.
 
tete278

mood
Publicité
Posté le 06-02-2009 à 12:22:41  profilanswer
 

n°1847895
soulmanto
Chat Noir replica
Posté le 06-02-2009 à 12:30:26  profilanswer
 

Code :
  1. header('location:'.$_SERVER["HTTP_REFERER"]);

n°1847925
tete278
Posté le 06-02-2009 à 13:25:35  profilanswer
 

Bonjour soulmanto et merci pour ta réponse rapide.
Je viens de tester ta proposition et cette fois connexion.php renvoie à elle-même alors que je souhaiterais qu'elle renvoie vers page1.php si c'est à partir d'elle que j'ai accèdé à connexion.php
 
Aurais-tu une autre piste ?
Merci  
tete278

n°1847941
yellu
Posté le 06-02-2009 à 13:45:00  profilanswer
 

Connexion renvoi à elle même car tu dois avoir mis un formulaire dessus et donc le REFERER deviens connexion lui même.
Stock le referer lors de l'arrivée sur connexion.php et redirige dessus après soumission du form...
Attention au referer vide, prevoi un destination par defaut.

n°1848032
tete278
Posté le 06-02-2009 à 15:32:40  profilanswer
 

Bonjour à tous et merci à yellu,
 
Soyons clair : voici le début du script de la page connexion :

Code :
  1. <?php
  2. // on teste si le visiteur a soumis le formulaire de connexion   
  3. if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
  4.    if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])))
  5.     {
  6.   // Connexion à la base de données comprenant les utilisateurs autorisés
  7.   include "../mysql_conf.incent.php";
  8.   $bas=mysql_connect($host,$login,$password) or die ('Erreur :'.mysql_error() );
  9.   $base = mysql_select_db('mfrforetent',$bas);
  10.  // on teste si une entrée de la base contient ce couple login / pass
  11.   $sql = 'SELECT count(*) FROM user_id WHERE _ident="'.mysql_escape_string($_POST['login']).'" AND _passwd="'.mysql_escape_string($_POST['pass']).'"';
  12.   $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  13.       $data = mysql_fetch_array($req);
  14.   mysql_free_result($req);
  15.  // On passe en session le contenu de ID (celui de l'utilisateur)
  16.   $sql = 'SELECT * FROM user_id WHERE _ident="'.mysql_escape_string($_POST['login']).'" AND _passwd="'.mysql_escape_string($_POST['pass']).'"';
  17.   $res =mysql_query($sql) or die ('Erreur :'.mysql_errno().mysql_error());
  18.   $rows = mysql_num_rows($res);
  19.   while ($rows=mysql_fetch_array($res))
  20.    {
  21.    $id_utilisateur = $rows['_ID'];
  22.    }
  23.       mysql_close();
  24.     if ($data[0] == 1)
  25.   {
  26.    // On obtient une réponse donc l'utilisateur est un membre
  27.           session_start();
  28.            $_SESSION['login'] = $_POST['login']; // affecte cette valeur dans la clef login du tableau de session $_SESSION
  29.    $_SESSION['id_utilisateur'] = $id_utilisateur;
  30.   // Connexion à la base de données contenant les résultats des exercices
  31.    include "../mysql_conf.inc.php";
  32.    $link=mysql_connect($host,$login,$password) or die ('Erreur :'.mysql_error() );
  33.    $base = mysql_select_db($base);
  34.           header('location:'.$_SERVER["HTTP_REFERER"]);
  35.            exit();
  36.   }


 
La ligne 41 pose problème car renvoie vers elle-même alors qu'elle devrait retourner vers la page qui l'a appelée.
Tu parles de destination par defaut et je ne souhaite pas que cette destination soit identique à chaque fois donc je ne comprends pas ce qu'il faut faire.
 
Merci  
tete278


Message édité par tete278 le 06-02-2009 à 15:36:40
n°1848043
Profil sup​primé
Posté le 06-02-2009 à 15:41:41  answer
 

Le truc c'est que $_SERVER["HTTP_REFERER"] n'est pas fillable. Parfois il est vide, et c'est balot.
La seule solution que j'ai trouvé pour faire ce genre de truc est de faire passer l'url courante en get/post/session selon le cas.

n°1848049
FlorentG
Posté le 06-02-2009 à 15:56:42  profilanswer
 

+1, je met un paramètre dans l'URL. Je n'autorise dedans juste des URL relatives au domaines, pour éviter de pouvoir rediriger n'importe où

Message cité 1 fois
Message édité par FlorentG le 06-02-2009 à 15:58:27
n°1848059
yellu
Posté le 06-02-2009 à 16:20:37  profilanswer
 

Le REFERER est la page qui précede la page actuelle, qd on soumet un formulaire alors la page précédente deviens celle du formulaire.
C'est pour ça que tu es redirigé sur le Connexion !
 
Je te dis donc de stocker ton information REFERER au moment ou elle est valide (la première fois que tu arrives sur Connexion) ou encore de passer par une variable GET ou POST pour la spécifier à Connexion comme le propose les deux autres personnes qui t'ont répondu.


Message édité par yellu le 06-02-2009 à 16:21:22
n°1848304
Profil sup​primé
Posté le 07-02-2009 à 12:51:06  answer
 

FlorentG a écrit :

+1, je met un paramètre dans l'URL. Je n'autorise dedans juste des URL relatives au domaines, pour éviter de pouvoir rediriger n'importe où


avec file_exists ? EDIT ah ben non  [:haha klemton]


Message édité par Profil supprimé le 07-02-2009 à 12:51:44
n°1849261
tete278
Posté le 10-02-2009 à 08:10:54  profilanswer
 

Bonjour à tous et merci pour vos interventions. Je viens de tester la proposition de Corten en créant dans page1.php une variable de session mémorisant l'url de la page en cours

Code :
  1. $_SESSION['url'] = $_SERVER['REQUEST_URI'];

et ai modifié dans connexion.php ma ligne 41 qui devient  

Code :
  1. header('Location: $_SESSION[\'URL\']');


Après m'être loggué, j'aboutis à une erreur 404 donc je ne suis pas redirigé au bon endroit. Etant assez débutant, je ne vois pas où est mon erreur car erreur il y a. Merci d'avance.
 
tete278

mood
Publicité
Posté le 10-02-2009 à 08:10:54  profilanswer
 

n°1849272
Profil sup​primé
Posté le 10-02-2009 à 08:38:48  answer
 

Les variables ne sont pas interprétées entre guillemets simples...

n°1849414
rufo
Pas me confondre avec Lycos!
Posté le 10-02-2009 à 13:29:32  profilanswer
 

Plutôt : header('Location: '.$_SESSION['URL']);


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1849418
Profil sup​primé
Posté le 10-02-2009 à 13:30:47  answer
 

ou bien plus lisible :

Code :
  1. header("location: {$_SESSION['url']}" );

n°1849443
omega2
Posté le 10-02-2009 à 14:51:44  profilanswer
 


Ce qui est moins lisible pour beaucoup de développeurs. ;)

n°1849445
Profil sup​primé
Posté le 10-02-2009 à 14:53:12  answer
 

c'est vrai, çà dépend en partie de la colorisation syntaxique de l'éditeur de code, mais pour moi c'est plus lisible ;)

n°1849804
tete278
Posté le 11-02-2009 à 12:07:52  profilanswer
 

Bonjour à tous et merci pour vos participations,
 
J'ai donc, dans connexion.php, modifié ma ligne ainsi

Code :
  1. header("location: {$_SESSION['url']}" );

et obtiens désormais l'erreur suivante :
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'toto'@'10.0.70.3' (using password: YES) in /homez.65/site/www/connexion.php on line 9
Erreur :Access denied for user 'toto'@'10.0.70.3' (using password: YES)
 
J'en déduis que les paramètres de connexion à la base de données ne sont pas bons; est-ce que je me trompe ?
Je pose la question dans le sens où ils me semblaient pourtant être corrects ....
 
Merci encore
 
tete278

n°1849805
Profil sup​primé
Posté le 11-02-2009 à 12:09:10  answer
 

et ben apparemment, non, ils ne sont pas bons... ;)

n°1850513
tete278
Posté le 12-02-2009 à 17:23:02  profilanswer
 

Bizarre, bizarre, vous avez dit bizarre ? Comme c'est bizarre.
 
En faisant page précédente 2 fois, j'accède pourtant à la bonne page, ce qui est fort curieux. N'y aurait-il pas une autre possibilité qu'une erreur de paramètres ?
 
tete278


Message édité par tete278 le 12-02-2009 à 17:40:16
n°1850588
grosbin
OR die;
Posté le 12-02-2009 à 21:47:39  profilanswer
 
n°1858752
tete278
Posté le 07-03-2009 à 13:50:32  profilanswer
 

Bonjour à tous,
 
Force est de constater que vous aviez raison. Je clos par conséquent la discussion en remerciant tous les intervenants.
tete278


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

  header location

 

Sujets relatifs
pb header locationPetite erreur de rien du tout , header('location
"header location:" est laxisteHeader (location) et Robots...
Header dans un popupErreur header(sprintf("Location: %s", $deleteGoTo));
Etrangetée header locationFaire passer une variable par un header("Location: ...")
Temporiser un header("Location: ***"); 
Plus de sujets relatifs à : header location


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