Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/05/2007, 12h32   #1
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 91
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 91
Points : 17
Points : 17
Par défaut variables de session, tableau d'objets : accès aux membres

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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
<?php
session_start();
include ("nUpletVille.php");
		include ("cnx.php");
		$_SESSION['lesNupletCorrespondant'] = array();
		$_SESSION['vide'] = true;
//*************************************************
function controleCP()
{
	if(!preg_match('`[0-9]{5,5}`',$_SESSION['cp'])){echo("entrez un nombre à cinq chiffres");return false;} 
	else return true;
}
//**************************************************
 
function remplisTableau()
{
		if(!isset($_SESSION['lesNupletCorrespondant'])){$_SESSION['lesNupletCorrespondant'] = array();}
			$rawCp = mysql_query("select * from freq_listingcodes");//*************remplissage de $_SESSION['lesNupletCorrespondant'] = $_SESSION['cp']**********
			{
				//$i = 0;
					while($row = mysql_fetch_array($rawCp, MYSQL_BOTH))
					{
						$n = new nUpletVille($row["NomMin"],$row["NomMaj"],$row["CodePostal"],$row["INSEE"],$row["Region"],$row["Longitude"],$row["Latitude"],$row["Eloignement"]);
						if(strlen($n->codePostal==3)){$n->codePostal = "00".$n->codePostal;}
						elseif(strlen($n->codePostal==4)){$n->codePostal = "0".$n->codePostal;}
 
						if ($n->codePostal==$_SESSION['cp']){array_push($_SESSION['lesNupletCorrespondant'],$n);$_SESSION['vide'] = false;
						/*echo("\$_SESSION['lesNupletCorrespondant'] au rang ".$i." = ".$_SESSION['lesNupletCorrespondant'][$i]->nomMaj);
						$i++;*/
		}
 
 
					}
			}//*************fin remplissage de $_SESSION['lesNupletCorrespondant']$_SESSION['cp']**********
 
}
//*********************************************
 
function controleChoix()
{
	if(isset($_SESSION['max'])&&isset($_SESSION['choix'])&&($_SESSION['choix']<=$_SESSION['max'])&&($_SESSION['choix']>=0)&&preg_match('`[0-9]{1,3}`',$_SESSION['choix'])){return true;} else {return false;}
}
//**************************************
function traitementCP()
{
	if (isset($_SESSION['cp']))
		{
			if (controleCP()){	remplisTableau(); return true; }
 
								else{return false;}
 
 
		}
		else{return false;}
}
//**********************
function afficheTableau()
{
					$_SESSION['i']=0;
					while(isset($_SESSION['lesNupletCorrespondant'][$_SESSION['i']]))
					{
						echo("Choix numéro ".$_SESSION['i']." : ".$_SESSION['lesNupletCorrespondant'][$_SESSION['i']]->nomMaj."<br />");
						$_SESSION['i']++;
					}			
}
//*********************
function afficheFormulaireChoixCP()
{
	$_SESSION['max'] = $_SESSION['i']-1;
		echo("<form name=\"choixCP\" method=\"post\" action=\"traitementChoix.php\"><label for=\"choix\">   
	entrez un choix de 0 à ".$_SESSION['max']."
	</label><input type=\"text\" name=\"choix\" id=\"ville\">  <input type=\"submit\" value=\"Chercher la ville\"/></form><br />");
}
//***************
function controleRempli()
{
	if($_SESSION['vide']){echo ("le code postal ".$_SESSION['cp']." est inconnu");return false;}else {return true;}
}
 
?>

fichier nUpletVille.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
<?php
session_start();
include("villeGeoloc.php");//on s'en sert pas pour mon probleme
class nUpletVille
{
		function nUpletVille($nomMin,$nomMaj,$codePostal,$INSEE,$region,$longitude,$latitude,$eloignement)
		{
			$nomMin;
			$nomMaj;
			$codePostal;
			$INSEE;
			$region;
			$longitude;
			$latitude;
			$eloignement;
			$this->nomMin = $nomMin;
			$this->nomMaj = $nomMaj;
			$this->codePostal = $codePostal;
			$this->INSEE = $INSEE;
			$this->region = $region;
			$this->longitude = $longitude;
			$this->latitude = $latitude;
			$this->eloignement = $eloignement;
		}
 
		function convertNupletToGeo($v)
		{
			$this->nomMaj = $v->nomVille;
			$this->longitude = $v->longVille;
			$this->latitude = $v->latVille;
		}
}
 
 
 
