本软件是作为部门内员工之间留言及发送消息使用。
系统必须通过口令验证,登录进入。方法是从数据库内取出用户姓名和口令的数据进行校验。
用户管理的工作(比如增加,删除,修改用户)通过直接对数据库操作实现,不在本系统中实现,可以自行在数据库用户表中增加测试数据。
系统包含四部分功能
1 登录:验证用户名与口令,保存会话信息,进入主界面。
2 退出:退出使用状态,清空会话信息,返回登录界面。
3 信息查询:显示给当前登录人留的信息以及公共信息(给所有人发送)。
4 发信息:当前登录人员用来给其他人发信息的功能。信息的内容包括:信息的编号(自动编号),发送人,信息内容,接收人,发送时间等,可以发给所有人,也可以发给某个人。
基本结构:
controller 数据操作逻辑控制页面
js javascript脚本页面
libs smarty目录
model 与数据库交互CURD数据页面
templates 模板目录
templates_c 编译后模板目录
config.ini.php 配置页
index.php 入口文件
数据库结构:
View Code
1 DROP TABLE IF EXISTS `emp`; 2 CREATE TABLE `emp` ( 3 `emp_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 4 `emp_name` varchar(64) NOT NULL, 5 `emp_pwd` char(32) NOT NULL, 6 PRIMARY KEY (`emp_id`), 7 UNIQUE KEY `emp_name` (`emp_name`) 8 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 9 10 INSERT INTO `emp` VALUES ('1', 'admin', 'admin'); 11 12 DROP TABLE IF EXISTS `message`; 13 CREATE TABLE `message` ( 14 `message_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 15 `sender` varchar(64) NOT NULL, 16 `getter` varchar(64) NOT NULL, 17 `sendtime` datetime NOT NULL, 18 `content` varchar(2000) NOT NULL, 19 PRIMARY KEY (`message_id`) 20 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
model文件
EmpModel.class.php
View Code
1 <?php 2 class EmpModel { 3 public $uid; 4 public $username; 5 6 public function checkLogin($name, $pwd) { 7 $db = new SqlHelper(); 8 $sql = "select * from emp where emp_name = '$name'" ; 9 $re = $db->getrow($sql); 10 if ($re) { 11 if ($re['emp_pwd'] == $pwd) { 12 $this->uid = $re['emp_id']; 13 $this->username = $re['emp_name']; 14 return TRUE; 15 } else { 16 return FALSE; 17 } 18 19 } else { 20 return FALSE; 21 } 22 23 } 24 25 26 27 28 29 } 30 ?>
FenyePage.class.php
View Code
1 <?php 2 /** 3 * 分页类FenyePage 4 * 5 * 6 */ 7 8 class FenyePage { 9 // 分页栏每页显示的页数 10 public $rollPage = 7; 11 // 页数跳转时要带的参数 12 public $parameter ; 13 // 默认列表每页显示行数 14 public $listRows = 20; 15 // 起始行数 16 public $firstRow ; 17 // 分页总页面数 18 public $totalPages ; 19 // 总行数 20 protected $totalRows ; 21 // 当前页数 22 public $nowPage ; 23 // 分页的栏的总页数 24 protected $coolPages ; 25 // 分页显示定制 26 protected $config = array('header'=>'条记录','prev'=>'上一页','next'=>'下一页','first'=>'第一页','last'=>'最后一页','theme'=>' %totalRow% %header% %nowPage%/%totalPage% 页 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%'); 27 // 默认分页变量名 28 protected $varPage; 29 //默认分页页面 30 public $goUrl = ''; 31 32 /** 33 +---------------------------------------------------------- 34 * 架构函数 35 +---------------------------------------------------------- 36 * @access public 37 +---------------------------------------------------------- 38 * @param array $totalRows 总的记录数 39 * @param array $listRows 每页显示记录数 40 * @param array $parameter 分页跳转的参数 41 +---------------------------------------------------------- 42 */ 43 public function __construct($totalRows,$listRows='10',$parameter='', $varPage='p') { 44 $this->totalRows = $totalRows; 45 $this->parameter = $parameter; 46 $this->varPage = $varPage; 47 if(!empty($listRows)) { 48 $this->listRows = intval($listRows); 49 } else { 50 $this->listRows = 10; //默认每页10条记录 51 } 52 $this->totalPages = ceil($this->totalRows/$this->listRows); //总页数 53 $this->coolPages = ceil($this->totalPages/$this->rollPage); 54 $this->nowPage = !empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1; 55 if(!empty($this->totalPages) && $this->nowPage>$this->totalPages) { 56 $this->nowPage = $this->totalPages; 57 } 58 $this->firstRow = $this->listRows*($this->nowPage-1); 59 } 60 61 public function setConfig($name,$value) { 62 if(isset($this->config[$name])) { 63 $this->config[$name] = $value; 64 } 65 } 66 67 //分页内容 68 public function showContent() { 69 70 } 71 72 /** 73 +---------------------------------------------------------- 74 * 分页显示输出 75 +---------------------------------------------------------- 76 * @access public 77 +---------------------------------------------------------- 78 */ 79 public function show() { 80 if(!empty($this->goUrl)) { 81 $url = $this->getGoUrl($_SERVER['REQUEST_URI']); 82 } else { 83 $url = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], '?') ? '' : "?") . $this->parameter; 84 } 85 $parse = parse_url($url); 86 $p = $this->varPage; 87 if(isset($parse['query'])) { 88 parse_str($parse['query'], $params); 89 if(isset($params[$$p])) { 90 unset($params[$$p]); 91 unset($params['sub']); 92 } 93 94 $url = $parse['path'] . '?' . http_build_query($params); 95 96 } 97 $r = '<span>本次查询结果总数:<strong>' . $this->totalRows . '</strong></span>'; 98 $minpage = $this->nowPage - ceil($this->rollPage / 2); 99 if($minpage < 1) { 100 $minpage = 1; 101 } 102 //保证每页显示的页数 103 if($this->totalPages < ($minpage + $this->rollPage)) { 104 $minpage = $this->totalPages - $this->rollPage + 1; 105 if($minpage < 1) { 106 $minpage = 1; 107 } 108 } 109 if($minpage > 1) { 110 $r .= '<a href="' . $url . '&' . $p . '=1">1..</a>'; 111 } 112 if($this->nowPage > 1) { 113 $r .= '<a href="' . $url . '&' . $p . '=' . ($this->nowPage - 1) . '">' . $this->config['prev'] . '</a>'; 114 } 115 for($i = 0; $i < $this->rollPage; $i++) { 116 if($minpage + $i == $this->nowPage) { 117 $r .= '<a href="' . $url . '&' . $p . '=' . ($minpage + $i) . '" class="cur">' . ($minpage + $i) . '</a>'; 118 } else { 119 $r .= '<a href="' . $url . '&' . $p . '=' . ($minpage + $i) . '">' . ($minpage + $i) . '</a>'; 120 } 121 } 122 if($this->nowPage < $this->totalPages) { 123 $r .= '<a href="' . $url . '&' . $p . '=' . ($this->nowPage + 1) . '">' . $this->config['next'] . '</a>'; 124 } 125 if($minpage + $this->rollPage < $this->totalPages) { 126 $r .= '<a href="' . $url . '&' . $p . '=' . $this->totalPages . '">..' . $this->totalPages . '</a>'; 127 } 128 $r .= '<br/> 129 <form id="myform">请输入跳转页数 130 <input type="text" id="pageNow" name="'.$p.'"/> 131 <input type="button" value="提交" onclick="javascript:checkPageNow()"; /> 132 </form>'; 133 return $r; 134 } 135 136 //替换url中path最后php文件名 137 private function getGoUrl($url) { 138 $url = $url . (strpos($url, '?') ? '' : "?" . $this->parameter); 139 $reg = '/(\/)[\w\.]*(\?)/i'; 140 $url = preg_replace($reg, '$1'.$this->goUrl.'$2', $url); 141 return $url; 142 } 143 144 /** 145 +---------------------------------------------------------- 146 * 分页显示输出 147 +---------------------------------------------------------- 148 * @access public 149 +---------------------------------------------------------- 150 */ 151 public function show2() { 152 if(0 == $this->totalRows) return ''; 153 $p = $this->varPage; 154 $nowCoolPage = ceil($this->nowPage/$this->rollPage); 155 if(!empty($this->goUrl)) { 156 $url = $this->getGoUrl($_SERVER['REQUEST_URI']); 157 } else { 158 $url = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], '?') ? '' : "?") . $this->parameter; 159 } 160 $parse = parse_url($url); 161 if(isset($parse['query'])) { 162 parse_str($parse['query'],$params); 163 unset($params[$p]); 164 $url = $parse['path'].'?'.http_build_query($params); 165 } 166 //上下翻页字符串 167 $upRow = $this->nowPage-1; 168 $downRow = $this->nowPage+1; 169 if ($upRow>0){ 170 $upPage="<a href='".$url."&".$p."=$upRow'>".$this->config['prev']."</a>"; 171 }else{ 172 $upPage=""; 173 } 174 175 if ($downRow <= $this->totalPages){ 176 $downPage="<a href='".$url."&".$p."=$downRow'>".$this->config['next']."</a>"; 177 }else{ 178 $downPage=""; 179 } 180 // << < > >> 181 if($nowCoolPage == 1){ 182 $theFirst = ""; 183 $prePage = ""; 184 }else{ 185 $preRow = $this->nowPage-$this->rollPage; 186 $prePage = "<a href='".$url."&".$p."=$preRow' >上".$this->rollPage."页</a>"; 187 $theFirst = "<a href='".$url."&".$p."=1' >".$this->config['first']."</a>"; 188 } 189 if($nowCoolPage == $this->coolPages){ 190 $nextPage = ""; 191 $theEnd=""; 192 }else{ 193 $nextRow = $this->nowPage+$this->rollPage; 194 $theEndRow = $this->totalPages; 195 $nextPage = "<a href='".$url."&".$p."=$nextRow' >下".$this->rollPage."页</a>"; 196 $theEnd = "<a href='".$url."&".$p."=$theEndRow' >".$this->config['last']."</a>"; 197 } 198 // 1 2 3 4 5 199 $linkPage = ""; 200 for($i=1;$i<=$this->rollPage;$i++){ 201 $page=($nowCoolPage-1)*$this->rollPage+$i; 202 if($page!=$this->nowPage){ 203 if($page<=$this->totalPages){ 204 $linkPage .= " <a href='".$url."&".$p."=$page'> ".$page." </a>"; 205 }else{ 206 break; 207 } 208 }else{ 209 if($this->totalPages != 1){ 210 $linkPage .= " <span class='current'>".$page."</span>"; 211 } 212 } 213 } 214 $pageStr = str_replace( 215 array('%header%','%nowPage%','%totalRow%','%totalPage%','%upPage%','%downPage%','%first%','%prePage%','%linkPage%','%nextPage%','%end%'), 216 array($this->config['header'],$this->nowPage,$this->totalRows,$this->totalPages,$upPage,$downPage,$theFirst,$prePage,$linkPage,$nextPage,$theEnd),$this->config['theme']); 217 return $pageStr; 218 } 219 220 }
MessageModel.class.php
View Code
1 <?php 2 class MessageModel { 3 4 //显示所有信息 5 public function showMessageAll($loginname) { 6 7 $sql = "select * from message where getter = '所有人' or getter = '$loginname'"; 8 $sqlHelper = new SqlHelper(); 9 $res = $sqlHelper->getAll($sql); 10 $sqlHelper->my_close(); 11 return $res; 12 } 13 14 //根据分页类获取对应信息 15 public function showMessageByPage($firstRow, $listRows, $loginname) { 16 17 $sql = "select * from message where getter = '所有人' or getter = '$loginname' limit $firstRow, $listRows"; 18 $sqlHelper = new SqlHelper(); 19 $res = $sqlHelper->getAll($sql); 20 $sqlHelper->my_close(); 21 return $res; 22 } 23 24 //添加信息 25 public function addMessage($getter, $content) { 26 $sender = unserialize($_SESSION['loginuser'])->username; 27 $sql = "insert into message (sender,getter,sendtime,content) values ('$sender', '$getter',now(),'$content')"; 28 $sqlHelper = new SqlHelper(); 29 $res = $sqlHelper->query($sql); 30 $sqlHelper->my_close(); 31 return $res; 32 } 33 34 //删除信息 35 public function deleteMessage($id) { 36 $getter = unserialize($_SESSION['loginuser'])->username; 37 $sql = "delete from message where (getter = '所有人' or getter = '$getter') and message_id = '$id'"; 38 $sqlHelper = new SqlHelper(); 39 $res = $sqlHelper->query($sql); 40 $sqlHelper->my_close(); 41 return $res; 42 } 43 } 44 ?>
SqlHelper.class.php
View Code
1 <?php 2 class SqlHelper 3 { 4 protected $link_id; 5 //初始化数据库连接并选择数据库和设置连接字符集 6 public function __construct($dbhost = DBHOST, $dbuser = DBUSER, $dbpw = DBPWD, $dbname = DBNAME, $charset = 'utf-8') 7 { 8 if(!($this->link_id = @mysql_connect($dbhost, $dbuser, $dbpw))) 9 { 10 $this->ErrorMsg("Can't pConnect MySQL Server!"); 11 } 12 13 mysql_query("SET NAMES " . $charset, $this->link_id); 14 15 if ($dbname) 16 { 17 if (@mysql_select_db($dbname, $this->link_id) === false ) 18 { 19 $this->ErrorMsg("Can't select MySQL database($dbname)!"); 20 21 return false; 22 } 23 else 24 { 25 return true; 26 } 27 } 28 29 } 30 //选择数据库 31 public function select_database($dbname) 32 { 33 return mysql_select_db($dbname, $this->link_id); 34 } 35 //列出所有表 36 public function list_tables($dbname){ 37 return mysql_list_tables($dbname,$this->link_id); 38 } 39 //列出一个表的所有字段 40 public function list_fields($dbname,$tbname){ 41 return mysql_list_fields($dbname,$tbname,$this->link_id); 42 } 43 //取得关联数组的结果表示 44 public function fetch_array($query, $result_type = MYSQL_ASSOC) 45 { 46 return mysql_fetch_array($query, $result_type); 47 } 48 //执行sql语句 49 public function query($sql) 50 { 51 return mysql_query($sql, $this->link_id); 52 } 53 //取得前一次 MySQL 操作所影响的记录行数 54 public function affected_rows() 55 { 56 return mysql_affected_rows($this->link_id); 57 } 58 //取得结果集中行的数目 59 public function num_rows($query) 60 { 61 return mysql_num_rows($query); 62 } 63 //取得上一步 INSERT 操作产生的 ID 64 public function insert_id() 65 { 66 return mysql_insert_id($this->link_id); 67 } 68 //限制执行sql的结果条目数 69 public function selectLimit($sql, $num, $start = 0) 70 { 71 if ($start == 0) 72 { 73 $sql .= ' LIMIT ' . $num; 74 } 75 else 76 { 77 $sql .= ' LIMIT ' . $start . ', ' . $num; 78 } 79 return $this->query($sql); 80 } 81 //获得一条结果true或一个字段false 82 public function getOne($sql, $limited = false) 83 { 84 if ($limited == true) 85 { 86 $sql = trim($sql . ' LIMIT 1'); 87 } 88 89 $res = $this->query($sql); 90 if ($res !== false) 91 { 92 $row = mysql_fetch_row($res); 93 94 return $row[0]; 95 } 96 else 97 { 98 return false; 99 } 100 } 101 //获取一条结果 关联数组 102 public function getrow($sql) 103 { 104 $res = $this->query($sql); 105 if ($res !== false) 106 { 107 return mysql_fetch_assoc($res); 108 } 109 else 110 { 111 return false; 112 } 113 } 114 // 获取全部结果 关联数组 115 public function getAll($sql) 116 { 117 $res = $this->query($sql); 118 if ($res !== false) 119 { 120 $arr = array(); 121 while ($row = mysql_fetch_assoc($res)) 122 { 123 $arr[] = $row; 124 } 125 126 return $arr; 127 } 128 else 129 { 130 return false; 131 } 132 } 133 134 135 // 错误显示 136 function ErrorMsg($message = '', $sql = '') 137 { 138 if ($message) 139 { 140 echo "<b>error info</b>: $message\n\n"; 141 } 142 else 143 { 144 echo "<b>MySQL server error report:"; 145 print_r(mysql_error($this->link_id)); 146 } 147 148 exit; 149 } 150 //关闭mysql连接 151 function my_close() { 152 mysql_close($this->link_id); 153 } 154 } 155 ?>
所有代码:
http://pan.baidu.com/share/link?shareid=361388&uk=1074075174