Просмотр исходного кода

【程序目录】优化安装代码

sugar1569 3 лет назад
Родитель
Сommit
f0db44bc9d
2 измененных файлов с 160 добавлено и 89 удалено
  1. 44 25
      crmeb/public/install/index.php
  2. 116 64
      crmeb/public/install/templates/step3.php

+ 44 - 25
crmeb/public/install/index.php

@@ -203,24 +203,53 @@ switch ($step) {
     case '3':
         $dbName = strtolower(trim($_POST['dbName']));
         $_POST['dbport'] = $_POST['dbport'] ?: '3306';
-        if ($_GET['testdbpwd']) {
+        if ($_GET['mysqldbpwd']) {
             $dbHost = $_POST['dbHost'];
             $conn = @mysqli_connect($dbHost, $_POST['dbUser'], $_POST['dbPwd'], NULL, $_POST['dbport']);
-            if (mysqli_connect_errno($conn)) {
-                die(json_encode(0));
+//            var_dump(mysqli_connect_errno($conn));
+            if ($error = mysqli_connect_errno($conn)) {
+                if($error == 2002) {
+                    die(json_encode(2002));//地址或端口错误
+                } else if($error == 1045) {
+                    die(json_encode(1045));//用户名或密码错误
+                } else {
+                    die(json_encode(-1));//链接失败
+                }
             } else {
+
                 $result = mysqli_query($conn, "SELECT @@global.sql_mode");
                 $result = $result->fetch_array();
                 $version = mysqli_get_server_info($conn);
                 if ($version >= 5.7) {
                     if (strstr($result[0], 'STRICT_TRANS_TABLES') || strstr($result[0], 'STRICT_ALL_TABLES') || strstr($result[0], 'TRADITIONAL') || strstr($result[0], 'ANSI'))
-                        exit(json_encode(-4));
+                        exit(json_encode(-2));//数据库配置需要修改
                 }
                 $result = mysqli_query($conn, "select count(table_name) as c from information_schema.`TABLES` where table_schema='$dbName'");
                 $result = $result->fetch_array();
-                if ($result['c'] > 0)
-                    exit(json_encode(-2));
+                if ($result['c'] > 0) {
+                    mysqli_close($conn);
+                    exit(json_encode(-3));//数据库存在
+                } else {
+                    if (!mysqli_select_db($conn, $dbName)) {
+                        //创建数据时同时设置编码
+                        if (!mysqli_query($conn, "CREATE DATABASE IF NOT EXISTS `" . $dbName . "` DEFAULT CHARACTER SET utf8;")) {
+                            exit(json_encode(-4));//无权限创建数据库
+                        } else {
+                            mysqli_query($conn, "DROP DATABASE `" . $dbName . "` ;");
+                            mysqli_close($conn);
+                            exit(json_encode(1));//数据库配置成功
+                        }
+                    } else {
+                        mysqli_close($conn);
+                        exit(json_encode(1));//数据库配置成功
+                    }
+
+                }
+
+
             }
+        }
+        if ($_GET['redisdbpwd']) {
 
             //redis数据库信息
             $rbhost = $_POST['rbhost'] ?? '127.0.0.1';
@@ -250,8 +279,6 @@ switch ($step) {
                 exit(json_encode(-3));
             }
         }
-
-
         include_once("./templates/step3.php");
         exit();
 
@@ -271,40 +298,35 @@ switch ($step) {
             $dbPrefix = empty($_POST['dbprefix']) ? 'eb_' : trim($_POST['dbprefix']);
 
             $username = trim($_POST['manager']);
-            $password = trim($_POST['manager_pwd']);
+            $password = trim($_POST['manager_pwd']) ?:'crmeb.com';
             $email = trim($_POST['manager_email']);
 
             if (!function_exists('mysqli_connect')) {
                 $arr['msg'] = "请安装 mysqli 扩展!";
-                echo json_encode($arr);
-                exit;
+                exit(json_encode($arr));
             }
             $conn = @mysqli_connect($dbHost, $dbUser, $dbPwd, NULL, $_POST['dbport']);
             if (mysqli_connect_errno($conn)) {
                 $arr['msg'] = "连接数据库失败!" . mysqli_connect_error($conn);
-                echo json_encode($arr);
-                exit;
+                exit(json_encode($arr));
             }
             mysqli_set_charset($conn, "utf8"); //,character_set_client=binary,sql_mode='';
             $version = mysqli_get_server_info($conn);
             if ($version < 5.1) {
                 $arr['msg'] = '数据库版本太低! 必须5.1以上';
-                echo json_encode($arr);
-                exit;
+                exit(json_encode($arr));
             }
 
             if (!mysqli_select_db($conn, $dbName)) {
                 //创建数据时同时设置编码
                 if (!mysqli_query($conn, "CREATE DATABASE IF NOT EXISTS `" . $dbName . "` DEFAULT CHARACTER SET utf8;")) {
                     $arr['msg'] = '数据库 ' . $dbName . ' 不存在,也没权限创建新的数据库!';
-                    echo json_encode($arr);
-                    exit;
+                    exit(json_encode($arr));
                 }
                 if ($n == -1) {
                     $arr['n'] = 0;
                     $arr['msg'] = "成功创建数据库:{$dbName}<br>";
-                    echo json_encode($arr);
-                    exit;
+                    exit(json_encode($arr));
                 }
                 mysqli_select_db($conn, $dbName);
             }
@@ -333,8 +355,7 @@ switch ($step) {
                     }
                     $i++;
                     $arr = array('n' => $i, 'msg' => $message);
-                    echo json_encode($arr);
-                    exit;
+                    exit(json_encode($arr));
                 } else {
                     if (trim($sql) == '')
                         continue;
@@ -437,13 +458,11 @@ switch ($step) {
             if ($res) {
                 $message = '成功添加管理员<br />成功写入配置文件<br>安装完成.';
                 $arr = array('n' => 999999, 'msg' => $message);
-                echo json_encode($arr);
-                exit;
+                exit(json_encode($arr));
             } else {
                 $message = '添加管理员失败<br />成功写入配置文件<br>安装完成.';
                 $arr = array('n' => 999999, 'msg' => $message);
-                echo json_encode($arr);
-                exit;
+                exit(json_encode($arr));
             }
 
         }

+ 116 - 64
crmeb/public/install/templates/step3.php

@@ -48,16 +48,14 @@
                     </tr>
                     <tr>
                         <td class="tar">数据库密码:</td>
-                        <td><input type="password" name="dbpw" id="dbpw" value="" class="input" autoComplete="off"
-                                   onBlur="TestDbPwd(0)"></td>
+                        <td><input type="password" name="dbpw" id="dbpw" value="" class="input" autoComplete="off" onBlur="mysqlDbPwd(0)"></td>
                         <td>
                             <div id="J_install_tip_dbpw"></div>
                         </td>
                     </tr>
                     <tr>
                         <td class="tar">数据库名:</td>
-                        <td><input type="text" name="dbname" id="dbname" value="crmeb" class="input"
-                                   onBlur="TestDbPwd(0)"></td>
+                        <td><input type="text" name="dbname" id="dbname" value="crmeb" class="input" onBlur="mysqlDbPwd(0)"></td>
                         <td>
                             <div id="J_install_tip_dbname"></div>
                         </td>
@@ -71,8 +69,7 @@
                     </tr>
                     <tr>
                         <td class="tar">演示数据:</td>
-                        <td colspan="2"><input style="width:18px;height:18px;" type="checkbox" id="demo" name="demo"
-                                               value="demo" checked></td>
+                        <td colspan="2"><input style="width:18px;height:18px;" type="checkbox" id="demo" name="demo" value="demo" checked></td>
                     </tr>
                 </table>
                 <table width="100%">
@@ -83,34 +80,32 @@
                     </tr>
                     <tr>
                         <td class="tar">服务器地址:</td>
-                        <td><input type="text" name="rbhost" id="rbhost" value="127.0.0.1" class="input"></td>
+                        <td><input type="text" name="rbhost" id="rbhost" value="127.0.0.1" class="input" onBlur="redisDbPwd(0)"></td>
                         <td>
-                            <div id="J_install_rbhost"><span class="gray">redis服务器地址,一般为127.0.0.1</span></div>
+                            <div id="J_install_redis_host"><span class="gray">redis服务器地址,一般为127.0.0.1</span></div>
                         </td>
                     </tr>
                     <tr>
                         <td class="tar">端口号:</td>
-                        <td><input type="text" name="rbport" id="rbport" value="6379" class="input" autoComplete="off">
+                        <td><input type="text" name="rbport" id="rbport" value="6379" class="input" autoComplete="off" onBlur="redisDbPwd(0)">
                         </td>
                         <td>
-                            <div id="J_install_tip_manager_pwd"><span class="gray">redis端口,默认为6379</span></div>
+                            <div id="J_install_redis_port"><span class="gray">redis端口,默认为6379</span></div>
                         </td>
                     </tr>
                     <tr>
                         <td class="tar">数据库:</td>
-                        <td><input type="text" name="rbselect" id="rbselect" value="0" class="input" autoComplete="off">
-                        </td>
+                        <td><input type="text" name="rbselect" id="rbselect" value="0" class="input" autoComplete="off"  onBlur="redisDbPwd(0)"></td>
                         <td>
-                            <div id="J_install_tip_manager_ckpwd"><span class="gray">redis数据库,默认为0,一般不做更改</span></div>
+                            <div id="J_install_redis_select"><span class="gray">redis数据库,默认为0,一般不做更改</span></div>
                         </td>
                     </tr>
                     <tr>
                         <td class="tar">数据库密码:</td>
-                        <td><input type="password" name="rbpw" onBlur="TestDbPwd(0)" id="rbpw" value="" class="input"
-                                   autoComplete="off"></td>
+                        <td><input type="text" name="rbpw" id="rbpw" value="" class="input" autoComplete="off"  onBlur="redisDbPwd(0)"></td>
                         <td>
-                            <div id="J_install_tip_dbpw"></div>
-                            <span class="gray">redis数据库密码</span></td>
+                            <div id="J_install_redis_dbpw"><span class="gray">redis数据库密码</span></div>
+                        </td>
                     </tr>
 
                 </table>
@@ -122,23 +117,22 @@
                     </tr>
                     <tr>
                         <td class="tar">管理员帐号:</td>
-                        <td><input type="text" name="manager" id="manager" value="admin" class="input"></td>
+                        <td><input type="text" name="manager" id="manager" value="admin" class="input" onblur="checkForm()"></td>
                         <td>
                             <div id="J_install_tip_manager"></div>
                         </td>
                     </tr>
                     <tr>
                         <td class="tar">管理员密码:</td>
-                        <td><input type="password" name="manager_pwd" id="manager_pwd" class="input" autoComplete="off">
+                        <td><input type="password" name="manager_pwd" id="manager_pwd" class="input" autoComplete="off"  onblur="checkForm()">
                         </td>
                         <td>
-                            <div id="J_install_tip_manager_pwd"></div>
+                            <div id="J_install_tip_manager_pwd"><span class="gray">请输入至少6个字符密码</span></div>
                         </td>
                     </tr>
                     <tr>
                         <td class="tar">重复密码:</td>
-                        <td><input type="password" name="manager_ckpwd" id="manager_ckpwd" class="input"
-                                   autoComplete="off"></td>
+                        <td><input type="password" name="manager_ckpwd" id="manager_ckpwd" class="input" autoComplete="off"  onkeyup="checkForm()"></td>
                         <td>
                             <div id="J_install_tip_manager_ckpwd"></div>
                         </td>
@@ -148,7 +142,7 @@
                 <div id="J_response_tips" style="display:none;"></div>
             </div>
             <div class="bottom tac"><a href="./index.php?step=2" class="btn">上一步</a>
-                <button type="button" onClick="checkForm();" class="btn btn_submit J_install_btn">创建数据</button>
+                <button type="button" onClick="submitForm();" class="btn btn_submit J_install_btn">创建数据</button>
             </div>
         </form>
     </section>
@@ -157,27 +151,18 @@
     <script src="./js/validate.js?v=9.0"></script>
     <script src="./js/ajaxForm.js?v=9.0"></script>
     <script>
-
-        function TestDbPwd(connect_db) {
-            var dbHost = $('#dbhost').val();
-            var dbUser = $('#dbuser').val();
-            var dbPwd = $('#dbpw').val();
-            var dbName = $('#dbname').val();
-            var dbport = $('#dbport').val();
-            var demo = $('#demo').val();
+        var mysqlstatu = false;
+        var redisstatu = false;
+        function mysqlDbPwd(connect_db) {
             var data = {
-                'dbHost': dbHost,
-                'dbUser': dbUser,
-                'dbPwd': dbPwd,
-                'dbName': dbName,
-                'dbport': dbport,
-                'demo': demo,
-                rbhost: $('#rbhost').val(),
-                rbport: $("#rbport").val(),
-                rbselect: $("#rbselect").val(),
-                rbpw: $('#rbpw').val(),
+                'dbHost': $('#dbhost').val(),
+                'dbUser': $('#dbuser').val(),
+                'dbPwd': $('#dbpw').val(),
+                'dbName': $('#dbname').val(),
+                'dbport': $('#dbport').val(),
+                'demo': $('#demo').val()
             };
-            var url = "<?php echo $_SERVER['PHP_SELF']; ?>?step=3&testdbpwd=1";
+            var url = "<?php echo $_SERVER['PHP_SELF']; ?>?step=3&mysqldbpwd=1";
             $.ajax({
                 type: "POST",
                 url: url,
@@ -187,65 +172,132 @@
                 },
                 success: function (msg) {
                     if (msg == 1) {
-
-                        if (connect_db == 1) {
-                            $("#J_install_form").submit(); // ajax 验证通过后再提交表单
-                        }
+                        // $('#J_install_tip_dbpw').html('<span generated="true" class="tips_success" style="">密码正确</span>');
                         $('#J_install_tip_dbpw').html('');
                         $('#J_install_tip_dbname').html('');
                         $('#J_install_rbhost').html('');
+                        mysqlstatu = true;
                     } else if (msg == -1) {
-                        $('#J_install_tip_dbpw').html('');
-                        $('#J_install_tip_dbname').html('');
-                        $('#J_install_rbhost').html('<span for="dbname" generated="true" class="tips_error" style="">Redis扩展没有安装</span>');
+                        // $('#dbpw').val("");
+                        $('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" >数据库链接配置失败</span>');
+                        mysqlstatu = false;
                     } else if (msg == -2) {
-                        $('#J_install_tip_dbname').html('<span for="dbname" generated="true" class="tips_error" style="">你的不是空数据库, 请更换一个数据库名字</span>');
+                        $('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" >请在mysql配置文件修sql-mode或sql_mode为NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,<a half="https://doc.crmeb.com/web/single/crmeb_v4/936" target="_blank">查看文档</a></span>');
+                        mysqlstatu = false;
                     } else if (msg == -3) {
                         $('#J_install_tip_dbpw').html('');
-                        $('#J_install_tip_dbname').html('');
-                        $('#J_install_rbhost').html('<span for="dbname" generated="true" class="tips_error" style="">Redis数据库没有启动或者密码错误</span>');
-                    } else if (msg == -4) {
-                        $('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" style="">请在mysql配置文件修sql-mode或sql_mode为NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION</span>');
+                        $('#J_install_tip_dbname').html('<span for="dbname" generated="true" class="tips_error" >你的不是空数据库, 请更换一个数据库名字</span>');
+                        mysqlstatu = false;
+                    }else if (msg == -4) {
+                        $('#J_install_tip_dbpw').html('');
+                        $('#J_install_tip_dbname').html('<span for="dbname" generated="true" class="tips_error" >无权限创建数据,请先手动创建数据库</span>');
+                        mysqlstatu = false;
+                    } else if (msg == 2002) {
+                        $('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" >地址或端口错误</span>');
+                        mysqlstatu = false;
+                    } else if (msg == 1045) {
+                        $('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" >用户名或密码错误</span>');
+                        mysqlstatu = false;
                     }  else {
-                        $('#dbpw').val("");
-                        $('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" style="">数据库链接配置失败</span>');
+                        $('#J_install_tip_dbpw').html('');
+                        mysqlstatu = false;
                     }
                 },
                 complete: function () {
                 },
                 error: function () {
                     $('#J_install_tip_dbpw').html('<span for="dbname" generated="true" class="tips_error" style="">数据库链接配置失败</span>');
+                    mysqlstatu = false;
+                }
+            });
+        }
+        function redisDbPwd(connect_db) {
+            var data = {
+                rbhost: $('#rbhost').val(),
+                rbport: $("#rbport").val(),
+                rbselect: $("#rbselect").val(),
+                rbpw: $('#rbpw').val(),
+            };
+            var url = "<?php echo $_SERVER['PHP_SELF']; ?>?step=3&redisdbpwd=1";
+            $.ajax({
+                type: "POST",
+                url: url,
+                data: data,
+                dataType: 'JSON',
+                beforeSend: function () {
+                },
+                success: function (msg) {
+                    if (msg == 1) {
+                        // $('#J_install_redis_host').html('<span generated="true" class="tips_success" style="">地址配置正确</span>');
+                        // $('#J_install_redis_port').html('<span generated="true" class="tips_success" style="">端口配置正确</span>');
+                        // $('#J_install_redis_select').html('<span generated="true" class="tips_success" style="">库可用</span>');
+                        $('#J_install_redis_dbpw').html('<span generated="true" class="tips_success" style="">配置成功</span>');
+                        redisstatu = true;
+                    } else if (msg == -1) {
+                        $('#J_install_redis_host').html('<span for="dbname" generated="true" class="tips_error" style="">Redis扩展没有安装</span>');
+                        redisstatu = false;
+                    } else if (msg == -3) {
+                        $('#J_install_redis_dbpw').html('<span for="dbname" generated="true" class="tips_error" style="">Redis数据库没有启动或者配置信息错误</span>');
+                        redisstatu = false;
+                    } else {
+                        $('#J_install_redis_dbpw').html('<span for="dbname" generated="true" class="tips_error" style="">配置失败</span>');
+                        redisstatu = false;
+                    }
+                },
+                complete: function () {
+                },
+                error: function () {
+                    $('#J_install_redis_dbpw').html('<span for="dbname" generated="true" class="tips_error" style="">数据库链接配置失败</span>');
                     $('#dbpw').val("");
+                    redisstatu = false;
                 }
             });
         }
-
-
         function checkForm() {
             manager = $.trim($('#manager').val());				//用户名表单
             manager_pwd = $.trim($('#manager_pwd').val());				//密码表单
             manager_ckpwd = $.trim($('#manager_ckpwd').val());		//密码提示区
 
             if (manager.length == 0) {
-                alert('管理员账号不能为空');
+                $('#J_install_tip_manager').html('<span for="dbname" generated="true" class="tips_error" style="">请输入管理账号</span>');
                 return false;
             }
             if (!(/^[a-zA-Z]{0,}$/.test(manager))) {
-                alert('账号必须为英文或者数字');
+                // alert('账号必须为英文或者数字');
+                $('#J_install_tip_manager').html('<span generated="true" class="tips_error" style="">账号必须为英文或者数字</span>');
                 return false;
+            } else {
+                $('#J_install_tip_manager').html('<span generated="true" class="tips_success" style="">用户名可用</span>');
             }
             if (manager_pwd.length < 6) {
-                alert('管理员密码必须6位数以上');
+                // alert('管理员密码必须6位数以上');
+                $('#J_install_tip_manager_pwd').html('<span for="dbname" generated="true" class="tips_error" style="">管理员密码必须5位数以上</span>');
                 return false;
+            } else {
+                $('#J_install_tip_manager_pwd').html('<span generated="true" class="tips_success" style="">密码可用</span>');
             }
             if (manager_ckpwd != manager_pwd) {
-                alert('两次密码不一致');
+                // alert('两次密码不一致');
+                $('#J_install_tip_manager_ckpwd').html('<span for="dbname" generated="true" class="tips_error" style="">两次密码不一致</span>');
                 return false;
+            } else {
+                $('#J_install_tip_manager_ckpwd').html('<span generated="true" class="tips_success" style="">密码正确</span>');
+                return true;
             }
-            TestDbPwd(1);
-        }
 
 
+        }
+        function submitForm() {
+            if(!mysqlstatu) {
+                mysqlDbPwd(1);
+            }
+            if(!redisstatu) {
+                redisDbPwd(1);
+            }
+            if(checkForm()) {
+                $("#J_install_form").submit(); // ajax 验证通过后再提交表单
+            }
+        }
     </script>
 </div>
 <?php require './templates/footer.php'; ?>