?>
et enfin le fichier qui pose problème
traitementChoix.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
 
<?php
session_start();
include("mesFonctions.php");
include("cnx.php");
$_SESSION['choix']=$_POST['choix'];
$_SESSION['cp']=$_POST["cp"];
$_SESSION['long'] = $_POST['long'];
$_SESSION['lat'] = $_POST['lat'];
$_SESSION['nomVille'] = $_POST['ville'];
$_SESSION['i'];
 
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 TRANSITIONAL//EN">
<html>
 
	<head>
		<title>module de calcul d'occupation des frequences</title>
	</head>
	<body>
	<form name="cp" method="post" action="traitementChoix.php"> <label for="cp"> 
	<?php if(isset($ErrorMessage)&&($ErrorMessage == "cp")){echo "Code postal de format incorrect : un nombre à cinq chiffres est requis";}elseif(isset($ErrorMessage)&&($ErrorMessage == "cpInexistant")){echo"Le code postal entré n'existe pas";} else{echo"Code Postal de la commune";} ?>      
	</label> <input type="text" name="cp" id="cp">  <input type="submit" value="Chercher le code postal"/></form><br /><br /><br />
 
	<form name="ville" method="post" action="traitementVille.php"><label for="ville">   
	<?php if(isset($ErrorMessage)&&($ErrorMessage == "ville")){echo "Ville de format incorrect : les caractères autres que alphabétiques accentués où non, espaces, apostrophes, traits d'union sont interdits";}else{echo"Nom de la commune";} ?> 
	</label><input type="text" name="ville" id="ville">  <input type="submit" value="Chercher la ville"/></form><br /><br /><br />
 
	<form name="longLat" method="post" action="traitementLongLat.php"><label for="latitude">
	<?php if(isset($ErrorMessage)&&($ErrorMessage == "Latitude")){echo "latitude de format incorrect : une latitude est de type nombre à virgule";}else{echo"Latitude";} ?>
</label><input type="text" name="latitude" id="latitude"><label for="longitude">
<?php if(isset($ErrorMessage)&&($ErrorMessage == "Longitude")){echo "latitude de format incorrect : une latitude est de type nombre à virgule";}else{echo"Longtude";} ?></label><input type="text" name="longitude" id="longitude">  <input type="submit" value="Chercher les coordonnées"/></form><br /><br /><br />
 
<?php 
if(isset($_SESSION['choix']))
{if (controleChoix())
	{$_SESSION['long']=$_SESSION['lesNupletCorrespondant'][$_SESSION['choix']]->longitude;$_SESSION['lat']=$_SESSION['lesNupletCorrespondant'][$_SESSION['choix']]->latitude;echo("on peut traiter la longitude et la latitude de ".$_SESSION['lesNupletCorrespondant'][$_SESSION['choix']]->nomMaj);
/*CA MERDE ICI : aucun des $_SESSION['lesNupletCorrespondant'][$_SESSION['choix']]->leNomDuMembre de s'affiche. PLEASE HELP TT */
 
 
 
 
	 }
 
else{echo("mauvais choix, veuillez choisir un entier entre 0 et ".$_SESSION['lesNupletCorrespondant'][$_SESSION['choix']]);}}
	elseif(isset($_SESSION['cp'])){traitementCP();afficheTableau();if(controleRempli()){afficheFormulaireChoixCP();}}
	elseif(isset($_SESSION['nomVille'])){traitementVille();}
	elseif(isset($_SESSION['lat']) && isset($_SESSION['long'])){traitementLongLat();}
?>
	</body>
</html>

merci aux ames charitables qui pourront me sortir de ce pétrin
mnem0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 13h00   #2
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
class nUpletVille
{
		public $nomMin;
		public $nomMaj;
		public $codePostal;
		public $INSEE;
		public $region;
		public $longitude;
		public $latitude;
		public $eloignement;
 
                //Constructeur de l'objet
                public function __construct()
                {}
 
                //Destructeur de l'objet
                public function __destruct()
                {}
 
		public function nUpletVille($nomMin,$nomMaj,$codePostal,$INSEE,$region,$longitude,$latitude,$eloignement)
		{
			$this->nomMin = $nomMin;
			$this->nomMaj = $nomMaj;
			$this->codePostal = $codePostal;
			$this->INSEE = $INSEE;
			$this->region = $region;
			$this->longitude = $longitude;
			$this->latitude = $latitude;
			$this->eloignement = $eloignement;
		}
 
