Fonction pour savoir si c'est l'admin

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour, j'ai créer une fonction pour savoir si c'est l'admin qui est connecté, et si oui, afficher le contenu de la page :
function is_admin(){
	if(isset($_GET['id']) AND $_GET['id'] > 0) {
		if(!isset($bdd)){
			$bdd = connexion_bdd();
		}
        $getid = intval($_GET['id']);
        $requser = $bdd->prepare('SELECT * FROM membres WHERE id = ?');
        $requser->execute(array($getid));
        $userinfo = $requser->fetch();
        	if(!isset($_SESSION['id']) AND $userinfo['id'] != $_SESSION['id'] AND $_SESSION['id'] != "1" AND $userinfo['niveau'] != "administrateur") {
           		if(file_exists("connexion.php")){
        			$redirection = header('Location: connexion.php');
        		} else {
        			$redirection = header('Location: ../connexion.php');
        		}
			}
	} else {
		if(file_exists("connexion.php")){
        	$redirection = header('Location: connexion.php');
        } else {
        	$redirection = header('Location: ../connexion.php');
        }
	}
	if(isset($redirection)){
		return $redirection;
	}
}

Mais, le soucis, c'est que si c'est l'admin, je n'arrive pas a afficher le contenu, exemple :
<?php if(is_admin()){ ?>
                <ul class="article">  
                    <?php
                        while($n = $art->fetch()) { ?>
                            <li>
                                <?php 

                                if(file_exists("miniatures/".$n['id'].".jpg")){
                                  $files = "miniatures/".$n['id'].".jpg";
                                } elseif(file_exists("miniatures/".$n['id'].".png")){
                                  $files = "miniatures/".$n['id'].".png";
                                } elseif(file_exists("miniatures/".$n['id'].".jpeg")){
                                  $files = "miniatures/".$n['id'].".jpeg";
                                } else {
                                  $files = "miniatures/".$n['id'].".gif";
                                }
                                
                                if(file_exists($files)){ ?>
                                        <a href="article.php?<?php if(isset($_SESSION['id'])){?>id=<?= $_SESSION['id']; ?>&<?php } ?>article=<?= $n['id']; ?>"><img src="<?php echo $files; ?>" class="img-article" /></a> <br /> <br />
                                    <?php } ?> 
                                <a href="article.php?<?php if(isset($_SESSION['id'])){?>id=<?= $_SESSION['id']; ?>&<?php } ?>article=<?= $n['id']; ?>"><b class="art-titre"><?= $n['titre']; ?></b></a> <br />
                                <?= "<b>Ecrit le : </b>".$n['date_time_publication']; ?> <br />
                                <?= $n['description']; ?>
                            <br /> <hr /> <br /> <br />
                         </li>
                    <?php } ?>
                </ul>
                <?php } ?>

Question: Comment faire pour afficher le contenu ?
Merci d'avance
Nils0

