Fonction pour savoir si c'est l'admin

Résolu/Fermé
Utilisateur anonyme - 22 déc. 2016 à 13:18
 Utilisateur anonyme - 23 déc. 2016 à 00:16
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
A voir également:

4 réponses

yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
22 déc. 2016 à 14:55
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
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
22 déc. 2016 à 14:55
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
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
22 déc. 2016 à 18:01
@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
Utilisateur anonyme
22 déc. 2016 à 18:26
Donc, je devrais faire le redirection comment ?
0
comme ça ?
<?php if(is_admin){ ?>
...
<?php } else {
// la redirection 
}?>
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
22 déc. 2016 à 19:41
exactement!
0
Utilisateur anonyme
22 déc. 2016 à 21:46
ok merci
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
22 déc. 2016 à 15:24
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
Utilisateur anonyme
22 déc. 2016 à 17:28
Bonjour, c'est juste que je fais une redirection pour tous sauf si c'est l'admin ...
0
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
22 déc. 2016 à 17:37
Je pense que ton test n'est pas logique. Peut-être des
OR
au lieu des
AND
?
0
Utilisateur anonyme
22 déc. 2016 à 17:39
if(isset($_SESSION['id']) AND $userinfo['id'] == $_SESSION['id'] AND $_SESSION['id'] == "1" AND $userinfo['niveau'] == "administrateur") {
Corriger
0
Utilisateur anonyme
22 déc. 2016 à 17:39
J'ai aussi corrigé le code de dessous
0
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
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477
22 déc. 2016 à 17:39
Je te suggère de rajouter
return false;
à la fin de la fonction.
0
Utilisateur anonyme
22 déc. 2016 à 17:40
pourquoi ?
0
Utilisateur anonyme
22 déc. 2016 à 17:41
Pour initialiser le return ?
0
Utilisateur anonyme
22 déc. 2016 à 17:42
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
yg_be Messages postés 22732 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 avril 2024 1 477 > Utilisateur anonyme
22 déc. 2016 à 17:48
Oui, pour "décider" ce que la fonction retourne, pour que ce soit clair et éviter les surprises.
0