		public function convertNupletToGeo(&$v)
		{
			$this->nomMaj = $v->nomVille;
			$this->longitude = $v->longVille;
			$this->latitude = $v->latVille;
		}
}
Pour ta fonction convertNupletToGeo() il n'y a pas d'erreur apparente mais je te conseil de passer l'objet avec une référence, en ajoutant le '&' comme je l'ai fait si jamais tu souhaite modifier un objet ou une variable sans les retourner.

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 :
1
2
3
4
5
 
public function getNomMin()
{
     return ($this->nomMin);
}
Ré-essaye après avoir changer ton objet et reviens posté ^^ si sa marche toujours pas je regarderai, mais avec ton code actuel tu n'as aucune chance de voir les attributs de ton objet qui meurt à la fin de ta fonction.

P.S. : Les fonction __construct() et __destruct() sont facultatives en PHP mais obligatoire (même vide) dans beaucoups d'autres langages POO.
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 13h12   #3
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 91
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 91
Points : 17
Points : 17
merci de ta rapidité.


avec le nouveau code de nUpletVille.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
<?php
session_start();
include("villeGeoloc.php");
class nUpletVille
{
		public $nomMin;
		public $nomMaj;
		public $codePostal;
		public $INSEE;
		public $region;
		public $longitude;
		public $latitude;
		public $eloignement;
 
                //Constructeur de l'objet
                public function __construct()
                {}
 
                //Destructeur de l'objet
                public function __destruct()
                {}
 
		public function nUpletVille($nomMin,$nomMaj,$codePostal,$INSEE,$region,$longitude,$latitude,$eloignement)
		{
			$this->nomMin = $nomMin;
			$this->nomMaj = $nomMaj;
			$this->codePostal = $codePostal;
			$this->INSEE = $INSEE;
			$this->region = $region;
			$this->longitude = $longitude;
			$this->latitude = $latitude;
			$this->eloignement = $eloignement;
		}
 
		public function convertNupletToGeo($v)
		{
			$this->nomMaj = $v->nomVille;
			$this->longitude = $v->longVille;
			$this->latitude = $v->latVille;
		}
}
 ?>
j'obtiens ce message d'erreur : Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home.2/onirispr/www/tapages/occupation_frequence/nUpletVille.php on line 4

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
mnem0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 13h38   #4
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
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() ).
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 14h03   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 15h30   #6
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 91
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 91
Points : 17
Points : 17
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
 
<?php
require_once("nUpletVille.php5");
require_once("cnx.php5");
 
 
		$_SESSION['lesNupletCorrespondant'] = array();
		$_SESSION['vide'] = true;
//*************************************************
function controleCP()
{
	if(!preg_match('`[0-9]{5,5}`',$_SESSION['cp'])){echo("entrez un nombre à cinq chiffres");return false;} 
	else return true;
}
//**************************************************
 
function remplisTableau()
{
 
//dans cette fonction si j'essaye de récupérer $n->codePostal y'a que dalle, que faire s'il vous plait ? 		if(!isset($_SESSION['lesNupletCorrespondant'])){$_SESSION['lesNupletCorrespondant'] = array();}
			$rawCp = mysql_query("select * from freq_listingcodes");//*************remplissage de $_SESSION['lesNupletCorrespondant'] = $_SESSION['cp']**********
 
				//$i = 0;
					while($row = mysql_fetch_array($rawCp, MYSQL_BOTH))
					{
						$n = new nUpletVille($row["NomMin"],$row["NomMaj"],$row["CodePostal"],$row["INSEE"],$row["Region"],$row["Longitude"],$row["Latitude"],$row["Eloignement"]);
						if(strlen($n->codePostal==3)){$n->codePostal = "00".$n->codePostal;}
						elseif(strlen($n->codePostal==4)){$n->codePostal = "0".$n->codePostal;}
 
						if ($n->codePostal==$_SESSION['cp']){array_push($_SESSION['lesNupletCorrespondant'],$n);$_SESSION['vide'] = false;}
						/*echo("\$_SESSION['lesNupletCorrespondant'] au rang ".$i." = ".$_SESSION['lesNupletCorrespondant'][$i]->nomMaj);
						$i++;*/
						echo("n->codePostal : ".$n->codePostal); 
						echo("voici \$_SESSION['vide'] : ".$_SESSION['vide']."<br />");	
					}
 
}
//*********************************************
 
