8722 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai deux questions qui se rapprochent et merci à celui ou celle qui pourra m'éclairer et m'en apprendre un peu plus.

Cela concerne WampServer : les clés étrangères et des pages visibles ou pas selon si le membre est adhérent au site. Malgré des recherches sur Google, mon problème vient que je ne sais pas dans quel sens je dois faire ma clé étrangère.
Il s'agit d'un site avec une interface administrateur qui utilise des outils tels que CKfinder et CKeditor, donc l'utilisateur ne touche pas au code. Je m'explique :

J'ai créé via l'interface administrateur un menu [nom : Photos de F. CAULE] qui apparaîtra dans le menu du site, puis j'y ai créé un sous-menu [nom : Visites], je rend ce menu visible seulement pour les adhérents au site. upload/50375-Capture.PNG
Maintenant je crée une page avec du blabalbalbalblablalbla à ce sous-menu : upload/50375-Capture.PNG .

Ensuite j'ai trois pages PHP qui affiche les menus selon le type d'utilisateur :
- administrateur : gesadmin
- visiteur : gesmenu
- adhérent : gesutil

La page que j'ai créée auparavant [blablalbalblablalbla-] s'affichera (un peu comme toutes les pages créées de la même façon) sur une page appelé affich_page_libre.php mais avec une URL différente : /girv.com/affich_page_libre.php?NumPage=24
Mais à l'heure qu'il est, cette page renvoie toujours sur le menu des visiteurs car affich_page_libre renvoie le menu visiteur.
affich_page_libre
<?php
//include 'page_accueil.php';
// affichage du menu en fonction du statut du visiteur
include 'gesmenu.php' ;
include 'connexion.php';
$NumPage=$_GET['NumPage'];

	echo '<div id="contenu_accueil">' ;
	$req="select NumPageLibre, ContenuPage, TitrePL, pageVisibleVisiteurs from `page_libre` where NumPageLibre=$NumPage and pageVisibleVisiteurs = false"; 
		  
	$exec=mysql_query($req);
	if (mysql_num_rows($exec)==0)
	{
	echo $req;
	}
	else
	{
	$ligne=mysql_fetch_array($exec) ;
	echo '<div class="titresPages">&nbsp;&nbsp;'.$ligne['TitrePL'].'</div>' ; // AFFICHE LE TITRE DE LA PAGE //
    //echo '<br />' ;
	echo $ligne['ContenuPage'];
	}
	echo '</div>';
	?>


==> Ce que j'aimerai, c'est que la page puisse faire le tri selon si l'utilisateur est adhérent ou visiteur.

Dans ma base de données, j'ai deux tables qui sont utilisées :
- ss_menu : tous les sous-menus y sont stockés et une colonne en booléen informe si la page est visible [= 1] ou pas aux adhérents [= 0].
- page_libre : contenus des pages crées [blablablablalbalba-] et une colonne en booléen comme ss_menu.

==> Je pense que je dois faire une clé étrangère que dans une table, les données de l'autres se rentrent au tomatiquement, n'est-ce pas ? Mais dans wampserver, comment faire une clé étrangère (en version graphique) ? Mais surtout, qui est clé étrangère de qui ? (complètement paumée moi)



Je récapitule mes questions :
- Comment faire pour que affich_page_libre affiche sur le menu utilisateur les pages visibles aux adhérents ?
- Comment je gère mes clés étrangères ?


Merci à tout courageux qui viendra me porter de l'aide, j'ai essayée d'être claire mais c'est pas facile.

