Les conditions

Résolu/Fermé
duvalkede - Modifié par jordane45 le 24/11/2015 à 00:53
duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016 - 27 nov. 2015 à 18:19
Bonjour,

J'ai un petit espace connexion sur mes pages du site
que j'aimerais remplacer par un espace profil quand le visiteur c'est connecté.

pour cela j'ai crée deux <div> séparé connexion et profil.

j'ai ensuite fait un include pour chacune des <div> :

<?php include("aside_connexion.php"); ?>

<?php include("aside_profil.php"); ?>

maintenant il faut mettre une condition: 

<?php
if (si le visiteur est connéctée)
{
    <?php include("aside_profil.php"); ?>
}
else
{
   <?php include("aside_connexion.php"); ?>
}
?>


Le problème c'est que je ne sais pas mettre la condition (si le visiteur est connectée )
ensuite mettre le profil en fonction du visiteur je pense savoir le faire.

merci d'avance pour vos réponses


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.

5 réponses

jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024 4 661
24 nov. 2015 à 00:54
Bonjour

Si la question est : comment gérer le fait que l'utilisateur soit connecté ... une des solution possible (et la plus utilisée....) est d'utiliser les variables de SESSION.

https://www.php.net/manual/fr/reserved.variables.session.php
2
duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016
Modifié par duvalkede le 24/11/2015 à 13:06
je n'ai pas compris sur le lien que tu ma donner , mais ca ma donner une idée.

<?php
 if(isset($_GET['id']) AND $_GET['id']>0)
 {
 ?>
  <?php include("aside_profil.php"); ?>
 <?php
 }
 else
 {
 ?>
  <?php include("aside_connexion.php"); ?>
 <?php
 }
 ?>


le probléme c'est que ca affiche ce que je veux mais que sur la page suivante. Moi je veux sur toute es pages suivantes tant que il est connecté.
j'ai même essayez avec if(isset($_SESSION['id']) AND $_SESSION['id']>0)
j'ai bien fait session start.
0
jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024 4 661 > duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016
24 nov. 2015 à 14:34
Je t'ai parlé des variables de SESSION ... pas les variable GET !
0
jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024 4 661 > jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024
Modifié par jordane45 le 24/11/2015 à 15:00
Quand ton user s'identifie sur le site ... tu créés une variable de session ...
Ensuite.. dans tes autres pages.. pour savoir si il est connecté .. il te suffit de voir si cette variable existe


<?php
//démarrage Sesssions (à mettre sur toutes les pages ! )
session_start();

//.. ici ton code de connexion...
 
//si l'utilisateur est bien authentifié :
 $_SESSION['userLogin'] = "qqchose";

//la fin de ton code


et dans tes autres pages :
//démarrage Sesssions (à mettre sur toutes les pages ! )
session_start();


$userLogin = isset($_SESSION['userLogin']) ? $_SESSION['userLogin'] : NULL;

if( $userLigin ) {
  include("aside_profil.php");
}else{
  include("aside_connexion.php");
}

0
jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024 4 661
27 nov. 2015 à 01:12
J'ai du mal à tout comprendre tellement ton explication est fouillie ....

Si je résume ...
LA page qui te pose problème c'est celle la :
<?php 
session_start();
// je me connecte a la bdd
$bdd= privée);
print_r($_SESSION);
echo'<br />userlogin='.$userlogin.'<br />';// sa sa s'affiche quand je suis co 
// si la variable id existe et qui est supérieur a 0
if(isset($_GET['id']) AND $_GET['id']>0)
{ 
 // pour sécuriser la barre URL  avec id 
 $getid=intval($_GET['id']);
 $requser=$bdd->prepare('SELECT * FROM membres WHERE id=?');
 $requser->execute(array($getid));// permet de executé la sécurité intval de $getid
 $userinfo=$requser->fetch();// mettre les infos $requser avec ces pseudos , mail ect dans $userinfo pour les mettres sur la page web.
?>
<div>
    <!-- Tout cela ne s'affiche pas a cause de la condition sur cette page  j'imagine. -->
</div>
<?php
}
?>


