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. Modérateur
    Bonjour,

    Ne te manquerait il pas le
     session_start(); 
    au début de ta page ??
    1. j les fais ca me renvoi directement sur l'index sans demande d'authentification:

      code 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>


      j'ai un code session.php:
      <?php
      
      session_start();
      $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;
      include"index.php";
      exit;
      }
      else{
      echo "Login ou mot de passe incorrect!!!";
      include "login.php";
      }


      j'ai un code index principaleindex.php:
      <?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">
      		<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. Modérateur
        Ajoutes un
        print_r($_SESSION);
        

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

        1. 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']);
               }
               ?>
            
        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. 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 ?
        4. 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. 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 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 ....
            2. 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');
                }
                
            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. 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 ?
            5. 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>";
                
            6. 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 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. 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. 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. 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
                    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'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.
                    • 1
                    • 2