Connexion BDD

Fermé
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 24 nov. 2014 à 12:57
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 - 24 nov. 2014 à 23:27
Bonjour,

J'ai ma connexion avec ma BDD, mais je voudrais pouvoir avoir un seul fichier qui me connecte en local et avec une condition qui me connecte également à mon serveur.
Est il possible de faire un truc comme ça ou on ne pas mettre de condition dans une class.
Pouvez vous me donner votre avis ou me dire comment je pourrais m'y prendre.
En vous remerciant
<?php
class Config {
    
    if ($_SERVER['SERVER_ADDR'] == '127.0.0.1') {

        const HOTE      = 'localhost';
        const DBNAME    = 'mon_site';
        const USERNAME  = 'root';
        const PASSWORD  = '';
        
    } else {
    
        const HOTE      ='nom_serveur'; 
        const DBNAME    ='mon_site'; 
        const USERNAME  ='mon_site';
        const PASSWORD  ='mot_passe';
    }
}
?>




A voir également:

3 réponses

jordane45 Messages postés 38160 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 657
Modifié par jordane45 le 24/11/2014 à 13:45
Bonjour,

Perso, j'utilise une fonction

 function whereImI(){

  $maps =array(
  'LOCAL'=>array('localhost','127.0.0.1','0.0.0.1','::0.0.0.0')
  ,'LAN'=>array('mon_ip_serveur','monsite.fr')
  );

  //$return = 'UNKNOWN';
  foreach($maps as $map=>$values){
   foreach($values as $ip){
    $pos = strpos(strtolower($_SERVER['HTTP_HOST']),$ip); 
    if ($pos!==false){
     $return = $map;
    }
   }
  }
  return $return;
 } 


Puis, pour obtenir les variables à utiliser en fonction de là où je me connecte...

$whereImI = whereImI();
switch($whereImI){
 case 'LOCAL':
  $PDO_dbName = "maBdd";
  $PDO_user="root";
  $PDO_passw="";
  $PDO_dsn="mysql:dbname=".$PDO_dbName.";host=localhost";
break;

case 'LAN':
//Identifiants DB (Mysql via PDO) - variables globales
  $PDO_dbName = "maBdd";
  $PDO_user="monUser";
  $PDO_passw="monPwd";
  $PDO_dsn="mysql:dbname=".$PDO_dbName.";host=193.56.241.56";
break;

 }


... bien sûr.. tu peux remplacer les $PDO... par tes définitions de constantes...




Ta solution peut marcher également...
Sauf que tu n'as pas mis, dans ta class de constructeur... et c'est surement ça qui te manque pour l'instant...

Quelque chose du genre devrait pouvoir marcher...
(toutes fois.. il te manque quand même le LocalHost en plus de l'IP ... )

<?php
class Config {
    
function __construct(){

  if ($_SERVER['SERVER_ADDR'] == '127.0.0.1') {
        const HOTE      = 'localhost';
        const DBNAME    = 'mon_site';
        const USERNAME  = 'root';
        const PASSWORD  = '';        
    } else {
        const HOTE      ='nom_serveur'; 
        const DBNAME    ='mon_site'; 
        const USERNAME  ='mon_site';
        const PASSWORD  ='mot_passe';
    }
}


// FIN DE LA CLASS
}



Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
24 nov. 2014 à 17:03
Bonjour
Merci pour ta réponse,je n'arrive pas à faire fonctionner si tu peux encore m'aider.
En fait voilà j'ai 2 fichiers
class Config {
    
    public function __construct() {
    
        if ($_SERVER['SERVER_ADDR'] == '127.0.0.1') {
    
            const HOTE      = 'localhost';
            const DBNAME    = 'mpon_site';
            const USERNAME  = 'root';
            const PASSWORD  = '';
            
        } else {
        
            const HOTE      =**************'; 
            const DBNAME    ='***********'; 
            const USERNAME  =***********';
            const PASSWORD  =**********';
        }
    }
}

class Database extends PDO {

    public function __construct() {

        try {
            parent::__construct('mysql:host=' . Config::HOTE . ';dbname=' . Config::DBNAME, Config::USERNAME, Config::PASSWORD);

            $this->exec("SET CHARACTER SET utf8");
            $this->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

        } catch(Exception $e) {
            echo 'Impossible de se connecter à la base de donnée</br>';
            echo 'Erreur : ' .  $e->getMessage() . '<br />';
            echo 'N° : ' .      $e->getCode();
        }
    }
}
?>

Merci
0
jordane45 Messages postés 38160 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 657
24 nov. 2014 à 17:20
Config::HOTE

????
Si tu veux utiliser HOTE comme une "propriété" de ta class CONFIG .. il faut le déclarer comme tel...

class Config {
    
function __construct(){
 public $_HOTE='',
            $_DBNAME='' ,   
            $_USERNAME='' ,
            $_PASSWORD='';
          
  if ($_SERVER['SERVER_ADDR'] == '127.0.0.1') {
        $this->_HOTE      = 'localhost';
        $this->_DBNAME    = 'mon_site';
        $this->_USERNAME  = 'root';
        $this->_PASSWORD  = '';        
    } else {
         $this->_HOTE      ='nom_serveur'; 
         $this->_DBNAME    ='mon_site'; 
         $this->_USERNAME  ='mon_site';
         $this->_PASSWORD  ='mot_passe';
    }
}



PS : Il n'y a pas de " public " devant la construct !

PS2 : Avant d'aller plus en avant.. je pense qu'une lecture de quelques tutos sur l'utilisation des class en php te sera nécessaire car il semble que tu n'en connaisse pas le fonctionnement...
0
papyclic Messages postés 446 Date d'inscription mercredi 5 novembre 2014 Statut Membre Dernière intervention 18 octobre 2016 3
Modifié par papyclic le 24/11/2014 à 23:28
Bonjour
J'ai regarder des tutos sur les class je ne comprends pas tous, c'est pas évident, par rapport à php procédural .Je souhaiterai quand même essayer de refaire mon site avec classe POO.
Mais ça commence mal par contre j'arrive à me connecter avec le fichier et l'objet Config
<?php
class Config {
        const HOTE      = 'localhost';
        const DBNAME    = mon_site';
        const USERNAME  = 'root';
        const PASSWORD  = '';
}
?>

mais j'aimerai faire un seul et unique fichier pour le local et mon serveur.
J'ai essayé ta proposition ci-dessus mais toujours impossible.
Alors si tu peux me rendre se service s'il te plait.
Sinon tant pis je ferai un deuxième fichier pour mon serveur.
Je te remercie
0