Sessions cookies et tableaux ?

[Résolu]
Signaler
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
-
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
-
Bonjour,



J'ai quelques soucis avec mes tableaux que je serialize et unserialize dans des variables globales ?

Cela pourrait-il venir éventuellement de la configuration du php.ini ?



Je suis obligé de faire ceci pour que ça fonctionne correctement :

if(!defined('membre')){

require_once('fonctions/membreConnecte.inc');

if(isset($_SESSION['membre'])){

$membre = $_SESSION['membre'];

if(is_array($membre)){

$membre = serialize($membre);

}

define('membre',$membre);

} else {

return null;

}

}

if(is_array(membre)){

$retour = membre;

} else {

if(is_string(membre)){

$retour = unserialize(membre);

} else {

$retour = null;

}

}

return $retour;

Donc si vous avez une idée de la raison de mon malheur :')

J'aimerais bien que vous m'exposiez la solution de la chose...

Merci d'avance gente dames et damoiseau !

25 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Si tu changes, dans ton code, ta variable de session membre, en membre_ser, le problème demeure ?
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Hello,

si tu expliquais ton malheur, on pourrait peut-être t'en donner les raisons, cher Zart ;-)
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
Ben tout simplement mes tableaux se désérialize tout seul parfois...

Enfin je comprend pas trop en temps normal sur un apache normal je ferais comme ça

setMenbre($membre){

$_SESSION['membre'] = serialize($membre);

}



getMembre(){

return unserialize($_SESSION['membre']);

}



Mais pour faire ce même comportement sur le serveur je dois faire le code que j'ai mis en deep Pink, yeah !

Non sérieux c'est relou, si vous n'avez pas d'idée de ou ca viens tant
pis mais franchement ça soule. J'ai même dès fois d'autre bug, je
récupère la session d'un autre membre connecté ou ce genre de trucs ?!?
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Comment ça, tes tableaux se désérialisent tout seul...?

Explique toi mieux.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
PHP n'est pas -encore- doué d'une conscience propre...il ne décidera
pas tout seul de désérialiser tes tableaux. Donc explique, donne un
exemple de comportement que tu subis, avec un exemple concret de code.
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
Ben je sais pas quand tu serialiez un truc en général ça te fait un truc du genre :

a:sdfsdfwsdfqsdf;b:fsqdfqsdfqsdfdsf



Et puis ben quand je veux désérialiser ben ça me fou la merde. Je sais pas pourquoi ?

Je ne sais pas comment. Alors que en interne avec mon apache pas de
problème, je te dis c'est incompréhensible. Et justement je me
demandais s'il n'y avait pas des champs spéciaux concernant ce
comportement dans le php.ini
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Moi j'ai ma petite idée. Ten fais quoi de ta variable sérialisée après ? Bref, tu la sérialises pour quoi faire ?
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
Ben je l'utilise par exemple de la sorte :

function getIdMembre(){

$membre = getMembre();

return $membre['idMembre'];

}



par exemple ou dans diverses utilisations... Je ne pourrais te les
citer tous mais en général, je choppe le tableau du membre par exemple
et je récup la donnée dans le tableau que je veux ?

C'est pas comme ça qu'il faut faire ?

Ou bien il faut faire quelques choses une fois que tu as fini toutes tes instructions, genre un reserialize?
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Essayes ceci :



$tab array ('bla'> array (1,2,3), 'bli' => array (4,5,6));



$tabSerialise = base64_encode (serialize ($tab));



// traitement pour transporter ton tableau



$tab = unserialize (base64_decode ($tabSerialise));

$tab['bla'][] = 7;



print_r ($tab);
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Evidmment, faut mettre $tabSerialise dans une variable de session si tu veux la transporter comme ça, hein...
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
Tu es un dieu mon ami !!!!

Je te remerci grandement...
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
En fait non il y a toujours un problème le message d'erreur est :

Warning: base64_decode() expects parameter 1 to be string, array given in
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
le fichier membre.inc dans le dossier fonctions/

function getMembre(){

return unserialize(base64_decode($_SESSION['membre']));

}

function getMembres(){

$indiceDebut = defined('indiceDebut') ? indiceDebut : 0;



require_once('fonctions/db.inc');

$nbMembres = requeteListee("SELECT COUNT(*)

FROM `membres`");

if(isset($nbMembres[0][0])){

define('nbItemsTotal',$nbMembres[0][0]);

}



$requete = "SELECT *

FROM `membres`

LIMIT $indiceDebut ,4";

define('nbItemsAffiches',4);

return requeteListee($requete);

}

function getDerniersMembres(){

$indiceDebut = defined('indiceDebut') ? indiceDebut : 0;



require_once('fonctions/db.inc');

$nbMembres = requeteListee("SELECT COUNT(*)

FROM `membres`");

if(isset($nbMembres[0][0])){

define('nbItemsTotal',$nbMembres[0][0]);

}



$requete = "SELECT *

FROM `membres`

ORDER BY `dateInscription` DESC

LIMIT $indiceDebut ,4";

define('nbItemsAffiches',4);

return requeteListee($requete);

}



function afficherMembre($membre,$gauche,$droite){

$retour = avantCadre($membre['pseudoMembre'],$gauche,$droite);

$retour .= '';

$retour .= afficherParametreMembre($membre,'ip');

$retour .= afficherParametreMembre($membre,'nom');

$retour .= afficherParametreMembre($membre,'prenom');

$retour .= afficherParametreMembre($membre,'civilite');

$retour .= afficherParametreMembre($membre,'mail');

$retour .= afficherParametreMembre($membre,'dateNaissance');

$retour .= afficherParametreMembre($membre,'telephone');

$retour .= afficherParametreMembre($membre,'portable');

$retour .= afficherParametreMembre($membre,'fax');

$retour .= afficherParametreMembre($membre,'adresse');

$retour .= afficherParametreMembre($membre,'nomCommune');

$retour .= '
';

$retour .= apresCadre();



return $retour;

}

function afficherParametreMembre($membre,$param){

if($membre[$param] != ''){

return
'<tr><td> '.$param.'
'.$membre[$param].'</td></tr>';

} else {

return '';

}

}



function getPseudoMembre(){

$membre = getMembre();

return $membre['pseudoMembre'];

}

function getIdMembre(){

$membre = getMembre();

return is_null($membre) ? 0 : $membre['idMembre'];

}

function getCiviliteMembre(){

$membre = getMembre();

return getCiviliteEntiereMembre($membre['civilite']);

}

function getNomMembre(){

$membre = getMembre();

return $membre['nom'];

}

function getPrenomMembre(){

$membre = getMembre();

return $membre['prenom'];

}

function getIdCommuneMembre(){

$membre = getMembre();

return $membre['idCommune'];

}

function getIdCantonMembre(){

$membre = getMembre();

return $membre['idCanton'];

}

function getIdArrondissementMembre(){

$membre = getMembre();

return $membre['idArrondissement'];

}

function getIdDepartementMembre(){

$membre = getMembre();

return $membre['idDepartement'];

}

function getIdRegionMembre(){

$membre = getMembre();

return $membre['idRegion'];

}



Enfin ça ce n'est qu'un aperçu...

Et voici la page des membres apparemment celles qui foire je sais
pas très bien pourquoi tout d'un coup ma variable de session décède
allez savoir comment ....



$membre = getMembre();

$civilite = getCiviliteEntiereMembre();



print('<center>'.$membre['pseudoMembre'].'
</center>

Conformément au droit etc... Tout individu à droit de modifier les

informations le concernant, etc..



'.avantCadre('Informations
Personnelles',true,false,true).'<table width="100%">

----, Civilité : '.$civilite.'</td>

----
Prenom : '.$membre['prenom'].',

----
Nom : '.$membre['nom'].',

----
Date de naissance : '.formatDate($membre['dateNaissance']).',

----
Numéro de téléphone : '.$membre['telephone'].',

----
Numéro de fax : '.$membre['fax'].',

----
[membreSupprimer.php Supprimer mon compte]

');



Bon si tu as le temps de regarder cela correspond à un site que je suis
en train de développer, si tu veux je te donne l'adresse ;)
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Oui mais là je ne vois pas quand tu sérialises...
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
Exacte je te mets le bout de code de quand je sérialise :

function setSessionMembre($membre){

$_SESSION['membre'] = base64_encode(serialize($membre));

}



tout connement que je fais ben derrière un formulaire une fois que j'ai vérifier si tout est OK
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
Je sais que tu touches, donc si tu as des trucs à me redire sur le code
que tu viens de voir, fait le moi savoir je suis super flexible ?!?

Et surtout ouvert à toutes critiques contrairement à certain !
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Juste par pur hasard, change $_SESSION['membre'] en $_SESSION['membre_ser'] par exemple (pas le même nom de variable quoi).



Ensuite, so tu fais un tes simple, genre, tu crées un tableau, tu le
sérialises,n tu le stockes dans une variable de session, et tu crées un
lien qui te mène à une seconde page. Sur cette seconde page, tu
désrialises, et tu affiches...il sepasse quoi ? (sans tout ton code
quoi, juste un code d'essai).
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
ça fonctionne comme ça... Mais je te dis le problème ne viens que de la page spécialement la page membre.php ?

Comprend pas vraiment pourquoi ?!?



J'ai fais les deux trucs que tu m'as dit :

http://autourdechezmoi.com/_dev/test/test1.php

<?php

session_start();

$tab = array();

$tab[] = "test....";

$tab[] = "et retest...";



print_r($tab);



print '<hr>';



$_SESSION['membre_ser'] = base64_encode(serialize($tab));



print $_SESSION['membre_ser'];





?>

http://autourdechezmoi.com/_dev/test/test2.php<?php



session_start();



print $_SESSION['membre_ser'].'
';



$tab = unserialize(base64_decode($_SESSION['membre_ser']));



print count($tab);

foreach($tab as $key => $val){

print $key.' = '.$val.'
';

}







?>



Si tu arrives à comprendre t'es trop balaise...

Parce que moi personnellement je suis dans l'incompréhension totale !
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
J'osais pas de trop parce c'était en prod mais finalemnt, c'est ce qui foutait la merde ?!?

Et maintenant j'ai compris pourquoi la variable s'interjectait par une autre variable, quand je faisait $membre = getMembre()...

Rhhooooo le gros bordel mais on peut pas le changer dans le php.ini ça parce que c'est vraiment relou putain !



Dire que ça fait quelques semaines que je planche dessus comme un con !



[auteurdetail.aspx?ID=58031 malalam] tu es un DIEU !!!

Je te remerci humblement...

Si tu as des trucs à me dire au niveau du code et tout n'hésites pas ;), j'aime les conseils !
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Tu dois avoir une vailaine config dans php.ini en effet.



Mais je ne sais pas trop laquelle...

Essaye voir les register_globals (doit être à off).