[RESOLU] Afficher le nom de l'utilisateur quand celui ci est connecté

dolf
Invité n'ayant pas de compte PHPfrance

22 mai 2006, 11:36

Bonjour,
J'ai reussi a gérer les sessions mais je bloque sur un truc.

J'aimerais une fois que l'utilisateur a ouvert une session afficher "Bonjour XXXXXX (Se déconnecter)" sur toutes les pages (dans le header) et rien si l'utilisateur n'est pas connecté. J'ai deja un fichier header que j'appelle pour toutes les pages. Pouvez vous m'aider?
Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 mai 2006, 11:42

Si tu as réussi à comprendre les sessions, tu doit avoir enregistré en session le visiteur connecté ?

Si c'est le cas, dans ton fichier header, il te suffit de regarder si un membre est connecté (si sa variable de session existe) et si c'est le cas, d'afficher son nom
//Si le visiteur est connecté
if (isset($_SESSION['visiteur'])) {
  echo "Bonjour ".$_SESSION['visiteur']['nom']." (deconnexion)";
}
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 536 Messages

22 mai 2006, 11:43

bonjour, alors lorsque ton utilisateur se connecte, tu dois récupérer son nom avec la méthode POST par exemple?

Si c'est le cas, alors tu peux écrire
$_SESSION['nom']=$_POST['nom']
et ensuite, ds ton fichier header tu peux mettre
echo $_SESSION['nom']
Je ne suis pas sur de moi à 100% mais je pense que cela peut marcher.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Petit nouveau ! | 8 Messages

22 mai 2006, 13:03

Merci beaucoup Zeus j'ai reussi. J'ai une autre question toujours en rapport avec les sessions.
Quand un utilisateur arrive sur une page protégée je lui demande d'ouvrir une session avec ce code:
<?
session_start();
if(!isset($_SESSION['login'])) {
  echo 'Vous devez vous identifier';
  include('login.html');
  exit;
}
?> 
Par contre je ne sais pas comment les rediriger vers la page d'ou ils viennent une fois la session ouverte. Par exemple quand l'utilisateur arrive sur la page pour poster une annonce je lui demande de s'identifier. Apres identification j'aimerais le rediriger directement sur la page poster une annonce. Pouvez vous m'aider pour ca aussi.
Merci d'avance

Si tu as réussi à comprendre les sessions, tu doit avoir enregistré en session le visiteur connecté ?

Si c'est le cas, dans ton fichier header, il te suffit de regarder si un membre est connecté (si sa variable de session existe) et si c'est le cas, d'afficher son nom
//Si le visiteur est connecté
if (isset($_SESSION['visiteur'])) {
  echo "Bonjour ".$_SESSION['visiteur']['nom']." (deconnexion)";
}

ViPHP
ViPHP | 3607 Messages

22 mai 2006, 13:20

tu peux faire qqch comme ça:
dans ton fichier login.html, que tu renommes en login.php) tu ajoute un champs caché dans ton formulaire...
<input type="hidden" name="page" value="<?php echo $_SERVER['PHP_SELF']; ?>" />
et dans ta page de vérification, tu renvoi l'utilisateur de cette manière:
header("Location: ".$_POST['page']."");

Mammouth du PHP | 536 Messages

22 mai 2006, 13:28

une question, la solution que j'ai proposée est-elle bonne? carje ne suis pas sur de moi et j'aimerais savoir.
Merci
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

ViPHP
ViPHP | 3607 Messages

22 mai 2006, 13:31

oui oui elle fonctionne...
elle n'est pas du tout mise forme, et on sait pas où tu mets le echo $_SESSION['user'] dans le header.php mais ça marche

Mammouth du PHP | 536 Messages

22 mai 2006, 13:32

ok cool alors, je ne suis pas si mauvais que ca lol 8)
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 mai 2006, 14:05