Déjà ... ligne 4 .. tu as un souci :
$bdd= privée);

Il ne te manque pas quelque chose ??


Peux tu remplacer son code par :
<?php 
// permet d'afficher toutes les erreurs PHP 
error_reporting(E_ALL);

//démarrage "propre" des sessions 
 if(session_id() == ''){
   session_start();
 }
  
  
// Connexion a la bdd
$bdd = new PDO("privée");


$userlogin = isset($_SESSION['userlogin']) ? $_SESSION['userlogin'] : NULL;
$user_id   = isset($_SESSION['id']) ? $_SESSION['id'] : NULL;

//-------------------------------------------//
//le temps des tests :
echo'<br>userlogin='.$userlogin.'<br>';
echo'<br>user_id='.$user_id.'<br>';
//-------------------------------------------//


// si la variable id existe
if($user_id) { 
 //bloc try/catch pour intercepter les erreurs eventuelles
 try{
  $sql = "SELECT * FROM membres WHERE id=?";
  $requser=$bdd->prepare($sql);
  $requser->execute(array($user_id));
  $userinfo=$requser->fetch();
 }catch(Exception $e) {
   //en cas de Pb dans la requête
   echo "<br> Erreur dans la requete :<br> $sql<br>";
   echo $e->getMessage(); 
 }
?>
<div>
    <!-- Tout cela ne s'affiche pas a cause de la condition sur cette page  j'imagine. -->
	<?php
	 //le temps des tests:
	 echo "<pre> userinfo:<br>";
	 print_r($userinfo);
	 echo "</pre>";
	?>
</div>
<?php
} else{ 
 //-------------------------------------------//
 //le temps des tests
 echo "<br> Erreur ! Aucun ID présent en variable de session";
 echo "<br> Ou utilisateur non connecté !<br>";
 print_r($_SESSION);
//-------------------------------------------//
}

?>


PS: Fais un COPIER COLLER du code TEL QUEL pour être sûr de ne pas faire d'erreur. Merci.

PS² : La "bonne" façon d'écrire un IF .. c'est celle que j'utilise...
Voir la norme PSR2 : http://www.php-fig.org/psr/psr-2/fr/#5-1-if-elseif-else
Evites de faire des :
if(...)
{

}
else
{

}

C'est horrible à lire !!!
1
duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016
27 nov. 2015 à 16:59
j'ai mis privée dans la bdd pour pas que tu vois mon mot de passe
et le problème est résolu.
j'ai piocher des choses dans le code que tu vien de me montrer et maintenant ca fonctionne.
Je te remercie énormément, sans toi je n'aurais pas réussi.
il ne me reste plus que a faire le design et commenté simplifier le code.
Merci beaucoup
0
jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024 4 661 > duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016
27 nov. 2015 à 17:36
Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
0
duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016 > jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024
27 nov. 2015 à 18:19
Je ne vois pas de lien marquer comme résolu.Je sais que les autres mettent résolu mais moi perso il n'y a pas de lien sur toute la page.
0
duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016
Modifié par duvalkede le 25/11/2015 à 22:49
L'espace connexion :

