有时候我们在安装PHPCMS的时候会遇到一个问题,明明我们填写的数据库信息都是正确的,可就是会提示“无法连接数据库服务器,请检查配置!”,但我们通过PHPMYADMIN可以正常登录,这是为什么呢?
原来我也很是不解,可为了能够尽快的安装完,我也没有心思去过多的研究,就在测试服务器上先安装上,然扣再打包上传至服务器再导入数据库,挺麻烦的,今天终于找到了 原因.
PHPCMS V9 安装的第5步是账号设置,当我们填写完账号信息后提交,这时候安装程序会以通过一个异步调用去检查配置是否正确,如果你的数据库密码是:数字+字母,很好没有问题可以通过测试,然后继续下一步安装.
但是,问题就出现在这里,如果你的密码里含有 # 、& 等这些在URL中使用的字符,不好意思这里就出错了,怎么搞就是安装不上,因为他们在进行测试的时候使用的是这样的方法:
- <!--
- var errmsg = new Array();
- errmsg[0] = '您已经安装过Phpcms,系统会自动删除老数据!是否继续?';
- errmsg[2] = '无法连接数据库服务器,请检查配置!';
- errmsg[3] = '成功连接数据库,但是指定的数据库不存在并且无法自动创建,请先通过其他方式建立数据库!';
- errmsg[6] = '数据库版本低于Mysql 4.0,无法安装Phpcms,请升级数据库版本!';
- function checkdb()
- {
- var url = '?step=dbtest&dbhost='+$('#dbhost').val()+'&dbuser='+$('#dbuser').val()+'&dbpw='+$('#dbpw').val()+'&dbname='+$('#dbname').val()+'&tablepre='+$('#tablepre').val()+'&sid='+Math.random()*5;
- $.get(url, function(data){
- if(data > 1) {
- alert(errmsg[data]);
- return false;
- }
- else if(data == 1 || (data == 0 && confirm(errmsg[0]))) {
- $('#install').submit();
- }
- });
- return false;
- }
- //-->
- $.get(url .....
问题就出现在这里,我们如果密码中含有#或&会就被$_GET参数错误的分隔导致我们的密码和我们输入的时候不一致而导致问题的出现,怎么办的,把这一段代码换成下面的代码:
- <!--
- var errmsg = new Array();
- errmsg[0] = '您已经安装过Phpcms,系统会自动删除老数据!是否继续?';
- errmsg[2] = '无法连接数据库服务器,请检查配置!';
- errmsg[3] = '成功连接数据库,但是指定的数据库不存在并且无法自动创建,请先通过其他方式建立数据库!';
- errmsg[6] = '数据库版本低于Mysql 4.0,无法安装Phpcms,请升级数据库版本!';
- function checkdb()
- {
- $.ajax(
- {
- type:"POST",
- url: 'install.php',
- data: "step=dbtest&dbhost="+$("#dbhost").val()+"&dbuser="+$('#dbuser').val()+"&dbpw="+$("#dbpw").val()+"&dbname="+$("#dbname").val()+"&tablepre="+$("#tablepre").val()+"&sid="+Math.random()*5,
- success: function(data){
- if(data > 1) {
- alert(errmsg[data]);
- return false;
- }
- else if(data == 1 || (data == 0 && confirm(errmsg[0]))) {
- $('#install').submit();
- }
- }
- }
- );
- return false;
- }
- //-->
改为POST方法,就不会有以上的问题出现.
同样将install.php中347行改为extract($_POST) 代码如下:
- //数据库测试
- case 'dbtest':
- extract($_POST); //要改的就是这里 line 347
- if(!@mysql_connect($dbhost, $dbuser, $dbpw)) {
- exit('2'); //Vevb.com
- }
这样就可以了,或者你直接把密码改简单了,回头再去database.php 中修改也一样.
写程序的时候不要这么偷懒了,唉,本来想去官方论坛上写BUG提交,一来是太麻烦,二来是我提交过的BUG从来没有被管理员回复过,还不如写到自己的博客中呢.
新闻热点
疑难解答