html代码:
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <title>XXXXXXXXXXXXXXXXXXXXXXXXX</title> 5 <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 6 <meta charset="utf-8"> 7 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 8 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"> 9 <link rel="stylesheet" href="files/css.css" type="text/css" /> 10 <link rel="stylesheet" href="files/bootstrap.min.css"> 11 <script src="files/jquery.min.js?201705251600"></script> 12 <script type="text/javascript"> 13 //ajax函数 14 function ajax(url,method,data,success){ 15 var xhr = null; 16 try{ 17 xhr = new XMLHttpRequest(); 18 }catch(e){ 19 xhr = new ActiveXObject("Microsoft.XMHTTP"); 20 } 21 url+="?"+data; 22 xhr.open(method,url,true); 23 xhr.onreadystatechange=function(){ 24 if(xhr.readyState===4){ 25 if(xhr.status===200){ 26 success && success(xhr.responseText); 27 }else{ 28 alert(xhr.status); 29 } 30 } 31 } 32 xhr.send() 33 } 34 window.onload=function(){ 35 //dom操作 36 var username1 = document.getElementById("username1"); 37 var verifyUserNameMsg = document.getElementById("verifyUserNameMsg"); 38 /* var verifyPasswordMsg = document.getElementById("verifyPasswordMsg"); */ 39 var btnReg = document.getElementById('btnReg'); 40 var password1 = document.getElementById("password1"); 41 var username2 = document.getElementById("username2"); 42 var password2 = document.getElementById("password2"); 43 var btnLogin = document.getElementById("btnLogin"); 44 var logout = document.getElementById("logout"); 45 var user = document.getElementById("user"); 46 var userinfo = document.getElementById("userinfo"); 47 //校验帐号 48 username1.onblur=function(){ 49 ajax("files/index.php","get","m=index&a=verifyUserName&username="+this.value,function(data){ 50 var jsondata = JSON.parse(data) 51 verifyUserNameMsg.innerHTML=jsondata.message; 52 console.log(JSON.parse(data)); 53 if(jsondata.code==1 || jsondata.code==2){ 54 verifyUserNameMsg.style.color="red"; 55 btnReg.disabled=true; 56 }else{ 57 verifyUserNameMsg.style.color="green"; 58 btnReg.disabled=false; 59 } 60 }) 61 } 62 //校验密码 63 /* username1.onblur=function(){ 64 ajax("files/index.php","get","m=index&a=verifypassword&password="+this.value,function(data){ 65 var jsondata = JSON.parse(data) 66 verifyPasswordMsg.innerHTML=jsondata.message; 67 console.log(JSON.parse(data)); 68 if(jsondata.code==1 || jsondata.code==2){ 69 verifyPasswordMsg.style.color="red"; 70 btnReg.disabled=true; 71 }else{ 72 verifyPasswordMsg.style.color="green"; 73 btnReg.disabled=false; 74 } 75 }) 76 } */ 77 //注册帐号 78 btnReg.onclick=function(){ 79 ajax("files/index.php","get","m=index&a=reg&username="+username1.value+"&password="+password1.value,function(data){ 80 alert("注册成功!请采用ftp工具或资源管理器连接"); 81 window.location.href='files/help.php'; 82 }) 83 } 84 //登录帐号 85 btnLogin.onclick=function(){ 86 ajax("files/index.php","get","m=index&a=login&username="+username2.value+"&password="+password2.value,function(data){ 87 console.log(data); 88 var jsondata = JSON.parse(data); 89 if(jsondata.code===1){ 90 alert(jsondata.message); 91 92 }else{ 93 alert(jsondata.message); 94 user.style.display="block"; 95 location.reload(); 96 //userinfo.innerHTML=cookiename; 97 } 98 }) 99 } 100 if(uid===undefined){ 101 // userinfo.innerHTML=""; 102 user.style.display="none"; 103 } 104 if(cookiename){ 105 userinfo.innerHTML=cookiename; 106 } 107 logout.onclick=function(){ 108 console.log(123); 109 ajax("files/index.php","get","m=index&a=logout",function(data){ 110 var jsondata = JSON.parse(data) 111 console.log(data); 112 if(jsondata.code === 0){ 113 alert("退出成功!"); 114 location.reload(); 115 }else{ 116 } 117 }) 118 } 119 } 120 function getCookie(cookiename){ 121 var strCookie = document.cookie; 122 var arrCookie = strCookie.split(";"); 123 for(var i = 1;i<arrCookie.length;i++){ 124 var arr = arrCookie[i].split("="); 125 if(arr[0]===cookiename){ 126 return arr[1]; 127 } 128 } 129 } 130 var cookiename = getCookie(" username"); 131 var uid = getCookie(" uid"); 132 console.log(cookiename); 133 console.log(uid); 134 </script> 135 </head> 136 <body> 137 <div class="header">XXXXXXXXXXXXXXXXXXXXXXXXX</div> 138 <div id="container"> 139 <div id="sidebar"> 140 <div id="reg" > 141 <h1 class="register-title">注册</h1> 142 <div class="register"> 143 <input type="text" class="register-input" name="username" id="username1" placeholder="请输入帐号"> 144 <p id="verifyUserNameMsg"></p> 145 <input type="password" class="register-input" name="password" id="password1" placeholder="请输入密码"> 146 <input type="button" value="注册" class="register-button" id="btnReg"> 147 </div> 148 <!-- 登陆 --> 149 <!--<div id="login"> 150 <h1 class="register-title">登录</h1> 151 <div class="register"> 152 <input type="text" name="username2" id="username2" class="register-input" placeholder="请输入帐号"> 153 <input type="password" class="register-input" name="password2" id="password2" placeholder="请输入密码"> 154 <input type="button" value="登录" class="register-button" id="btnLogin"> 155 </div> 156 </div> --> 157 </div> 158 </div> 159 </div> 160 <p><center><p>只允许英文字符4-16个字符</center></p> 161 <hr style=" 310px;"> 162 <p><center><a href="#" target="_blank">官方首页</a> | <a href="http://www.miibeian.gov.cn" target="_blank">浙ICP备16041280号</a> | <a href="/files/help.php" target="_blank">帮助</a></center></p> 163 </body> 164 </html>
php代码:
files/index.php
1 <?php 2 error_reporting(E_ALL ^ E_DEPRECATED); 3 /* 4 * 入口文件 5 * 数据库基本信息 host port username password databases 6 * 控制层,get参数选择 7 * DB类中加载数据库连接类(DB_Mysql),给数据库传入数据库基本信息 8 * Controller类中初始化code与message,建立send方法,array_merge并json_encode e 9 * exit();输出一个消息并且退出当前脚本 10 * 加载模型层,以call_user_func方法,把第一个参数作为回调函数,其余参数为回调函数的参数 11 * 12 * 13 */ 14 //数据层 15 $config=array( 16 'db_host' => 'localhost', 17 'db_port' => '3306', 18 'db_user' => 'root', 19 'db_password' => '', 20 'db_name' => 'xlight_ftp', 21 ); 22 //控制层 23 define("module_action",$_REQUEST["a"]); 24 // mysql库的控制层 25 class DB{ 26 public static function factory(){ 27 global $config; 28 //mysql库 29 require_once("./libs/Class/DB_Mysql.class.php"); 30 return DB_Mysql::instance($config); 31 } 32 } 33 class Controller{ 34 public $db = null; 35 private $ajaxData=array( 36 "code"=>0, 37 "message"=>"", 38 ); 39 public function __construct(){ 40 $this->db = DB::factory(); 41 } 42 public function send($data=array()){ 43 $showdata = array_merge($this->ajaxData,$data); 44 echo json_encode($showdata);//转成json responseText 45 exit(); //输出一个消息并且退出当前脚本 46 } 47 } 48 //MVC中的模型层 49 require_once("./Controller/IndexController.class.php"); 50 //把第一个参数作为回调函数调用,其余参数是回调函数的参数。 51 call_user_func(array(new IndexController,module_action));
./libs/Class/DB_Mysql.class.php
1 <?php 2 /* 3 * 4 * 这是数据库connect、query、select、连接,插入,查询 5 * 有一个有趣的地方,就是在调用DB_Mysql::instance($config),实际上就是在new DB_Mysql($config), 6 * new DB_Mysql($config) 会把$config保存,还会调用当前类的数据库connect方法 7 * 8 */ 9 class DB_Mysql { 10 private static $instanceObj; 11 private $config ; //盛放的是数据库连接的信息,host port username password databases 12 private function __construct($config) { 13 $this->config = $config; 14 $this->connect(); 15 } 16 public static function instance($config) { 17 if (!self::$instanceObj) { 18 self::$instanceObj = new DB_Mysql($config); 19 } 20 return self::$instanceObj; 21 } 22 //连接数据库 23 public function connect() { 24 mysql_connect($this->config['db_host'],$this->config['db_user'],$this->config['db_password']); 25 mysql_select_db($this->config['db_name']); 26 $this->query("set names 'utf8'"); 27 } 28 //执行sql语句 29 public function query($sql) { 30 return mysql_query($sql); 31 } 32 public function select($sql) { 33 $query = $this->query($sql); 34 $rs = array(); 35 //将查询的结果以数字1的索引方式存在数组里面 36 $queryArr = mysql_fetch_array($query, 1); 37 if($queryArr) { 38 $rs[] = $queryArr; 39 } 40 return isset($rs[0])?$rs[0]:false; 41 } 42 }
./Controller/IndexController.class.php
1 <?php 2 class IndexController extends Controller { 3 /** 4 * @ 用户名验证 传返回值。 5 * return 0: 表示在数据库没有查到有相同用户名 6 * return 1: 用户名的长度和类型不合法 7 * return 2: 表示在数据库查到了相同用户名 8 * $rs存在: 表示表示用查到了相同的用户名,return 2; 9 */ 10 private function _verifyUserName($username) { 11 if (strlen($username) < 4 || strlen($username) > 16) {return 1;} 12 if (preg_match("/^[a-z0-9#]*$/", $username)) { 13 //查数据库里面的数据 14 $rs = $this->db->select("SELECT `username` FROM `acct_table` WHERE `username`='{$username}' LIMIT 1"); 15 if ($rs) {return 2;}else{return 0;} 16 } else {return 1;} 17 } 18 /* private function verifypassword($password) { 19 $password = $_REQUEST['password']; 20 if (strlen($password) < 4 || strlen($password) > 16) {return 1;} 21 if (preg_match("/^[a-z0-9#]*$/", $password)) { 22 return 4; 23 } 24 } */ 25 /** 26 * @ interface 用户名验证 27 * 前台传来的get参数,选择执行IndexController下来action 28 */ 29 public function verifyUserName() { 30 $username = $_REQUEST['username']; 31 $code = $this->_verifyUserName($username); 32 switch ($code) { 33 case 0: 34 $this->send(array('code'=>0,'message'=>'恭喜你,该用户名可以注册!')); 35 break; 36 case 1: 37 $this->send(array('code'=>1,'message'=>'用户名只能是英文4-16个字符!')); 38 break; 39 case 2: 40 $this->send(array('code'=>2,'message'=>'对不起,该用户名已经被注册了!')); 41 break; 42 default: 43 break; 44 } 45 } 46 47 /** 48 * @ interface 用户注册 49 * $username 是帐号 50 * $password 是密码 51 * $code 是检测的返回值 1长度太短 2帐号已注册 0正确 52 * 53 */ 54 public function reg() { 55 $username = $_REQUEST['username']; 56 $password = $_REQUEST['password']; 57 $code = $this->_verifyUserName($username); 58 //if($code ==0){$this->sendByAjax(array('code'=>1,'message'=>""))} 59 if ($code !== 0 || strlen($password)<3 || strlen($password) > 20) { 60 $this->send(array('code'=>1,'message'=>'注册失败!')); 61 } 62 //密码加密,插入数据库里面 63 $password = md5($password); 64 if (false === $this->db->query("insert into acct_table (host_port,username, password) values ('21','{$username}', '{$password}')")) { 65 $this->send(array('code'=>1,'message'=>'注册失败!')); 66 }else { 67 $this->send(array('message'=>'注册成功!')); 68 } 69 } 70 /** 71 * @ 用户登陆 72 * $username 是帐号 73 * $password 是密码 74 * $rs 在数据库中选出所有用户名等于$username的所有信息,mysql_fetch-array($sql,1);放在$rs数组里面 75 * setcookie(cookiename,cookie的值,cookie的有效期,cookie的服务器路径) 76 */ 77 public function login() { 78 $username = $_REQUEST['username']; 79 $password = $_REQUEST['password']; 80 //检测cookie中有没有uid,有则证明已经登录过了。 81 if (isset($_COOKIE['uid'])) { 82 $this->send(array('code'=>1,'message'=>'你已经登陆过了!')); 83 } 84 $rs= $this->db->select("select * from acct_table where username='{$username}' limit 1"); 85 if ($rs) { 86 if ($rs['password'] != md5($password)) { 87 $this->send(array('code'=>1,'message'=>'密码与帐号不匹配')); 88 } else { 89 //1分钟过期 90 setcookie('uid', $rs['uid'], time() + 60, '/'); 91 setcookie('username', $rs['username'], time() + 60, '/'); 92 $this->send(array('code'=>0,'message'=>'登陆成功!cookie有效时间为1min')); 93 } 94 } else { 95 $this->send(array('code'=>1,'message'=>'数据库未检测到您的信息')); 96 } 97 } 98 /** 99 * @ 用户退出 100 * 通过把失效日期设置为过去的日期/时间,删除一个 cookie 101 * uid不存在的话,则证明就没有登录 102 */ 103 public function logout() { 104 if (!isset($_COOKIE['uid'])) { 105 $this->send(array('code'=>1,'message'=>'你还没有登陆!')); 106 } else { 107 //通过把失效日期设置为过去的日期/时间,删除一个 cookie: 108 setcookie('uid', "", time() - 60, '/'); 109 $this->send(array('code'=>0,'message'=>'退出成功!')); 110 } 111 } 112 }