Lien HTML Href > perte de la valeur des var PHP

Lien HTML Href > perte de la valeur des var PHP - PHP - Programmation

Marsh Posté le 05-04-2004 à 17:00:49    

Hello
Après avoir réussi l'accés log et le controle de la page suivante (redirigée) avec un en tete de ce type:
<?php
session_start();
if ($_GET['statut'] !="admin" )
{ header("Location:../login.php" );
}
?>

 
Dans cette page j'ai des liens HREF dont le contenu est controlé par la même en tête, or il me redirige vers la page login...
 
Qué passa ?
 
Merci  :pt1cable:

Reply

Marsh Posté le 05-04-2004 à 17:00:49   

Reply

Marsh Posté le 05-04-2004 à 17:07:49    

Rien compris ! explique !


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 05-04-2004 à 17:14:30    

Tout d'abord merci :)
 
En fait j'ai une page login.php avec controle acces qui m'envoie vers index.php si c'est ok
 
...
$statut="admin";  
session_register("statut" );  
header("Location:index.php?statut=$statut" );
...

 
En entete de index.php j'ai mis ça pour controler l'acces, no problemo ça marche:
 
<?php if ($_GET['statut'] !="admin" )
{ header("Location:login.php" );
}?>

 
Dans cette page index.php j'ai mis des liens vers d'autres pages test.php qui ont la meme entete pour vérifier l'autorisation d'acces... Or là quand je sélectionne un lien il me renvoie à la page login.php...
 
Bizarre non ?? :whistle:

Reply

Marsh Posté le 06-04-2004 à 03:39:12    

Si t'as fait  
 
echo 'href="page.php?statut=$statut';
 
c'est normal que ca marche pas vu que la bonne variable c'est $_GET['statut']
Si tu nous montrait également un des liens dont tu parles et le test dans la nouvelle page, ca sera surement plus facile de répondre sans faire des supositions initiales. ;)

Reply

Marsh Posté le 06-04-2004 à 09:09:25    

bryanack a écrit :

Tout d'abord merci :)
 
En fait j'ai une page login.php avec controle acces qui m'envoie vers index.php si c'est ok
 
...
$statut="admin";  
session_register("statut" );  
header("Location:index.php?statut=$statut" );
...

 
En entete de index.php j'ai mis ça pour controler l'acces, no problemo ça marche:
 
<?php if ($_GET['statut'] !="admin" )
{ header("Location:login.php" );
}?>

 
Dans cette page index.php j'ai mis des liens vers d'autres pages test.php qui ont la meme entete pour vérifier l'autorisation d'acces... Or là quand je sélectionne un lien il me renvoie à la page login.php...
 
Bizarre non ?? :whistle:  


 
on utilise plus session_register.
 
On utilise $_SESSION['variable'] = "ce que tu veux";

Reply

Marsh Posté le 06-04-2004 à 09:36:37    

Hello
 
Et bien dans mes liens j'utilise la meme en tete
 
<?php if ($_GET['statut'] !="admin" )  
{ header("Location:login.php" );  
}?>

 
Mais l'accés à ces pages test.php ne se fait pas par un HEADER location: mais un href en html.

Reply

Marsh Posté le 06-04-2004 à 09:40:01    

Exemple:
apres la page login.php j'accède à index.php avec l'entete qui va bien pour vérifier l'acces.
<?php if ($_GET['statut'] !="admin" )  
{ header("Location:login.php" );  
}?>

Dans cette page j'ai des liens <a href="../recherche/test.php">  
avec la meme entete pour controler l'acces, or là il me sort et
me renvoie vers la page login.php
 
Voilà, j'espère que j'arrive à me faire comprendre  :)  
 
merci à vous en tout cas

Reply

Marsh Posté le 06-04-2004 à 09:46:16    

Ben oui, c'et même logique, tu utilises $_GET plutôt que $_SESSION dans tes "tests d'en-tête"
 
tu dis que, dans ta page index.php, tu as des liens vers test.php (par exemple).  
 
Or dans test.php , tu nous dis que tu as ton "entête" de vérification de statut basée sur un test de $_GET['statut'].
 
Il paraîtrait plus logique de faire un test sur $_SESSION['statut'] .
 
Sinon dans tous tes liens (par exemple sur ta page index), tu devrais faire <a href="../recherche/test.php?statut=<?=$statut?>">.
 
$_GET= variables passées par l'url
$_SESSION=variables de session.
 
Je suis pas sûr d'avoir été clair, mais je me comprends ;)


