|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Futur Membre du Club
![]() Inscription : novembre 2006 Messages : 91 ![]() |
Bonjour,
je crois que j'ai un problème de portée avec des variables de session : j'ai 3 fichiers : une classe nUpletVille, un fichier mesFonctions et un fichier traitementChoix, je définis une variable de session dans mesFonctions.php. cette variable est un array dans lequel j'insere des objets de type nUpletVille. jusque là tout va bien, mes objets nUpletVille sont visibles, le truc c'est que j'utilise ce array dans traitementChoix.php (un include de mesFonctions est présent) et là, impossible d'accéder aux objets du array : voilà les codes fichier mesFonctions.php Code :
fichier nUpletVille.php Code :
traitementChoix.php Code :
merci aux ames charitables qui pourront me sortir de ce pétrin |
||||||
|
|
00
|
|
|
#2 | ||||
|
Membre confirmé
![]() ![]() Inscription : mai 2006 Messages : 196 ![]() |
Ha voui ^^ je vois quelques soucis dans la programmation de ton objet (la classe NupletVille ). Lorsque tu créer une classe, met les attributs en tout premier et avec le préfixe PUBLIC ou PRIVATE , et ce en dehors de toutes fonctions, pareil pour les fonctions ,indique les PUBLIC ou PRIVATE. Car avec ton code actuel, les variables sont définies et initialisés dans la fonctions, donc à la fin de son éxécution elles seront détruites. Reprend plutôt cet objet :
Code :
Généralement on met les attributs des objets en PRIVATE pour être certain que seul des méthodes de la classe puisse les modifier, mais si tu fais ceci n'oublie de créer des fonctions qui te permetteront de resortir chacune des variables, comme : Code :
P.S. : Les fonction __construct() et __destruct() sont facultatives en PHP mais obligatoire (même vide) dans beaucoups d'autres langages POO. |
||||
|
|
00
|
|
|
#3 | ||
|
Futur Membre du Club
![]() Inscription : novembre 2006 Messages : 91 ![]() |
merci de ta rapidité.
avec le nouveau code de nUpletVille.php : Code :
c'est ballot :/ P.S pour les accesseurs et leur utilisation je connais le principe ^^ j'avais pas envie de m'embêter avec ça ^^ en tout cas merci de ton aide |
||
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() ![]() Inscription : mai 2006 Messages : 196 ![]() |
Lorsque je lance la page de l'objet je n'ai aucune erreur :o vérifie que tu n'ai pas de mauvaise accolades ou autre, tu as mis tout le code du fichier la ?
Haa peut être parce que tu as mis d'autres instructions avant la classe, une classe doit être seule dans le fichier (enfin je préfére moi) et le nom du fichier comme celui de la classe (c'est bon sa), aussi au lieu d'utiliser INCLUDE je te recommande REQUIRE_ONCE qui t'assure de n'insérer le fichier qu'une seule fois et s'il n'existe pas cela provoque une erreur fatale et stop l'éxecution. Pour les session, une seule fois session_start() au tout début suffit, car tu inclus les fichier, donc c'est comme si tu fesai un copier-coller dans ta page principale, tu risque de créer des erreurs en le re-mettant au milieu du fichier (la ou se situe ta fonction INCLUDE il y aura un nouveau session_start() ). |
|
|
00
|
|
|
#5 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
1. La visibilité des membres (public, protected ou private) ainsi que les constructeurs unifiés (__construct) et les destructeurs ne sont disponibles que depuis PHP 5. Version que l'auteur n'a pas jugé bon de mentionner ...
2. Pour utiliser des objets dans les sessions, la déclaration des classes correspondantes doivent préalablement "apparaître" avant l'appel même à session_start(). Voir ce sujet par exemple. |
|
|
00
|
|
|
#6 | ||||||
|
Futur Membre du Club
![]() Inscription : novembre 2006 Messages : 91 ![]() |
euh, merci à tous, j'ai modifié selon tes conseils julp, mes require_once sont placés avant le session-start qui est désormais uniquement présent dans traitementChoix.php5 (ouais j'ai tout passé en php5)
et là, j'ai un autre probleme qui semble etre toujours du même ordre : mes objets nUpletVille ne se remplissent meme plus lors de l'appel de remplisTableau() contenu dans mesFonctions.php5 effectué par le fichier traitementChoix.php5. J'ai mal lu? je suis une brele ou bien ? Voici les codes : mesFonctions.php5 ça merde ici Code :
traitementChoix.php5 Code :
le fichier nUpletVille.php5 Code :
|
||||||
|
|
00
|
|
|
#7 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Il y a (déjà) un petit problème au niveau de mesFonctions.php5 qui fait appel aux variables de session alors que cette session n'est débutée (session_start) qu'après son inclusion par traitementChoix.php5.
Les inclusions, hormis celles qui comportent des déclarations de classes, peuvent être placées après session_start. Tout dépend ensuite des différentes dépendances. Notez également que la fonction magique __autoload pourrait vous simplifier la tâche car la classe serait chargée automatiquement lors de session_start suivant les objets qui figurent dans la session courante (et même après). |
|
|
00
|
|
|
#8 | ||
|
Futur Membre du Club
![]() Inscription : novembre 2006 Messages : 91 ![]() |
j'ai modifié ça en incluant nUpletVille.php5 dans traitementChoix.php5 aulieu de mesFonctions.php5 duquel je l'ai retiré et en faisant préceder l'inclusion avant le session start comme ceci :
en-tête traitementChoix.php5 Code :
y'a des courageux/ses dans la salle ? |
||
|
|
00
|
|
|
#9 | ||
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Est-ce que vous pourriez relocaliser le problème ?
D'autre part cette partie (mesFonctions.php5) requiert un test pour ne pas écraser les données de la session courante : Code :
|
||
|
|
00
|
|
|
#10 | ||
|
Membre confirmé
![]() ![]() Inscription : mai 2006 Messages : 196 ![]() |
Trouvé !! La :
Code :
$n = new nUpletVille($row["NomMin"],$row["NomMaj"],$row["CodePostal"],$row["INSEE"],$row["Region"],$row["Longitude"],$row["Latitude"],$row["Eloignement"]); Code :
|
||
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Inscription : novembre 2006 Messages : 91 ![]() |
Merci à vous,
il va rester des erreurs, déjà le constructeur remplit son role, 'vide' repasse a false, le tableau nUpletCorrespondant se remplit ^^ |
|
|
00
|
|
|
#12 |
|
Membre confirmé
![]() ![]() Inscription : mai 2006 Messages : 196 ![]() |
D'après ton code tu as oublier d'indiquer les paramètres dans le constructeur
|
|
|
00
|
|
|
#13 |
|
Futur Membre du Club
![]() Inscription : novembre 2006 Messages : 91 ![]() |
j'avais déjà corrigé, t'as résolu le 1er problème, un grand merci ^^
|
|
|
00
|
|
|
#14 |
|
Membre confirmé
![]() ![]() Inscription : mai 2006 Messages : 196 ![]() |
Il y a encore quelque chose qui cloche ? :o (1er prob )
|
|
|
00
|
|
|
#15 |
|
Futur Membre du Club
![]() Inscription : novembre 2006 Messages : 91 ![]() |
euh...ouais ^^ a priori mon tableau se remplit plusieurs fois avec les memes Nuplets, soit j'ai bugué remplisTableau, soit elle est appelée plus d'une fois ! :/
ça marche trop bien 'faut croire ^^. |
|
|
00
|
|
|
#16 |
|
Futur Membre du Club
![]() Inscription : novembre 2006 Messages : 91 ![]() |
c'est bon c'etait à cause des sessions, les données persistaient dans le tableau ^^ maintenant j'ecrase $_SESSION[nUpletCorrespondant] a chaque appel de remplisTableau()
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com