Bonjour,

mon problème est le suivant :

je suis dans un environnement multi-base

toto.fr a un base de donnée toto
titi.fr à un base de donnée titi
etc...

aujourd'hui sur chaque site j'ai un module d' "administration" ou je mets à jours les tables base par base
taches longue car je dois me connecte sur chaque site pour allez faire la mise a jours


je profite donc des vacances pour faire une administration centralisé sur un site centralisateur

toutes mes bases ayant la même architecture.

ma logique de travail est la suivante :

--- Création d'une vue avec un select pour avoir la base de travail.

exemple de mon controler

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public function modeconteAction() {
		// generation de la vue dans le controller
		$this->checkLogin();
		if (!$this->isAdmin()) $this->_redirect('/');
		$this->view->dbusers = Utils_Dbuser::getdbuserdifautre();
		$this->view->products = Utils_Product::getprodlibplusglobal();
		if ($this->getRequest()->isPost()) return $this->modeconteProcess();
	}
 
 
 
	public function modeconteProcess() {
		// pour la selcetion de la base de travail
		$type = $this->getRequest()->getParam('type');
		if (!in_array($type, array('Credentials', 'Selection'))) return;
		$method = 'modeconte'.ucfirst($type).'Process';
		return $this->$method();
	}
 
	public function modeconteSelectionProcess() {
	// la base est selectionne pour avoir la vue correct avec la base désiré
	}
--- le detail de ma requete pour la vue

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
static
	public function getprodlibplusglobal($limit = 0) {
		$sqlLimit = $limit > 0 ? "LIMIT $limit" : '';
 
		$selectdb = Zend_Db_Table::getDefaultAdapter();
			if(isset($_POST['selectdb'])) {
			$leselectdb = $_POST['selectdb'] ;
 
			$db = Zend_Db_Table::getDefaultAdapter();
			$res = $db->query("SELECT * FROM dbuser WHERE dbname=:dbmane", array('dbmane' => $leselectdb));
				foreach ($res->fetchAll() as $row) {
				$password = $row['password'];
				$dbname = $row['dbname'];
				$host = $row['host'];
				$username = $row['username'];
				}
 
			$selectdb = Zend_Db::factory('Pdo_Mysql', array(
			'host'             => $host,
			'username'         => $username,
			'password'         => $password,
			'dbname'           => $dbname
			));	
			}
			else $selectdb = Zend_Db_Table::getDefaultAdapter();
 
        $res = $selectdb->query("SELECT * FROM product 
		INNER JOIN account ON product.owner=account.email 
		WHERE 1 AND (product.libplus='' OR product.name='') ORDER BY product.ctime DESC  limit 10");
        return $res->fetchAll();
	}

--- Mise à jours de la base selectionné LORSQUE JE SUIS EN MODE SITE PAR SITE

exemple de mon controler

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public function modeconteCredentialsProcess() {
	// mise a jours de la base 
	ini_set ('display_errors', 'on');
	$params = $this->getRequest()->getParams();
	$errs = '';
	$clefs = array(
		'id' => 'id',
		'name' => 'name',
		'libplus' => 'libplus',
		'category_id' => 'category_id',
		'hidden' => 'hidden',
		);
	foreach ($params as $k => $v) {
		$f = explode(':', $k, 2);
		if (count($f) != 2) continue;
		$ids = $f[0];
		$key = $f[1];
		if ($key == 'id') $v = stripslashes($v);
		if ($key == 'name') $v = stripslashes($v);
		if ($key == 'libplus') $v = nl2br(stripslashes($v));
		if ($key == 'category_id') $v = stripslashes($v);
		if ($key == 'hidden') $v = $v == 'on' ? 1 : 0;
		require_once 'KS/Product.php';
		// Ensure library/ is on include_path
		set_include_path(implode(PATH_SEPARATOR, array(
		realpath(APPLICATION_PATH.'/httpdocs/library/'),
		get_include_path(),
		)));
		$ch = new KS_product();
		if ($ch->load($ids)) {
		$ch->$key = $v;
		$ch->save();
		} else {
		$clef = $clefs[$key];
		$errs .= "N'a pas pu traité $ids:$clef de value $v<br/>\n";
		}
		}
		if ($errs == '') {
		$this->_redirect('dbuser/modeconte');
		} else {
		$this->view->errors = $errs;
		}
	}
Le problème ai que la mise a jours ne se faire pas car le controler ne se connecte pas a la BONNE base

avez vous une piste de solution que je puisse exploiter
type conservation de la "factory" du bout en bout

Pour information mes bases sont parfois hebergé à distance donc la solution d'une base commune a tous les site n'est pas envisagable

merci de votre aide

Marc