//on vérifie que le pseudo et mdp existe une fois dans la table membres
  $requser=$bdd->prepare("SELECT * FROM  membres WHERE pseudo=? AND      
                motdepasse=?");
  $requser->execute(array($pseudoconnect, $mdpconnect));
  $userexist=$requser->rowcount();
  if($userexist== 1)
  {       
                        
   $_SESSION['userlogin']="8";// ce que jordane45 dit : si connécté=qqchose
   //on met les infos de $userinfo sous $_SESSION pour que ca navigue les infos sur les autres pages.
   $userinfo=$requser->fetch();
   $_SESSION['id']=$userinfo['id'];
   $_SESSION['pseudo']=$userinfo['pseudo'];
   $_SESSION['mail']=$userinfo['mail'];
                 // on redirige vers profil.php avec le id de session dans la barre URL
   echo '<meta http-equiv="Refresh" content="0;url= profil.php?
   id='.$_SESSION['id'].'">';
  }
  else
  {
   $erreur2="Mauvais pseudo ou mot de passe !";
  }


maintenant le choix entre les deux espaces connexion ou profil:

<div class="aside">
 <?php
 $userlogin=isset($_SESSION['userlogin']) ?$_SESSION['userlogin'] : 8;

 if($userlogin)
 {
 ?>
  <?php include("structure_de_page/aside_profil.php") ?>
 <?php
 }
 else
 {
 ?>
  <?php include("structure_de_page/aside_connexion.php") ?>
 <?php
 }
 ?>
</div>


Quand je fais cela , sa ne m'affiche aucun des deux , j'ai du mal comprendre ce que vous m'avais dit. Si vous pouvez me corrigé encore s'il vous plaît.
n'hésite pas a demandé si il faut plus d'information.
0
jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024 4 661
Modifié par jordane45 le 26/11/2015 à 09:41
Tu as bien mis un session_start au début de tes pages?
Si tu fais un
print_r($_SESSION); 
... qu'est ce que ça te donne ?
0
J'ai fait le session start sur toutes mes pages. Mais pas aux includes qui sonts sur ces pages.

Ensuite quand je tape dans la page index
Print_r($_SESSION) ca me ressort :
Array([id]=>2 [pseudo]=>duvalkede2 [mail]=>...[avatar]=>...)
0
jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024 4 661 > duvalkede
26 nov. 2015 à 12:43

J'ai fait le session start sur toutes mes pages. Mais pas aux includes qui sonts sur ces pages.

Oui très bien.


Ensuite quand je tape dans la page index
Print_r($_SESSION) ca me ressort :
Array([id]=>2 [pseudo]=>duvalkede2 [mail]=>...[avatar]=>...)

Ce qui semble indiquer que ça fonctionne.

Est-ce que tu vois, dans l'array affiché par le print, la clé : userlogin ?


PS: Peux tu remplacer tes INCLUDES ... par des REQUIRE_ONCE ?
Comme ça, en cas de pb dans le chemin vers les fichiers il te le dira....
0
duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016
Modifié par duvalkede le 26/11/2015 à 14:53
je ne vois pas la clé userlogin dans l'array.

j'ai remplacer mes includes par requires_once et aucun changements ni message d'erreurs.

j'ai fait un petit test sans les conditions:
<?php REQUIRE_ONCE("structure_de_page/aside_connexion.php") ?>
cela s'affiche bien.

un autre test sans les conditions:
<?php REQUIRE_ONCE("structure_de_page/aside_connexion.php") ?>
cela ne s'affiche pas.Pourtant il y a le array sur la page avec id mail avatar.

un autre test avec conditions:
<div class="aside">
  <?php
  if(isset($_GET['id']) AND $_GET['id']>0)
  {
  ?>
  <?php REQUIRE_ONCE("structure_de_page/aside_profil.php") ?>
  <?php
  }
  else
  {
  ?>
  <?php REQUIRE_ONCE("structure_de_page/aside_connexion.php") ?>
  <?php
  }
  ?>
</div>

Cela affiche l'espace connexion quand je ne suis pas connecté.
quand je rentre mes identifiant, ca remplace l'espace connexion par profil.
mais quand je change de page, ca remet l'espace connexion MAIS l'array indique bien mon pseudo mail avatar.
J'en conclus:
Ma $_SESSION navigue bien sur toute les pages.
Ma $_SESSION ne navigue pas sur
<?php REQUIRE_ONCE("structure_de_page/aside_profil.php") ?>


et puis pour le test avec les conditions $userlogin comme j'ai montrer dans une autre réponse:
aucun des deux s'affiche.dans array pas de userlogin.


si tu veux les pages pour toi test en localhost, dit le moi. Mais je sais pas comment envoyez je n'ai pas skype.
0
jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024 4 661
26 nov. 2015 à 15:19
Je viens de voir une erreur dans ton code :
 $userlogin=isset($_SESSION['userlogin']) ?$_SESSION['userlogin'] : 8;


... d'où vient ce 8 ??
Il faut écrire :
 $userlogin=isset($_SESSION['userlogin']) ?$_SESSION['userlogin'] : NULL;

0
duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016 > jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024
26 nov. 2015 à 15:27
je vais retester ce que tu me dit ce soir avec la modification que tu y ajoute , la je dois partir.
0
duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016
26 nov. 2015 à 18:37
Voila, j'ai tout remis comme avant avec écrit NULL a la place du 8
effet:
Cela affiche l'espace connexion quand je ne suis pas connecté.
quand je rentre mes identifiant, ca remplace l'espace connexion par profil.
mais quand je change de page, ca met aucun des deux, l'array indique bien mon pseudo mail avatar et la userlogin 178 (c'est le quelquechose que tu disait) j'ai un champ userlogin avec en entrée 0 si pas co et 178 quand c'est co.
0
duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016
Modifié par duvalkede le 26/11/2015 à 18:46
quand je fais print_r($_SESSION) dans l'include aside_connexion.php
ca me met bien array avec les bonne données.
Avec l'espace connexion.
Je pense que ca vient de la condition.