Message édité par deliriumtremens le 06-04-2004 à 09:46:56
Reply

Marsh Posté le 06-04-2004 à 09:50:51    

PAs très clair mais je vais chercher dans cette voie et tester ça :)
Je vous tiens au courant :)
 
merci :)

Reply

Marsh Posté le 06-04-2004 à 09:53:35    

Le plus simple, tu te fais une fonction à 2 sous
 

Code :
  1. Function secure()
  2.     {
  3.     if (!($_SESSION['statut']) || ($_SESSION['statut']!='admin'))
  4.         {
  5.         Header("Location: login.php" );
  6.         exit();
  7.         }
  8.     }


 
Et au début de toutes tes pages nécessitant une protection tu fais
 

Code :
  1. session_start();
  2. secure();


 
et pis oilà.


Message édité par deliriumtremens le 06-04-2004 à 09:53:57
Reply

Marsh Posté le 06-04-2004 à 09:53:35   

Reply

Marsh Posté le 06-04-2004 à 09:59:06    

Je te conseillerais juste de revoir un petit tutorial sur les superglobales ($_SESSION, $_GET, $_POST et compagnie) pour savoir ce qu'elles contiennent (sans rire, d'après ton code ça n'a pas l'air encore clair).
 
Plus un petit tuto sur les sessions.
 
M'enfin tu fais ce que tu veux, hein...


Message édité par deliriumtremens le 06-04-2004 à 09:59:28
Reply

Marsh Posté le 06-04-2004 à 10:04:11    

Ca roule je vais faire tout ça !
J'ai toute la matinée devant moi :)
 
Merci en tout cas !!

Reply

Marsh Posté le 06-04-2004 à 10:20:55    

bin flute !
 
sur login.php j'ai bien ma variable statut qui s'initialise avec la valeur admin
$_SESSION['statut'];    
$statut="admin";
header("Location:index.php?statut=$statut" )

 
et ma page test pour le moment j'ai mis ça en tete mais elle ne récupère pas la valeur de statut
session_start();
if (!($_SESSION['statut']) || ($_SESSION['statut']!='admin'))  
{  
Header("Location:login.php" );  
exit();  
}

 
??

Reply

Marsh Posté le 06-04-2004 à 10:23:22    

hrmmmpff... Donne le code complet de login.php, on gagnera du temps !
 
Parce que bon

Code :
  1. $_SESSION['statut']; //génial, ça sert à quoi ?
  2. $statut="admin";//rien à voir avec la session

Reply

Marsh Posté le 06-04-2004 à 10:26:44    

Hop: login.php
 
<?php
$erreurlog="";
$statut="";
$id="";
$pass="";
// pour éviter les erreurs d'exécution UNDEFINED VARIABLE
if($HTTP_POST_VARS['valider']=="ok" )
{
session_start();
$id=$HTTP_POST_VARS["id"];
$pass=$HTTP_POST_VARS["pass"];
if(($id=="aa" )AND($pass=="aa" ))
{
$_SESSION['statut'];  
$statut="admin";  
header("Location:index.php?statut=$statut" );
}
else
{
$erreurlog=1;
}
}

 
 ?>

Reply

Marsh Posté le 06-04-2004 à 10:37:46    

Bon.
 
- au lieu de $HTTP_POST_VARS[''], utilise $_POST[''].
 
- ensuite, on retrouve le problème soulevé dans les messages plus haut.
 
Tu écris
 
$_SESSION['statut'];
ce qui ne correspond à rien, puisque tu ne lui affectes aucune valeur.
 
Tu affectes une valeur "admin" à la variable $statut, mais ça n'a rien à voir !
 
Pour affecter une valeur à $_SESSION['statut'], il faut faire comme pour une autre variable, mettre un = (eh oui)
 
->pour cette partie, ton code devient
 

Code :
  1. if(($id=="aa" )AND($pass=="aa" ))
  2. {
  3. $_SESSION['statut']="admin";
  4. header("Location:index.php" );//on vire la partie après le ?, qui ne sert à rien, puisqu'on va jouer sur $_SESSION et non pas sur $_GET
  5. }


 
Ensuite, sur tu utilises la fonction que je t'ai donnée pour lancer le test sur tes pages à protéger.


Message édité par deliriumtremens le 06-04-2004 à 10:38:56
Reply

Marsh Posté le 06-04-2004 à 10:45:06    

Superbe !
 
J'ai lu un autre tutorial en même temps !
Je comprends mieux maintenant !
 
Merci à toi en tout cas !

Reply

Sujets relatifs:

Leave a Replay

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