Problème avec variable de session et boucle while

Signaler
Messages postés
6
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
30 novembre 2010
-
Messages postés
6
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
30 novembre 2010
-
Bonjour j'ai un souci avec une variable de session qui ne veut pas passer dans une boucle while

voici mon code:
La personne s'identifie via un formulaire 'login.php' lequel envoie les login et pwd dans une variable de session
<?php
session_start();

$login=$_POST['login'];
$_SESSION['login']=$login;
$pwd=$_POST['pwd'];
$_SESSION['pwd']=$pwd;

//echo 'Votre login est '.$_SESSION['login'].' et votre mot de passe est '.$_SESSION['pwd'].'.
';
// On démarre la session (ceci est indispensable dans toutes les pages de notre section membre)
// On teste nos variables de session
if (isset($_SESSION['login']) && isset($_SESSION['pwd']))
{

include "connection.php";
$sql mysql_query("SELECT * FROM bb_membres WHERE email '$login' AND password = '$pwd' ");
// On fait la recherche du couple login/password directement :)
// Ensuite, on regarde si il existe un membre avec ce login et ce pass
if (mysql_num_rows($sql) == 0)
{echo 'erreur'; //aucun utilisateur n'existe avec ces informations
}
else
{//login et pwd sont ok
while($row = mysql_fetch_array($sql))
{
//echo $row['id_m'];
$identifiant=$row['id_m'];
$prenom=$row['prenom'].' '.$row['nom'];
session_register("prenom");
session_register("identifiant");
}
echo ("<script language = "JavaScript">");
echo ("location.href = '../index2.php';");
echo ("</script>");
}}
else {echo 'Les variables de sessions ne sont pas déclarées.';}
?>
sur ma page index2 j'ai session_start();
depuis cette page index2.php je peux aller vers 2 pages (profil, project discussion)
jusque là tout est ok
maintenant je veux afficher tous les projets (confidentiels ou pas) dans lequel mon visiteur peut aller ainsi que leur détails

<?php
include '../fonctions/connection.php';
$id_p=$_GET['id_p'];
?>
<?php //pour la liste des projets non confidentiels
$project=mysql_query("SELECT id_p, bb_membres.id_m, titre, descr, teammate1, teammate2, teammate3, bb_projets.p_comm, bb_projets.p_techn, bb_projets.p_artist, confidential, nom, prenom FROM bb_projets, bb_membres WHERE (bb_membres.id_m = bb_projets.id_m AND actif=1) AND confidential='no'");

while($row = mysql_fetch_array($project))
{if($id_p==$row[id_p])
{
$prenom=ucwords($row[prenom]); //met une majuscule à la première lettre du mot
$nom=ucwords($row[nom]); //met une majuscule à la première lettre du mot
echo "".$row[titre].", ".$prenom." ".$nom."

";
include 'details.php';
}
else
{
$prenom=ucwords($row[prenom]); //met une majuscule à la première lettre du mot
$nom=ucwords($row[nom]); //met une majuscule à la première lettre du mot
echo "".$row[titre].", ".$prenom." ".$nom."

";
}
}

//pour la liste des projets confidentiels
$project_conf=mysql_query("SELECT id_p, bb_membres.id_m as id_m, titre, descr, teammate1, teammate2, teammate3, bb_projets.p_comm, bb_projets.p_techn, bb_projets.p_artist, confidential, nom, prenom FROM bb_projets, bb_membres WHERE (bb_membres.id_m = bb_projets.id_m AND actif=1) AND confidential='yes'");

while($row = mysql_fetch_array($project_conf))
{ if(($_SESSION[id]=$row[teammate1])||($_SESSION[id]=$row[teammate2])||($_SESSION[id]=$row[teammate])||($_SESSION[id]=$row[id_m]))
{//echo 'vous avez le droit de le voir';
if($id_p==$row[id_p])
{
$prenom=ucwords($row[prenom]); //met une majuscule à la première lettre du mot
$nom=ucwords($row[nom]); //met une majuscule à la première lettre du mot
echo "".$row[titre].", ".$prenom." ".$nom."

";
include 'details.php';
}
else
{
$prenom=ucwords($row[prenom]); //met une majuscule à la première lettre du mot
$nom=ucwords($row[nom]); //met une majuscule à la première lettre du mot
echo "".$row[titre].", ".$prenom." ".$nom."

";
}
}
else{
//echo 'vous ne pouvez pas le voir';
}

}
?>

à ce moment là il perd l'identifiant $_SESSION[id] et prend par défaut l'id 1.
Pouvez-vous me dire où est ma faute svp?

3 réponses

Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
bonsoir

while($row = mysql_fetch_array($project_conf))
{ if(($_SESSION[id]=$row[teammate1])||($_SESSION[id]=$row[teammate2])||($_SESSION[id]=$row[teammate])||($_SESSION[id]=$row[id_m]))
{//echo 'vous avez le droit de le voir';
if($id_p==$row[id_p]) ...

$_SESSION[id] tu l'as crée ou car elle n'existe pas
donc la boucle et le test ? ...

mais une valeur par défaut pour tester
$_SESSION[id]="quelquechose???";

a++
Messages postés
6
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
30 novembre 2010

effectivement ça fonctionne il garde la $_SESSION[id]
pourtant je pensais l'avoir définie
session_register("identifiant");
en fait j'ai changé avant je l'avais appelé $_SESSION[id] mais comme ça ne fonctionnait pas j'ai essayé en l'appelant $_SESSION[identifiant] mais ça ne marche pas non plus.
Comment puis-je faire passer la variable définie via le fichier verif.php dans ma boucle? car sur cette page il garde pourtant $_SESSION[prenom] qui est définie au même endroit et de la même façon.
est-ce que je dois la redéfinir pour la boucle? si oui comment?
merci d'avance pour ton aide.
Messages postés
6
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
30 novembre 2010

avant j'avais mis ceci avant de faire une distinction entre les projets confidentiels et les autres
<?php
//pour la liste des projets
$projectmysql_query("SELECT id_p, bb_membres.id_m, titre, descr, teammate1, teammate2, teammate3, bb_projets.p_comm, bb_projets.p_techn, bb_projets.p_artist, confidential, nom, prenom FROM bb_projets, bb_membres WHERE (bb_membres.id_m bb_projets.id_m AND actif=1)");

while($row = mysql_fetch_array($project))
{
if($id_p==$row[id_p])
{
$prenom=ucwords($row[prenom]); //met une majuscule à la première lettre du mot
$nom=ucwords($row[nom]); //met une majuscule à la première lettre du mot
echo " ".$row[titre].", ".$prenom." ".$nom."

";
include 'details.php';
}
else
{
$prenom =ucwords($row[prenom]); //met une majuscule à la première lettre du mot
$nom=ucwords($row[nom]); //met une majuscule à la première lettre du mot
echo "".$row[titre].", ".$prenom." ".$nom."

";
}
}
et là je n'ai aucun problème d'identifiant.
Le but est de n'afficher que les projets confidentiels uniquement si la personne appartient au groupe (teammate 1, 2 ou 3) ou est le propriétaire du projet (bb_projects.id_m).
Peut-être qu'il existe une manière de coder plus simple? mais pour l'instant je ne vois pas laquelle...