Connecter à plusieurs base MySQL dans une boucle

Support et assistance pour développer des extensions ou pour modifier Joomla! 1.0.x

Moderators: sarki, Aidan38

Forum rules
Règles du forum
Post Reply
rivjoyce
Joomla! Fledgling
Joomla! Fledgling
Posts: 4
Joined: Sat Feb 16, 2008 6:37 am

Connecter à plusieurs base MySQL dans une boucle

Post by rivjoyce » Sat Feb 16, 2008 7:06 am

Je veux connecter à des base de données dans une boucle. On doit l'utiliser l'un après l'autre. Les URLs sont déjà dans un table, il suffit de parcourir les table pour avoir les urls. Mais quand je crées un objet pour la connexion, il n'y aura d'affichage.
Si quelqu'un peur m'aider, j'en suis reconnaissant.

Merci

User avatar
ouly
Joomla! Ace
Joomla! Ace
Posts: 1074
Joined: Sun Aug 21, 2005 9:18 pm
Contact:

Re: Connecter à plusieurs base MySQL dans une boucle

Post by ouly » Sat Feb 16, 2008 8:18 am

Bonjour rivjoyce,
Le problème n'est pas suffisamment détaillé pour que la provenance de celui-ci puisse être trouvée.
Un bout de code ?

ouly

rivjoyce
Joomla! Fledgling
Joomla! Fledgling
Posts: 4
Joined: Sat Feb 16, 2008 6:37 am

Re: Connecter à plusieurs base MySQL dans une boucle

Post by rivjoyce » Mon Feb 18, 2008 6:34 am

Voici l'extrait du code :

Code: Select all

function extraction_data($host, $user, $password, $dbase, $dbprefix){
		$cnn_1 = new database( $host, $user, $password, $dbase, $dbprefix );
		$cnn_1->setQuery("SELECT fieldid,data_txt,itemid FROM #__sobi2_fields_data WHERE fieldid=7 OR fieldid=9 ORDER BY itemid ASC");
		$cnn_1->query();
		$rs_nbr=$cnn_1->getNumRows();
		$donnees=$cnn_1->loadObjectList();
		$j=0;
		while($j<$rs_nbr){
			$rs_sobi=$donnees[$j];
			$data_sobi[$j]=$rs_sobi->data_txt;
			$j++;
		}
		$i=0;
		$k=1;
		while($i<$rs_nbr){
			$data_sobi2[$i][0]=0;
			$data_sobi2[$i][1]=$data_sobi[$i];
			$data_sobi2[$i][2]=$data_sobi[$k];
			$data_sobi2[$i][3]=date("d-[URL banned] H:i:s");
			$k+=2;
			$i+=2;
		}
					
		$nombre=sobi2letterman::insertion_data($data_sobi2, $j);
		/*********************************************************************************/
		/************** IMPORTATION DES UTILISATEURS ENREGISTRES *************************/
		/*********************************************************************************/
		$cnn_1->setQuery("SELECT id, name, email, registerDate FROM jos_users");
		$cnn_1->query();
		$rs_nbr=$cnn_1->getNumRows();
		$donnees=$cnn_1->loadObjectList();
		$i=0;
		while($i<$rs_nbr){
			$rs_users=$donnees[$i];
			$data_sobi2[$i][0]=$rs_users->id;
			$data_sobi2[$i][2]=$rs_users->name;
			$data_sobi2[$i][1]=$rs_users->email;
			$data_sobi2[$i][3]=$rs_users->registerDate;
			$i++;
		}
		sobi2letterman::insertion_data($data_sobi2, $i);
	}
	
	function Importer(){
		/*********************************************************************************/
		/********************** IMPORTATION SOBI2 ENREGISTRES ****************************/
		/*********************************************************************************/
		//RECUPERATION DES DONNEES DANS DES BASE DE DONNEES
		global $database; 
		$database->setQuery("SELECT * FROM #__liste_srvs");
		if (!$database->query()) {
			echo $database->stderr();
			return false;
		}else $nbr=$database->getNumRows();
		$donnees_ext=$database->loadObjectList();
		$data_to_var_1=$donnees_ext[0];
		$host=$data_to_var_1->adresse;
		$user=$data_to_var_1->usr;
		$password=$data_to_var_1->pass;
		$dbase=$data_to_var_1->basededonnees;
		$dbprefix=$data_to_var_1->prfx;
		if(isset($host) && isset($user) && isset($dbase) && isset($dbprefix)){
			$sobi2letterman::extraction_data($host, $user, $password, $dbase, $dbprefix);
			//Le premier marche. Les donnees sont dans la table letterman_subscribers mais pas d'affichage
		}
		$data_to_var_1=$donnees_ext[1];
		$host=$data_to_var_1->adresse;
		$user=$data_to_var_1->usr;
		$password=$data_to_var_1->pass;
		$dbase=$data_to_var_1->basededonnees;
		$dbprefix=$data_to_var_1->prfx;
		if(isset($host) && isset($user) && isset($dbase) && isset($dbprefix)){
			$sobi2letterman::extraction_data($host, $user, $password, $dbase, $dbprefix);
			//Le deuxieme ne marche pas.
		}
		$data_to_var_1=$donnees_ext[2];
		$host=$data_to_var_1->adresse;
		$user=$data_to_var_1->usr;
		$password=$data_to_var_1->pass;
		$dbase=$data_to_var_1->basededonnees;
		$dbprefix=$data_to_var_1->prfx;
		if(isset($host) && isset($user) && isset($dbase) && isset($dbprefix)){
			$sobi2letterman::extraction_data($host, $user, $password, $dbase, $dbprefix);
			//Le troisieme ne marche pas.
		}
        $tmpl =& sobi2letterman::createTemplate();
        $tmpl->setAttribute( 'body', 'src', 'bienvenue2.html' );
        $tmpl->addVar( 'body', 'nombre', $afficher );
        $tmpl->displayParsedTemplate( 'form' );
    }

User avatar
ouly
Joomla! Ace
Joomla! Ace
Posts: 1074
Joined: Sun Aug 21, 2005 9:18 pm
Contact:

Re: Connecter à plusieurs base MySQL dans une boucle

Post by ouly » Mon Feb 18, 2008 9:08 pm

Notes :
  • Il est probable que la fonction isset() n'effectue pas le test désiré. Regardez plutôt du côté de empty().
  • Utilisez davantage les boucles for ( ... ; ... ; ... ) {}, cela rendra le code plus lisible et moins sujet aux bugs de maintenance.
  • Utilisez la balise BBCode [ code ] ... [ /code ] afin d'afficher du code sur le forum.
La classe database n'est pas prévue pour être utilisée de cette façon. Si la connexion vers une base de données ne peut pas être établie, l'exécution est terminée et la page hors-ligne est affichée. Etant donné que la page hors-ligne est chargée pendant la phase d'exécution d'un composant, celle-ci ne s'affiche pas car les données émises sont mises en tampon durant cette phase. Le tampon n'est pas restitué au visiteur car l'exécution est terminée.

Le plus simple est de spécialiser la classe database. Il suffit ensuite d'adapter le code du constructeur de la classe database dans la nouvelle classe pour que le tour soit joué...

D'un point de vue performance, fermez les connexions aux bases de données une fois qu'elles ne sont plus nécessaires.


Post Reply

Return to “1.0 - Développement”