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
--- 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 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é }
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
Le problème ai que la mise a jours ne se faire pas car le controler ne se connecte pas a la BONNE base
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; } }
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
Partager