[Ok] 2 connexion sql sur un mm nuke ...

PHP-Nuke France - CE -> Installation

Auteur: crevettegregLocalisation: Rennes MessagePosté le: 06.04.2005, 12:41:32    Sujet du message: [Ok] 2 connexion sql sur un mm nuke ...

Bonjour,

Sur notre site, certaines pages nessessitent une connexion sql vers une autre base de donnée.

j'ai donc créé un deuxieme config2.php avec les info de connexion vers la seconde bd et un deuxieme dbconnect2.php

la connexion fonctionne, les résultats de la seconde base apparaissent correctement, mais un problème persiste. Mon nuke semble pas finir son travail de suite de module c a dire les blocks de droite et le footer.

Coment récupérer la conneextion db apres db2 ?

voici mes bouts de code:

config2.php
Code:

$dbhost_illi = "localhost";
$dbuname_illi = "toto";
$dbpass_illi = "titi";
$dbname_illi = "test";


dbconnect2.php
Code:

if(!defined("SQL_LAYER"))
{

define("SQL_LAYER","mysql");

class sql_db
{

   var $db_connect_id;
   var $query_result;
   var $row = array();
   var $rowset = array();
   var $num_queries = 0;

   //
   // Constructor
   //
   function sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true)
   {

      $this->persistency = $persistency;
      $this->user = $sqluser;
      $this->password = $sqlpassword;
      $this->server = $sqlserver;
      $this->dbname = $database;

      if($this->persistency)
      {
         $this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
      }
      else
      {
         $this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
      }
      if($this->db_connect_id)
      {
         if($database != "")
         {
            $this->dbname = $database;
            $dbselect = @mysql_select_db($this->dbname);
            if(!$dbselect)
            {
               @mysql_close($this->db_connect_id);
               $this->db_connect_id = $dbselect;
            }
         }
         return $this->db_connect_id;
      }
      else
      {
         return false;
      }
   }

   //
   // Other base methods
   //
   function sql_close()
   {
      if($this->db_connect_id)
      {
         if($this->query_result)
         {
            @mysql_free_result($this->query_result);
         }
         $result = @mysql_close($this->db_connect_id);
         return $result;
      }
      else
      {
         return false;
      }
   }

   //
   // Base query method
   //
   function sql_query($query = "", $transaction = FALSE)
   {
      // Remove any pre-existing queries
      unset($this->query_result);
      if($query != "")
                {

         $this->query_result = @mysql_query($query, $this->db_connect_id);

      }
      if($this->query_result)
      {
         unset($this->row[$this->query_result]);
         unset($this->rowset[$this->query_result]);
         return $this->query_result;
      }
      else
      {
         return ( $transaction == END_TRANSACTION ) ? true : false;
      }
   }

   //
   // Other query methods
   //
   function sql_numrows($query_id = 0)
   {
      if(!$query_id)
      {
         $query_id = $this->query_result;
      }
      if($query_id)
      {
         $result = @mysql_num_rows($query_id);
         return $result;
      }
      else
      {
         return false;
      }
   }
   function sql_affectedrows()
   {
      if($this->db_connect_id)
      {
         $result = @mysql_affected_rows($this->db_connect_id);
         return $result;
      }
      else
      {
         return false;
      }
   }
   function sql_numfields($query_id = 0)
   {
      if(!$query_id)
      {
         $query_id = $this->query_result;
      }
      if($query_id)
      {
         $result = @mysql_num_fields($query_id);
         return $result;
      }
      else
      {
         return false;
      }
   }
   function sql_fieldname($offset, $query_id = 0)
   {
      if(!$query_id)
      {
         $query_id = $this->query_result;
      }
      if($query_id)
      {
         $result = @mysql_field_name($query_id, $offset);
         return $result;
      }
      else
      {
         return false;
      }
   }
   function sql_fieldtype($offset, $query_id = 0)
   {
      if(!$query_id)
      {
         $query_id = $this->query_result;
      }
      if($query_id)
      {
         $result = @mysql_field_type($query_id, $offset);
         return $result;
      }
      else
      {
         return false;
      }
   }
   function sql_fetchrow($query_id = 0)
   {
      if(!$query_id)
      {
         $query_id = $this->query_result;
      }
      if($query_id)
      {
         $this->row[$query_id] = @mysql_fetch_array($query_id);
         return $this->row[$query_id];
      }
      else
      {
         return false;
      }
   }
   function sql_fetchrowset($query_id = 0)
   {
      if(!$query_id)
      {
         $query_id = $this->query_result;
      }
      if($query_id)
      {
         unset($this->rowset[$query_id]);
         unset($this->row[$query_id]);
         while($this->rowset[$query_id] = @mysql_fetch_array($query_id))
         {
            $result[] = $this->rowset[$query_id];
         }
         return $result;
      }
      else
      {
         return false;
      }
   }
   function sql_fetchfield($field, $rownum = -1, $query_id = 0)
   {
      if(!$query_id)
      {
         $query_id = $this->query_result;
      }
      if($query_id)
      {
         if($rownum > -1)
         {
            $result = @mysql_result($query_id, $rownum, $field);
         }
         else
         {
            if(empty($this->row[$query_id]) && empty($this->rowset[$query_id]))
            {
               if($this->sql_fetchrow())
               {
                  $result = $this->row[$query_id][$field];
               }
            }
            else
            {
               if($this->rowset[$query_id])
               {
                  $result = $this->rowset[$query_id][$field];
               }
               else if($this->row[$query_id])
               {
                  $result = $this->row[$query_id][$field];
               }
            }
         }
         return $result;
      }
      else
      {
         return false;
      }
   }
   function sql_rowseek($rownum, $query_id = 0){
      if(!$query_id)
      {
         $query_id = $this->query_result;
      }
      if($query_id)
      {
         $result = @mysql_data_seek($query_id, $rownum);
         return $result;
      }
      else
      {
         return false;
      }
   }
   function sql_nextid(){
      if($this->db_connect_id)
      {
         $result = @mysql_insert_id($this->db_connect_id);
         return $result;
      }
      else
      {
         return false;
      }
   }
   function sql_freeresult($query_id = 0){
      if(!$query_id)
      {
         $query_id = $this->query_result;
      }

      if ( $query_id )
      {
         unset($this->row[$query_id]);
         unset($this->rowset[$query_id]);

         @mysql_free_result($query_id);

         return true;
      }
      else
      {
         return false;
      }
   }
   function sql_error($query_id = 0)
   {
      $result["message"] = @mysql_error($this->db_connect_id);
      $result["code"] = @mysql_errno($this->db_connect_id);

      return $result;
   }

} // class sql_db

} // if ... define

