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 : requête SQL afficher le résultat [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut POO : requête SQL afficher le résultat
    Bonjour bonjour
    Alors voila j'ai un fichier appelé technicien.class.php qui contient la class technicien qui se connecte a la BDD par l'inclusion du fichier connexion BDD et qui va chercher les noms des tech dans la tables techniciens, les enregistre sous forme d'objet et me les affiche voici le 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
    <?php 
    class technicien {
     
     protected $connexion ;
     protected $technicien ; 
     protected $resultats ;
     
    	public function __construct(){		
    	require_once "connexionBDD.class.php";
    	}
     
    	public function getList()
    	{
    		$connexion = new connexionBDD() ;
    		$resultats=$this->connexion->query("SELECT Nom FROM technicien"); // on va chercher tous les tech de la table 
    		$resultats->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
    		while( $ligne = $resultats->fetch() ) // on récupère la liste des tech
    		{
    			echo $ligne->technicien.'<br />'; // on affiche les tech
    		}
    		$resultats->closeCursor(); // on ferme le curseur des résultats
    	}
     
    }
     
    ?>
    Le message d'erreur suivant me pose problème :
    Fatal error: Call to a member function query() on a non-object in C:\wamp\www\lcesa2\technicien.class.php on line 15
    Voici la ligne 15 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultats=$this->connexion->query("SELECT Nom FROM technicien"); // on va chercher tous les tech de la table
    Est ce que quelqu'un aurait rencontré le même problème ?
    Merci de votre atttention et de votre aide les amis

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Tu crées la classe connexionBDD dans la variable $connexion, pas dans la propriété de ta classe qui va bien. Donc forcément, ça bugge.

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Tu confonds $connexion et $connexion !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    class Gwen{
    	protected $connexion = 'foo';
     
    	public function getConn(){
    		$connexion = 'bar';
    		echo $connexion;
    		echo '<br />';
    		echo $this->connexion;
    	}
    }
    $gwen = new Gwen();
    $gwen->getConn();
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Coucou (j'adore ton image )

    Pas compris ? Je dois le creer a partir de quoi d'autre mon objet pour me connecter a par dans la classe ou il y la connexion ?

  5. #5
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Coucou Bovino !! Merci de ta reponse mais ej t'avoue que pour ma petite tete $connexion et $connexion sont identiques lol
    Je ne comprend pas ton exemple ^^

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Exécute le code, tu devrais comprendre...

    EDIT
    Ah zut... j'avais pas fait gaffe au double sens... c'était pas voulu, désolé...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Le code affiche les mots:
    bar
    foo

    $connexion est initialisé comme étant égal a foo , dans ta fonction getConn() tu lui affectes la valeur bar.

    Ensuite tu fais donc tu appel $connexion mais pas celui de la fonction celui que tu as initialisé au depart, et ensuite tu instancies l'objet $gwen a la classe Gwen et tu appel la fonction getConn() ce qui permet l'affichage de bar c'est tout juste prof ou j'ai dis une betise ?

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Non, ce n'est pas ça du tout.

    Je déclare d'abord une propriété de la classe en lui affectant la valeur foo.
    Ensuite, dans la méthode getConn(), je déclare une variable, donc spécifique à cette fonction et qui n'a donc rien à voir avec la propriété de la classe et ce malgré le nom identique.
    Ensuite, je vérifie qu'il s'agit bien de deux valeurs différentes en affichant l'une, puis l'autre.
    Donc transpose ça à ton code, et tu comprendras la réponse de Bisûnûrs.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  9. #9
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    $connexion et $this->connexion sont deux variables différentes. La première est une variable qui reste dans le scope de ta méthode. La seconde est une propriété de ta classe. En affectant une valeur à la première, ça ne modifie pas la seconde.

  10. #10
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Mdr ok bon j'aurais essayé ^^

    Mais quelle est ta ligne de code dans ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    class Gwen{
    	protected $connexion = 'foo';
     
    	public function getConn(){
    		$connexion = 'bar';
    		echo $connexion;
    		echo '<br />';
    		echo $this->connexion;
    	}
    }
    $gwen = new Gwen();
    $gwen->getConn();
    ?>
    Qui te permet d'afficher foo ?
    bar tu l'affiches quant tu appel la fonction non ?

  11. #11
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Ok bisûnurs donc ces lignes sont justes ou pas ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $connexion = new connexionBDD() ;
    $resultats=$connexion->query("SELECT Nom FROM technicien"); // on va chercher tous les tech de la table

    Je pense avoir compris , ça : echo $this->connexion; affiche foo et ça : $gwen->getConn(); affiche bar c'est ça ?
    Ce sont deux choses différentes malgré qu'ils portent le même nom, un est un attribut de la classe et l'autre fais partie de la fonction c'est ça ou me trompe encore ?

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    L'affichage se fait dans l'ordre du 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
    <?php
    class Gwen{
    	protected $connexion = 'foo';
     
    	public function getConnexion(){
    		$connexion = 'bar';
    		echo $connexion;  // bar
    		echo '<br />';
    		echo $this->connexion;  // foo
    	}
    }
    $gwen = new Gwen();
    $gwen->getConnexion();
    ?>
    Ca va mieux comme ça ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  13. #13
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Citation Envoyé par gwendoline-bricout Voir le message
    Ok bisûnurs donc ces lignes sont justes ou pas ?
    Ces lignes fonctionnent sans erreur, oui. Maintenant si tu gardes ces lignes dans ta méthode, tu ne pourras pas réutiliser ta connexion, vu que tu la mets dans la variable $connexion limitée à cette méthode.

  14. #14
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Oui oui j'avais mal compris que en faite le fait de faire : $connexion = 'bar'; dans la fonction, ne modifiait pas la valeur de l'attribut $connexion.
    Donc du coup je dois faire ce code la ? :
    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
    <?php 
    class technicien {
     
    	public function __construct(){		
    	require_once "connexionBDD.class.php";
    	$connexion = new connexionBDD() ;
    	}
     
    	public function getList()
    	{
     
    		$resultats=$connexion->query("SELECT Nom FROM technicien"); // on va chercher tous les tech de la table 
    		$resultats->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
    		while( $ligne = $resultats->fetch() ) // on récupère la liste des tech
    		{
    			echo $ligne->technicien.'<br />'; // on affiche les tech
    		}
    		$resultats->closeCursor(); // on ferme le curseur des résultats
    	}
     
    }
     
    ?>
    --------
    Ce code génère deux erreurs :
    Notice: Undefined variable: connexion in C:\wamp\www\lcesa2\technicien.class.php on line 12
    Fatal error: Call to a member function query() on a non-object in C:\wamp\www\lcesa2\technicien.class.php on line 12
    ----

    Ce code la :
    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
    <?php 
    class technicien {
     
    	public function __construct(){		
    	require_once "connexionBDD.class.php";
    	}
     
    	public function getList()
    	{
    		$connexion = new connexionBDD() ;
    		$resultats=$connexion->query("SELECT Nom FROM technicien"); // on va chercher tous les tech de la table 
    		$resultats->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
    		while( $ligne = $resultats->fetch() ) // on récupère la liste des tech
    		{
    			echo $ligne->technicien.'<br />'; // on affiche les tech
    		}
    		$resultats->closeCursor(); // on ferme le curseur des résultats
    	}
     
    }
     
    ?>
    Génère cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Fatal error: Call to undefined method connexionBDD::query() in C:\wamp\www\lcesa2\technicien.class.php on line 11
    Donc ça veut dire qu'il y a une éthode donc une fonction, ici query() qui n'est pas définit c'est ça ?

  15. #15
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    Donc ça veut dire qu'il y a une éthode donc une fonction, ici query() qui n'est pas définit c'est ça ?
    exact

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	public function __construct(){		
    	require_once "connexionBDD.class.php";
    	$connexion = new connexionBDD() ;
    	}
    on ne peut pas inclure la définition d'une classe dans un constructeur.Pour inclure le fichier de ta classe connexionBDD.class.php dans le fichier technicien il faut l'inclure hors de la classe:
    Code php : 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
     
    <?php
    require_once "connexionBDD.class.php";
     
    class technicien {
     
    	public function __construct(){		
     
    	}
     
    	public function getList()
    	{
    		$connexion = new connexionBDD() ;
    		$resultats=$connexion->query("SELECT Nom FROM technicien"); // on va chercher tous les tech de la table 
    		$resultats->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
    		while( $ligne = $resultats->fetch() ) // on récupère la liste des tech
    		{
    			echo $ligne->technicien.'<br />'; // on affiche les tech
    		}
    		$resultats->closeCursor(); // on ferme le curseur des résultats
    	}
     
    }
     
     
    ?>

    pour rappel(cf.conventions php), le nom d'une classe commence par une lettre majuscule.

  16. #16
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Citation Envoyé par gwendoline-bricout Voir le message
    Ce code génère deux erreurs :
    C'est parce que la variable $connexion du constructeur n'est pas disponible dans la méthode getList(). Renseigne-toi sur la portée des variables.

    Citation Envoyé par gwendoline-bricout Voir le message
    Donc ça veut dire qu'il y a une éthode donc une fonction, ici query() qui n'est pas définit c'est ça ?
    Voilà, ta classe connexionBDD n'a pas de méthode query().

    Citation Envoyé par armel18 Voir le message
    on ne peut pas inclure la définition d'une classe dans un constructeur.
    Si on peut. Ca ne fait pas partie des bonnes pratiques, mais c'est possible.

  17. #17
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Bonjour armel, merci de ta réponse =)
    J'ai rectifié cette erreur mais j'avoue être complétement bloqué avec query ..
    Quelqu'un aurait une piste ?
    J'ai beau cherché sur le net pas moyen de trouver quelque chose de potable

    --------
    Je pense avoir compris quelque chose, je dois créer une fonction query et lui dire d’exécuter la requête c'est ça ?

    Je ne comprend pas parce que dans tous les exemples que je vois sur le net sur le forum sur les tutos bref partout ils utilisent query() normalement je ne vois pas de function query() avec des choses dedans et après il l'appel .. Ça me rend dingue ^^

  18. #18
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Alors j'ai essayé ceci :
    connexionBDD.class.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
    <?PHP
     
    class connexionBDD {
     
    	protected $_hote='localhost'; // le chemin vers le serveur      
    	protected $_nom_bd='lcesa'; // le nom de votre base de données
    	protected $_utilisateur='root'; // nom d'utilisateur pour se connecter
    	protected $_mot_passe='lcesa'; // mot de passe de l'utilisateur pour se connecter
     
      public function __construct () 
      {
    	try
    	{
            $connexion = new PDO('mysql:host='.$this->_hote.';dbname='.$this->_nom_bd, $this->_utilisateur, $this->_mot_passe);
    	}	
     
    	catch(PDOException $e)
    	{
            echo 'Une erreur est survenue !';
            die();
    	}
      }
     
      function deconnexion () 
      {
        $connexion = null; 
      }   
     
      function query($sql) 
      {
    	$res = new connexionBDD();
        $res=$this->connexion->query($sql); 
      }   
     
    }
    ?>
    technicien.class.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
    <?php 
    require_once "connexionBDD.class.php";
     
    class technicien {
    protected $resultats;
     
    	public function __construct(){		
     
    		$connexion = new connexionBDD() ;
    		$this->resultats=$connexion->query("SELECT Nom FROM technicien"); // on va chercher tous les tech de la table 
    	}
     
    	public function getList()
    	{
    		while( $ligne = $this->resultats->fetch(PDO::FETCH_OBJ) ) // on récupère la liste des tech
    		{
    			echo $ligne->technicien.'<br />'; // on affiche les tech
    		}
    		$this->resultats->closeCursor(); // on ferme le curseur des résultats
    	}
     
    }
     
    ?>
    Voici les messages d'erreur :
    Notice: Undefined property: connexionBDD::$connexion in C:\wamp\www\lcesa2\connexionBDD.class.php on line 32
    Donc ici il me dit que connexion n'est pas declaré, je veux réutiliser le $connexion de mon try

    Et celle ci :
    Fatal error: Call to a member function query() on a non-object in C:\wamp\www\lcesa2\connexionBDD.class.php on line 32
    Celle ci dit que je n'utilise pas un objet avec query c'est ca ?

  19. #19
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    D'accord... donc tu n'as rien compris à ce qu'on t'a dit jusque là...

    Une variable dans une fonction a une portée limitée à cette fonction : quand la fonction a fini son exécution, la variable est détruite. Donc dans ton cas, $connexion n'existe que dans la méthode __construct().
    Une variable de classe est disponible dans toute la classe (pour ce qui est en dehors, voir la notion de visibilité). Mais pour y accéder depuis une méthode, il faut que tu indiques que tu veux parler de la propriété de la classe et non d'une variable, d'où l'utilisation de $this->propriete...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  20. #20
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Si si j'ai bien compris ça :O
    Justement je sais que je peux pas réutiliser $connexion du moins celui présent dans le try c'est pour ça que je râle :p !

    Mais je peux pas faire ça :
    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
     
    class connexionBDD {
     
    	protected $_hote='localhost'; // le chemin vers le serveur      
    	protected $_nom_bd='lcesa'; // le nom de votre base de données
    	protected $_utilisateur='root'; // nom d'utilisateur pour se connecter
    	protected $_mot_passe='lcesa'; // mot de passe de l'utilisateur pour se connecter
    	protected $connexion = new PDO('mysql:host='.$this->_hote.';dbname='.$this->_nom_bd, $this->_utilisateur, $this->_mot_passe);
     
      public function __construct () 
      {
    	try
    	{
     
    	}	
     
    	catch(PDOException $e)
    	{
            echo 'Une erreur est survenue !';
            die();
    	}
      }
     
      function deconnexion () 
      {
        $connexion = null; 
      }   
     
      function query($sql) 
      {
    	$res = new connexionBDD();
        $res=$this->connexion->PDOquery($sql); 
      }   
     
    }
    ?>
    Du coup je ne sais comment faire pour faire cette fonction Query vu que j'ai besoin de cette $connexion sinon est ce que ceci serait correct ? :
    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
     
    class connexionBDD {
     
    	protected $_hote='localhost'; // le chemin vers le serveur      
    	protected $_nom_bd='lcesa'; // le nom de votre base de données
    	protected $_utilisateur='root'; // nom d'utilisateur pour se connecter
    	protected $_mot_passe='lcesa'; // mot de passe de l'utilisateur pour se connecter
     
      public function __construct () 
      {
    	try
    	{
            $connexion = new PDO('mysql:host='.$this->_hote.';dbname='.$this->_nom_bd, $this->_utilisateur, $this->_mot_passe);
    	}	
     
    	catch(PDOException $e)
    	{
            echo 'Une erreur est survenue !';
            die();
    	}
      }
     
      function deconnexion () 
      {
        $connexion = null; 
      }   
     
      function query($sql) 
      {
    	$connexion = new PDO('mysql:host='.$this->_hote.';dbname='.$this->_nom_bd, $this->_utilisateur, $this->_mot_passe);
    	$res = new connexionBDD();
        $res=$connexion->query($sql); 
      }   
     
    }
    ?>
    ou ceci :
    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
    <?PHP
     
    class connexionBDD {
     
    	protected $_hote='localhost'; // le chemin vers le serveur      
    	protected $_nom_bd='lcesa'; // le nom de votre base de données
    	protected $_utilisateur='root'; // nom d'utilisateur pour se connecter
    	protected $_mot_passe='lcesa'; // mot de passe de l'utilisateur pour se connecter
    	protected $connexion ;
     
      public function __construct () 
      {
    	try
    	{
            $this->connexion = new PDO('mysql:host='.$this->_hote.';dbname='.$this->_nom_bd, $this->_utilisateur, $this->_mot_passe);
    	}	
     
    	catch(PDOException $e)
    	{
            echo 'Une erreur est survenue !';
            die();
    	}
      }
     
      function deconnexion () 
      {
        $this->connexion = null; 
      }   
     
      function query($sql) 
      {
    	//$connexion = new PDO('mysql:host='.$this->_hote.';dbname='.$this->_nom_bd, $this->_utilisateur, $this->_mot_passe);
    	$res = new connexionBDD();
        $res=$this->connexion->query($sql); 
      }   
     
    }
    ?>

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Requête SQL : afficher résultat même si champ vide
    Par nlbmoi dans le forum Langage SQL
    Réponses: 6
    Dernier message: 05/09/2014, 15h05
  2. [SQL] Afficher le résultat d'une requête
    Par herve911 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/01/2008, 08h58
  3. [SQL] Afficher les résultats d'une requête sur plusieurs pages
    Par mealtone dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/09/2006, 13h20
  4. Réponses: 5
    Dernier message: 14/06/2006, 15h19
  5. Réponses: 3
    Dernier message: 11/01/2006, 18h35

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