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 :

[POO] Une erreur "Notice: Undefined property" à trouver et à corriger


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 77
    Points : 38
    Points
    38
    Par défaut [POO] Une erreur "Notice: Undefined property" à trouver et à corriger
    bonjour
    je me permets de vous écrire car j'ai un pb de code sous php
    j'ai une erreur de "Notice: Undefined property:"
    je sais qu'avant il fonctionné parfaitement.
    Merci de vos aide

    voici mon code

    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
    <?php //script de conenxion a la base
    if( $id = mysql_connect("localhost","root","") ) {
    	if( $id_db = mysql_select_db("exo3") ) {
    		} else {
    		die("Echec de connexion à la base.");
    	}
     
    }
     
    include("classe_exercice3.php"); //oblige le script a aller chercher le script php pour conetinuer
     
    // test avec des paramettreS pres definie pour vérifier l'a pplication.
    	$maison_1 = new maison("115","Paris","100","5","250000","Dupont","non","50");
    	$maison_2 = new maison("116","Nante","100","4","350000","Dupuis","oui","70");
    	$appartement_1 = new appartement("118","Bordeau","50","2","45000","Didier","4éme","oui","F4","1965","1700");
    	$appartement_2 = new appartement("119","Paris","200","8","700000","Dido","1er","non","Duplex","2000","1900");
     
    	$maison_1->insert_m();
    	$maison_1->affichage();
    	echo "<br>";
    	$maison_2->insert_m();
    	$maison_2->affichage();
    	echo "<br>";
    	$appartement_1->affichage();
    	echo "<br>";
    	$appartement_2->affichage();
     
    ?>
    et sa classe :
    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    <?php
    class immobilier //creation de la classe immobilier
    {
    	private $ref;
    	private $localisation;
    	public $superficie_immo;
    	public $nb_piece;
    	public $prix;
    	private $proprietaire;
     
    	function __construct ($ref,$localisation,$superficie_immo,$nb_piece,$prix,$proprietaire) 
    	{
    		$this->ref=$ref;
    		$this->localisation=$localisation;
    		$this->superficie_immo=$superficie_immo;
    		$this->nb_piece=$nb_piece;
    		$this->prix=$prix;
    		$this->proprietaire=$proprietaire;
    	}
     
    	function afficher() //fonction afficher
    	{
    		echo $this->ref ."<br>";
    		echo $this->localisation ."<br>";
    		echo $this->superficie_immo ."<br>";
    		echo $this->nb_piece ."<br>";
    		echo $this->prix ."<br>";
    		echo $this->proprietaire ."<br>";
    	}
    };
    ?>
     
    <?php
    class appartement extends immobilier
    {
    	public $etage;
    	public $ascenseur;
    	public $type_immo;
    	public $date_const;
    	public $charge;
     
    	function __construct($ref,$localisation,$superficie_immo,$nb_piece,$prix,$proprietaire,$etage,$ascenseur,$type_immo,$date_const,$m_charge)
    	{
    		parent::__construct($ref,$localisation,$superficie_immo,$nb_piece,$prix,$proprietaire); //utilisation de parent pour ne pas repeter
    		$this->etage=$etage;
    		$this->ascenseur=$ascenseur;
    		$this->type_immo=$type_immo;
    		$this->date_const=$date_const;
    		$this->charge=$m_charge;		
    	}
     
    	function affichage()
    	{
    		//parent::affichage(); //pb avec la fonction parent erreur de method donc remplacement manuel qui revien de même que parent
    		echo $this->ref ."<br>";
    		echo $this->localisation ."<br>";
    		echo $this->superficie_immo ."m²"."<br>";
    		echo $this->nb_piece ."piéces"."<br>";
    		echo $this->prix ."euros"."<br>";
    		echo $this->proprietaire ."<br>";
    		echo $this->etage ."étage"."<br>";
    		echo $this->ascenseur ."<br>";
    		echo $this->type_immo ."<br>";
    		echo $this->date_const ."<br>";
    		echo $this->charge ."euro"."<br>";
    	}
    	function insert_m ()
    	{
    	mysql_query("INSERT INTO maison (ref,localisation,superficie_immo,nb_piece,prix,proprietaire,jardin,supperficie_terrain) 
    	values (ref,localisation,superficie_immo,nb_piece,prix,proprietaire,etage,ascenseur,type_immo,date_cost,charge)");
    	}
    };
    ?>
     
    <?php
    class maison extends immobilier
    {
    	public $jardin;
    	public $supperficie_totale;
     
    	function __construct($ref,$localisation,$superficie_immo,$nb_piece,$prix,$proprietaire,$jardin,$supperficie_terrain)
    	{
    		parent::__construct($ref,$localisation,$superficie_immo,$nb_piece,$prix,$proprietaire);
    		$this->jardin=$jardin;
    		$this->supperficie_totale=$supperficie_terrain+$superficie_immo;
    	}
     
    	function affichage()
    	{
    		//parent::affichage();
    		echo $this->ref ."<br>";
    		echo $this->localisation ."<br>";
    		echo $this->superficie_immo ."m²"."<br>";
    		echo $this->nb_piece ."piéce"."<br>";
    		echo $this->prix ."euros"."<br>";
    		echo $this->proprietaire ."<br>";
    		echo $this->jardin ."<br>";
    		echo $this->supperficie_totale ."m²"."<br>";
    	}
    	function insert_m ()
    	{
    	mysql_query("INSERT INTO maison (ref,localisation,superficie_immo,nb_piece,prix,proprietaire,jardin,supperficie_terrain) 
    	values (ref,localisation,superficie_immo,nb_piece,prix,proprietaire,jardin,supperficie_terrain)");
    	}
    };
    ?>
    et le code de ma base sql

    Code SQL : 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
    -- phpMyAdmin SQL Dump
    -- version 2.9.1.1
    -- http://www.phpmyadmin.net
    -- 
    -- Serveur: localhost
    -- Généré le : Vendredi 29 Juin 2007 à 10:07
    -- Version du serveur: 5.0.27
    -- Version de PHP: 5.2.0
    -- 
    -- Base de données: `exo3`
    -- 
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `appartement`
    -- 
     
    CREATE TABLE `appartement` (
      `etage` int(11) NOT NULL default '0',
      `ascenseur` text NOT NULL,
      `type_immo` text NOT NULL,
      `date_const` text NOT NULL,
      `charge` varchar(5) NOT NULL default ''
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    -- 
    -- Contenu de la table `appartement`
    -- 
     
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `immobilier`
    -- 
     
    CREATE TABLE `immobilier` (
      `ref` varchar(5) NOT NULL default '0',
      `localisation` text NOT NULL,
      `superficie_immo` int(5) NOT NULL default '0',
      `nb_piece` int(5) NOT NULL default '0',
      `prix` varchar(5) NOT NULL default '',
      `proprietaire` text NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    -- 
    -- Contenu de la table `immobilier`
    -- 
     
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `maison`
    -- 
     
    CREATE TABLE `maison` (
      `jardin` text NOT NULL,
      `supperficie_totale` int(11) NOT NULL default '0'
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    -- 
    -- Contenu de la table `maison`
    --

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Il nous faut plus d'infos sur le message d'erreur, tu ne dis pas quelle est la propriété indéfinie!

    ensuite ta requete est étrange, on dirait que tu n'inseres pas dans la base de données les valeurs contenues dans ta classe je comprends pas ce que fais ton insert_m()

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 77
    Points : 38
    Points
    38
    Par défaut
    les message déerreur sont "Notice: Undefined property:" il s'applique sur les private.
    insert_m() me permet de mettre dans la base de donnée les informations.
    dans mon code les champs suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $maison_1 = new maison("115","Paris","100","5","250000","Dupont","non","50");
    	$maison_2 = new maison("116","Nante","100","4","350000","Dupuis","oui","70");
    	$appartement_1 = new appartement("118","Bordeau","50","2","45000","Didier","4éme","oui","F4","1965","1700");
    	$appartement_2 = new appartement("119","Paris","200","8","700000","Dido","1er","non","Duplex","2000","1900");

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bonjour

    La POO en php n'est pas ce que je maitrise le mieux, mais je crois Koopajah a raison en ce qui concerne ton insert_m()
    Moi j'écrirais ça de cette façon :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function insert_m ()
    {
      $insert="INSERT INTO maison (ref, localisation, superficie_immo, nb_piece, prix, proprietaire, jardin, supperficie_terrain) 
    	values ('".$this->ref."', '"$this->localisation."','".$this->superficie_immo."', '".$thi->nb_piece."', '".$this->prix."', '".$this->proprietaire."', '".$this->jardin."', '".$this->supperficie_terrain."')";
      mysql_query($insert) or die ('Erreur SQL dans '.$insert.' : '.mysql_error());
    }
    sans oublier le mysql_error pour le cas où...

    EDIT : et en plus jerome a raison, la structure de la table maison ne correspond pas !

    En ce concerne tes attributs, je crois que tu mélanges avec le java :
    La déclaration d'un attribut au sein d'une classe se fait par l'utilisation du mot clé var suivi du nom de l'attribut.
    Exemple :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class myclass {
        var $myvar;
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Bonjour

    Apparemment tes requetes sql sont bizzares, es tu sur de la structure de la table maison par exemple car tu fais un

    INSERT INTO maison (ref,localisation.....

    et la table maison ne contient pas de colonne 'ref'.

    essaye a lourdes on ne sait jamais

  6. #6
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Citation Envoyé par Celira
    En ce concerne tes attributs, je crois que tu mélanges avec le java
    Ca dépend de la version php... Dans la version 4 les propriété sont déclaré par var effectivement.

    Mais dans la version 5 il faut bien utiliser public/private/protected et non plus var (même si var marche encore).
    Such is the situation in our Fallen Galaxy

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 77
    Points : 38
    Points
    38
    Par défaut
    merci de votre aide cala fonctionne bien.

    par contre j'ai un autre problème.
    il semble que sur la base mysql les donnee des valeure qui sont sous condition private ne s'ajoute pas.
    que faire ?
    Merci

  8. #8
    Membre averti Avatar de Asmodean
    Profil pro
    Inscrit en
    Février 2006
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 311
    Points : 378
    Points
    378
    Par défaut
    Si une classe B hérite d'une classe A et que cette classe B essaie d'accéder aux propriétés private de la classe A elle ne le peut pas.

    Pour rappel :

    -private : Scope limité à la classe elle même
    -protected : Scope limité à la classe et aux classes qui en héritent
    -public : Pas de limite
    Such is the situation in our Fallen Galaxy

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

Discussions similaires

  1. Erreur php : "Notice: Undefined offset: 1"
    Par bobette16 dans le forum Langage
    Réponses: 3
    Dernier message: 08/04/2013, 09h44
  2. Réponses: 2
    Dernier message: 13/01/2010, 19h48
  3. Réponses: 2
    Dernier message: 22/01/2009, 16h29

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