<?php 
session_start();
?>
<div class="aside">
 <?php
 $userLogin = isset($_SESSION['userLogin']) ? $_SESSION['userLogin'] : NULL;

 if( $userlogin) 
 { 
 include("structure_de_page/aside_profil.php");
 }
 else
 {
  include("structure_de_page/aside_connexion.php");
 }
 ?>
</div>
0
jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024 4 661 > duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016
Modifié par jordane45 le 26/11/2015 à 18:52
Tu peux me coller le résultat du print ? (En entier )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
duvalkede Messages postés 37 Date d'inscription jeudi 12 novembre 2015 Statut Membre Dernière intervention 16 janvier 2016
Modifié par duvalkede le 26/11/2015 à 20:35
récapitulatif:
endroit entre choix espace connexion ou profil.

<?php 
session_start();
?>
<div class="aside">
 <?php
 $userlogin=isset($_SESSION['userlogin']) ?$_SESSION['userlogin'] : NULL;

 if( $userlogin) 
 { 
  echo'<br />userlogin='.$userlogin.'<br />';// le temp de tester.
  include("structure_de_page/aside_profil.php");
 }
 else
 {
   include("structure_de_page/aside_connexion.php");
 }
 ?>
</div>


espace connexion

<?php 

// je me connecte a la bdd
$bdd= new PDO("privée");
print_r($_SESSION);
// si on clique sur le bouton connexion :
if(isset($_POST['formconnexion']))
{
 //on simplie l'enregistrement des données et on met une sécurités.Plus facile a écrire.
 $pseudoconnect=htmlspecialchars($_POST['pseudoconnect']);
 $mdpconnect=sha1($_POST['mdpconnect']);

 // si les champs sonts pas vide, on passe a la suite.
 if(!empty($pseudoconnect) AND !empty($mdpconnect))
 {
  //on vérifie que le pseudo et mdp existe une fois dans la table membres
  $requser=$bdd->prepare("SELECT * FROM  membres WHERE pseudo=? AND motdepasse=?");
  $requser->execute(array($pseudoconnect, $mdpconnect));
  $userexist=$requser->rowcount();
  if($userexist== 1)
  { // si il est connécté, userlogin=$pseudoconnect=pseudo du membre 
   $_SESSION['userlogin'] =$pseudoconnect; 
   //on met les infos de $userinfo sous $_SESSION pour que ca navigue les infos sur les autres pages.
   $userinfo=$requser->fetch();
   $_SESSION['id']=$userinfo['id'];
   $_SESSION['pseudo']=$userinfo['pseudo'];
   $_SESSION['mail']=$userinfo['mail'];
   // on redirige vers profil.php avec le numéro de id de session dans la barre URL
   echo '<meta http-equiv="Refresh" content="0;url= profil.php?id='.$_SESSION['id'].'">';
  }
  else
  {
   $erreur2="Mauvais pseudo ou mot de passe !";
  }
 }
 else
 {
  $erreur2="Tous les champs doivent être complétés !";// le message qui s'affiche si un des deux champs est vides.
 }
}
?>



