Initialiser des variables de connexion avec le constructeur

Eléphanteau du PHP | 10 Messages

27 déc. 2005, 19:54

Salut à tous,

J'ai réussi à créer le code suivant qui se connecte à une base, insère un enregistrement et fait un select sur la base.

Je pensai intialiser les variables Host, Password, User dans la partie __construct mais cela n'a pas marché.

Est possible et qu'elle est la syntaxe ?

Merci d'avance

Irunea
<?php
    class  BaseDeDonnees {
	    public $Host = 'localhost';
		public $User = 'root';
		public $Password = '';
		protected $dbO;


		// le constructeur initialise les variables
		public function __construct(){
			echo "construction OK <br>";
		}// fin du constructeur

		// méthode de connection à la base	
		public function doConnect($Base){
		      if(!$this->dbO = new mysqli($this->Host,$this->User,$this->Password,$Base)) {
			  echo  "echec connexion <br>" ;  
			  }
		}// fin de doConnect
		
		// méthode d'exécution d'une requête
		public function doQuery($sql){
             if(!$result = @$this->dbO->query($sql)){
			     echo  "echec execution requete  <br>" ;  
			 }
			 else {
			     return $result;
			 }
		}//fin doQuery
		
		// méthode d'exécustion d'une requête qui renvoi un jeu d'enregistrements SELECT...
		function doArrayQuery($sql){
		     $result = @$this->dbO->query($sql);
			 $R = array();
			 while($data = $result->fetch_assoc()){
			      $R[]  = $data; 
			 }// fin du while
			 return $R;
		}// fin doArrayQuery

}//fin de la classe

$db=new  BaseDeDonnees;
$db->doConnect('test');
print($db->doQuery("INSERT INTO chiffres (x) VALUES (69);"));
echo "<pre>";
print_r($db->doArrayQuery('SELECT * FROM chiffres;'));
?>
[/php]
Modifié en dernier par irunea le 27 déc. 2005, 21:03, modifié 1 fois.
Apprenons à penser par nous-même. Si nous ne le faisons pas, d'autres le ferons pour nous...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

27 déc. 2005, 20:01

Salut,

tu as essayé de passer des paramètres au constructeur et ça n'a pas marché ?
Il faudrait voir ce que tu as essayé.
Parceque comme ceci ça devrait marcher normalement :
class BaseDeDonnees {
	public $Host;
	public $User;
	public $Password;
	protected $dbO;


	// le constructeur initialise les variables
	public function __construct($h, $u, $pwd){
		$this->$Host = $h;
		$this->$User = $u;
		$this->$Password = $pwd;
	}// fin du constructeur 
}

$bdd = new BaseDeDonnees('localhost', 'root', '');
Et au passage si tu peux éditer ton premier message pour que les balises
 soient bien prises en compte ;)

Eléphanteau du PHP | 10 Messages

27 déc. 2005, 21:08

Bonsoir,
Après avoir déclaré mes attributs normalement, je pensait qu'il était bon de leur attribuer une valeur dans le constructeur comme ci-dessous. Mais je n'arrive pas à récupérer les valeurs dans la méthode doConnect.

Vous allez penser que je chipote, mais comme c'est ma première classe, j'aimais la paufiner avant de passer à la suivante.

Irunea
<?php
    class  BaseDeDonnees {
	    public $Host;
		public $User;
		public $Base;
		public $Password;
		public $dbO;


		// le constructeur initialise les variables
		public function __construct(){
		    $Host='localhost';
			$User='root';
			$Base='test';
			$Password='';
			echo "construction OK";
		}// fin du constructeur

		// méthode de connection à la base	
		public function doConnect(){
		      $this->dbO = new mysqli($this->Host,$this->User,$this->Password,$this->Base);		  
		}// fin de doConnect

?>
Apprenons à penser par nous-même. Si nous ne le faisons pas, d'autres le ferons pour nous...

Mammouth du PHP | 1311 Messages

27 déc. 2005, 21:13

a ba non il faut faire comme ceci car avcec ta facon les attributs ne sont pas
utilise
 public function __construct(){
            $this->Host='localhost';
            $this->User='root';
            $this->Base='test';
            $this->Password='';
            echo "construction OK";
        }// fin du constructeur

Eléphanteau du PHP | 10 Messages

27 déc. 2005, 21:14

Salut,

Je ne sais pas si cela se fait mais je te remercie pour ton aide

Irunea
Apprenons à penser par nous-même. Si nous ne le faisons pas, d'autres le ferons pour nous...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

27 déc. 2005, 21:27

Désolé je comprends pas : ça marche ou ça marche pas ? :lol:
a ba non il faut faire comme ceci car avcec ta facon les attributs ne sont pas
utilise
Comment ça les attributs ne sont pas pris en compte ?

J'ai fait comme ça dans une classe Pendu, et ça marchait très bien :
http://www.ouckileou.net/programmes/pendu/voirCode.php

Eléphanteau du PHP | 10 Messages

27 déc. 2005, 21:30

Encore Merci ca marche très bien

Irunea
Apprenons à penser par nous-même. Si nous ne le faisons pas, d'autres le ferons pour nous...

Mammouth du PHP | 1311 Messages

27 déc. 2005, 21:31

heu je suis desolé de ma phrase mais sur le moment j'ai pas sur le dire autrement :oops:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

27 déc. 2005, 21:33

Je ne sais pas si c'était ça que tu demandais pas "je ne sais pas si ça se fait" mais oui l'utilisation du $this est possible, puisque cela correspond à l'instance courante de l'objet.

Donc en faisant comme cela tu va bien accéder à l'attribut de l'instance que tu manipules.

Et je crois même que sans le $this ça ne fonctionne pas, d'où peut-être ton erreur

Tu mets le sujet en [Résolu] alors ? ;)