IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

variables de session, tableau d'objets : accès aux membres


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    merci de ta rapidité.


    avec le nouveau code de nUpletVille.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    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() ).

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ^^

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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).

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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).

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    Trouvé !! La :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    Merci à vous,

    il va rester des erreurs, déjà le constructeur remplit son role, 'vide' repasse a false, le tableau nUpletCorrespondant se remplit ^^

  12. #12
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    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

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    j'avais déjà corrigé, t'as résolu le 1er problème, un grand merci ^^

  14. #14
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    Il y a encore quelque chose qui cloche ? :o (1er prob )

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    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 ^^.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 90
    Points : 47
    Points
    47
    Par défaut
    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()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] Tableau d'objet accès aux méthodes
    Par thierrybatlle dans le forum WinDev
    Réponses: 8
    Dernier message: 28/09/2012, 15h54
  2. [POO] Stockage en variable de session d'un objet
    Par delete dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2009, 17h49
  3. [MySQL] Accés aux membres d'un objet PHP
    Par cyrilskof dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/06/2008, 11h58
  4. variable de session dans un objet
    Par ben53 dans le forum Langage
    Réponses: 4
    Dernier message: 24/01/2007, 17h51
  5. Réponses: 8
    Dernier message: 20/02/2006, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo