Variables $_SESSION qui disparaissent !

Résolu
evilsamo Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
evilsamo Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous!

J'aimerais comprendre pourquoi dans $_SESSION les variables positionnées après une clé composé d'un nombre disparaissent.

je m'explique:

$_SESSION = array (
"nom" => "Dupont",
"123" => "3, rue du Paradis",
"ville" => "Marseille" );

Sur cette même page ca va fonctionner très bien, mais sur une page suivante $_SESSION['123'] et $_SESSION['ville'] auront disparues, alors que $_SESSION['nom'] sera bien équivalant a 'Dupont'

ca me pose un problème car j'aurais bien aimé que:
$reponse = mysql_query("SELECT * FROM test WHERE pseudo='$pseudo'" );
$_SESSION =mysql_fetch_array($reponse);

Or mysql me retourne un array numérotés ET associatifs!!

merci d'avance pour votre aide.

11 réponses

P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Ce que je te disais c'est de nommer tes variables de sessions spécifiquement de façon à rendre nul tout risque d'écrasement par une autre variable de ton script.

Par exemple :

$_SESSION['session']['pseudo'] = 'toto';
$_SESSION['session']['id'] = 19;


Et dans ton code donc, tu ne devras jamais utiliser une variable portant le nom $session.

C'est certes contraignant, mais au moins, c'est efficace.

Ils sont complètement stupide Free en laissant cette directive de php à on, à croire qu'ils encouragent le piratage des sites qu'ils hébergent...
1
swoog42 Messages postés 1060 Date d'inscription   Statut Membre Dernière intervention   244
 
Effectivement, mysql_fetch_array renvoie bien, par défaut, le tableau dans les 2 types.
Pour moi, ton erreur ne peut venir que de ta requète.
0
evilsamo Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Il se trouve que l'erreur se produit même sans requête mysql simplement avec l'exemple donné au début.

Je pourrais contourner le problème en supprimant les entrées a clés numériques avec :

<?php
for ($I = 0; $I < 30; $I++)
{
//supprimer entrées et clés dont la clé est $I
}
?>

mais (1) je trouve pas le bon code pour ci-dessus et (2) j'aimerais bien comprendre :)
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Ton register_globals est à on, consulte la doc de ton hébergeur pour voir si tu ne peux pas le désactiver, sinon, va falloir que tu fasses avec en nommant tes variables de sessions en les préfixant.
0

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

Posez votre question
evilsamo Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Je suis sur Free et je peux pas modifier mon register_globals avec un .htaccess.
Je ne crois pas pouvoir non plus préfixé mes variables vu que c'est mysql qui me sort un array numéroté.

Mais je trouve ca bizarre, pk ca serait aussi compliqué? je suis novice et je voudrais juste enregistrer dans $_SESSION des infos sélectionné dans ma BDD (pseudo, mdp, adresse, age, plat préféré...) et ainsi faire des pages personnalisés après avoir demandé un login.
0
graffx Messages postés 6506 Date d'inscription   Statut Contributeur Dernière intervention   1 975
 
j' avais le meme souci avec free, j' ai changé depuis longtemps :) mais y' a peu etre une solution!
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Tu as essayé sans les guillemées ?
$_SESSION = array (
"nom" => "Dupont",
123 => "3, rue du Paradis",
"ville" => "Marseille" );
echo $_SESSION[123];
0
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
Et si tu essai avec autre chose que 123 ? par exemple avec des lettres ?
0
evilsamo Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
c'est pas moi qui choisit 123, mysql me renvoi par exemple un array du type:

$_SESSION = array
(
"0" => "Dupont ",
"nom" => "Dupont",
"1" => "Marseille",
"ville" => "Marseille",
"2" => "1m75",
"taille" => "1m75",
....;
)

me donnera sur la page suivante avec print_r($_SESSION);

Array
(
)*rien quoi!*


alors que
$_SESSION = array
(
"pas_de_chiffre" => "Dupont"
"nom" => "Dupont"
"1" => "Marseille"
"ville" => "Marseille"
"2" => "1m75"
"taille" => "1m75"
....
)

me donnera sur la page suivante avec print_r($_SESSION);
Array
(
[pas_de_chiffre] => Dupont,
[nom] => Dupont,
)*seulement les entrées avant la clef numerique ici [1]*
0
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
Les champs contenant des numéros correspondent à des colonnes des ta BDD à priori.
As tu essayé des les modifier en rajoutant du text pour voir si ça arrange le problème?
0
evilsamo Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Tu ne devinera jamais P@t@ch0n, mais ton astuce elle marche!!!

Dsl j'avais pas compris se que tu voulais dire dans ton premier msg

En tout cas merci à tous!
0