Comment rediriger l utilisateur sur une page après connexion [Résolu]

Signaler
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
-
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
-
bonjour a tous
certaines parties de mon site ne sont réservées qu aux utilisateurs enregistrer
pour l instant je fonctionne de cette façon
lorsque l utilisateur arrive sur une page qui est protégée il est redirige vers une page ou je lui demande soit de se connecter soit de s enregistrer
une fois cela effectuer il est redirige vers la page d accueil
mais j aurais souhaiter savoir si cela était possible de le rediriger vers la page qui était protégée avant son inscription ou sa connexion

j ai lu que cela était possible de le rediriger vers la page précédente
mais donc cas si je le redirige après la connexion ou l inscription vers la page précédente
il va retomber sur la page lui demandant de se connecter ou de s inscrire

du coup comment je pourrais faire

11 réponses

Messages postés
33144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 juillet 2021
3 641
Tu pourrais stocker la page où le rediriger dans une variable GET ( dans l'url donc ) ou dans une variable de session...
Sachant que, lorsque tu arrives sur la page de connexion, tu peux récupérer la page précédente sur laquelle il était grâce à la variable
$_SERVER['HTTP_REFERER']


Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
bonjour jordane
merci pour l aide
donc si je comprends bien je n ai que ce morceau de code a ajouter a ma page de connexion ?
cela me parai trop facile pour être vrai

je viens de faire des essais

sur ma page de connexion lorsque je fais ceci

<?php 
$referer = ($_SERVER['HTTP_REFERER']);
echo $referer ;?> 

j ai bien l url de al page visitée précédemment

mais la structure de mon site est faite de cette façon
on arrive sur la page d accueil
et lorsque on clic sur certains lien on est redirige vers la page protégée
par exemple debutant.php
mais aussi tout que l utilisateur arrive sur ma page de debutant.php il est redirige vers la page de connexion
et donc a ce moment
la variable me retourne en echo l url du server
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
après avoir compris le principe je reviens de nouveau ...

j ai crée vite fait une page protégée de cette façon

<?php 
session_start();
  if (isset($_SESSION['user'])) { ?>
                      echo tu es connecte et tu peux tout voir 
        
<?php } 
else { ?>

        tu n es pas connecte je te conseille de te conecter 
        <li><a href="index.php">pour te connecter</a></li>
          
   <?php } ?>`
   


ensuite pour le traitement de la connexion j ai deux pages
la première c est
le formulaire de connexion
je l appelle index.php

et pour le traitement j ai connexion.php

dans la page index.php
j ai écrit ceci afin de m assurer que j avais bien récupérer la bonne variable

<?php 
$referer = ($_SERVER['HTTP_REFERER']);
echo $referer ;?>


ensuite sur ma page de connexion .php

j ai modifie cette partie

header('Location: accueil-peche-perle.php?pseudo='.$_SESSION['pseudo']);


en

header("Location: $referer?pseudo=" . $_SESSION['pseudo']);

et bien entendu
j ai ceci en début de page
$referer = ($_SERVER['HTTP_REFERER']);



lorsque je me connecte sur la page protégée et que je ne suis pas encore connecte
je peux grâce a mon lien me rendre sur la page de index.php
je vérifie et j ai bien en echo la page protégée qui est affichée donc tout va bien

mais lorsque je me connecte je suis redirige vers index.php et non pas vers la page protégée

au début je pensais que cela était du au fait que j avais deux pages pour la connexion
le formulaire et le traitement

j ai rassemble les deux pages ensemble et le résultat est pareil
je suis redirige vers la page index.php qui comporte les deux parties cette fois
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021
880 >
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021

à la réflexion, je pense que, simplement, tu n'as pas du tout suivi la suggestion de Jordane:
Tu pourrais stocker la page où le rediriger dans une variable de session.
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021
880 >
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021

tu pourrais aussi, lors de la visite refusée à une page protégée, mémoriser l'adresse de cette page dans une variable de session, et rediriger vers cette page après la connexion.
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139 >
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021

bonjour YG
merci pour la réponse
j ai également suivi le conseil de jordane de passer l url par un get

voici donc comment se présente mon exemple

j ai une page que j appelle coin.php
qui est donc ma page d exemple qui est protégée contre les membres qui ne sont pas inscrit

qui se présente de la façon suivante en procédant comme jordane me le conseille

<?php 
session_start();
  if (isset($_SESSION['user'])) { ?>
                      tu es connecte et tu peux tout voir 
        
<?php } 
else { ?>

     
    <?php    
        
        //debut recherche http visite de la personne
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on')
    $link = "https";
else
    $link = "http";
 // Here append the common URL characters.
$link .= "://";
  // Append the host(domain name, ip) to the URL.
$link .= $_SERVER['HTTP_HOST'];
 // Append the requested resource location to the URL
$link .= $_SERVER['REQUEST_URI'];
//fin recherche http visite de la personne
        ?>
        <a  href="index.php?link=<?php echo $link;?>">connectes toi</a>
          
   <?php } ?>`


`



la page index.php est le formulaire que l utilisateur doit remplir pour être connecte

le traitement s effectue quand a lui sur la page de connexion.php

donc sur la page de connexion.php je récupère la variable par un GET

sur ma page de connexion j ai ajouter ceci

<?php
session_start(); 
$link = !empty($_GET['link']) ? $_GET['link']: NULL;

echo $link  ;

          
            
         
?>`

et modifier ceci

header('Location: accueil-peche-perle.php?pseudo='.$_SESSION['pseudo']);

en
header("Location $link ?pseudo=" . $_SESSION['pseudo']);



lorsque j arrive sur ma page de index.php
je vois bien dans l url que le transfert de la page coin.php a bien fonctionner
et dans l echo $link aussi
donc le GET a bien fonctionner lui aussi

mais lorsque je me connectes
je suis redirige vers la page connexion.php
on dirait que le header location n effectue rien

alors pour ce qui est de

pseudo='.$_SESSION['pseudo'])

je dois encore regarder a quoi cela sert réellement car j ai une page qui ne fonctionne plus correctement si je l enlève
je dois investiguer
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021
880 >
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021

la page coin.php contient deux liens: lequel est-il utilisé?

je pense que ce serait beaucoup plus simple d'utiliser une variable de session pour sauvegarder le lien, plutôt que de passer via le GET.
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021
880 >
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021

tu as modifié le code partagé pendant que je répondais.

tu ne montres pas comment la variable GET passe de la page index.php à la page connexion.php.
es-tu certain de ce que contient
$_GET['link']
dans la page connexion.php?

es-tu certain également que toutes les erreurs PHP sont affichées?

je pense que ce serait beaucoup plus simple d'utiliser une variable de session pour sauvegarder le lien, plutôt que de passer via le GET.
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
j ai également essaye par get et l url c est pareil
je ne suis pas redirige je reste sur la page de connexion
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
merci YG_be pour l aide
oui les erreurs sont activées dans les 3 pages
je joins les 2 fichiers qui me servent pour la connexion et que je dois encore améliorer
alors voici mon code pour le formulaire index.php

<?php 
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//$referer = ($_SERVER['HTTP_REFERER']);
//echo $referer ;
?>
<!doctype html>
<html lang="en">
   <head>
      <!-- fin head -->
      <?php include("./include/head.php"); ?>
      <link rel="stylesheet" type="text/css" href="./css/cadre-horizontal.css">
      <!--<META http-EQUIV="Refresh" CONTENT="0; url=https://phil.pecheperle.be/accueil-peche-perle.php">-->
      <!-- debut body -->
      <style>
         .login-form {
         width: 50%;
         margin: 50px auto;
         }
         .login-form form {
         margin-bottom: 15px;
         background: #f7f7f7;
         box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);
         padding: 10px;
         }
         .login-form h2 {
         margin: 0 0 15px;
         }
         .form-control, .btn {
         min-height: 38px;
         border-radius: 2px;
         }
         .btn {        
         font-size: 15px;
         font-weight: bold;
         }
         @media (min-width: 0px) and (max-width:305px) {
         .login-form{width: 100%;    }
         }
         @media (min-width: 306px) and (max-width:520px) {
         .login-form{width: 80%;    }
         }
         @media (min-width: 503px) and (max-width:700.99px) {
         .login-form{width: 50%;    }
         }
         @media (min-width: 701px) and (max-width:999.99px) {
         .login-form{width: 40%;    }
         }
         @media (min-width: 1000px) and (max-width:1449.99px) {
         .login-form{width: 30%;    }
         }
         @media (min-width: 1450px) and (max-width:5000px) {
         .login-form{width: 20%;    }
         }
       </style>
       <title>peche perle</title>
   </head>
   <body style="background-color:#87CEEB;">
      <div class="container">
         <title>peche perle</title>
         <div class="container" style=" max-width: 100%;margin:auto;">
            <!-- debut banniere -->
            <?php include("./include/baniere-peche-perle.php"); ?>
            <!-- fin banniere -->
            <!-- debut menu -->
            <?php include("./include/menu.php"); ?>
            <!-- fin menu -->
         </div>
         <div class="login-form">
            <?php
               if (isset($_GET['login_err']))
               {
                   $err = htmlspecialchars($_GET['login_err']);
                   switch ($err)
                   {
                       case 'password':
               ?>
            <div class="alert alert-danger">
               <strong>Erreur</strong> Mot de passe incorrect
            </div>
            <?php
               break;
               case 'pseudo':
               ?>
            <div class="alert alert-danger">
               <strong>Erreur</strong> Pseudo incorrect
            </div>
            <?php
               break;
               case 'already':
               ?>
            <div class="alert alert-danger">
               <strong>Erreur</strong> Compte non existant 
            </div>
            <?php
               break;
               }
               }
               ?>
            <form action="connexion.php" method="post">
               <div class="card text-center">
                  <div class="card-header">
                     <h2 >Connexion</h2>
                  </div>
                  <div class="card-body">
                     <p class="card-text">
                        <input type="text" name="pseudo" class="form-control" placeholder="pseudo" required="required" autocomplete="off">
                     </p>
                     <p class="card-text">
                        <input type="password" name="password" class="form-control" placeholder="Mot de passe" required="required" autocomplete="off">
                     </p>
                     <p class="card-text">
                        <button type="submit" class="btn btn-primary btn-block">Connexion</button>
                     </p>
                  </div>
               </div>
               <p class="card-text">
                  <a href="inscription.php">Créez un compte 
                  </a>
               </p>
               <p class="card-text">
                  <a href="mot-passe-oublie.php">Mot de passe oublié</a>
               </p>
            </form>
         </div>
         <div class="container" style=" max-width: 100%;margin:auto;">
            <!-- debut pied de page-->
            <?php include("./include/pied-de-page.php"); ?>
            <?php include("./include/footer.php"); ?>
         </div>
      </div>
   </body>
   <!-- fin du body-->
