Gérer une connexion $_SESSION

Gérer une connexion $_SESSION - PHP - Programmation

Marsh Posté le 20-04-2018 à 15:59:54    

Bonjour à tous,  
 
Je débute en dev, je me suis mis en tête de réaliser un petit projet pour apprendre le PHP.
 
Dans mon projet, j'ai une page index.php qui include navbar.php qui est mon menu.
Mon but est de faire en sorte que lorsqu'un user se connecte, le menu qu'il vois change.
 
J'aimerais savoir pourquoi mon code ne fonctionne pas, et qu'elle est la best practice pour gérer une session.
 

Code :
  1. index.php
  2. <!DOCTYPE html>
  3. <html lang="fr">
  4. <?php    include('pdo.php'); ?>
  5. <?php    include('navbar.php'); ?>


 

Code :
  1. navbar.php
  2. <ul class="nav navbar-nav">
  3.        <li>
  4.               <php?
  5.                             if (isset($_SESSION['id']))
  6.                             {
  7.                                 <a href="index.php?userid=<?php echo $_SESSION['id']; ?>">Accueil</a>
  8.                                 <a href="index.php?userid=.$_SESSION['id']">Accueil</a>
  9.                             }
  10.                             else
  11.                             {
  12.                                 <a href="index.php">Accueil</a>
  13.                             }
  14.                   ?>
  15.          </li>
  16. </ul>


 
Mon code à juste pour but de dire Si $_SESSION['id'] existe alors je lui affiche un lien qui va le rediriger vers l'accueil en lui passant sont id de session dans le liens.
Et si non je lui met le liens basique de redirection.
Il y a deux ligne parce que j'ai trouvé ces deux façons de faire mais aucune d'entre elle à l'air de fonctionner.
 
Autre question, quand on include une page on ouvre des balises PHP, cela veut-il dire que tout le code de la page sera interprété en PHP ?  
Parce que si oui, je devrais peut être pas ouvrir une balise php dans mon navbar.php.
 
Merci  :jap:  


Message édité par lolight le 20-04-2018 à 16:01:33

---------------
--- Mon topik d'Ach/Ven ---
Reply

Marsh Posté le 20-04-2018 à 15:59:54   

Reply

Marsh Posté le 20-04-2018 à 16:24:57    

tu as placé un session_start() au début de ton code ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-04-2018 à 16:32:41    

que donne un

Code :
  1. var_dump($_SESSION['id']);


Comme dit plus haut, une session ca se démarre, et les variables doivent être remplis (si tu veux l'identifiant automatique tu doit appeler la fonction session_id ()).


---------------
D3
Reply

Marsh Posté le 20-04-2018 à 18:42:58    

Lu,
 
à noter que c'est <?php et non <php?
 
+1 pour le session_start, sans oublier qu'il devrait être placé avant la moindre sortie (avant tout code HTML, echo, etc).
 
Tant qu'on y est, ne pas fermer les balises PHP pour les rouvrir derrière (cf tes include), le saut de ligne situé entre les deux serait envoyé au client et toute fonction d'entête (set(raw)cookie, header et session_start) s'en retrouverait "bloquée" (du moins pour un serveur configuré avec un output_buffering à off).
 
En fait toute cette partie :

Code :
  1. <php?
  2.                             if (isset($_SESSION['id']))
  3.                             {
  4.                                 <a href="index.php?userid=<?php echo $_SESSION['id']; ?>">Accueil</a>
  5.                                 <a href="index.php?userid=.$_SESSION['id']">Accueil</a>
  6.                             }
  7.                             else
  8.                             {
  9.                                 <a href="index.php">Accueil</a>
  10.                             }
  11.                   ?>


N'est pas bonne, il y a mélange PHP/HTML.
 
UNE correction possible :

Code :
  1. <?php
  2. if (isset($_SESSION['id'])):
  3. ?>
  4.    <a href="index.php?userid=<?= $_SESSION['id'] ?>">Accueil</a>
  5.    <a href="index.php?userid=<?= $_SESSION['id'] ?>">Accueil</a>
  6. <?php
  7. else:
  8. ?>
  9.    <a href="index.php">Accueil</a>
  10. <?php
  11. endif
  12. ?>

Message cité 1 fois
Message édité par pluj le 20-04-2018 à 18:46:15
Reply

Marsh Posté le 20-04-2018 à 20:37:28    

Pour commencer, merci à vous 3 pour votre lecture et les réponses apportées.  :jap:  
 

Harkonnen a écrit :

tu as placé un session_start() au début de ton code ?


 
J'avais bien mis un session_start() dans mon fichier pdo qui est include juste avant.
J'ai oublié de le préciser, méa culpa  :sarcastic:  
 


 
Pour le var dump, cela me donne un encadré blanc avec le texte suivant :  

Code :
  1. D:\Install\wamp64\www\navbar.php:21:string '4' (length=1)


 


Bien vu pour le php?, j'ai tellement trituré mon bout de code dans tout les sens que j'ai finis par écrire mes balises avec des fautes.
 
Du coup, il faut que je revois mon code parce que j'ai du me mélanger les pédales avec le php/html à d'autre endroits, c'est surement ça qui n'allais pas.
En corrigeant la syntaxe ça fonctionne merci.
 
Si je peux me permettre, que veux dire cette partie ? Ça lui dit d'afficher le contenus de $_SESSION['id'] grâce au "=" ?
<?= $_SESSION['id'] ?>
 
En tout cas merci à vous, vous m'avez aidé à retirer épine qui m'a pas mal emmerdé  :D


Message édité par lolight le 20-04-2018 à 20:39:30

---------------
--- Mon topik d'Ach/Ven ---
Reply

Marsh Posté le 20-04-2018 à 22:01:57    

Pour répondre rapidement à la dernière question, c'est simplement une syntaxe écourtée :
http://php.net/manual/fr/function.echo.php
http://php.net/manual/fr/ini.core. [...] t-open-tag

 

Tout comme tu peux choisir d'écrire un If avec des accolades :

Code :
  1. if (...) {
  2.   ...
  3. } else {
  4.   ...
  5. }


Ou par mot-clés :

Code :
  1. if (...):
  2.   ...
  3. else:
  4.   ...
  5. endif;


Message édité par MaybeEijOrNot le 20-04-2018 à 22:03:58

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 23-04-2018 à 10:44:48    

Ah merci pour l'info et les liens de la doc.  :jap:  
Pratique comme raccourcis, ça évite de mettre des points d’interrogation après un php   :whistle:  
 :D


---------------
--- Mon topik d'Ach/Ven ---
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed