Sessions cookies et tableaux ?

Résolu
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 - 18 nov. 2005 à 09:04
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 - 19 nov. 2005 à 09:50
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

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 nov. 2005 à 14:37
Si tu changes, dans ton code, ta variable de session membre, en membre_ser, le problème demeure ?
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 nov. 2005 à 09:12
Hello,

si tu expliquais ton malheur, on pourrait peut-être t'en donner les raisons, cher Zart ;-)
0
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 1
18 nov. 2005 à 09:45
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 ?!?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 nov. 2005 à 10:13
Comment ça, tes tableaux se désérialisent tout seul...?

Explique toi mieux.
0

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

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 nov. 2005 à 10:15
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.
0
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 1
18 nov. 2005 à 11:14
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 nov. 2005 à 11:26
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 ?
0
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 1
18 nov. 2005 à 12:42
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?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 nov. 2005 à 12:55
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);
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 nov. 2005 à 12:56
Evidmment, faut mettre $tabSerialise dans une variable de session si tu veux la transporter comme ça, hein...
0
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 1
18 nov. 2005 à 13:23
Tu es un dieu mon ami !!!!

Je te remerci grandement...
0
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 1
18 nov. 2005 à 13:25
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
0
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 1
18 nov. 2005 à 13:29
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 ;)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 nov. 2005 à 13:45
Oui mais là je ne vois pas quand tu sérialises...
0
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 1
18 nov. 2005 à 14:04
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
0
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 1
18 nov. 2005 à 14:07
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 !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 nov. 2005 à 14:11
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).
0
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 1
18 nov. 2005 à 14:26
ç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 !
0
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 1
18 nov. 2005 à 14:56
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 !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 nov. 2005 à 15:07
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).
0
Rejoignez-nous