Redirection avec header

Résolu
Bonjour,Est ce quelqu'un pourrait m'aider puisque après mon authentification ça me renvoi a l'index principale mais en voulant me connecte aux autres fichiers ça passe pas du tout vraiment vos aides sont les bienvenues:
<?php
 include "config/connexion.php";      
 include "lib/fonction_date.php";

if(empty($_SESSION['user']))//ce code permet de mettre le fichier login en acceuil au lieu de index
header('Location: //localhost/Parc_informatique/login.php');

echo "Bienvenue <b> ".$_SESSION['user']."</b>"; 
//le fichier index.php permet de lancer ts les fichiers de l'application

?>



<html>
 <head>
  <meta http-equiv="content-type"
   content="text/html; charset=utf-8"/>
 <link href="web/css/style.css" media="screen"
  type="text/css" rel="stylesheet"/>
 <script src="web/js/jquery.js" type="text/javascript"></script>
 <script src="web/js/prototype.js" type="text/javascript"></script>
 <script src="web/js/javascript.js" type="text/javascript"></script>  
 <link rel="stylesheet" href="web/js/jquery-ui.css" />
    <script src="web/js/jquery-1.8.3.js"></script>
    <script src="web/js/jquery-ui.js"></script>
    <link rel="stylesheet" href="/resources/demos/style.css" /> 
  <title> Gestion du Parc Informatique de RMCR</title>
  
 </head>
 <body> 
  <div id="menu"> // declaration des autres fichiers depuis modules 
  <a href="index.php?page=modules/historique/index.php"><strong>Historique</strong></a>
  <a href="index.php?page=modules/mat/index.php"><strong>Materiel Affichage</strong></a>
  <a href="index.php?page=modules/user/index.php"><strong>Utilisateur</strong></a>
  <a href="index.php?page=modules/departement/index.php"><strong>Departement</strong></a>
  
  </div>
  <div id="entete"><img src="web/images/logo2.jpg"width="100px" height="59px"></div>
  <div id="corps">
  <?php
   if (isset($_GET['page'])){
    include ($_GET['page']);
   }
   ?>
  </div>
  
  
  
  
  <div id="pied"><strong>© RMCR 2014 </strong></div>
 </body>
</html>

 


22 réponses

Résumé de la discussion

Le fil traite un souci d'authentification PHP où, après connexion, l'utilisateur reste sur la page d'accueil et n'accède pas correctement aux modules via les liens générant l'inclusion de pages. Plusieurs réponses évoquent une gestion des sessions incorrecte et une redirection incohérente: la condition d'accès et l'affichage éventuel de $_SESSION['user'] peuvent s'exécuter sans authentification, autorisant des accès non souhaités. Des conseils préconisent l'inclusion correcte du fichier de connexion et l'initialisation fiable de la session, puis un contrôle de connexion avant l'affichage des contenus protégés, avec des messages de débogage temporaires. En dernier lieu, certains échanges signalent que des échos affichant les variables de session apparaissent; leur suppression ou déplacement dans le flux d'authentification peut être nécessaire pour éviter des messages persistants.