</html>


voici le code pour la connexion
donc le fichier connexion.php

<?php
session_start(); 
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
$link = !empty($_GET['link']) ? $_GET['link']: NULL;
//$referer = ($_SERVER['HTTP_REFERER']);
//echo $referer ;
require_once 'config.php';
if (!empty($_POST['pseudo']) && !empty($_POST['password']))
{
    
    $pseudo= !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $password= !empty($_POST['password']) ? $_POST['password'] : NULL;
    
   // $pseudo = htmlspecialchars($_POST['pseudo']);
    //$password = htmlspecialchars($_POST['password']);
    $check = $bdd->prepare('SELECT pseudo, email,id, password FROM utilisateurs WHERE pseudo = ?');
    $check->execute(array(
        $pseudo
    ));
    $data = $check->fetch();
    $row = $check->rowCount();
    if ($row == 1)
    {
        if (password_verify($password, $data['password']))
        {
            $_SESSION['user'] = array(
                'id' => $data['id'],
                'pseudo' => $data['pseudo'],
                'email' => $data['email']
            );
            $_SESSION['pseudo'] = $data['pseudo'];
            $_SESSION['email'] = $data['email'];
            //header("Location $referer ?pseudo=" . $_SESSION['pseudo']);
           header("Location $link ?pseudo=" . $_SESSION['pseudo']);
            die();
        }
        else
        {
            header('Location: index.php?login_err=password');
            die();
        }
    }
    else
    {
        header('Location: index.php?login_err=already');
        die();
    }
}
?>`



voici ce que je vois quand j arrive sur ma feuille index.php qui est le formulaire de connexion

https://pecher.000webhostapp.com/peche/index.php?link=https://pecher.000webhostapp.com/peche/coin.php



et voici le fichier test coin.php


<?php 
session_start();
  if (isset($_SESSION['user'])) { ?>
                      tu es connecte et tu peux tout voir 
        
<?php } 
else { ?>

     
    <?php    
        
        //debut recherche http visite de la personne
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on')
    $link = "https";
else
    $link = "http";
 // Here append the common URL characters.
$link .= "://";
  // Append the host(domain name, ip) to the URL.
$link .= $_SERVER['HTTP_HOST'];
 // Append the requested resource location to the URL
$link .= $_SERVER['REQUEST_URI'];
//fin recherche http visite de la personne
        ?>
        <a  href="index.php?link=<?php echo $link;?>">connectes toi</a>
          
   <?php } ?>`


je pense que ce serait beaucoup plus simple d'utiliser une variable de session pour sauvegarder le lien, plutôt que de passer via le GET.

et comment je pourrais mettre le lien dans une variable de session ?
de cette façon

$link = ($_SERVER['HTTP_REFERER']);
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021
880
je vois que, comme je le suspectais, le lien n'est pas passé à la page connexion.php.

comment utiliser une variable de session pour sauvegarder le lien:
$_SESSION['link'] = $_SERVER['REQUEST_URI'];

(dans coin.php, bien sûr)
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139 >
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021

merci pour la reponse yg_be
mais sur la page de connexion.php je dois changer quelque chose pour la récupération et l utilisation de cette variable ?
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139 >
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021

j ai donc modifier coin.php de cette façon

   <?php    
$_SESSION['link'] = $_SERVER['REQUEST_URI'];
$link=$_SESSION['link'];
echo $link ;
        ?>
        <a  href="index.php?link=<?php echo $link;?>">pour te connecter</a>


sur ma page de index.php
j ai cette fois ceci

https://pecher.000webhostapp.com/peche/index.php?link=/peche/coin.php

donc cela veux dire que j ai bien transféré la variable sur ma page index.php

mais le résultat est pareil après connexion je reste bloque sur la page connexion.php
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021
880 >
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021

