[POO]Classes PHP et connexion MySQL

Résolu/Fermé
ViDikk Messages postés 69 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 24 février 2017 - Modifié par ViDikk le 23/03/2011 à 10:06
Aktayen Messages postés 189 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 17 décembre 2015 - 23 mars 2011 à 11:07
Bonjour,

Je suis en face d'un petit soucis de compréhension.
Je suis en train d'intégrer de l'objet (je débute avec ce type de prog) dans un site réalisé en procédural (ou évènementiel pour certains). Ma première classe concerne la gestions des utilisateurs. Tout fonctionne, mais un truc me titille.
Voici mon constructeur :

 public function __construct($id = false){ 
  // Récupération de l'user dans la BDD 
  $this->connexion = new mysqli('localhost', 'root', 'password', 'ma_base'); 
  if($id){ $this->SelectionUtilisateur($id); } 
 } 


Vous remarquez que je me connecte à la BDD pour ensuite faire mes requêtes. Ce qui m'inquiète, c'est qu'au moment où je vais créer plusieurs objets et d'autres classes, je vais refaire la même chose lorsque je devrais me connecter à ma BDD... Et cela va générer plusieurs connexion simultanées !

Seulement, je n'arrive pas à visualiser comment avoir une seule connexion pour toutes les classes, afin qu'elles gèrent directement les requêtes...

Merci d'avance pour votre aide !
A voir également:

5 réponses

Aktayen Messages postés 189 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 17 décembre 2015 19
23 mars 2011 à 10:22
Salut,

Si tu utilises ta bdd juste dans le constructeur, tu peux la fermer à la fin de celui-ci.

Perso quand je fais un site, j'inclus toutes mes pages dans une principale et j'ouvre ma connexion au début de celle ci et je la referme à la fin.
2
Aktayen Messages postés 189 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 17 décembre 2015 19
Modifié par Aktayen le 23/03/2011 à 10:45
Pour ma part, j'ai ma page accueil.php
au début j'ouvre ma bdd
$bd-> new Bd();

puis là j'appel mes pages en fonction de l'url
include('...');

Et je ferme ma bdd;
$bd->fermerBd();

si dans mes fonctions ou constructeurs j'ai besoin d'acceder à ma bdd je n'ai plus qu'à faire.

imaginons que je suis dans une page où j'ai besoin de ma classe utilisateur

public class utilisateur {  
    function mafonction(){  
        global $bd; // global signifie que j'utilise la même variable que celle existante (la ca va me chercher celle de ma page principale)  
       $bd->executer....('SELECT ...');  
} 


Et donc là je n'ai créé qu'une seule instance de mon objet bd()..

Donc je pense que ta solution est l'utilisation du critère 'global'.
2
ViDikk Messages postés 69 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 24 février 2017
23 mars 2011 à 10:35
Hello Aktayen,

Tout d'abord merci d'avoir pris le temps de me répondre :).

Ensuite, ma BDD n'est pas seulement utilisée dans mon constructeur, mais dans toute la classe. Par exemple, j'ai une fonction Enregistrer :

// Enregistre le contact dans la BDD
	public function Enregistrer(){
		if(!$this->id){
			$this->connexion->query("INSERT INTO user VALUES ('', 1, '". $this->utilisateur ."', '". $this->motdepasse ."', '". $this->nom ."', '". $this->prenom ."', '". $this->email ."', '". $this->telfixe ."', '". $this->telport ."')");
		}else{
			$this->connexion->query("UPDATE user SET utilisateur='". $this->utilisateur ."', niveau_admin=". $this->niveau .", nom='". $this->nom ."', prenom='". $this->prenom ."', email='". $this->email ."', tel_fixe='". $this->telfixe ."', tel_port='". $this->telport ."' WHERE user_id=". $this->id);
		}
		return $this->connexion->error ? "Echec de l'enregistrement." : "Enregistré !";
	}


De plus, la technique que tu me conseille est déjà mis en place (j'ai un fichier connexion.php qui est inclus à chaque fois). Mais je trouve pas ca super propre non plus, de faire un include de connexion.php dans toutes mes classes...
0
ViDikk Messages postés 69 Date d'inscription jeudi 27 janvier 2011 Statut Membre Dernière intervention 24 février 2017
23 mars 2011 à 11:01
En effet, le "global" est ma solution !

<?
for($i=1; $i<=1000; $i++){
    echo "Merci Aktayen !!";
    echo "<br />";
}
?>

:D
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Aktayen Messages postés 189 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 17 décembre 2015 19
23 mars 2011 à 11:07
Mais de rien,

Marque ton sujet comme résolu ;)
0