Bobot (l’IA à votre service)
  1. login.php
    <?php
    session_start();
    include "config/connexion.php";      
    include "lib/fonction_date.php";
    
    //Recuperation du message d'erreur s'il existe
    $msgError = isset($_SESSION['error_login']) ?$_SESSION['error_login']:NULL;
    
    if($msgError){
       echo "<div id='zone_message_erreur'>
          <pre>".$msgError."</pre> 
          </div>";
      }
     ?>
    
    <form action= "session.php " method= "POST">
    <table align="center" width="300px">
      <tr>
      <th colspan="2">Authentification</th>
      </tr><br/><br/>
      <tr>
      <td>user</td>
      <td><input name="user" type="text"/></td>
      </tr><br/><br/>
      
      
      <td>Mot de Passe</td>
      <td><input name="pass" type="password"/></td>
      </tr><br/><br/>
      <tr>
      <td colspan="2">
      <input type="submit" value="connexion"/></td>
      </tr>
      </table>
      </form>

    code session.php:
    <?php
    session_start();
    include "config/connexion.php";
    
    //--------------------------------------
    // Le temps des tests :
    //echo "<pre> Variables POST :<br>";
    print_r($_POST);
    //echo "</pre>";
    //--------------------------------------
    
    //********************************//
    // Recupération des variables :
    //********************************//
    $user=isset($_POST['user']) && $_POST['user'] !=''?$_POST['user']:NULL;
    $pass=isset($_POST['pass']) && $_POST['pass'] !=''?$_POST['pass']:NULL;
    
    //********************************//
    // Préparation de la requete:
    //********************************//
    $sql = "SELECT * FROM table_utilisateur
          WHERE user = '".$user."'
          AND pass = '".$pass."'";
         
    //--------------------------------------
    // Le temps des tests :
    //echo "<pre> La Requete est :<br>";
    //echo $sql;
    //echo "</pre>";
    //--------------------------------------
    
    //********************************//
    // Execution de la requete:
    //********************************//     
    $req= $connexion->prepare($sql);
    $resultat = $req->execute();
    
     //--------------------------------------
     // Le temps des tests :
    //echo "<pre>Resultat :<br>";
    print_r($resultat);
    //echo "</pre>"; 
      //--------------------------------------
    
    $NbRow = $req->fetch(PDO::FETCH_NUM);
     //--------------------------------------
     // Le temps des tests :
    //echo "<pre> NbRows =".$NbRow[0] ."</pre>";
     //--------------------------------------
    if ($NbRow >=1){
     $_SESSION['user']=$user;
     unset($_SESSION['error_login']);
      //--------------------------------------
     // Le temps des tests :
     //echo "<pre> Variables de session:<br>";
     print_r($_SESSION);
     //echo "</pre>";
     //--------------------------------------
     header('Location: index.php');
     exit;
    }else{
     // destruction des variables de session
     session_destroy();
     $_SESSION['error_login'] = "Login ou mot de passe incorrect!!!";
     //--------------------------------------
     // Le temps des tests :
     echo "<pre> Variables de session:<br>";
     print_r($_SESSION);
     echo "</pre>";
     //--------------------------------------
     header('Location: login.php');
    }
    ?>


    code index.php
    <?php
    session_start();
    include "config/connexion.php";      
    include "lib/fonction_date.php";
    
    //LE TEMPS DES TESTS:
     //echo "<pre>Variables de session :<br>";
     print_r($_SESSION);
     //echo "</pre>";
    //----------------
    $User = isset($_SESSION['user'])?$_SESSION['user']:NULL;
    
    if(empty($User)) {//ce code permet de mettre le fichier login en acceuil au lieu de index
     //LE TEMPS DES TESTS: on desactive cette ligne :
     header('Location: login.php');
     //echo "<pre> SESSION['user'] est vide ! </pre>";
    }
    echo "Bienvenue <b> ".$User."</b>"; 
    //le fichier index.php permet de lancer ts les fichiers de l'application
    ?>
    <html>
     <head>
      <meta http-equiv="content-type"
       content="text/html; charset=utf-8"/>
     <link href="web/css/style.css" media="screen"
      type="text/css" rel="stylesheet"/>
     <script src="web/js/jquery.js" type="text/javascript"></script>
     <script src="web/js/prototype.js" type="text/javascript"></script>
     <script src="web/js/javascript.js" type="text/javascript"></script>  
     <link rel="stylesheet" href="web/js/jquery-ui.css" />
        <script src="web/js/jquery-1.8.3.js"></script>
        <script src="web/js/jquery-ui.js"></script>
        <link rel="stylesheet" href="/resources/demos/style.css" /> 
      <title> Gestion du Parc Informatique de RMCR</title>
      
     </head>
     <body>
      <div id="menu">
      <a href="index.php?page=modules/historique/index.php">
      <strong>Historique</strong>
     </a>
      <a href="index.php?page=modules/mat/index.php">
      <strong>Materiel Affichage</strong>
     </a>
      <a href="index.php?page=modules/user/index.php">
      <strong>Utilisateur</strong>
     </a>
      <a href="index.php?page=modules/departement/index.php">
      <strong>Departement</strong>
     </a> 
    <a>
    <a href="deconnexion.php"><strong>Déconnexion</strong></a> 
      </div>
     
      <div id="entete">
      <img src="web/images/logo2.jpg"
         width="100px" 
        height="59px">
     </div>
      <div id="corps">
      <?php
     $page = isset($_GET['page'])?$_GET['page']:NULL;
     //echo "<br> =>>> Page dans la variable GET = ".$page."<br>";
       if ($page){
       // on vérifie que la page existe avant d'essayer de l'inclure:
      if(file_exists($page)){
          include($page);
        }else{
        echo "Error ! La page ".$page." n'existe pas !";
      }
      }
       ?>
      </div>
    
      <div id="pied"><strong>© RMCR 2014 </strong></div>
     </body>
    </html>
    1. Modérateur
      Fichier : session.php => Ligne 8 / Ligne 41 / Ligne 51 / Lignes 66 à 70
      Fichier : index.php => Ligne 8
    2. Modérateur
      @ZedrofTu me demandes de désactiver les PRINT ?
      Tu ne peux pas le faire toi même ????
      Je t'ai donné les Numéros de lignes où les trouver ......
    3. @jordane45sayer s'est fait et ça marche et vraiment merci
  2. j'arrive sur login :
    Authentification
    user
    Mot de Passe
    et apres validation

    ça m'affiche

    Variables POST :
    Array
    (
    [user] => zedrof
    [pass] => mariko
    )
    La Requete est :
    SELECT * FROM table_utilisateur
    WHERE user = 'zedrof'
    AND pass = 'mariko'

    ( ! ) Fatal error: Call to a member function rowCount() on a non-object in C:\wamp\www\Parc_informatique\session.php on line 37
    Call Stack
    # Time Memory Function Location
    1 0.0021 379032 {main}( ) ..\session.php:0
    1. Modérateur
      Arf.. je suis un boulet... :-)

      <?php
      session_start();
      include "config/connexion.php";
      
      //--------------------------------------
      // Le temps des tests :
      echo "<pre> Variables POST :<br>";
      print_r($_POST);
      echo "</pre>";
      //--------------------------------------
      
      //********************************//
      // Recupération des variables :
      //********************************//
      $user=isset($_POST['user']) && $_POST['user'] !=''?$_POST['user']:NULL;
      $pass=isset($_POST['pass']) && $_POST['pass'] !=''?$_POST['pass']:NULL;
      
      //********************************//
      // Préparation de la requete:
      //********************************//
      $sql = "SELECT * FROM table_utilisateur
            WHERE user = '".$user."'
            AND pass = '".$pass."'";
           
      //--------------------------------------
      // Le temps des tests :
      echo "<pre> La Requete est :<br>";
      echo $sql;
      echo "</pre>";
      //--------------------------------------
      
      //********************************//
      // Execution de la requete:
      //********************************//     
      $req= $connexion->prepare($sql);
      $resultat = $req->execute();
      
       //--------------------------------------
       // Le temps des tests :
      echo "<pre>Resultat :<br>";
      print_r($resultat);
      echo "</pre>"; 
        //--------------------------------------
      
      $NbRow = $resultat->fetch(PDO::FETCH_NUM);
       //--------------------------------------
       // Le temps des tests :
      echo "<pre> NbRows =".$NbRow[0] ."</pre>";
       //--------------------------------------
      if ($NbRow >=1){
       $_SESSION['user']=$user;
       unset($_SESSION['error_login']);
        //--------------------------------------
       // Le temps des tests :
       echo "<pre> Variables de session:<br>";
       print_r($_SESSION);
       echo "</pre>";
       //--------------------------------------
       //header('Location: index.php');
       exit;
      }else{
       // destruction des variables de session
       session_destroy();
       $_SESSION['error_login'] = "Login ou mot de passe incorrect!!!";
       //--------------------------------------
       // Le temps des tests :
       echo "<pre> Variables de session:<br>";
       print_r($_SESSION);
       echo "</pre>";
       //--------------------------------------
       //header('Location: login.php');
      }
      ?>
      
      
    2. @jordane45Variables POST :
      Array
      (
      [user] => zedrof
      [pass] => mariko
      )
      La Requete est :
      SELECT * FROM table_utilisateur
      WHERE user = 'zedrof'
      AND pass = 'mariko'
      Resultat :
      1

      ( ! ) Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\Parc_informatique\session.php on line 45
      Call Stack
      # Time Memory Function Location
      1 0.0030 379352 {main}( ) ..\session.php:0
    3. Modérateur
      Désolé...
      Ligne 45 :
      $NbRow = $resultat->fetch(PDO::FETCH_NUM);
      

      A remplacer par :

      $NbRow = $req->fetch(PDO::FETCH_NUM);
      
    4. @jordane45Variables POST :
      Array
      (
      [user] => zedrof
      [pass] => mariko
      )
      La Requete est :
      SELECT * FROM table_utilisateur
      WHERE user = 'zedrof'
      AND pass = 'mariko'
      Resultat :
      1
      NbRows =1
      Variables de session:
      Array
      (
      [user] => zedrof
      )
    5. @Zedrofavec mauvais login et mot de passe

      Variables POST :
      Array
      (
      [user] => zaertyuiop^sdfghjklm
      [pass] => xcfvghjkl:mertgyhjilpm
      )
      La Requete est :
      SELECT * FROM table_utilisateur
      WHERE user = 'zaertyuiop^sdfghjklm'
      AND pass = 'xcfvghjkl:mertgyhjilpm'
      Resultat :
      1
      NbRows =
      Variables de session:
      Array
      (
      [error_login] => Login ou mot de passe incorrect!!!
      )
  3. j'arrive sur login :
    Authentification
    user
    Mot de Passe
    et apres validation ça me donne

    Variables POST :
    Array
    (
    [user] => zedrof
    [pass] => mariko
    )
    La Requete est :
    SELECT * FROM table_utilisateur
    WHERE user = 'zedrof'
    AND pass = 'mariko'
    Variables de session:
    Array
    (
    [user] => zedrof
    )
    1. Modérateur
      Ben donc ça m'a l'air bon....
      .. Et si tu essayes avec un USER qui n'existe pas et/ou un Mauvais Password ... ça donne quoi ??
    2. @jordane45Variables POST :
      Array
      (
      [user] => azertyuiop
      [pass] => qsdfghjklertyuio
      )
      La Requete est :
      SELECT * FROM table_utilisateur
      WHERE user = 'azertyuiop'
      AND pass = 'qsdfghjklertyuio'
      Variables de session:
      Array
      (
      [user] => azertyuiop
      )
    3. Modérateur
      Bizarre... si ta requête ne retourne aucun résultat.. tu ne devrais pas entrer dans le IF ....

      Essayes ça :
      (dans : session.php)
      <?php
      session_start();
      include "config/connexion.php";
      
      //--------------------------------------
      // Le temps des tests :
      echo "<pre> Variables POST :<br>";
      print_r($_POST);
      echo "</pre>";
      //--------------------------------------
      
      //********************************//
      // Recupération des variables :
      //********************************//
      $user=isset($_POST['user']) && $_POST['user'] !=''?$_POST['user']:NULL;
      $pass=isset($_POST['pass']) && $_POST['pass'] !=''?$_POST['pass']:NULL;
      
      //********************************//
      // Préparation de la requete:
      //********************************//
      $sql = "SELECT * FROM table_utilisateur
            WHERE user = '".$user."'
            AND pass = '".$pass."'";
           
      //--------------------------------------
      // Le temps des tests :
      echo "<pre> La Requete est :<br>";
      echo $sql;
      echo "</pre>";
      //--------------------------------------
      
      //********************************//
      // Execution de la requete:
      //********************************//     
      $req= $connexion->prepare($sql);
      $resultat = $req->execute();
      $NbRow = $resultat->rowCount();
      
       //--------------------------------------
       // Le temps des tests :
      echo "<pre> NbRows =".$NbRow ."</pre>";
      echo "<pre>Resultat :<br>";
      print_r($resultat);
      echo "</pre>"; 
        //--------------------------------------
      
      if ($NbRow >=1){
       $_SESSION['user']=$user;
       unset($_SESSION['error_login']);
        //--------------------------------------
       // Le temps des tests :
       echo "<pre> Variables de session:<br>";
       print_r($_SESSION);
       echo "</pre>";
       //--------------------------------------
       //header('Location: index.php');
       exit;
      }else{
       // destruction des variables de session
       session_destroy();
       $_SESSION['error_login'] = "Login ou mot de passe incorrect!!!";
       //--------------------------------------
       // Le temps des tests :
       echo "<pre> Variables de session:<br>";
       print_r($_SESSION);
       echo "</pre>";
       //--------------------------------------
       //header('Location: login.php');
      }
      ?>
      
      
      
    4. @jordane45Bonjour

      Bizarre... si ta requête ne retourne aucun résultat.. tu ne devrais pas entrer dans le IF
      Si car $resultat = $req->execute(); rend TRUE à partir du moment où il n'y a pas d'erreur, peu importe le nombre de réponses.
      Dans ce cas, il valait mieux faire une requête SELECT COUNT(*)... et tester la valeur rendue. Tu proposes une solution avec rowCount qui marche certainement aussi, mais attention, rowCount sur un SELECT ne marche pas avec toutes les bases de données.
  4. Modérateur
    REPRENONS depuis le début :
    - Déjà... pour que nous soyons bien d'accord... tu laisses TOUS les ECHO / PRINT que j'ai ajouté dans ton code ( Le temps des tests..) JUSQU'A ce que ton site fonctionne... ok ??

    Donc :

    Première page ...

    <?php
    session_start();
    include "config/connexion.php";      
    include "lib/fonction_date.php";
    
    //LE TEMPS DES TESTS:
     echo "<pre>Variables de session :<br>";
     print_r($_SESSION);
     echo "</pre>";
    //----------------
    $User = isset($_SESSION['user'])?$_SESSION['user']:NULL;
    
    if(empty($User)) {//ce code permet de mettre le fichier login en acceuil au lieu de index
     //LE TEMPS DES TESTS: on desactive cette ligne :
     header('Location: login.php');
     echo "<pre> SESSION['user'] est vide ! </pre>";
    }
    echo "Bienvenue <b> ".$User."</b>"; 
    //le fichier index.php permet de lancer ts les fichiers de l'application
    ?>
    <html>
     <head>
      <meta http-equiv="content-type"
       content="text/html; charset=utf-8"/>
     <link href="web/css/style.css" media="screen"
      type="text/css" rel="stylesheet"/>
     <script src="web/js/jquery.js" type="text/javascript"></script>
     <script src="web/js/prototype.js" type="text/javascript"></script>
     <script src="web/js/javascript.js" type="text/javascript"></script>  
     <link rel="stylesheet" href="web/js/jquery-ui.css" />
        <script src="web/js/jquery-1.8.3.js"></script>
        <script src="web/js/jquery-ui.js"></script>
        <link rel="stylesheet" href="/resources/demos/style.css" /> 
      <title> Gestion du Parc Informatique de RMCR</title>
      
     </head>
     <body>
      <div id="menu">
      <a href="index.php?page=modules/historique/index.php">
      <strong>Historique</strong>
     </a>
      <a href="index.php?page=modules/mat/index.php">
      <strong>Materiel Affichage</strong>
     </a>
      <a href="index.php?page=modules/user/index.php">
      <strong>Utilisateur</strong>
     </a>
      <a href="index.php?page=modules/departement/index.php">
      <strong>Departement</strong>
     </a>  
      </div>
     
      <div id="entete">
      <img src="web/images/logo2.jpg"
         width="100px" 
        height="59px">
     </div>
      <div id="corps">
      <?php
     $page = isset($_GET['page'])?$_GET['page']:NULL;
     echo "<br> =>>> Page dans la variable GET = ".$page."<br>";
       if ($page){
       // on vérifie que la page existe avant d'essayer de l'inclure:
      if(file_exists($page)){
          include($page);
        }else{
        echo "Error ! La page ".$page." n'existe pas !";
      }
      }
       ?>
      </div>
    
      <div id="pied"><strong>© RMCR 2014 </strong></div>
     </body>
    </html>
    


    page : login.php
    <?php
    session_start();
    include "config/connexion.php";      
    include "lib/fonction_date.php";
    
    //Recuperation du message d'erreur s'il existe
    $msgError = isset($_SESSION['error_login']) ?$_SESSION['error_login']:NULL;
    
    if($msgError){
       echo "<div id='zone_message_erreur'>
          <pre>".$msgError."</pre> 
          </div>";
      }
     ?>
    
    <form action= "session.php " method= "POST">
    <table align="center" width="300px">
      <tr>
      <th colspan="2">Authentification</th>
      </tr><br/><br/>
      <tr>
      <td>user</td>
      <td><input name="user" type="text"/></td>
      </tr><br/><br/>
      
      
      <td>Mot de Passe</td>
      <td><input name="pass" type="password"/></td>
      </tr><br/><br/>
      <tr>
      <td colspan="2">
      <input type="submit" value="connexion"/></td>
      </tr>
      </table>
      </form>
    
    


    page : session.php :
    <?php
    session_start();
    include "config/connexion.php";
    
    //--------------------------------------
    // Le temps des tests :
    echo "<pre> Variables POST :<br>";
    print_r($_POST);
    echo "</pre>";
    //--------------------------------------
    
    //********************************//
    // Recupération des variables :
    //********************************//
    $user=isset($_POST['user']) && $_POST['user'] !=''?$_POST['user']:NULL;
    $pass=isset($_POST['pass']) && $_POST['pass'] !=''?$_POST['pass']:NULL;
    
    //********************************//
    // Préparation de la requete:
    //********************************//
    $sql = "SELECT * FROM table_utilisateur
          WHERE user = '".$user."'
          AND pass = '".$pass."'";
         
    //--------------------------------------
    // Le temps des tests :
    echo "<pre> La Requete est :<br>";
    echo $sql;
    echo "</pre>";
    //--------------------------------------
    
    //********************************//
    // Execution de la requete:
    //********************************//     
    $req= $connexion->prepare($sql);
    $resultat = $req->execute();
    
    if ($resultat){
     $_SESSION['user']=$user;
     unset($_SESSION['error_login']);
      //--------------------------------------
     // Le temps des tests :
     echo "<pre> Variables de session:<br>";
     print_r($_SESSION);
     echo "</pre>";
     //--------------------------------------
     //header('Location: index.php');
     exit;
    }else{
     // destruction des variables de session
     session_destroy();
     $_SESSION['error_login'] = "Login ou mot de passe incorrect!!!";
     //--------------------------------------
     // Le temps des tests :
     echo "<pre> Variables de session:<br>";
     print_r($_SESSION);
     echo "</pre>";
     //--------------------------------------
     //header('Location: login.php');
    }
    ?>
    
    


    ==>> Remplaces tes fichiers par ces codes...
    et colle nous ici le résultat de ce qui est affiché sur les pages !

    Avant de poser une question, merci de lire la charte du site.
    Cordialement, Jordane
    1. j'ai coupe colle mais toujours n'importe quelle user et pass peut acceder a l'application etant donne qu'il n'existe pas dans la table(table_utilisateur):

      Mais quand à moi j dirai qu'il peut se qu'ils y a une erreur sur la

      la syntaxe de l'operateur ternaire puisque
      $msgError = isset($_SESSION['error_login']) ?$_SESSION['error_login']:'';

      permet si j comprend bien de faire une comparaison entre duex valeur tandisque ici la seul variable declare est:
      error_login
      1. Modérateur
        Peux tu refaire le cheminement complet ?
        Tu arrives sur ta première page. .. qu'est ce qui s'affiche ?
      2. @jordane45j'arrive sur login :
        Authentification
        user
        Mot de Passe
        et ici n'importe quel user et mot de passe peut permettre acceder à l'application tandisque c'est les users et pass qui sont dans la table (table_utilisateur ) qui doivent acceder a la page d'acceuil de l'application
      3. Modérateur
        Dans session. Php commente les deux lignes de redirection (header (location..)
        Et reteste.
        ensuite dis moi ce qui est écrit dans la page
      4. @jordane45j'ai commente les deux lignes toujours la meme chose:

        n'importe quel user et mot de passe peut permettre acceder à l'application tandisque c'est les users et pass qui sont dans la table (table_utilisateur ) qui doivent acceder a la page d'acceuil de l'application
    2. Modérateur

      mais avec vraiment l'aides du forums j'ai pu le faire

      Le truc.. c'est que pour l'instant tu copie/colle le code que je te donne... sans le comprendre...
      Ce n'est surement pas comme ça que tu vas apprendre !


      c'est la deniere et j compter commence à prendre des cours costo là dessus

      Le problème.. c'est que les notions dont je te parle ... ne sont pas d'un HAUT niveau...
      Ce sont les BASES à connaitre avant même de commencer à coder !

      Enfin bref... je veux bien continuer à essayer de t'aider ... mais le souci... c'est que je ne comprend pas ce que tu dis :
      mais maintena :
      tout login et mot de passe saisi acceder sans controle


      Je pense qu'il faut que tu modifies le code de tes pages de la manière suivante:

      Dans ta page : session.php
      <?php
      session_start();
      include "config/connexion.php";
      
      //--------------------------------------
      // Le temps des tests :
      echo "<pre> Variables POST :<br>";
      print_r($_POST);
      echo "</pre>";
      //--------------------------------------
      
      //********************************//
      // Recupération des variables :
      //********************************//
      $user=isset($_POST['user']) && $_POST['user'] !=''?$_POST['user']:NULL;
      $pass=isset($_POST['pass']) && $_POST['pass'] !=''?$_POST['pass']:NULL;
      
      //********************************//
      // Préparation de la requete:
      //********************************//
      $sql = "SELECT * FROM table_utilisateur
            WHERE user = '".$user."'
            AND pass = '".$pass."'";
           
      //--------------------------------------
      // Le temps des tests :
      echo "<pre> La Requete est :<br>";
      echo $sql;
      echo "</pre>";
      //--------------------------------------
      
      //********************************//
      // Execution de la requete:
      //********************************//     
      $req= $connexion->prepare($sql);
      $resultat = $req->execute();
      
      if ($resultat){
       $_SESSION['user']=$user;
       unset($_SESSION['error_login']);
       header('Location: index.php');
       exit;
      }else{
       $_SESSION['error_login'] = "Login ou mot de passe incorrect!!!";
       header('Location: login.php');
      }
      ?>
      


      PAGE Login.php

      <?php
      session_start();
      include "config/connexion.php";      
      include "lib/fonction_date.php";
      
      //Recuperation du message d'erreur s'il existe
      $msgError = isset($_SESSION['error_login']) ?$_SESSION['error_login']:NULL;
      
      if($msgError){
         echo "<div id='zone_message_erreur'>
            <pre>".$msgError."</pre> 
            </div>";
        }
       ?>
      
      <form action= "session.php " method= "POST">
      <table align="center" width="300px">
        <tr>
        <th colspan="2">Authentification</th>
        </tr><br/><br/>
        <tr>
        <td>user</td>
        <td><input name="user" type="text"/></td>
        </tr><br/><br/>
        
        
        <td>Mot de Passe</td>
        <td><input name="pass" type="password"/></td>
        </tr><br/><br/>
        <tr>
        <td colspan="2">
        <input type="submit" value="connexion"/></td>
        </tr>
        </table>
        </form>
      


      NB : j'ai ajouté (encore..) des blocs : "// Le temps des tests :" ... que tu pourras supprimer lorsque tes pages fonctionneront correctement.
      En attendant ça permet de faire du débogage et de comprendre ce qui peut ne pas marcher !


      NB2 : Attention à ne pas confondre les INCLUDE avec les HEADER LOCATION... tu sembles te méprendre sur leur fonctionnement !!!

      NB3 : Comme tu peux le voir.. j'utilise régulièrement l'instruction ISSET .. si tu ne sais pas à quoi elle sert .. regardes ici : https://www.php.net/manual/fr/function.isset.php

      NB4 : J'utilise également l'écriture "ternaire" ...
      par exemple :
      $msgError = isset($_SESSION['error_login']) ?$_SESSION['error_login']:'';
      

      Là aussi .. si tu ne sais pas ce que c'est ... regarde ici :
      https://www.php.net/manual/fr/language.operators.comparison.php

      => Ce qui veut dire :

      La syntaxe de l'opérateur ternaire est la suivante :
      echo $var = (expression vérifiée) ? affiche valeur 1 si test vérifié : affiche valeur 2 si test non vérifié;
      1. non j l'ai juste fais en classe de 4eme MIAGE donc j'ai aimé la matière donc j suis dans un e/se qui m'as demande de faire ça c'est pourquoi j me jeter sans suivi beaucoup de cours costo sur php et Mysql mais avec vraiment l'aides du forums j'ai pu le faire c'est la deniere et j compter commence à prendre des cours costo là dessus mais maintena :

        tout login et mot de passe saisi acceder sans controle
        1. code de connexion ala base:

          <?php
          
          // pour se connecter a notre base sous phpmyadmin
          
          $hote='localhost';
          $base='parc';
          $utilisateur='root';
          $mot_de_passe='';
          $connexion= new PDO('mysql:host='.$hote.';
          					dbname='.$base, $utilisateur,$mot_de_passe);
          
          1. Modérateur
            Ok donc tu utilises la PDO.

            Donc maintenant... tu dois avoir une table contenant les utilisateurs qui peuvent se connecter je suppose..
            Une table 'user' .... avec Login , Passord , nom , prenom ...etc.....
            Il faut donc que tu fasses, dans ta page session.php, un SELECT du genre :

            SELECT * FROM tableUser
            WHERE login = '$user'
            AND password = '$password'
            


            Et si la requête te retourne bien un résultat..alors c'est qu'il peut se connecter...
          2. j'ai prepare une requette

            code session.php
            <?php
            
            
            session_start();
            print_r($_SESSION);
            $user=$_POST['user'];
            $pass=$_POST['pass'];
            //ici on a juste supposé un login, tu pe faire une requete qui va verifier dans ta base si le login existe.
            $req= $connexion->prepare("SELECT * FROM table_utilisateur
            WHERE user = '$user'
            AND pass = '$pass'");
            $resultat = $req->execute();
            if ($resultat!==1){
            $_SESSION['user']=$user;
            header('Location: index.php');
            exit;
            }
            else{
            echo "Login ou mot de passe incorrect!!!";
            include "login.php";
            }


            mais ca me donne
            Array ( )
            ( ! ) Notice: Undefined variable: connexion in C:\wamp\www\Parc_informatique\session.php on line 9
            Call Stack
            # Time Memory Function Location
            1 0.0043 370912 {main}( ) ..\session.php:0

            ( ! ) Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\Parc_informatique\session.php on line 9
            Call Stack
            # Time Memory Function Location
            1 0.0043 370912 {main}( ) ..\session.php:0
          3. Modérateur
            @ZedrofForcément.....
            Tu dois inclure ta page contenant la connexion à ta BDD ....
            include "config/connexion.php"; 


            Mais.. dis voir... loin de moi l'idée d'être désagréable... mais il faudrait peut être que tu maitrise un minimum les bases du PHP avant de te lancer le dev non ?
            Tu as suivi des tutos sur le net ????
            Car pour l'instant.. toutes les questions ou presque... que tu poses .. sont du niveau "débutant" ....
        2. Modérateur
          Pour remplacer la connexion via un USER pré-défini comme tu l'as fait par une requête...
          Il te suffit de faire un SELECT dans ta BDD pour vérifier si le user existe..

          Déjà.. il faudrait que nous sachions comment tu te connectes à ta BDD...
          Tu utilises quoi ? Mysql / MysqlI / PDO ??
          Montres ton code de connexion à ta BDD
          1. code page d'acceuil:
            <?php
            session_start();
            include "config/connexion.php";      
            include "lib/fonction_date.php";
            
            //LE TEMPS DES TESTS:
             echo "<pre>Variables de session :<br>";
             print_r($_SESSION);
             echo "</pre>";
            //----------------
            $User = isset($_SESSION['user'])?$_SESSION['user']:NULL;
            
            if(empty($User)) {//ce code permet de mettre le fichier login en acceuil au lieu de index
             //LE TEMPS DES TESTS: on desactive cette ligne :
             header('Location: login.php');
             echo "<pre> SESSION['user'] est vide ! </pre>";
            }
            echo "Bienvenue <b> ".$User."</b>"; 
            //le fichier index.php permet de lancer ts les fichiers de l'application
            ?>
            <html>
             <head>
              <meta http-equiv="content-type"
               content="text/html; charset=utf-8"/>
             <link href="web/css/style.css" media="screen"
              type="text/css" rel="stylesheet"/>
             <script src="web/js/jquery.js" type="text/javascript"></script>
             <script src="web/js/prototype.js" type="text/javascript"></script>
             <script src="web/js/javascript.js" type="text/javascript"></script>  
             <link rel="stylesheet" href="web/js/jquery-ui.css" />
                <script src="web/js/jquery-1.8.3.js"></script>
                <script src="web/js/jquery-ui.js"></script>
                <link rel="stylesheet" href="/resources/demos/style.css" /> 
              <title> Gestion du Parc Informatique de RMCR</title>
              
             </head>
             <body>
              <div id="menu">
              <a href="index.php?page=modules/historique/index.php">
              <strong>Historique</strong>
             </a>
              <a href="index.php?page=modules/mat/index.php">
              <strong>Materiel Affichage</strong>
             </a>
              <a href="index.php?page=modules/user/index.php">
              <strong>Utilisateur</strong>
             </a>
              <a href="index.php?page=modules/departement/index.php">
              <strong>Departement</strong>
             </a>  
              </div>
             
              <div id="entete">
              <img src="web/images/logo2.jpg"
                 width="100px" 
                height="59px">
             </div>
              <div id="corps">
              <?php
             $page = isset($_GET['page'])?$_GET['page']:NULL;
             echo "<br> =>>> Page dans la variable GET = ".$page."<br>";
               if ($page){
               // on vérifie que la page existe avant d'essayer de l'inclure:
              if(file_exists($page)){
                  include($page);
                }else{
                echo "Error ! La page ".$page." n'existe pas !";
              }
              }
               ?>
              </div>
            
              <div id="pied"><strong>© RMCR 2014 </strong></div>
             </body>
            </html>
            1. Modérateur
              ok. Et quand tu arrives sur cette page ... qu'est ce que ça t'affiche ??
              Tu as quelque chose du genre
              :


              Variables de session :
              Array
              (
              [user] => zedrof
              )


              Si oui... tu as déjà ta variable de session de renseignée... donc c'est normal que tu ne sois pas redirigé vers ta page de connexion......
            2. @jordane45oui c'est comme ça que ca affiche
              Variables de session :
              Array
              (
              [user] => zedrof
              )
            3. @Zedrofca va maintenant mais il y a toujour un petit message a de:

              Array ( [user] => zedrof ) Bienvenue zedrof

              et c'est dont je veut supprimer mais j vois pas la source
              Array ( [user] => zedrof )
            4. @ZedrofMais ce que si j peut remplace cette partie dans le code session.php puisque c'est zedrof seul qui peut se connecter:
              if (($user=='zedrof' && $pass=='mariko')){
              $_SESSION['user']=$user;
              header("Location: index.php");
              exit;
              par une requette qui peut permettre tout utilisateur à se connecter avec un login et un mot de mt de passe
            5. Modérateur
              @ZedrofPour supprimer ça .. il faut effacer ( ou commenter) les lignes
              //LE TEMPS DES TESTS:
               echo "<pre>Variables de session :<br>";
               print_r($_SESSION);
               echo "</pre>";
              
          2. Modérateur

            des petits messages sont surl'ecran c'est ce que j comprend pas

            Ben... c'est ce que j'ai ajouté "le temps des tests" ....

            Par exemple :
            //LE TEMPS DES TESTS:
             echo "<pre>Variables de session :<br>";
             print_r($_SESSION);
             echo "</pre>";
            //----------------
            


            Tu peux le supprimer si tu veux.

            Par contre :

            tout marche mais sans login

            C'est à dire ???

            1. j'acceder directement dans a lapage acceuil de mon application sans demande de login
            2. Modérateur
              Tu peux nous repostere le code de la page d'accueil ?
          3. j'ai desactive la ligne
            header('Location: login.php');
            mais j parvient à acceder a la page login mais avoir saisir le login et le mot de passe ça te renvoi encore sur la page login.

            Authentification
            user
            Mot de Passe
            connexion
            1. Modérateur
              Dans la page session. Php.. ajoute un sessions_start ();
            2. @jordane45tout marche mais sans login et des petits messages sont surl'ecran c'est ce que j comprend pas
              en haut
              Variables de session :
              Array
              (
              [user] => zedrof
              )

              dans le corp de la page
              =>>> Page dans la variable GET = modules/departement/index.php
          4. j'ai redemarrer l'ordinateur jusqu'a present ca affiche la meme
            1. Modérateur
              Redémarré ... l'ordinateur ??

              jusqu'a present ca affiche la meme

              La même ... quoi ???

              Tu as toujours :

              Variables de session :
              Array
              (
              [user] => zedrof
              )


              Par contre... maintenant... tu peux " décommenter" la ligne :
              if(empty($User)) {//ce code permet de mettre le fichier login en acceuil au lieu de index
               //LE TEMPS DES TESTS: on desactive cette ligne :
               //header('Location: login.php');
               echo "<pre> SESSION['user'] est vide ! </pre>";
              }
              


              et donc avoir :
              if(empty($User)) {//ce code permet de mettre le fichier login en acceuil au lieu de index
               header('Location: login.php');
              }
              
          5. c'est ce que ca me donne sans login directement la page index principale
            Variables de session :
            Array
            (
            [user] => zedrof
            )

            Bienvenue zedrof
            Historique Materiel Affichage Utilisateur Departement

            =>>> Page dans la variable GET =
            1. Modérateur
              Ben oui.. la variable de SESSION est déjà renseignée ........ c'est donc normal que tu n'aies pas besoin de te connecter....

              Ferme complétement ton navigateur internet .. et retourne ensuite sur ta page.. normalement cette fois tu devrais arriver sur la page de login ....
          6. Modérateur
            Teste ça et dis nous ce que ça te donne :

            <?php
            session_start();
            include "config/connexion.php";      
            include "lib/fonction_date.php";
            
            //LE TEMPS DES TESTS:
             echo "<pre>Variables de session :<br>";
             print_r($_SESSION);
             echo "</pre>";
            //----------------
            $User = isset($_SESSION['user'])?$_SESSION['user']:NULL;
            
            if(empty($User)) {//ce code permet de mettre le fichier login en acceuil au lieu de index
             //LE TEMPS DES TESTS: on desactive cette ligne :
             //header('Location: login.php');
             echo "<pre> SESSION['user'] est vide ! </pre>";
            }
            echo "Bienvenue <b> ".$User."</b>"; 
            //le fichier index.php permet de lancer ts les fichiers de l'application
            ?>
            <html>
             <head>
              <meta http-equiv="content-type"
               content="text/html; charset=utf-8"/>
             <link href="web/css/style.css" media="screen"
              type="text/css" rel="stylesheet"/>
             <script src="web/js/jquery.js" type="text/javascript"></script>
             <script src="web/js/prototype.js" type="text/javascript"></script>
             <script src="web/js/javascript.js" type="text/javascript"></script>  
             <link rel="stylesheet" href="web/js/jquery-ui.css" />
                <script src="web/js/jquery-1.8.3.js"></script>
                <script src="web/js/jquery-ui.js"></script>
                <link rel="stylesheet" href="/resources/demos/style.css" /> 
              <title> Gestion du Parc Informatique de RMCR</title>
              
             </head>
             <body>
              <div id="menu">
              <a href="index.php?page=modules/historique/index.php">
              <strong>Historique</strong>
             </a>
              <a href="index.php?page=modules/mat/index.php">
              <strong>Materiel Affichage</strong>
             </a>
              <a href="index.php?page=modules/user/index.php">
              <strong>Utilisateur</strong>
             </a>
              <a href="index.php?page=modules/departement/index.php">
              <strong>Departement</strong>
             </a>  
              </div>
             
              <div id="entete">
              <img src="web/images/logo2.jpg"
                 width="100px" 
                height="59px">
             </div>
              <div id="corps">
              <?php
             $page = isset($_GET['page'])?$_GET['page']:NULL;
             echo "<br> =>>> Page dans la variable GET = ".$page."<br>";
               if ($page){
               // on vérifie que la page existe avant d'essayer de l'inclure:
              if(file_exists($page)){
                  include($page);
                }else{
                echo "Error ! La page ".$page." n'existe pas !";
              }
              }
               ?>
              </div>
            
              <div id="pied"><strong>© RMCR 2014 </strong></div>
             </body>
            </html>
            


            Avant de poser une question, merci de lire la charte du site.
            Cordialement, Jordane
            1. c'est authentification la premiere page:
              login.php
              
              <?php
              
              include "config/connexion.php";      
               include "lib/fonction_date.php";
               ?>
              <form action= "session.php " method= "POST">
              <table align="center" width="300px">
                <tr>
                <th colspan="2">Authentification</th>
                </tr><br/><br/>
                <tr>
                <td>user</td>
                <td><input name="user" type="text"/></td>
                </tr><br/><br/>
                
                
                <td>Mot de Passe</td>
                <td><input name="pass" type="password"/></td>
                </tr><br/><br/>
                <tr>
                <td colspan="2">
                <input type="submit" value="connexion"/></td>
                
                </tr>
                </table>
                </form>


              c'est session qui fait l'ouverture de session:c'est ici que j'ai print_r($_SESSION)
              code session.php
              <?php
              
              
              
              print_r($_SESSION);
              $user=$_POST['user'];
              $pass=$_POST['pass'];
              //ici on a juste supposé un login, tu pe faire une requete qui va verifier dans ta base si le login existe.
              if (($user=='zedrof' && $pass=='mariko')){
              $_SESSION['user']=$user;
              header("Location: index.php");
              exit;
              }
              else{
              echo "Login ou mot de passe incorrect!!!";
              include "login.php";
              }
                
              


              session redirige vers fichiers index.php qui est la source de tout les autres fichiers

              code index.php
              <?php
              
              include "config/connexion.php";      
              include "lib/fonction_date.php";
              session_start();
              if(empty($_SESSION['user']))//ce code permet de mettre le fichier login en acceuil au lieu de index
              header('Location: login.php');
              echo "Bienvenue <b> ".$_SESSION['user']."</b>"; 
              //le fichier index.php permet de lancer ts les fichiers de l'application
              ?>
              <html>
               <head>
                <meta http-equiv="content-type"
                 content="text/html; charset=utf-8"/>
               <link href="web/css/style.css" media="screen"
                type="text/css" rel="stylesheet"/>
               <script src="web/js/jquery.js" type="text/javascript"></script>
               <script src="web/js/prototype.js" type="text/javascript"></script>
               <script src="web/js/javascript.js" type="text/javascript"></script>  
               <link rel="stylesheet" href="web/js/jquery-ui.css" />
                  <script src="web/js/jquery-1.8.3.js"></script>
                  <script src="web/js/jquery-ui.js"></script>
                  <link rel="stylesheet" href="/resources/demos/style.css" /> 
                <title> Gestion du Parc Informatique de RMCR</title>
                
               </head>
               <body>
                <div id="menu">
                <a href="index.php?page=modules/historique/index.php"><strong>Historique</strong></a>
                <a href="index.php?page=modules/mat/index.php"><strong>Materiel Affichage</strong></a>
                <a href="index.php?page=modules/user/index.php"><strong>Utilisateur</strong></a>
                <a href="index.php?page=modules/departement/index.php"><strong>Departement</strong></a>
                
                </div>
                <div id="entete"><img src="web/images/logo2.jpg"width="100px" height="59px"></div>
                <div id="corps">
                <?php
                 if (isset($_GET['page'])){
                  include ($_GET['page']);
                 }
                 ?>
                
                 
                </div>
                
                
                
                
                <div id="pied"><strong>© RMCR 2014 </strong></div>
               </body>
              </html>
              
               
              1. j'ai mis session_start(); en haut de tout mes pages et changer

                include"index.php";
                en

                header("Location: index.php");
                
                

                donc elle renvoi sur l'application sans authentification mais tout les pages
                1. Modérateur
                  - Quelle est ta première page de ton site ?
                  - Quel code contient-elle ?
                  - Y as tu mis, pour tester, un
                  print_r($_SESSION); 
                  ?
                  => Si oui.. qu'est-ce que ça t'affiche ?
              2. ca me renvoi toujour sur le fichier login.php puis que j vois l'index principale mais en voulant l'ouvrez ça me le login.php
                1. Modérateur
                  J'ai un peu de mal à te comprendre ........

                  Reprenons .....
                  Ca te redirige systématiquement vers la page LOGIN.PHP ?? c'est bien ça ???
                  Donc.. ton souci viendrait surement de ce code là :
                  if(empty($_SESSION['user']))//ce code permet de mettre le fichier login en acceuil au lieu de index
                  header('Location: //localhost/Parc_informatique/login.php');
                  

                  Donc... que ta variable $_SESSION['user'] est vide .......

                  Donc....
                  Il faut, que sur TOUTES tes pages .. tu es bien démarré les SESSIONS .. ( session_start(); )

                  Par contre.. dans ta page de connexion.(session.php: ).. tu refais un INCLUDE de ta page index ??
                  include"index.php";
                  

                  ... ce n'est pas un include à mon avis .. mais une redirection qu'il te faut ...
                   header("Location: index.php");
                  


                  Si tes soucis persistes .....
                  Dis nous avec exactitude ce qui ne fonctionne pas ...
                  ( c'est à dire : Tu es sur quelle page ? .. tu cliques sur quoi ? il se passe quoi ? tu devrais avoir quoi ? ....)
              3. toujours averc
                print_r($_SESSION);print_r($_SESSION);
                
                mais la reidrection de ces pages me donne erreur

                <div id="menu">
                		<a href="index.php?page=modules/historique/index.php"><strong>Historique</strong></a>
                		<a href="index.php?page=modules/mat/index.php"><strong>Materiel Affichage</strong></a>
                		<a href="index.php?page=modules/user/index.php"><strong>Utilisateur</strong></a>
                		<a href="index.php?page=modules/departement/index.php"><strong>Departement</strong></a>
                		
                		</div>

                mom problemes c'est ces href
                1. Modérateur
                  mom problemes c'est ces href


                  DOnc.. ça ??? :
                  if (isset($_GET['page'])){
                      include ($_GET['page']);
                     }
                     ?>
                  


                  Tu as essayé de faire un echo de ta variable pour voir ?
                  if (isset($_GET['page'])){
                   echo "<br> PAGE = ".$_GET['page'];
                    include ($_GET['page']);
                     }
                     ?>
                  
              4. Modérateur
                Ajoutes un
                print_r($_SESSION);
                

                En haut de tes pages.. et regarde ce qu'il te donne.......

                • 1
                • 2