Probleme filtre de requete sur session

Eléphant du PHP | 297 Messages

25 juin 2007, 19:11

Bonjour,
J'ai un petit soucis:
J'execute une requete (avec DW), avec comme filtre une session ($_SESSION['track']).
Le probleme est que meme avec la session vide, ma requete recherche des données dans ma base et me l'affiche.
session_start();
$colname_enr_affilie = "1";
if (isset($_SESSION['track'])) {
  $colname_enr_affilie = (get_magic_quotes_gpc()) ? $_SESSION['track'] : addslashes($_SESSION['track']);
}
mysql_select_db($database_mabase, $mabase);
$query_enr_affilie = sprintf("SELECT * FROM affilies WHERE track = '%s'", $colname_enr_affilie);
$enr_affilie = mysql_query($query_enr_affilie, $mabase) or die(mysql_error());
$row_enr_affilie = mysql_fetch_assoc($enr_affilie);
$totalRows_enr_affilie = mysql_num_rows($enr_affilie);
et un peu plus bas
if (!isset($_SESSION['track'])) 
{
 $_SESSION['track']="";
  }
   else
    {
	 $affilie_track=$row_enr_affilie['nom'];
	 $email3=$row_enr_affilie['email'];
	 $track=$_SESSION['track'];
	}
J'ai fait un test d'afichage de ces 3 données...

Lorsque qu'il a une donnée en memoire dans la session il m'affiche bien la session, l'email et le nom lié a cette session. Par contre : Lorsque la session est vide il m'affiche tout de meme le nom et l'email de la premiere dans la base. je bute !! :cry:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juin 2007, 23:51

Actuellement, ton code fait la chose suivante

Code : Tout sélectionner

Si la variable de session existe Alors récupérer la valeur de cette variable Finsi Exécuter la requete Afficher les résultats
Alors que, selon tes explications, il devrait être

Code : Tout sélectionner

Si la variable de session existe Alors Récupérer la valeur de cette variable Exécuter la requête Afficher les résultats Finsi
Il ne te reste plus qu'a essayer de modifier ton code selon ce nouvel algo ;)
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

Eléphant du PHP | 297 Messages

26 juin 2007, 01:15

salut Zeus,
J'ai mis en place ce que tu m'a dit (si j'ai bien compris),
mais ca me fait pareil...la variable track est vide
mais il va tout de meme me chercher le mail et le nom de la premiere ligne de ma base...
if (isset($_SESSION['track'])) {
  $colname_enr_affilie_track= (get_magic_quotes_gpc()) ? $_SESSION['track'] : addslashes($_SESSION['track']);

mysql_select_db($database_mabase, $mabase);
$query_enr_affilie_track= sprintf("SELECT * FROM affilies WHERE track = '%s'", $colname_enr_affilie_track);
$enr_affilie_track= mysql_query($query_enr_affilie_track, $mabase) or die(mysql_error());
$row_enr_affilie_track= mysql_fetch_assoc($enr_affilie_track);
$totalRows_enr_affilie_track= mysql_num_rows($enr_affilie_track);
	 $affilie_track=$row_enr_affilie_track['nom'];
	 $email4=$row_enr_affilie_track['email'];
	 $track=$_SESSION['track'];
}
en clair ce que j'essaye de faire est de verifier si la variable de session $_SESSION['track'] embarque une donnée, et si oui, recuperer l'email d'un affilie dans ma base avec cette variable de session $_SESSION['track'] qui sera egale à la colonne track !
C'est pas ma première requete, mais j'avoue que celle-ci m'épuise...

après 2h00...

il semble que j'ai trouvé l'origine du probleme !!
j'ai éliminé ce genre ce genre code :
 if (!isset($_SESSION['track'])) $_SESSION['track']="";
avec ce code je pensais confirmer que la variable est bien vide...
et sans ce code en amont il semble que ma variable de session est enfin reconnue vide si elle l'est ! :?
si qlq peut me donner une petite explication sur la fonction de ce code ?
merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 juin 2007, 11:21

Et pourquoi ne pas tout simplement modifier ton test :

Code : Tout sélectionner

Si la variable de session existe Alors
en

Code : Tout sélectionner

Si la variable de session existe ET qu'elle n'est pas vide Alors
:)

Il y a une différence entre une variable non définie et une variable vide (qui est de fait définie)
$var1 = '';
$var2 = 'xxx';

isSet($var1); // => vrai
isSet($var2); // => vrai
isSet($var3); // => faux

$var1 == ''; // => vrai
$var2 == ''; // => faux 
$var3 == ''; // => erreur : variable non définie
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...