//global $db;
$db_illi = new sql_db($dbhost_illi, $dbuname_illi, $dbpass_illi, $dbname_illi, false);
if(!$db_illi->db_connect_id) {
    die(""._NO_SQL_CONNEXION."");
}



le code du module:
Code:

//----------- autre sql !
include("db_illi/config2.php");
include("db_illi/db/dbconnect2.php");

  $sql_illi = "SELECT * FROM voiture";
  $result_illi=$db_illi->sql_query($sql_illi);
    if (!$result_illi) {die("pas de connexion SQL sur les voitures de Davy !!");}
      while($row_illi=$db_illi->sql_fetchrow($result_illi)) {
      $id_illi = $row_illi['id'];
      $nom_illi = $row_illi['nom'];

echo "- $id_illi $nom_illi <br>";

}
//---------------- fin autre sql !


j'ai renommé les variables de config
et
$db_illi = new sq........



Avez vous une idée ??
Faut t-il rennomer d'autre chose ?

Merci d'avance pour votre aide !
pluche ++ Tétard'O...

Auteur: ckforumLocalisation: FRANCE MessagePosté le: 06.04.2005, 15:15:48    Sujet du message:

Bonjour crevettegreg,

Pourquoi faire aussi compliqué !!!

La variable $db représente un constructeur
Voir ( http://tastalian.free.fr/cours.php?part=PHP&index=1 )
( http://tastalian.free.fr/cours.php?part=PHP&index=2 ),
donc il n'était pas nécéssaire dans ton cas de doubler le fichier mysql car celui ci contient une class qui peut être réutilisée !!! tu pouvais tout simplement créér un autre constructeur !

en standard dans le fichier db.php situé dans include tu as :
Code:

$db = new sql_db($dbhost, $dbuname, $dbpass, $dbname, false);
if(!$db->db_connect_id) {
    die("<br /><br /><div align='center'><img src=images/logo.gif><br /><br /><b>Il semble qu'il y ait un problème avec le serveur MySQL.<br />Veuillez nous en excuser, le site sera accéssible très prochainement.</div></b>");
}


Ou les variables
Code:

$dbhost, $dbuname, $dbpass, $dbname


sont liées à ton config.php

donc dans ton config.php tu rajoutes simplement les renseignements de ta nouvelle BDD en ajoutant par exemple les variables suivantes (nommées xxxx2 pour l'exemple, ton utilisation mais nommes les comme tu le souhaites):

Code:

$dbhost2 = "Tonserveur";
$dbuname2 = "TonLogin";
$dbpass2 = "TonPass";
$dbname2 = "LeNOMdeTaBDD";


Ensuite dans le fichier db.php situé dans includes/

Tu créé un nouveau construteur (une $var qui correspond à un nouvel objet sql_db via la class du meme nom situé dans mysql.php)
donc en dessous de

Code:

$db = new sql_db($dbhost, $dbuname, $dbpass, $dbname, false);
if(!$db->db_connect_id) {
    die("<br /><br /><div align='center'><img src=images/logo.gif><br /><br /><b>Il semble qu'il y ait un problème avec le serveur MySQL.<br />Veuillez nous en excuser, le site sera accéssible très prochainement.</div></b>");
}


Tu rajoutes par exemple :

Code:

$dbbis = new sql_db($dbhost2, $dbuname2, $dbpass2, $dbname2, false);
if(!$dbbis->db_connect_id) {
    die("<br /><br /><div align='center'><img src=images/logo.gif><br /><br /><b>Il semble qu'il y ait un problème avec le serveur MySQL (bis).<br />Veuillez nous en excuser, le site sera accéssible très prochainement.</div></b>");
}


Et à partir de là tu as donc un nouvel objet $dbbis équivalent à $db mais avec une autre BDD de renseignée
ensuite il ne te reste plus qu'a appeler cet objet dans tes requetes par exemple :

Code:

$dbbis->sql_query("ETC....");


L'avantage est que si la class "sql_db" situé dans le fichier mysql.php change pour des améliorations quelquonques tu pourras mettre à jour ce fichier et bénéficier des amélioration sans avoir à modifier X fichier ou a faire X modification ... donc en gros ce sera plus simple pour mettre a jour ton portail !

En revanches je n'ai rien préciser au niveau de $dbtype car je part du principe que tu utilises des BDD mysql (ce qui est le cas en général sous phpnuke) ...

Penses aussi dans tes scripts à déclarer en global la variable $dbbis au même titre que $db donc tu auras dans tes scripts un truc du genre

Code:

function testpourexemple() {
global $db, $dbbis ;
}


Voilà

@++

Auteur: crevettegregLocalisation: Rennes MessagePosté le: 07.04.2005, 10:51:36    Sujet du message:

[PB REGLE !]

Merci bcp mais effectivement j'ai vu compliqué !! lol

Sinon mon truc fonctionnait , c'est juste qu'il faut faire le rappel de db/db.php car il faut réindiquer à apache la chaine de connexion.

Smile

Merci bcp pour l'info.
Pour ceux qui veulent une belle tite connection persitante, récupérez le script du premier poste, il fonctionne tres bien pour des script non nuke .....

Bonne journée à toute cette belle comunauté !

Pluche ++ Tétard'O

Auteur: ckforumLocalisation: FRANCE MessagePosté le: 07.04.2005, 11:16:10    Sujet du message:

ckforum : Réponse automatique a écrit:
[!] Comme votre problème est règlé
je ferme ce sujet, n'hésitez pas à en ouvrir un autre si vous
avez besoin. Si vous souhaitez réouvrir ce sujet , merci de le signaler
à un modérateur ou membre du STAFF.

à Bientôt.

A bientôt
...



PHP-Nuke France - CE -> Installation

Toutes les heures sont au format GMT + 2 Heures

Page 1 sur 1


>> Fermer cette Page <<