function controleChoix()
{
	if(isset($_SESSION['max'])&&isset($_SESSION['choix'])&&($_SESSION['choix']<=$_SESSION['max'])&&($_SESSION['choix']>=0)&&preg_match('`[0-9]{1,3}`',$_SESSION['choix'])){return true;} else {return false;}
}
//**************************************
function traitementCP()
{
	if (isset($_SESSION['cp']))
		{
			if (controleCP()){	remplisTableau(); return true; }
 
								else{return false;}
 
 
		}
		else{return false;}
}
//**********************
function afficheTableau()
{
					$_SESSION['i']=0;
					while(isset($_SESSION['lesNupletCorrespondant'][$_SESSION['i']]))
					{
						echo("Choix numéro ".$_SESSION['i']." : ".$_SESSION['lesNupletCorrespondant'][$_SESSION['i']]->nomMaj."<br />");
						$_SESSION['i']++;
					}			
}
//*********************
function afficheFormulaireChoixCP()
{
	$_SESSION['max'] = $_SESSION['i']-1;
		echo("<form name=\"choixCP\" method=\"post\" action=\"traitementChoix.php5\"><label for=\"choix\">   
	entrez un choix de 0 à ".$_SESSION['max']."
	</label><input type=\"text\" name=\"choix\" id=\"ville\">  <input type=\"submit\" value=\"Chercher la ville\"/></form><br />");
}
//***************
function controleRempli()
{
	if($_SESSION['vide']){echo ("le code postal ".$_SESSION['cp']." est inconnu");return false;}else {return true;}
}
//***************************
 
 
 
 
?>
le fichier appelant mesFonctions.php5,
traitementChoix.php5
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
 
<?php
require_once("mesFonctions.php5");
require_once("cnx.php5");
session_start();
$_SESSION['choix']=$_POST['choix'];
$_SESSION['cp']=$_POST["cp"];
$_SESSION['long'] = $_POST['long'];
$_SESSION['lat'] = $_POST['lat'];
$_SESSION['nomVille'] = $_POST['ville'];
 
$_SESSION['i'];
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 TRANSITIONAL//EN">
<html>
 
	<head>
		<title>module de calcul d'occupation des frequences</title>
	</head>
	<body>
	<form name="cp" method="post" action="traitementChoix.php5"> <label for="cp"> 
	<?php if(isset($ErrorMessage)&&($ErrorMessage == "cp")){echo "Code postal de format incorrect : un nombre à cinq chiffres est requis";}elseif(isset($ErrorMessage)&&($ErrorMessage == "cpInexistant")){echo"Le code postal entré n'existe pas";} else{echo"Code Postal de la commune";} ?>      
	</label> <input type="text" name="cp" id="cp">  <input type="submit" value="Chercher le code postal"/></form><br /><br /><br />
 
	<form name="ville" method="post" action="traitementVille.php5"><label for="ville">   
	<?php if(isset($ErrorMessage)&&($ErrorMessage == "ville")){echo "Ville de format incorrect : les caractères autres que alphabétiques accentués où non, espaces, apostrophes, traits d'union sont interdits";}else{echo"Nom de la commune";} ?> 
	</label><input type="text" name="ville" id="ville">  <input type="submit" value="Chercher la ville"/></form><br /><br /><br />
 
	<form name="longLat" method="post" action="traitementLongLat.php5"><label for="latitude">
	<?php if(isset($ErrorMessage)&&($ErrorMessage == "Latitude")){echo "latitude de format incorrect : une latitude est de type nombre à virgule";}else{echo"Latitude";} ?>
</label><input type="text" name="latitude" id="latitude"><label for="longitude">
<?php if(isset($ErrorMessage)&&($ErrorMessage == "Longitude")){echo "latitude de format incorrect : une latitude est de type nombre à virgule";}else{echo"Longitude";} ?></label><input type="text" name="longitude" id="longitude">  <input type="submit" value="Chercher les coordonnées"/></form><br /><br /><br />
 
<?php 
if(isset($_SESSION['choix']))
{if (controleChoix())
	{$_SESSION['long']=$_SESSION['lesNupletCorrespondant'][$_SESSION['choix']]->longitude;$_SESSION['lat']=$_SESSION['lesNupletCorrespondant'][$_SESSION['choix']]->latitude;echo("on peut traiter la longitude et la latitude de ".$_SESSION['lesNupletCorrespondant'][$_SESSION['choix']]->nomMaj);
 
 
 
	 }
 
else{echo("mauvais choix, veuillez choisir un entier entre 0 et ".$_SESSION['lesNupletCorrespondant'][$_SESSION['choix']]);}}
	elseif(isset($_SESSION['cp'])){traitementCP();afficheTableau();if(controleRempli()){afficheFormulaireChoixCP();}}
	elseif(isset($_SESSION['nomVille'])){traitementVille();}
	elseif(isset($_SESSION['lat']) && isset($_SESSION['long'])){traitementLongLat();}
