bonjour,
je suis un amateur en php et voici mon problème.
j'ai un site qui a des page simple et d'autre protégées. il faut se logger pour y avoir accès.
Lorsque l'usager clic sur le lien d'un page sécurisée il est directement redirigé vers la page login. Jusque la tous va bien.
Mon problème est que j'aimerais qu'une fois authentifié, qu'il soit directement redirigé vers le lien sélectionné au préalable.
en gros j'ai mon fichier login.php pour la connexion, protected.php vers le quel il est redirigé qui lui envoie le message d’accès restreint.
Dans le protected.php j'ai fait un include de login.php donc il est plus facile pour lui de se connecter.
et j'ai 3 autres page securisée dont planif1.php, planif2.php et planif3.php
ces 3 lien sont présent sur la page accueil.php.

//////////////////////////////////////////////////////////////////
login.php
<?php
session_start();

echo "<h1>Se connecter</h1>";

if(isset($_POST'submit']))
{
$username=htmlspecialchars(trim($_POST'username']));
$password=htmlspecialchars(trim($_POST'password']));

if($username&&$password)
{
$password=md5($password);
$connect=mysql_connect('localhost','root','');
mysql_select_db('test');

$log=mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' ");
$rows=mysql_num_rows($log);
if($rows==1)
{
$_SESSION'username']=$username;
header ('Location: membre.php');

}else echo "Nom utilisateur/password invalide";

}else echo"Veuillez saisir tous les champs";

}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
<form method="post" action="login.php">
<p>Votre nom d'utilisateur</p>
<input type="text" name="username" />
<p>Votre password</p>
<input type="password" name="password" />
<p>
<input type="submit" value="Connecter" name="submit" />
</p>
</form>
<p><a href="register.php">S'inscrire</a></p>

</body>
</html>

/////////////////////////////////////////////////////////////////////////
membre.php
<?php
session_start();
if(isset($_SESSION'username'])){

echo "Bienvenue" .$_SESSION'username']."<br/> <a href='logout.php'>Deconnecter</a>";
}
else
{
header('Location:login.php');
}
?>
///////////////////////////////////////////////////////////////////////////
planif1.php , planif1.php etc...
<?php

session_start();
if(isset($_SESSION'username'])){

echo "Bienvenue" .$_SESSION'username'];
}
else
{
header('Location:protected.php');
}
?>

Désolé pour la longueur de ma questions et merci d'avance.

6 réponses


Pewel-OutOfNutella
Réponse acceptée

Hello !

Quand il clique sur le lien, sauvegarde le lien en session et ressort le quand il s'est logué

madmax9922
Auteur
Réponse acceptée

Mais comment je fais ca a partir d'ou je le fais et comment je le reccupere.

Pewel-OutOfNutella
Réponse acceptée

Alors j'ai une solution qui me vient en tête, c'est :

-tu lie un évènement click sur chacun de tes liens sécurisés
-au clic de ce lien, tu éxècutes un bout de code PHP (via de l'AJAX) permettant de savoir si ton user est logué ou non
-s'il l'est, tu le redirige en renvoyant l'url vers ton js et après dans ton js tu fait un window.location = tonUrl
-s'il ne l'est pas, tu stocke l'url en session sur ton script php, tu redirige vers ta page de login et après dès que tu es logué tu regarde si tu as quelque chose en session
-si tu as qqchose, tu redirige via les headers ou ta méthode de redirect si tu utilise un framework
-sinon bah y'a pas de sinon :D

Voilà, c'est une méthode parmis tant d'autres, je n'ai pas dit que c'était la plus optimale, mais en tout cas c'est celle que je ferais.

Benjamin Derepas
Réponse acceptée

Petite astuce, je ne sais pas si ça va fonctionner :
Lorsque l'utilisateur clique sur un liens protéger, il est rediriger vers la page login ... ok
Donc avant la redirection, créer une variable de session qui contient l'url demandée à la base (previous quelque chose, si je me rappelle bien ).
Une fois qu'il est logé, un simple header('location: '.$_SESSION'previous']);

Test, et tiens nous au courant pour d'autres solutions

Pewel-OutOfNutella
Réponse acceptée

Oui mais Benjamin, si l'utilisateur est connecté, tu ne vas pas le rediriger encore une fois vers la page de login.
Je pense que sur cette étape, il faut faire un script en AJAX pour savoir s'il est connecté ou non.
Après, on est d'accord, il faut qu'il stocke l'url en session et la ressorte plus tard.

madmax9922
Auteur
Réponse acceptée

Merci a tous apres quelques recherches et de l'aide voici ce que ca donne, pour ceux que ca interesserait

login.php

// Do the login stuff...
if (/* Login is successful */) {
    // Do whatever it is you have to do to finish the login...    
    // Then check if the login_redirect is set, and use that.
    // Otherwise just redirect back to members.php.
    if (isset($_SESSION"login_redirect"]) {
        header("Location: " . $_SESSION"login_redirect"]);
        // And remember to clean up the session variable after
        // this is done. Don't want it lingering.
        unset($_SESSION"login_redirect"]);
    }
    else {
        header("Location: members.php");
    }
    exit;
}

planif.php

if (/* Is not logged in */) {
    $_SESSION"login_redirect"] = $_SERVER"PHP_SELF"];
    header("Location: login.php");
    exit;
}

Voila!