tu peux faire qqch comme ça:
dans ton fichier login.html, que tu renommes en login.php) tu ajoute un champs caché dans ton formulaire...
<input type="hidden" name="page" value="<?php echo $_SERVER['PHP_SELF']; ?>" />
et dans ta page de vérification, tu renvoi l'utilisateur de cette manière:
header("Location: ".$_POST['page']."");
Cette solution ne va que te rediriger vers la page courante ...

$_SERVER['PHP_SELF'] indique l'url du script courant, pas du précédent.

Ce que tu peut faire, sur la page qui teste si le user est connecté, tu donnes un argument dans l'url et après la validation, tu rediriges vers cette adresse
<?
session_start();
if(!isset($_SESSION['login'])) {
  echo 'Vous devez vous identifier';
  header('Location: login.php&precedente=cettepage.php');
}
?>
et login.php
<form action="?precedente="<?= $_GET['precedente'] ?>">
...
</form>
<?php
  //... code de vérification

  if (estConnecté) {
    header('Location: '.$_GET['precedente'].'');
  }
?>
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 3607 Messages

22 mai 2006, 15:06

Cette solution ne va que te rediriger vers la page courante ...

$_SERVER['PHP_SELF'] indique l'url du script courant, pas du précédent.
je ne pense pas, puisqu'il fait un include....
si je vais sur page3.php, je ne suis pas identifié, à ce moment là, le fichier login.php est inclu... dans le champs cacher, il y aura donc page3.php, à l'envoi du formulaire, dans la page de vérification, la partie
header("Location: ".$_POST['page']."");
devrait bien te renvoyer sur page3.php mais cette fois, vu que tu es identifié...
hop ça marche :D
j'ai fait une erreur de raisonnement :?:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 mai 2006, 15:34

non, non, c'est plutôt dolf qui a fait une erreur de méthodologie en faisant un include plutôt qu'un header ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 8 Messages

22 mai 2006, 18:33

et login.php
<form action="?precedente="<?= $_GET['precedente'] ?>">
...
</form>
<?php
  //... code de vérification

  if (estConnecté) {
    header('Location: '.$_GET['precedente'].'');
  }
?>[/quote]

Merci... est ce que la meme chose est possible avec la fonction POST car c ce que j'utilise dans le form. Merci pour votre patience

Petit nouveau ! | 8 Messages

23 mai 2006, 10:58

Merci pour votre aide. Je tiens a signaler que je debute en php et je ne suis pas certain d'avoir compris vos messages a propos de la redirection sur la page precedente.

Pour l'instant quand l'utilisateur veut se logger il peut soit:
- cliquer sur ouvrir une sessions ce qui le redirige vers login.html (qui est un form (<form action="login.php" method='post'>). La page login.php verifie le username et password.
- cliquer sur mon_compte.php ou la j'ai le code suivant
<?
session_start();
if(!isset($_SESSION['username'])) {
  echo '<h5>Vous devez vous identifier pour accéder à Mon Equirodi</h5>';
  include('login.html');
  exit;
}
?> 
Et voici le code de ma page login.php
<? include("_connexion.php"); 
if(isset($_POST) && !empty($_POST['username']) && !empty($_POST['password'])) {
  extract($_POST);
  $sql = "select password from members where username='".$username."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  $data = mysql_fetch_assoc($req);
  if($data['password'] != $password) {
    echo '<h5>Mauvais pseudo ou mot de passe. Merci de recommencer</h5>';
    include('login.html');
    exit;
  }
  else {
    session_start();
    $_SESSION['username'] = $username;  
    header("Location: mon_equirodi.php");
}   
}
else {
  echo '<h5>Vous avez oublié de remplir un champ.</h5>';
   include('login.html');
   exit;
}
mysql_close(); ?>


Vous me conseiller de n'utiliser qu'une seule page de login: login.php ou j'aurais le form et le code de verification c'est bien ca?

Ensuite dans les pages qui necessitent d'etre logge je les renvoie sur login.php et j'enregistre la page d'ou ils viennent pour les rediriger dessus une fois la verification du login effectuee. Si c bien ca la theorie je ne suis pas sur de savoir le realiser en pratique sans plus d'explication.

Encore mille fois merci

dolf