4 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Je ne comprends pas pourquoi tu fais
    return $redirection;
    dans la fonction
    is_admin
    . Tu ne devrais pas plutôt faire
    return true
    ou
    return false
    ?
    1
  2. Pitet Messages postés 2845 Statut Membre 530
     
    Salut,

    Le problème vient du retour de la fonction is_admin.

    Si tu veux pouvoir utiliser cette fonction directement dans la condition d'un if, celle-ci doit retourner un booléen true ou false.
    Or actuellement ta fonction retourne la variable $redirection qui elle contient le retour de la fonction header() qui ne renvoie pas de valeur de retour.

    Le retour de ta fonction est donc actuellement équivalent à
    return null;
    qui est donc toujours interprété comme le booléen false dans ta condition if.

    Il faut donc modifier ta fonction is_admin() pour lui faire retourner uniquement true ou false. Les redirections ne devraient pas être gérées dans cette fonction.

    Bonne journée,
    1
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      @Nils0. Pitet te fait une suggestion importante: ne pas laisser les redirections dans la fonction is_admin, et les exécuter dans le php principal, par exemple en "else" du "if is_admin".
      0
    2. Utilisateur anonyme
       
      Donc, je devrais faire le redirection comment ?
      0
    3. Utilisateur anonyme
       
      comme ça ?
      <?php if(is_admin){ ?>
      ...
      <?php } else {
      // la redirection 
      }?>
      
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      exactement!
      0
    5. Utilisateur anonyme
       
      ok merci
      0
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Je suis étonné de l'utilisation du $GET pour retrouver l'identification de l'utilisateur, alors que tu a aussi l'identification dans la session, si je vois bien.
    Je me demande si ton test fonctionne bien:
    if(!isset($_SESSION['id']) AND $userinfo['id'] != $_SESSION['id'] AND $_SESSION['id'] != "1"...
    Qu'en attends-tu?
    1
    1. Utilisateur anonyme
       
      Bonjour, c'est juste que je fais une redirection pour tous sauf si c'est l'admin ...
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Je pense que ton test n'est pas logique. Peut-être des
      OR
      au lieu des
      AND
      ?
      0
    3. Utilisateur anonyme
       
      if(isset($_SESSION['id']) AND $userinfo['id'] == $_SESSION['id'] AND $_SESSION['id'] == "1" AND $userinfo['niveau'] == "administrateur") {
      Corriger
      0
    4. Utilisateur anonyme
       
      J'ai aussi corrigé le code de dessous
      0
  4. Utilisateur anonyme
     
    Bonjour,
    MERCI BEAUCOUP de m'avoir répondu...
    J'ai modifié ma fonction, et ça MARCHE :
    function is_admin(){ // savoir si c'est l'admin
    	if(isset($_GET['id']) AND $_GET['id'] > 0) {
    		if(!isset($bdd)){
    			$bdd = connexion_bdd();
    		}
            $getid = intval($_GET['id']);
            $requser = $bdd->prepare('SELECT * FROM membres WHERE id = ?');
            $requser->execute(array($getid));
            $userinfo = $requser->fetch();
            	if(isset($_SESSION['id']) AND $userinfo['id'] == $_SESSION['id'] AND $_SESSION['id'] == "1" AND $userinfo['niveau'] == "administrateur") {
            		return true;
    			} else {
    				if(file_exists("connexion.php")){
            			 header('Location: connexion.php');
            		} else {
            			 header('Location: ../connexion.php');
            		}
    			}
    	} else {
    		if(file_exists("connexion.php")){
            	header('Location: connexion.php');
            } else {
            	header('Location: ../connexion.php');
            }
    	}
    }
    

    Je tiens juste a préciser que je suis ados et que je commence tous juste a me débrouiller en php ...
    Merci
    Nils0
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Je te suggère de rajouter
      return false;
      à la fin de la fonction.
      0
    2. Utilisateur anonyme
       
      pourquoi ?
      0
    3. Utilisateur anonyme
       
      Pour initialiser le return ?
      0
    4. Utilisateur anonyme
       
      Voilà :
      function is_admin(){ // savoir si c'est l'admin
      	if(isset($_GET['id']) AND $_GET['id'] > 0) {
      		if(!isset($bdd)){
      			$bdd = connexion_bdd();
      		}
              $getid = intval($_GET['id']);
              $requser = $bdd->prepare('SELECT * FROM membres WHERE id = ?');
              $requser->execute(array($getid));
              $userinfo = $requser->fetch();
              	if(isset($_SESSION['id']) AND $userinfo['id'] == $_SESSION['id'] AND $_SESSION['id'] == "1" AND $userinfo['niveau'] == "administrateur") {
              		return true;
      			} else {
      				if(file_exists("connexion.php")){
              			 header('Location: connexion.php');
              		} else {
              			 header('Location: ../connexion.php');
              		}
      			}
      	} else {
      		if(file_exists("connexion.php")){
              	header('Location: connexion.php');
              } else {
              	header('Location: ../connexion.php');
              }
      	}
      	return false;
      }
      
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Utilisateur anonyme
       
      Oui, pour "décider" ce que la fonction retourne, pour que ce soit clair et éviter les surprises.
      0