bonjour a tous je viens de creer un petit site
mais je bloque avec la notion des sessions et surtout le php
pour certains d entre vous cela pourra sembler tres facile n de on cote cela fait des jours que je cherche et pourtant surement si simple a realiser
je souhaiterais que les boutons inscription et connexion ne soit affiche que pour les visiteurs et que pour les membres cela soit juste inscrit deconexion
je vous presente un code mais qui ne fonctionne pas merci d avance pour l aide le voici
en deut de code
<?php
session_start();
?>
au niveau du menu
php
<?php if (isset($_SESSION['id'])) { ?>
<li><a href="profil.php"> Accueil </a></li>
<li><a href="déconnexion.php"></a>deconnexion</li>
<?php }
else { ?>
<li><a href="connexion.php"> connexion </a></li>
<li><a href="inscription.php"></a>inscription</li>
<?php } ?>`
c est que lorsque le membre soit conecte il puisse voir que deconexion
et que le visiteur puisse voir inscription /connexion
rien cela ne fonctionne pas
en passant ta souris sur une réponse, tu vas voir apparaitre "ce post m'a permi de résoudre mon problème" ou quelque chose du genre
Bonsoir,
Comment renseignes-tu l'id dans la session ?
Je te déconseille de mettre des caractères accentués dans les noms de fichiers. C'est source de problème
As-tu tester ce que contient $_SESSION avec la fonction var_dump() ?
bonsoir
merci pour la reponse
euhhhh pour la renseigner je dois faire comment stp
comme ceci peut etre
$_SESSION['id'] = 'id';
pour voir ce que contient $_session je dois faire ceci ?
var_dump($_SESSION);
bonsoir,
je peux constater des fautes dans votre php.
resnseigner vous comment on utilise des if et des else
<?php if ($_SESSION['id']): ?>
<?php else: ?>
<?php endif; ?>
Non, aucune faute, les 2 façons sont exactes
Oui tu le renseignes comme tu le montres dans la partie "login"
le contenu de ma page connexion est le suivant
<?php
session_start();
include('base.php');
include('config_cookie.php');
if(isset($_POST['entres']))
{
$pseudo = htmlspecialchars($_POST['pseudo']);
$passe = password_hash($_POST['passe'], PASSWORD_DEFAULT);
if(!empty($_POST['pseudo']) AND !empty($_POST['passe']))
{
$req = $bdd->prepare('SELECT id, passe FROM membres WHERE pseudo = :pseudo');
$req->execute(array(
'pseudo' => $pseudo));
$info = $req->fetch();
if (password_verify($_POST['passe'], $info['passe']))
{
if(isset($_POST['souvenir']) AND !empty($_POST['souvenir']))
{
setcookie('id',$info['id'],time()+3600*24*365,null,null,false,true);
setcookie('pseudo',$pseudo,time()+3600*24*365,null,null,false,true);
setcookie('passe',$info['passe'],time()+3600*24*365,null,null,false,true);
}
if ($info)
{
session_start();
$_SESSION['id'] = $info['id'];
$_SESSION['pseudo'] = $pseudo;
setcookie('pseudo',$pseudo,time()+3600*24*365,null,null,false,true);
header('Location: accueil-peche-perle.php');
echo 'Vous êtes connecté !';
}
}
else{
echo 'Mauvais mot de passe ou mauvais pseudo !';
}
}
else
{
echo 'Tous les champs ne sont pas complétés !';
}
}
?>
d'accord donc l'affectation est bien faite.
Fais-moi plaisir et vire-moi ce htmlspecialchars qui n'a rien à faire dans ce code. C'est UNIQUEMENT à l'affichage)
Ainsi que le second "session_start" dans le "if($info)" car il ne doit il y en avoir un seul
Question de logique, tu affectes la variables $_POST['pseudo'] avant de vérifier qu'elle ne soit pas vide. C'est plûtot le contraire. (Tu vérifies avoir de l'essence avant de prendre la route)
Donc ceci :
$pseudo = htmlspecialchars($_POST['pseudo']);
$passe = password_hash($_POST['passe'], PASSWORD_DEFAULT);
if(!empty($_POST['pseudo']) AND !empty($_POST['passe']))
{
devrait être
if(!empty($_POST['pseudo']) AND !empty($_POST['passe']))
{
$pseudo = $_POST['pseudo'];
$passe = password_hash($_POST['passe'], PASSWORD_DEFAULT);
Pour finir, que donne un "var_dump($_SESSION);" sur ton menu, juste après ton "session_start" du menu
un tout tres grand merci pour la correction
donc voici ce que j ai avec le var_dump
en debut de page
array (size=2)
'id' => string '15' (length=2)
'pseudo' => string 'phil1' (length=5)
cela semble fonctionner ...
peut etre u mot d explication , merci
du coup tu as bien la 1ère partie du if qui s'affiche ?
Je viens de voir aussi que les 2ème liens ne sont pas correct, les textes ne sont pas dans la balise "a" comme pour accueil et profil
en fait
j ai tout
donc si je me connecte j ai bien deconnexion qui s affiche
si je me deconnecte j ai bien inscription et connexion qui s affiche
mais je suis dans les essais pour l instant
car je fonctionnais d une autre maniere
j avais deux pages d acceuil une pour les visiteurs et une pour les membres
l exemple donne etait juste pour me donner une idee mon vrai code est le suivant
<?php if (isset($_SESSION['id'])) { ?>
<a class="bg-primary text-white" style="margin-right:10px;margin-top:10px;" href="deconnexion_perle.php">deconnexion</a>
<?php }
else { ?>
<ul class="navbar-nav lg-auto"> <a class="bg-primary text-white" style="margin-right:10px;margin-top:10px;" href="inscription_perle.php">Inscription</a>
<a class="bg-primary text-white" style="margin-top:10px;" href="connexion_perle.php">connexion</a> </ul>
<?php } ?>`
je ne comprends pas.
Au début, tu dis que le code ne fonctionne pas et après si mais ce n'est pas le vrai code .....
donc ton problème est résolu ?
en fait je ne savais pas comment faire
j ai donc pris un exemple que j ai trouve sur le net
php
<?php if (isset($_SESSION['id'])) { ?>
<li><a href="profil.php"> Accueil </a></li>
<li><a href="déconnexion.php"></a>deconnexion</li>
<?php }
else { ?>
<li><a href="connexion.php"> connexion </a></li>
<li><a href="inscription.php"></a>inscription</li>
<?php } ?>`
puis je l ai adapte pour qu il puisse s integrer a mon code
<?php if (isset($_SESSION['id'])) { ?>
<a class="bg-primary text-white" style="margin-right:10px;margin-top:10px;" href="deconnexion_perle.php">deconnexion</a>
<?php }
else { ?>
<ul class="navbar-nav lg-auto"> <a class="bg-primary text-white" style="margin-right:10px;margin-top:10px;" href="inscription_perle.php">Inscription</a>
<a class="bg-primary text-white" style="margin-top:10px;" href="connexion_perle.php">connexion</a> </ul>
<?php } ?>`
donc tout semble fonctionner mais j ai encore une question si je peux me permettre
<?php
session_start();
?>
fais suivre sur la page les identifiants de connection de la page connexion ?
donc au dessus de chaque page que seul les membres connecte peuvent visualiser je dois juste indiquer
<?php
session_start();
?>
ou plutot cela est juste valable pour le navbar
le session_start lance la session.
La session est valable sur toute les pages tant que tu lances la session en début de code.
Il suffit de revoir le cours sur les sessions
Autre infos, dans la balise "ul", il y a forcément la balise "li", cf la doc
en tous cas un super tres grand merci
pour les infos et l aide
tout est ok
je pense que cela va en aider plus d un