Cordialement,
lizeal
Modifié par lizeal (06 Feb 2014 - 11:52)
Bon j'ai pas tout compris mais bon, je vais essayer de donner des explications.
Une clé étrangère, cela ne se rempli pas automatiquement. C'est ce que l'on appelle une contrainte, un peu sur le même principe que les clés primaires.
(Pour rappel, une clé primaire est une contrainte d'unicité de valeur.)
Une clé étrangère, cela signifie que les valeurs que tu va pouvoir mettre dans une colonne seront forcement des valeurs prises depuis une autre colonne. Généralement on va prendre une clé primaire, mais je ne crois pas que ce soit obligatoire.

Un exemple : Tu as une liste d'utilisateurs inscrits dans une table avec les champs suivant :
id , nom, prénom, adresse, date d'inscription.

Dans ce cas la on va indiquer que l'id doit être unique afin de pouvoir identifié précisément chaque personne, et pour cela on va dire que le champs id est une clé primaire. Ainsi si tu as 2 John Doe, tu pourras les distinguer de manière sur grâce à l'identifiant unique.

Suite à cela, imaginons que ces utilisateurs inscrits peuvent écrire des articles. Tu va devoir donc créer une table avec un identifiant d'article (une clé primaire), mais aussi savoir qui est l'auteur. Le nom ne suffira pas pour identifier de manière unique l'auteur. On va donc utiliser l'identifiant de la table d'utilisateurs. Pour être sur que l'identifiant d'utilisateur que l'on va mettre existe, on va donc mettre une contrainte clé étrangère sur le champs id_utilisateurs de la table article qui va faire la vérification. Ainsi si une requête essaye de faire l'ajout d'un article avec un identifiant d'utilisateur 125, et que il n'y a pas d’utilisateurs 125, il va refuser de faire l'ajout de l'article.

Bon voila pour la partie clés, j’espère que l'explication aidera à comprendre les clés étrangères.

Maintenant je vais essayer d'aider pour ton sujet.
Donc l'idée si j'ai bien saisi c'est que un visiteur aura un premier type de menu, et que si c'est un adhérent il aura un 2e type de menu et si c'est un admin tu vas avoir un 3e type de menu.

L'idée c'est que tu va avoir un cas par défaut pour les visiteurs, et ensuite en variable de session je suppose, tu va vérifier si c'est un adhérent ou un administrateur.
On va donc créer des catégories d'utilisateurs : 0 pour les visiteurs, 1 pour adhérents et 2 pour administrateurs par exemple.
Du coup dans tes menus, tu va ajouter un champ visibilité par exemple, qui va prendre 0 quand c pour les visiteurs, 1 quand c'est pour les adhérents et 2 quand c'est pour les administrateurs.
Ensuite il n'y a plus qu'a récupérer la valeur dans la session, et dans un if faire un select menu from menus where visibilité=0 quand c'est un visiteur (puis soit "0 et 1" soit que 1, puis pareil 0 et 1 et 2 ou que 2 )
Bonsoir,

Je vous remercie d'avoir passé sûrement beaucoup de temps à tenter de me faire comprendre ce qu'il fallait.

Je vais d'abord commencé par le php. Si j'ai bien compris je dois faire une session_start() ?
<?php
[b]session_start();
if (!isset($_SESSION['visibleAdherents']=1))[/b]
{
     //include 'page_accueil.php';
// affichage du menu en fonction du statut du visiteur
include 'gesmenu.php' ;
include 'connexion.php';
$NumPage=$_GET['NumPage'];

	echo '<div id="contenu_accueil">' ;
	$req="select NumPageLibre, ContenuPage, TitrePL, pageVisibleVisiteurs from `page_libre` where NumPageLibre=$NumPage and[b] pageVisibleVisiteurs = true[/b]"; 
		  
	$exec=mysql_query($req);
	if (mysql_num_rows($exec)==0)
	{
	echo $req;
	}
	else
	{
	$ligne=mysql_fetch_array($exec) ;
	echo '<div class="titresPages">&nbsp;&nbsp;'.$ligne['TitrePL'].'</div>' ; // AFFICHE LE TITRE DE LA PAGE //
    //echo '<br />' ;
	echo $ligne['ContenuPage'];
	}
	echo '</div>';
}
else
{
//include 'page_accueil.php';
// affichage du menu en fonction du statut du visiteur
include 'gesmenu.php' ;
include 'connexion.php';
$NumPage=$_GET['NumPage'];

	echo '<div id="contenu_accueil">' ;
	$req="select NumPageLibre, ContenuPage, TitrePL, pageVisibleVisiteurs from `page_libre` where NumPageLibre=$NumPage and [b]pageVisibleVisiteurs = false[/b]"; 
		  
	$exec=mysql_query($req);
	if (mysql_num_rows($exec)==0)
	{
	echo $req;
	}
	else
	{
	$ligne=mysql_fetch_array($exec) ;
	echo '<div class="titresPages">&nbsp;&nbsp;'.$ligne['TitrePL'].'</div>' ; // AFFICHE LE TITRE DE LA PAGE //
    //echo '<br />' ;
	echo $ligne['ContenuPage'];
	}
	echo '</div>';
}
	?>

Je suis sur la bonne voie ?

Maintenant croyez-vous que créer une clé étrangère pour lier les deux tables ss_menu et page_libre soit vraiment nécessaire pour filtrer les pages qui devront être accessible par l'utilisateur ou par le visiteur ?
Modifié par lizeal (06 Feb 2014 - 16:15)