?>
	</body>
</html>

le fichier nUpletVille.php5
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
<?php
require_once("villeGeoloc.php5");
class nUpletVille
{
		public $nomMin;
		public $nomMaj;
		public $codePostal;
		public $INSEE;
		public $region;
		public $longitude;
		public $latitude;
		public $eloignement;
 
                //Constructeur de l'objet
                public function __construct()
                {}
 
                //Destructeur de l'objet
                public function __destruct()
                {}
 
		public function nUpletVille($nomMin,$nomMaj,$codePostal,$INSEE,$region,$longitude,$latitude,$eloignement)
		{
			$this->nomMin = $nomMin;
			$this->nomMaj = $nomMaj;
			$this->codePostal = $codePostal;
			$this->INSEE = $INSEE;
			$this->region = $region;
			$this->longitude = $longitude;
			$this->latitude = $latitude;
			$this->eloignement = $eloignement;
		}
 
		public function convertNupletToGeo($v)
		{
			$this->nomMaj = $v->nomVille;
			$this->longitude = $v->longVille;
			$this->latitude = $v->latVille;
		}
}
 ?>
merci de m'éclairer ^^
mnem0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 15h55   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 16h05   #8
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 91
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 91
Points : 17
Points : 17
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 :
1
2
3
4
5
 
require_once("nUpletVille.php5");
session_start();
require_once("cnx.php5");
require_once("mesFonctions.php5");
pourtant le probleme persiste :/
y'a des courageux/ses dans la salle ?
mnem0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 16h12   #9
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
1
2
3
if (!isset($_SESSION['lesNupletCorrespondant'])) {
    $_SESSION['lesNupletCorrespondant'] = array();
}
Et un test similaire pour la variable "vide" (mais ayant un tableau vous pourriez vous en passer).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 16h13   #10
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
Trouvé !! La :
Code :
$n = new nUpletVille($row["NomMin"],$row["NomMaj"],$row["CodePostal"],$row["INSEE"],$row["Region"],$row["Longitude"],$row["Latitude"],$row["Eloignement"]);
Lorsque tu fais ceci tu demande à construire un objet avec tous ces paramètre, hors lors de la construction d'un objet la fonction appellée est __construct et non ta fonction ayant le même nom que ta classe. Contrairement au Java ou C++, les constructeur ne sont pas les fonction ayant le même nom que la classe en PHP mais la fonction __construct(), donc copie tes arguments et ton code de la fonction nUpletVille dans la fonction __construct() et tu peut supprimer cette fonction qui plus est cela initialisera bien tous tes attribut dans le constructeur, conforme à une bonne POO.

Code :
1
2
3
4
5
6
7
8
9
10
11
public function __construct($nomMin,$nomMaj,$codePostal,$INSEE,$region,$longitude,$latitude,$eloignement)
{
	$this->nomMin = $nomMin;
	$this->nomMaj = $nomMaj;
	$this->codePostal = $codePostal;
	$this->INSEE = $INSEE;
	$this->region = $region;
	$this->longitude = $longitude;
	$this->latitude = $latitude;
	$this->eloignement = $eloignement;
}
Devrait mieux fonctionner
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 16h30   #11
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 91
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 91
Points : 17
Points : 17
Merci à vous,

il va rester des erreurs, déjà le constructeur remplit son role, 'vide' repasse a false, le tableau nUpletCorrespondant se remplit ^^
mnem0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 16h35   #12
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
D'après ton code tu as oublier d'indiquer les paramètres dans le constructeur regarde le miens un peu plus haut et le tiens ^^, il te manquerai pas quelque chose dans les parenthèses de ta fonction ? :p
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 16h36   #13
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 91
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 91
Points : 17
Points : 17
j'avais déjà corrigé, t'as résolu le 1er problème, un grand merci ^^
mnem0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 16h37   #14
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
Il y a encore quelque chose qui cloche ? :o (1er prob )
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 16h45   #15
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 91
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 91
Points : 17
Points : 17
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 ^^.
mnem0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 16h53   #16
Futur Membre du Club
 
Inscription : novembre 2006
Messages : 91
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 91
Points : 17
Points : 17
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()
mnem0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h28.


 
 
 
 
Partenaires

Hébergement Web