as-tu modifié connexion.php afin d'utiliser la variable de session qui a été sauvegardée dans coin.php?

dans coin.php, tu peux supprimer toute utilisation de la variable
$link
.
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
merci pour l aide yg_be

c est justement cela le problème comment utiliser cette variable de cession ?

je dois peut être juste faire ceci

header("Location $_SESSION['link']?pseudo=" . $_SESSION['pseudo']);
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
ah ben voila cela fonctionne de cette manière


          header ('location: '.$_SESSION['link']);


mais comment le faire fonctionner avec mon morceau de code d origine

header("Location '.$_SESSION['link'] ?pseudo=" . $_SESSION['pseudo']);
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021
880
je ne pense pas que ce soit une bonne idée d'ainsi passer le pseudo via l'url, c'est vraiment une invitation au piratage.
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139 >
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021

ok très bien merci pour ton aide yg_be
je vais regarder ou j avais encore besoin de ce genre de chose sur mon site
et faire autrement
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
donc sur chaque page protégée je dois juste mettre ce code alors ?

$_SESSION['link'] = $_SERVER['REQUEST_URI'];




a présent imaginons que la personne arrive sur la page coin.php mais ne sait pas voir le contenu car il n est pas enregistré , il décide donc de cliquer sur l enregistrement(j ajoute un nouveau lien bien entendu sur coin.php )

après le traitement de l inscription comment le rediriger vers la dernière page qu'il a visite ?
de cette façon

 <a  href=" <?php  $_SESSION['link'];  ?>"> pour revenir sur la dernière page vue avant l inscription </a>
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
alors pour ceux que cela intéresse je pense avoir trouve

   //$link=$_SESSION['link'];
$link= !empty($_SESSION['link']) ? $_SESSION['link'] : NULL;
   echo $link;
               ?>
                   
                        <a href="<?php echo $link; ?>" > vers la derniere page avant l inscription </a>
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
j ai juste un problème lorsque la personne ouvre la page de connexion directement dans le navigateur
j ai un message d erreur indiquant qu il ne trouve pas le lien

voila c est réglé j ai juste vérifier l état de la variable
si vide je le dirige sur l accueil
si occupée il sera redirige vers la dernière page
Messages postés
16453
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 juillet 2021
880
je pense que tu as trouvé les bonnes réponses à tes diverses questions.
Messages postés
3042
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
oui un tout tres grand merci yg_be

il ne reste qu une seule que je ne parviens pas a résoudre
concernant mon poste 17