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

PHP & Base de données Discussion :

PHP [POO] Problem de class


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 1
    Par défaut PHP [POO] Problem de class
    Bonjour a tous

    A l'heure actuelle j'ai refait mes class, mais il y a un problème, j'essaye d'afficher le résultat de ma requête dans l'index.php mais j'ai une page blanche qui s'affiche.
    Quelqu'un pourrait m'aider svp?

    Connexion.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
     
    <?php
    class Connexion {
        private $tabConnexion;
        private $link;
        public function __construct ($serveur, $login, $mdp, $database){
            $this->tabConnexion=array("serveur"=>$serveur,"login"=>$login,"mdp"=>$mdp,"bdd"=>$database);
            $this->link=mysql_connect($this->tabConnexion['serveur'],$this->tabConnexion['login'],$this->tabConnexion['mdp']);
            mysql_select_db($this->tabConnexion['bdd']);
            if (!$this->link){
                throw new exception ('Impossible de se connecter à la base de donnée');
            }
        }
        public function Deconnecter(){
            $test=mysql_close($this->link);
            if (!$test){
                echo "Deco impossible";
            }
        }
    }
    ?>
    Index1.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    include ("./connexion.class.php" );
    include ("./config.php" );
    include ("./verification.class.php" );
    $connexion=new Connexion($serveur,$login,$mdp,$database);
    $dee=new verification();
    $dee->execRequete("SELECT* FROM tbl_user" );
    $connexion->Deconnecter();
    ?>
    Verification.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
     
    <?php
    class verification {
        private $loginDb;
        private $passDb;
        public function execRequete($query){
            $result=mysql_query($query);
            while ($row=mysql_fetch_object($result));
            $this->passDb=$row->login;
            echo $this->passDb;
        }
    }
    ?>
    Config.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $login='root';
    $mdp='';
    $serveur='localhost';
    $database='telesurveillance';
    ?>
    PS: J'ai vérifier avec un var_dump a l'intérieur de la class verification tout marche, mais dans l'index j'ai rien.
    Merci

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    je comprends pas bien ce que tu veux faire la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($row=mysql_fetch_object($result));
            $this->passDb=$row->login;
            echo $this->passDb;
    soit tu fais une boucle soit tu prends le resultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($row=mysql_fetch_object($result)){
            $this->passDb=$row->login;
            echo $this->passDb;
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $row=mysql_fetch_object($result);
            $this->passDb=$row->login;
            echo $this->passDb;
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par deep21
    Config.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $login='root';
    $mdp='';
    $serveur='localhost';
    $database='telesurveillance';
    ?>
    PS: J'ai vérifier avec un var_dump a l'intérieur de la class verification tout marche, mais dans l'index j'ai rien.
    Pourquoi ne pas mettre ces infos directement dans la classe ?
    Exemple :
    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
     
    class Connexion {
    	protected $host = 'localhost'; // nom du serveur
    	protected $user = 'root'; //
    	protected $mdp = ''; // Mot de passe
    	protected $bdd = 'la_bdd';
     
    	public function __construct() {
    		$this->link = mysql_connect($this->host, $this->user, $this->mdp);
    		mysql_select_db($this->bdd, $this->link);
    	}
    }
     
    // Dans index
    $connexion=new Connexion();
    Si tu veux quand même avoir un fichier config, alors utilise des constantes, car par définition il sera impossible de les redéfinir, de plus les constante ont une portées globales, elles seront donc accessible dans la classe.

    Config .php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    define('DB_HOST', 'localhost');
    define('DB_USER', 'root');
    define('DB_MDP', '');
    define('DB_NAME', 'la_db');
    ?>
    Classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Connexion {
    	public function __construct() {
    		$this->link = mysql_connect(DB_HOST, DB_USER, DB_MDP);
    		mysql_select_db(DB_NAME, $this->link);
    	}
    }
    /!\ Attention à bien mettre le $link dans toutes les fonctions de mysql_* réclamant cet ID de connexion dans ta classe, sinon il y a un risque d'avoir des comportement étranges (perte de l'ID de connexion).
    Ici je l'ai rajouté dans le mysql_select_db()


    Ensuite, tu as une autre classe "Vérification", mais elle ne connait pas $connexion, il y a donc un problème de portée (visibilité, accessibilité) sur cette variable.
    Le plus simple c'est de la déclarer en global dans cette classe.
    Il est inutile alors de re-déclarer
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Verification {
    	global $connexion;
     
    	... code etc ...
    }
    Mais c'est pas tout car, si tu lance la fonction mysql_query(requête, link) en dehors de la classe Connexion, l'ID de connexion risque fort d'être perdu.
    L'idéal serait de créer une méthode équivalante à mysql_query dans la classe connexion, une méthode genre query($query).
    Idem avec toutes les fonctions de mysql_* réclamant cet ID et dont tu aura l'usage.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Connexion {
    	protected $link;
     
    	public function __construct() {
    		... bla bla bla ...
    	}
     
    	public function query($query) {
    		return mysql_query($query, $this->link); // On conserve le même ID de connexion
    	}
    }
    Cette classe ne serait donc pas une simple classe de connexion, mais une classe MySQL.




    Si tu as une page blanche alors qu'ici tu devrais avoir au moins 1 erreur, regarde dans ta config du php.ini, il doit être défini que les messages ne devront pas être affichés (dispaly_errors à Off).
    Si tu développe, il vaut mieux les afficher (On), ça aide à comprendre.
    Rajoute aussi des : or die(mysql_error())


    Une question omme ça au pif. Pourquoi ne pas utiliser PDO ?
    qui est, à lire de ce qui se dit, le remplaçant des mysql_* qui sous entend que cette dernière sera obsolète un de ces 4 matins.

Discussions similaires

  1. [POO] Problème de langue avec la classe phpmailer
    Par sansouna24 dans le forum Langage
    Réponses: 10
    Dernier message: 05/01/2012, 16h14
  2. Réponses: 1
    Dernier message: 29/10/2006, 05h04
  3. [POO] Problème avec les classes
    Par peypey dans le forum Langage
    Réponses: 8
    Dernier message: 03/05/2006, 15h05
  4. [POO] faire des classes en php
    Par gromit83 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2006, 16h10
  5. [POO] Problème inclusion dans une classe
    Par LordBob dans le forum Langage
    Réponses: 11
    Dernier message: 22/11/2005, 15h21

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