l'espace profil:

<?php 
session_start();
// je me connecte a la bdd
$bdd= new PDO("privée");
print_r($_SESSION);
// si la variable id existe et qui est supérieur a 0
if(isset($_GET['id']) AND $_GET['id']>0)
{ 
 // pour sécuriser la barre URL  avec id 
 $getid=intval($_GET['id']);
 $requser=$bdd->prepare('SELECT * FROM membres WHERE id=?');
 $requser->execute(array($getid));// permet de executé la sécurité intval de $getid
 $userinfo=$requser->fetch();// mettre les infos $requser avec ces pseudos , mail ect dans $userinfo pour les mettres sur la page web.
?>


la bdd:

table->membres
champ->id ->pseudo->mail->motdepasse->avatar->date_inscription->userlogin

effet déconnécté:

print_r($_SESSION) donne array() que ce soit espace connexion ou n'importe ou sur la page.
l'espace connexion reste même si on change de page.

effet connectée:

print_r($_SESSION) donne:
Array ( [userlogin] => duvalkede [id] => 1 [pseudo] => duvalkede [mail] => duvalkede2@yahoo.fr )
l'espace profil ne reste que sur la premiére page que ca redirige.
si je change de page, ca disparaît.

echo'<br />userlogin='.$userlogin.'<br />';// le temp de tester a l'endroit du choix de l'espace.
affiche bien mon pseudo même si je change de page.


si je met :(test)
echo'<br />userlogin='.$userlogin.'<br />';// le temp de tester dans aside_profil
cela s'affiche bien.
donc ca met bien aside profil mais que la zone php donc ce que j'ai mis en condition , c'est cela que ca ne s'affiche pas.
dans aside profil affiche l'espace a une condition:

<?php 
session_start();
// je me connecte a la bdd
$bdd= privée);
print_r($_SESSION);
echo'<br />userlogin='.$userlogin.'<br />';// sa sa s'affiche quand je suis co 
// si la variable id existe et qui est supérieur a 0
if(isset($_GET['id']) AND $_GET['id']>0)
{ 
 // pour sécuriser la barre URL  avec id 
 $getid=intval($_GET['id']);
 $requser=$bdd->prepare('SELECT * FROM membres WHERE id=?');
 $requser->execute(array($getid));// permet de executé la sécurité intval de $getid
 $userinfo=$requser->fetch();// mettre les infos $requser avec ces pseudos , mail ect dans $userinfo pour les mettres sur la page web.
?>
<div>
    <!-- Tout cela ne s'affiche pas a cause de la condition sur cette page  j'imagine. -->
</div>
<?php
}
?>


La je pense que tu a compris le soucis ^^et la , l'espace profil s'affiche sur toute les pages.
j'ai modifié
if(isset($_GET['id']) AND $_GET['id']>0)
par
if(isset($_SESSION['id']) AND $_SESSION['id']>0)
cela affiche maintenant mon espace profil mais plus les pseudos , mail, avatar même si sa affiche que il y a une image.

j'ai remplacer <?php echo $userinfo['pseudo']; ?> qui contenait le pseudo par
$userlogin
Ca fonctionne

ducoup il faut que je crée pour toutes les autres infos que je veux reposer.
donc comment je fais pour le mail, avatar
car je ne peut pas crée de sous champ la.

$_SESSION['userlogin'] =$pseudoconnect;
$userlogin=isset($_SESSION['userlogin']) ?$_SESSION['userlogin'] : NULL;
$userlogin=pseudo de la personne

je fais comment pour mail? sachant que j'ai déja dans la bdd , ca sert a rien de recrée un champ avec le même mail.

sachant que ce que j'avais mis avant qui marchait :

<?php echo $userinfo['mail']; ?>
maintenant ca ne marche plus.

déso pour le long texte.j'était déjà entrain de le faire et tu la demander juste après ^^ toutes mes pages.
0