diff --git a/htdocs/install/etape0.php b/htdocs/install/etape0.php index 6e0839450d4..9a39ee47089 100644 --- a/htdocs/install/etape0.php +++ b/htdocs/install/etape0.php @@ -21,7 +21,7 @@ */ /** - \file htdocs/install/etape1.php + \file htdocs/install/etape0.php \brief Permet d'afficher et de confirmer le charset par rapport aux informations précédentes -> sélection suite à connexion' \version $Revision$ */ @@ -53,7 +53,7 @@ pHeader($langs->trans("ConfigurationFile"),"etape1"); // On reporte champ formulaire précédent pour propagation if ($_POST["action"] == "set") { - umask(0); + umask(0); foreach($_POST as $cle=>$valeur) { echo ''; @@ -113,8 +113,8 @@ if (! $error && (isset($_POST["db_create_database"]) && $_POST["db_create_databa if ($db->connected) { -?> - + ?> +
@@ -221,6 +221,9 @@ if ($db->connected) +

trans("CharsetChoice");?>

+ - - \ No newline at end of file diff --git a/htdocs/lib/databases/mysql.lib.php b/htdocs/lib/databases/mysql.lib.php index e92ac859c9b..fc526e40d86 100644 --- a/htdocs/lib/databases/mysql.lib.php +++ b/htdocs/lib/databases/mysql.lib.php @@ -85,6 +85,7 @@ class DoliDb 1007 => 'DB_ERROR_ALREADY_EXISTS', 1008 => 'DB_ERROR_CANNOT_DROP', 1025 => 'DB_ERROR_NO_FOREIGN_KEY_TO_DROP', + 1044 => 'DB_ERROR_ACCESSDENIED', 1046 => 'DB_ERROR_NODBSELECTED', 1048 => 'DB_ERROR_CONSTRAINT', 1050 => 'DB_ERROR_TABLE_ALREADY_EXISTS', @@ -116,99 +117,99 @@ class DoliDb \param newlink ??? \return int 1 en cas de succès, 0 sinon */ - function DoliDb($type='mysql', $host, $user, $pass, $name='', $newlink=0) - { + function DoliDb($type='mysql', $host, $user, $pass, $name='', $newlink=0) + { global $conf,$langs; - /* Ce test est inutile. En effet, si DOL_DOCUMENT_ROOT est défini, cela signifie */ + /* Ce test est inutile. En effet, si DOL_DOCUMENT_ROOT est défini, cela signifie */ /* obligatoirement que le fichier conf a deja été chargée puisque cette constante est */ /* definie a partir du contenu du fichier conf.php */ /* Et toutes les infos sont chargés dans l'objet conf */ /* - if (file_exists($conffile)) { - include($conffile); - $this->forcecharset=$character_set_database; - $this->forcecollate=$collation_connection; - $this->db_user=$dolibarr_main_db_user; - } - */ + if (file_exists($conffile)) { + include($conffile); + $this->forcecharset=$character_set_database; + $this->forcecollate=$collation_connection; + $this->db_user=$dolibarr_main_db_user; + } + */ if ($conf->db->character_set && $conf->db->character_set != null && $conf->db->character_set !=""){ $this->forcecharset=$conf->db->character_set; - } - if ($conf->db->collation_connection && $conf->db->collation_connection != null && $conf->db->collation_connection !=""){ - $this->forcecollate=$conf->db->collation_connection; - } - $this->db_user=$conf->db->user; + } + if ($conf->db->collation_connection && $conf->db->collation_connection != null && $conf->db->collation_connection !=""){ + $this->forcecollate=$conf->db->collation_connection; + } + $this->db_user=$conf->db->user; $this->transaction_opened=0; - - if (! function_exists("mysql_connect")) - { - $this->connected = 0; - $this->ok = 0; - $this->error="Mysql PHP functions for using MySql driver are not available in this version of PHP"; - dolibarr_syslog("DoliDB::DoliDB : Mysql PHP functions for using Mysql driver are not available in this version of PHP"); - return $this->ok; - } - - if (! $host) - { - $this->connected = 0; - $this->ok = 0; - $this->error=$langs->trans("ErrorWrongHostParameter"); - dolibarr_syslog("DoliDB::DoliDB : Erreur Connect, wrong host parameters"); - return $this->ok; - } - - // Essai connexion serveur - $this->db = $this->connect($host, $user, $pass, $name, $newlink); - if ($this->db) - { - // Si client connecté avec charset different de celui de la base Dolibarr - // (La base Dolibarr a été forcée en this->forcecharset à l'install) - if (mysql_client_encoding ( $this->db ) != $this->forcecharset) - { - $this->query("SET NAMES '".$this->forcecharset."'", $this->db); - $this->query("SET CHARACTER SET ". $this->forcecharset); - } - $this->connected = 1; - $this->ok = 1; - } - else - { - // host, login ou password incorrect - $this->connected = 0; - $this->ok = 0; - $this->error=mysql_error(); - dolibarr_syslog("DoliDB::DoliDB : Erreur Connect mysql_error=".mysql_error()); + + if (! function_exists("mysql_connect")) + { + $this->connected = 0; + $this->ok = 0; + $this->error="Mysql PHP functions for using MySql driver are not available in this version of PHP"; + dolibarr_syslog("DoliDB::DoliDB : Mysql PHP functions for using Mysql driver are not available in this version of PHP"); + return $this->ok; + } + + if (! $host) + { + $this->connected = 0; + $this->ok = 0; + $this->error=$langs->trans("ErrorWrongHostParameter"); + dolibarr_syslog("DoliDB::DoliDB : Erreur Connect, wrong host parameters"); + return $this->ok; + } + + // Essai connexion serveur + $this->db = $this->connect($host, $user, $pass, $name, $newlink); + if ($this->db) + { + // Si client connecté avec charset different de celui de la base Dolibarr + // (La base Dolibarr a été forcée en this->forcecharset à l'install) + if (mysql_client_encoding ( $this->db ) != $this->forcecharset) + { + $this->query("SET NAMES '".$this->forcecharset."'", $this->db); + $this->query("SET CHARACTER SET ". $this->forcecharset); + } + $this->connected = 1; + $this->ok = 1; + } + else + { + // host, login ou password incorrect + $this->connected = 0; + $this->ok = 0; + $this->error=mysql_error(); + dolibarr_syslog("DoliDB::DoliDB : Erreur Connect mysql_error=".mysql_error()); + } + + // Si connexion serveur ok et si connexion base demandée, on essaie connexion base + if ($this->connected && $name) + { + if ($this->select_db($name)) + { + $this->database_selected = 1; + $this->database_name = $name; + $this->ok = 1; + } + else + { + $this->database_selected = 0; + $this->database_name = ''; + $this->ok = 0; + $this->error=$this->error(); + dolibarr_syslog("DoliDB::DoliDB : Erreur Select_db"); + } + } + else + { + // Pas de selection de base demandée, ok ou ko + $this->database_selected = 0; + } + + return $this->ok; } - - // Si connexion serveur ok et si connexion base demandée, on essaie connexion base - if ($this->connected && $name) - { - if ($this->select_db($name)) - { - $this->database_selected = 1; - $this->database_name = $name; - $this->ok = 1; - } - else - { - $this->database_selected = 0; - $this->database_name = ''; - $this->ok = 0; - $this->error=$this->error(); - dolibarr_syslog("DoliDB::DoliDB : Erreur Select_db"); - } - } - else - { - // Pas de selection de base demandée, ok ou ko - $this->database_selected = 0; - } - - return $this->ok; - } /** @@ -221,27 +222,30 @@ class DoliDb return mysql_select_db($database, $this->db); } - /** - \brief Connection vers le serveur - \param host addresse de la base de données - \param login nom de l'utilisateur autoris - \param passwd mot de passe - \param name nom de la database (ne sert pas sous mysql, sert sous pgsql) - \return resource handler d'accès à la base - \seealso close - */ - function connect($host, $login, $passwd, $name) - { - dolibarr_syslog("DoliDB::connect host=$host, login=$login, passwd=--hidden--, name=$name"); - $this->db = @mysql_connect($host, $login, $passwd); - //force les enregistrement en latin1 si la base est en utf8 par défaut - // Supprimé car plante sur mon PHP-Mysql. De plus, la base est forcement en latin1 avec - // les nouvelles version de Dolibarr car forcé par l'install Dolibarr. - $this->query("SET NAMES '".$this->forcecharset."'", $this->db); - $this->query("SET CHARACTER SET '".$this->forcecharset."'", $this->db); - //print "Resultat fonction connect: ".$this->db; - return $this->db; - } + /** + \brief Connection vers le serveur + \param host addresse de la base de données + \param login nom de l'utilisateur autoris + \param passwd mot de passe + \param name nom de la database (ne sert pas sous mysql, sert sous pgsql) + \return resource handler d'accès à la base + \seealso close + */ + function connect($host, $login, $passwd, $name) + { + dolibarr_syslog("DoliDB::connect host=$host, login=$login, passwd=--hidden--, name=$name"); + $this->db = @mysql_connect($host, $login, $passwd); + //force les enregistrement en latin1 si la base est en utf8 par défaut + // Supprimé car plante sur mon PHP-Mysql. De plus, la base est forcement en latin1 avec + // les nouvelles version de Dolibarr car forcé par l'install Dolibarr. + if ($this->db) + { + $this->query("SET NAMES '".$this->forcecharset."'", $this->db); + $this->query("SET CHARACTER SET '".$this->forcecharset."'", $this->db); + } + //print "Resultat fonction connect: ".$this->db; + return $this->db; + } /** \brief Renvoie la version du serveur @@ -356,35 +360,35 @@ class DoliDb \param query Contenu de la query \return resource Resultset de la reponse */ - function query($query) - { - $query = trim($query); - - if (! $this->database_name) - { - // Ordre SQL ne nécessitant pas de connexion à une base (exemple: CREATE DATABASE) - $ret = mysql_query($query, $this->db); - } - else - { - $ret = mysql_db_query($this->database_name, $query, $this->db); - } - - if (! eregi("^COMMIT",$query) && ! eregi("^ROLLBACK",$query)) - { - // Si requete utilisateur, on la sauvegarde ainsi que son resultset - if (! $ret) - { - $this->lastqueryerror = $query; - $this->lasterror = $this->error(); - $this->lasterrno = $this->errno(); - } - $this->lastquery=$query; - $this->results = $ret; - } - - return $ret; - } + function query($query) + { + $query = trim($query); + + if (! $this->database_name) + { + // Ordre SQL ne nécessitant pas de connexion à une base (exemple: CREATE DATABASE) + $ret = mysql_query($query, $this->db); + } + else + { + $ret = mysql_db_query($this->database_name, $query, $this->db); + } + + if (! eregi("^COMMIT",$query) && ! eregi("^ROLLBACK",$query)) + { + // Si requete utilisateur, on la sauvegarde ainsi que son resultset + if (! $ret) + { + $this->lastqueryerror = $query; + $this->lasterror = $this->error(); + $this->lasterrno = $this->errno(); + } + $this->lastquery=$query; + $this->results = $ret; + } + + return $ret; + } /** \brief Renvoie la ligne courante (comme un objet) pour le curseur resultset. diff --git a/htdocs/lib/databases/mysqli.lib.php b/htdocs/lib/databases/mysqli.lib.php index 53af01195e2..fb2eabba258 100644 --- a/htdocs/lib/databases/mysqli.lib.php +++ b/htdocs/lib/databases/mysqli.lib.php @@ -84,6 +84,7 @@ class DoliDb 1007 => 'DB_ERROR_ALREADY_EXISTS', 1008 => 'DB_ERROR_CANNOT_DROP', 1025 => 'DB_ERROR_NO_FOREIGN_KEY_TO_DROP', + 1044 => 'DB_ERROR_ACCESSDENIED', 1046 => 'DB_ERROR_NODBSELECTED', 1048 => 'DB_ERROR_CONSTRAINT', 1050 => 'DB_ERROR_TABLE_ALREADY_EXISTS', @@ -241,9 +242,12 @@ class DoliDb // les nouvelles version de Dolibarr car forcé par l'install Dolibarr. //$this->query('SET NAMES '.$this->forcecharset); //print "Resultat fonction connect: ".$this->db; - $this->query("SET NAMES '".$this->forcecharset."'", $this->db); - $this->query("SET CHARACTER SET '".$this->forcecharset."'", $this->db); - return $this->db; + if ($this->db) + { + $this->query("SET NAMES '".$this->forcecharset."'", $this->db); + $this->query("SET CHARACTER SET '".$this->forcecharset."'", $this->db); + } + return $this->db; } /** diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php index c90e9184bcc..99e4b036439 100644 --- a/htdocs/master.inc.php +++ b/htdocs/master.inc.php @@ -157,10 +157,11 @@ if (! defined('NOREQUIRETRAN')) if (! defined('NOREQUIREDB')) { $db = new DoliDb($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name); - if (! $db->connected) + + if ($db->error) { dolibarr_print_error($db,"host=".$conf->db->host.", user=".$conf->db->user.", databasename=".$conf->db->name.", ".$db->error); - exit; + exit; } }