8792 sujets

Développement web côté serveur, CMS

Salut, j'essaye de faire en sorte que lorsqu'un membre se connecte, son menu soit formé du menu basique, et de son profil perso.
Pour un admin, la meme chose avec un lien pour l'administration, et pour les visiteurs, le menu basique. J'utilise les sessions, mais je galère bien Smiley smile
Dans ma base de données, chaque membre possède un rang (membre ou admin) je voulais me baser la dessus afin de faire cette histoire de menu, mais je n'y arrive vraiment pas..


<? session_start(); ?>
<?php if($_SESSION['rang'] == 'membre')
{
?>[b]menu membre...[/b]
<? } 
elseif ($_SESSION['rang'] == 'admin')
{
?>[b]menu admin...[/b]
<? }
else { ?>[b]menu basique...[/b]
<? } ?>

donc voici menu.php

et dans ma page de verification de login, j'ai (essayé) de trouver le rang comme ça :

[i]CONNEXION SQL[/i]
$sql = "SELECT pass, [b]rang[/b] FROM users WHERE pseudo='".$pseudo."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);

 if($data['pass'] != $pass) {
echo "mauvais pass";
exit;
}
else {
session_start();
    [b]$_SESSION['pseudo'] = $pseudo;
	$_SESSION['rang'] = $rang;[/b]
    include('menu.php');
    echo "<p>Vous etes bien logué</p>";

voila je sais pas si c'est super clair..en tout cas merci ssi quelqu'un m'aide Smiley smile
Modifié par Kexian (21 Jan 2007 - 19:43)
Si je ne me trompe:

$_SESSION['pseudo'] = $[b]data[/b]['pseudo'];
$_SESSION['rang'] = $[b]data[/b]['rang'];

Sans compter que le session_start() DOIT être placé avant tout autre code PHP dans un script.
Salut, oui tu as raison sur ce point, je m'en suis rendu compte tout a l'heure du $data . Ca n'empeche que je n'arrive toujours pas a faire ce que je veux faire avec mon menu. Et pour ce qui est du session_start();, il doit etre placé avant tout code html, ou quoi que ce soit qui donne une information au navigateur, dans mon cas tout va bien, car rien ne s'affiche, ou rien ne se passe, avant le session_start(); :
  else {
    session_start();

Bref mon menu ne bouge toujours pas Smiley ohwell
merci d'avoir répondu Smiley smile
Modifié par Kexian (21 Jan 2007 - 21:16)
Tu as vérifier si t'es variable sessions contenais quelques choses?
essais un echo a chaque étape du code pour voir ce qui se passe.
Administrateur
Bonjour et bienvenue,

Kexian a écrit :
(...)
Dans ma base de données, chaque membre possède un rang (membre ou admin) je voulais me baser la dessus afin de faire cette histoire de menu, mais je n'y arrive vraiment pas..


<? session_start(); ?>
<?php if($_SESSION['rang'] == 'membre')
{
?>[b]menu membre...[/b]
<? } 
elseif ($_SESSION['rang'] == 'admin')
{
?>[b]menu admin...[/b]
<? }
else { ?>[b]menu basique...[/b]
<? } ?>

donc voici menu.php
(...)

EDIT: j'ai tout faux, mais ça vient quand même de là, voir le post suivant. Smiley rolleyes Je laisse quand même un exemple de syntaxe HereDoc, si tu en préfères la lisibilité ...
/EDIT

Je reviens à cette syntaxe: dites-moi si je me trompe mais menu membre..., menu admin... et menu basique... seront systématiquement affichés (tous les 3 dans les 3 cas du if) car ils ne sont PAS interprétés/parsés par PHP (c'est du HTML en dehors de tout tag <?php ?>). FAUX
Pour éviter d'avoir à mettre le code HTML de ton menu dans une série de echo ''; illisibles, tu peux adopter la notation HereDoc

[#red]<?php[/#]
if($_SESSION['rang'] == 'membre')
{
echo <<<EOT
[b]menu membre...[/b]
EOT;
} 
elseif ($_SESSION['rang'] == 'admin')
{
echo <<<EOT
[b]menu admin...[/b]
EOT;
}
else {
echo <<<EOT
[b]menu basique...[/b]
EOT;
}
[#red]?>[/#]

Modifié par Felipe (22 Jan 2007 - 09:31)
Administrateur
J'ignore comment est configuré Apache+PHP chez toi mais si c'est aussi restrictif que chez moi, il y a un problème avec les tags avant même d'avoir un problème avec session_start()

Ta série de tags à faire parser par PHP est:

<?php
du PHP 1
?>
un peu de HTML a
<?
du PHP 2
?>
un peu de HTML b
<?
du PHP 3
?>
un peu de HTML c
<?
du PHP 4
?>

Note la différence entre le 1er tag ouvrant et les autres Smiley cligne
Ce qui fonctionne c'est

<?php
du PHP 1
?>
un peu de HTML a
<?[#blue]php[/#]
du PHP 2
?>
un peu de HTML b
<?[#blue]php[/#]
du PHP 3
?>
un peu de HTML c
<?[#blue]php[/#]
du PHP 4
?>

à moins de modifier une ou des directives d'Apache ou de PHP ...

chezmoiçamarche sauf si j'enlève un 'php' quelconque:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Test parse tags php et if()</title></head><body>
<?php
$dummy = 4;
if($dummy == 3)
{
?>
     <p>Un + dos = tres</p>
<?php
} 
elseif ($dummy == 4)
{
?>
     <p>2+2 vaut QUATRE</p>
<?php
}
else {
?>
     <p>autre</p>
<?php
}
?>
</body></html>

Modifié par Felipe (22 Jan 2007 - 09:40)

<?
session_start();

if ((!empty($_POST['login'])) && (!empty($_POST['pass']))) {

// tu traite le formulaire de connection avec vérif login et pass valide
// si c'est bon, tu affectes les infos dans la session :
$_SESSION['login'] = $le_log_valide;
$_SESSION['pass'] = $le_pass_valide_eventuellement_encode;
$_SESSION['grade'] = $le_grade;
// et tu le redirige sur lui même
header('Location: '.$_SERVER['PHP_SELF']);
// sinon, bé tu avertis de l'erreur d'identification

exit;
}

if (empty($_SESSION['grade'])) {
// affichage du formulaire de connection

} else if ($_SESSION['grade'] == 'admin') {
// éventuellement tu revérifis les login/pass de la session
$menu = 'menu admin qui va bien';

} else if ($_SESSION['grade'] == 'mbr_lambda') {
$menu = 'menu membre lambda';

} else {
// en théorie pas besoin... mais bon... 
}
?>

<html qui va bien>

<? echo $menu ?>

</html qui va bien>


En gros ça pourait ressembler à ça... à adapter et parfaire.
EDIT : J'ai travaillé un peu dessus ce soir, je n'ai pas le temps de vous montrer mon travail, je vous le montre demain, mais je vous explique mon nouveau problème :
J'arrive maintenant à logguer un admin, ou un membre, ou aucun log.
Lorsque je suis admin, j'ai comme menu :
a écrit :

Editer ma fiche
Administration
Déconnexion


Quand je suis membre :
a écrit :

Editer ma fiche
Proposer
Déconnexion


Quand je suis un visiteur :
a écrit :

Formulaire de connexion, lien pour s'inscrire


J'arrive sur le site, j'ai le menu visiteur.
Je me log (admin ou membre, les deux ont le meme problème..).
J'ai mon menu!(admin ou membre..)
Lorsque je change de page, ou que je clique sur un nouveau lien, le menu visiteur réapparait...Je n'ai pas encore cherché le problème, je m'y remet en début de semaine prochaine, n'hésitez pas à me dire vos avis!
bye Smiley smile
Modifié par Kexian (25 Jan 2007 - 21:55)