Empêche l'affichage d'une page PHP

nik029 Messages postés 315 Statut Membre -  
nik029 Messages postés 315 Statut Membre -
Bonjour,

J'ai développer pour mon site un espace membre. J'aimerais que cette espace ne soit pas visible tant que l'on n'est pas connecté. J'ai pris donc ce petit code que j'ai intégré à toute mes pages (la page index.php était la page de connexion) :

<?php session_start(); 
include("require/connect.php"); 

if($_SESSION['rang'] != 1){  
header('location: index.php'); 
} 
?> 
  

Le soucis, c'est que, certes les pages n'apparaissent plus lorsqu'on est connecté, mais lorsqu'on veut ce connecter, la connexion devient impossible car on est à chaque fois ramené sur la page index.php (les membres ayant tous un rang = 1).

Comment faire ?

Merci d'avance.



Une fois un problème résolu, mettez un +1 sur la réponse qui vous à aidez et mettez Problème Résolu ! ;-)

13 réponses

  1. tryan44 Messages postés 1289 Date d'inscription   Statut Membre Dernière intervention   220
     
    Pour le teste, l'erreur est normal car il ne faut pas de guillemet
     echo $_SESSION['rang'];

    Par ailleurs, votre code ne fait pas référence à cette session..?
    1
    1. nik029 Messages postés 315 Statut Membre 44
       
      C'est à dire "ne fait pas référence à cette session" ?

      Edit : lorsque je fais le test, rien ne s'affiche. Page blanche.
      0
    2. tryan44 Messages postés 1289 Date d'inscription   Statut Membre Dernière intervention   220
       
      Dans votre code plus haut la session $_SESSION['rang'] n'existe pas.
      0
    3. nik029 Messages postés 315 Statut Membre 44
       
      Je croyais qu'il fallait pas le mettre sur la page de connexion..

      Du coup je dois mettre cela avant le code php de connexion ? :

      if($_SESSION['rang'] != 1){	
      header('location: index.php');
      }
      0
    4. tryan44 Messages postés 1289 Date d'inscription   Statut Membre Dernière intervention   220
       
      On ne sait pas comprit :).

      Dans votre code actuel (celui qui est plus haut) vous déclarez qu'une seule session soit $_SESSION['username']=$username;
      Vous dites faire appel à la session $_SESSION['rang'] mais pour que cette session soit utilisable, il faut bien qu'elle soit déclaré quelque part!
      0
  2. tryan44 Messages postés 1289 Date d'inscription   Statut Membre Dernière intervention   220
     
    ça ne serait pas plus simple de déclarer la session "rang" en même temps que la session "username" dans votre code?
    $_SESSION['username']=$username;
    $_SESSION['rang']=$rang;

    Bien-sur il faut adapter votre code pour que la variable $rang soit sortie de votre table.
    1
  3. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
     
    Bonjour

    Vous dites: "...que j'ai intégré à toute mes pages"

    Vous avez la réponse: ne pas mettre ce bout de code dans les pages de connexion...

    A+
    0
  4. nik029 Messages postés 315 Statut Membre 44
     
    Oui, j'ai mis a toutes mes pages, sauf à la page de connexion. Ma formulation n'était pas bonne en effet.

    Une fois un problème résolu, mettez un +1 sur la réponse qui vous à aidez et mettez Problème Résolu ! ;-)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. tryan44 Messages postés 1289 Date d'inscription   Statut Membre Dernière intervention   220
     
    Vous êtes sure que $_SESSION['rang'] est égal à 1 lorsque vos membres se connectes?
    0
  7. nik029 Messages postés 315 Statut Membre 44
     
    Si l'utilisateur est au rang admin, alors son rang est égal à 1.
    Si l'utilisateur est au rang modérateur, alors son rang est égal à 2.
    Il n'y a pas d'autres rangs possibles et j'ai essayé de me connecter en tant qu'admin (donc avec un rang égal à 1).
    0
    1. tryan44 Messages postés 1289 Date d'inscription   Statut Membre Dernière intervention   220
       
      ça donne quoi un echo de $_SESSION['rang']?
      Vous pouvez poster le code de votre page d'identification?
      0
  8. nik029 Messages postés 315 Statut Membre 44
     
    Voici le code de la page index.php :

    <?php session_start(); ?>   
    
    <form method="post" action="index.php" style="margin:0">   
                   <div class="modal-body">   
                   <fieldset><?php   
    
    if(isset($_POST['submit']))   
    {   
    $username = htmlspecialchars(trim($_POST['username']));   
    $password = htmlspecialchars(trim($_POST['password']));   
    
     if($username&&$password)   
     {   
     $password=md5($password);   
     $connect = mysql_connect('localhost', 'nomutilisateur', 'motdepasse');   
     mysql_select_db('nombdd');   
        
     $log=mysql_query("SELECT * FROM users WHERE username='$username' and password='$password'");   
     $rows=mysql_num_rows($log);   
     if($rows==1)   
     {   
        
     $_SESSION['username']=$username;   
     echo '<script language="Javascript">document.location.replace("accueil.php");</script>';   
    
        
     }else echo "<div class='alert-message error'><a class='close' href='#' onClick='$(this).parent().slideUp();'>x</a><p>   
     <strong>Attention !</strong> Nom d'utilisateur ou mot de passe incorrect.</p></div>";   
        
     }else echo "<div class='alert-message error'><a class='close' href='#' onClick='$(this).parent().slideUp();'>x</a><p>   
     <strong>Attention !</strong> Veuillez saisir tous les champs.</p></div>";   
    }   
    ?>   
                      <div class="clearfix">   
                      <label>Identifiant</label>   
                      <div class="input">   
                        <input name="username" type="text" placeholder="Identifiant"  style="height:28px" value="<?php if (isset($_POST['username'])) echo htmlentities(trim($_POST['username'])); ?>"  required/>   
                      </div>   
                     </div>   
                     <div class="clearfix">   
                      <label>Mot de passe</label>   
                      <div class="input">   
                        <input type="password" name="password" placeholder="Mot de passe" style="height:28px" value="<?php if (isset($_POST['password'])) echo htmlentities(trim($_POST['password'])); ?>" required>   
                      </div>   
                     </div>   
                     </fieldset>   
                   </div>   
                  <div class="modal-footer">   
                    <input type="submit" name="submit" value="Connexion" class="btn primary">   
                       
                  </div>   
                  </form> 


    Et pour le petit test, cela :

    <?php session_start(); 
    include("require/connect.php"); 
    
    echo "$_SESSION['rang']" ; 
    ?>


    donne ça :


    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/locasudf/public_html/admin/require/essais.php on line 4


    Une fois un problème résolu, mettez un +1 sur la réponse qui vous à aidez et mettez Problème Résolu ! ;-)
    0
  9. nik029 Messages postés 315 Statut Membre 44
     
    Du coup, qu'est-ce que je devrais faire ?

    Car je viens d'essayer de faire cela :

    <?php session_start();
    include("connect.php");
    
    if($_SESSION['username'] != $username){
    	echo '<script language="Javascript">document.location.replace("index.php");</script>';
    }
    ?>
      


    Et mon problème persiste.
    0
  10. nik029 Messages postés 315 Statut Membre 44
     
    Je viens d'essayer en ajoutant ce que tu m'a donné à ma page index.php
    et en mettant ceci sur toutes les pages :

     <?php session_start();
    include("connect.php");
    
    if($_SESSION['rang'] != $rang){
    	echo '<script language="Javascript">document.location.replace("index.php");</script>';
    }
    ?>


    Cette fois, la connexion est possible mais les utilisateurs non connectés peuvent accéder aux pages.
    0
  11. tryan44 Messages postés 1289 Date d'inscription   Statut Membre Dernière intervention   220
     
    Houlaaa ... vous l'avez codé vous même le code ou vous l'avez récupérer sur le net???

    J'ai bien dit : "Bien-sur il faut adapter votre code pour que la variable $rang soit sortie de votre table. "
    Ma question est donc : Est ce que lors de la vérification en BD le rang de l'utilisateur est sortit et attribué à une session?

    Exemple à l'arrache :
    		//On selectionne les données
    		$index = mysql_query("SELECT ******");
    		//si pas de résultat
    		if(mysql_num_rows($index) == 0)
    		{
    			echo '<div id="erreur">Aucunes données ne correspond à votre saisie!</div>';
    		}
    		else{		
    			while($result = mysql_fetch_array($index)){
    					//on créer les session
    					$_SESSION['username']=$username;
    					$_SESSION['rang']=$rang;
    				}
    			}
    
    0
  12. nik029 Messages postés 315 Statut Membre 44
     
    Voici le résultat affiché suite à la requête :

    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/locasudf/public_html/admin/require/essais.php on line 10 
    Aucunes données ne correspond à votre saisie!  
     

    Une fois un problème résolu, mettez un +1 sur la réponse qui vous à aidez et mettez Problème Résolu ! ;-)
    0
  13. nik029 Messages postés 315 Statut Membre 44
     
    Up ?
    0
  14. nik029 Messages postés 315 Statut Membre 44
     
    Mon problème est réglé.
    0