CI+JQuery+AJAX留言板

来源:互联网 发布:客服订单系统源码 编辑:程序博客网 时间:2024/05/17 01:26
最近公司内部聊天公办服务器挂了,但不能断了与几位好友的联系,于是写了一个简单得不能再简单的留言板(不能与其他的相比),用来吹壳子~

CI是一个PHP MVC框架,JQuery是一个JS库,用AJAX实现发送与显示。

直接上代码:

Controller: chat.php

[php] view plain copy print?
  1. class Chat extends CI_Controller {//CI中类名首字母大写  
  2.     function __construct() {  
  3.         parent::__construct();  
  4.         $this->load->model('chat_model');//加载chat_model  
  5.         $ip_list = array('172.18.59.251''172.18.58.238''172.18.58.248''172.18.58.243');  
  6.         $ip = $this->input->ip_address();  
  7.         if (!in_array($ip$ip_list)) show_404();//简单的过滤了几个IP  
  8.     }  
  9.   
  10.     //home page  
  11.     function index() {  
  12.         $this->load->helper(array('url''form'));  
  13.           
  14.         $this->load->view('index/index');  
  15.     }  
  16.       
  17.     //send message  
  18.     function send() {  
  19.         $data = $this->input->post();  
  20.         if (empty($data)) return false;  
  21.         if ($this->chat_model->save($data) == false) {//保存  
  22.             echo '0';  
  23.         }  
  24.     }  
  25.       
  26.     //show the last N message  
  27.     function show() {  
  28.         $data = $this->chat_model->getSome(5);//获取N条消息  
  29.         $data = array_reverse($data);//反转数组  
  30.         $chat['content'] = $data;  
  31.         $string = $this->load->view('index/show'$chat, TRUE);//视图放入string变量中  
  32.           
  33.         echo $string;//返回给ajax请求  
  34.     }  
  35.       
  36.     //show all message  
  37.     function more() {  
  38.         $data = $this->chat_model->getAll();  
  39.         $chat['content'] = $data;  
  40.         $this->load->view('index/more'$chat);  
  41.     }  
  42. }  
Model: chat_model.php
[php] view plain copy print?
  1. class Chat_model extends CI_Model {  
  2.     function __construct() {  
  3.         parent::__construct();  
  4.         $this->load->database();  
  5.     }  
  6.       
  7.     //save message  
  8.     function save($data) {  
  9.         $data['ip'] = $this->input->ip_address();  
  10.         $data['send_date'] = date('Y-m-d H:i:s');  
  11.         if ($this->db->insert('tb_chat'$data) == false) {  
  12.             return false;  
  13.         }  
  14.         return true;  
  15.     }  
  16.       
  17.     //get N message  
  18.     function getSome($limit) {  
  19.         if ($limit == 0) return false;  
  20.         $this->db->select('username, content, send_date');  
  21.         $this->db->from('tb_chat');  
  22.         $this->db->order_by('send_date''DESC');  
  23.         $this->db->limit($limit);  
  24.         $query = $this->db->get();  
  25.         return $query->result_array();  
  26.     }  
  27.       
  28.     //get all message  
  29.     function getAll() {  
  30.         $query = $this->db->get('tb_chat');  
  31.         return $query->result_array();  
  32.     }  
  33. }  
view: index.php
[php] view plain copy print?
  1. <!DOCTYPE html>  
  2. <html>  
  3.     <head>  
  4.         <title>chat room</title>  
  5.         <meta charset="utf-8">  
  6.         <script src="common/js/jquery.min.js"></script>  
  7.         <style>  
  8.             body {  
  9.                 padding:0px 50px;  
  10.             }  
  11.             #content {  
  12.                 border: 1px solid #ccc;  
  13.                 height: 400px;  
  14.                 overflow: auto;  
  15.             }  
  16.             #form {  
  17.                 border: 1px solid #ccc;  
  18.             }  
  19.         </style>  
  20.     </head>  
  21.     <body onload="get();">  
  22.         <div id="content">  
  23.               
  24.         </div>  
  25.         <hr>  
  26.         <div id="form">  
  27.         <form id="chat_form">  
  28.             <table>  
  29.                 <tr>  
  30.                     <td>  
  31.                         我是:<input type="text" id="username" name="username">  
  32.                     </td>  
  33.                     <td>  
  34.                         发言:  
  35.                         <textarea id="textarea" rows="5" cols="50"></textarea>  
  36.                     </td>  
  37.                     <td><input id="sendBtn" type="button" value="发送" onclick="send();"></td>  
  38.                 </tr>  
  39.             </table>  
  40.         </form>  
  41.         <hr>  
  42.         <?php echo anchor('index/more''查看全部聊天记录'); ?>  
  43.         </div>  
  44.     </body>  
  45.     <script>  
  46.         function check() {  
  47.             var textareaValue = document.getElementById('textarea').value;  
  48.             if (textareaValue == '') {  
  49.                 alert('啥都没有,就不用发送啦~');  
  50.                 return false;  
  51.             }  
  52.             return true;  
  53.         }  
  54.           
  55.         function send() {  
  56.             if (check() == false) return false;  
  57.             var username = $('#username').val();  
  58.             var content = $('#textarea').val();  
  59.             var url = 'index.php/index/send';  
  60.             if ($('#sendBtn').val() == '发送中...'return false;  
  61.             $('#sendBtn').val('发送中...');  
  62.             $.post(url, {'username':username,'content':content},function(result){  
  63.                 if (result == 0)  
  64.                     alert('send false');  
  65.                 else  
  66.                     $('textarea').val('');  
  67.                 $('#sendBtn').val('发送');  
  68.             });  
  69.         }  
  70.           
  71.         $(document).ready(function(){  
  72.             var timer = setInterval('get()', 5000);//5秒自动获取一次最新消息  
  73.         });  
  74.           
  75.         function get() {  
  76.             var url = 'index.php/index/show';  
  77.             $.post(url,function(result){  
  78.                 $('#content').replaceWith(result);  
  79.             })  
  80.         }  
  81.     </script>  
  82. </html>  
view: more.php
[php] view plain copy print?
  1. <!DOCTYPE html>  
  2. <html>  
  3.     <head>  
  4.         <meta charset="utf-8">  
  5.         <title>All message</title>  
  6.     </head>  
  7.     <body style="padding: 0px 50px;">  
  8.         <div style="border: 1px solid #ccc;">  
  9.             <?php foreach($content as $item): ?>  
  10.             <p>  
  11.                 <?php echo $item['username']; ?> [<?php echo $item['send_date']; ?>]:<br>  
  12.                     <?php echo $item['content']; ?>  
  13.             </p>  
  14.             <hr>  
  15.             <?php endforeach; ?>  
  16.             <p style="text-align: right; padding-right: 100px;"><a href="<?php echo $base_url; ?>">Return</a></p>  
  17.         </div>  
  18.     </body>  
  19. </html>  
view: show.php
[php] view plain copy print?
  1. <div id="content">  
  2.     <?php foreach($content as $item): ?>  
  3.     <p>  
  4.         <?php echo $item['username']; ?> [<?php echo $item['send_date']; ?>]:  <?php echo $item['content']; ?>  
  5.     </p>  
  6.     <hr>  
  7.     <?php endforeach; ?>  
  8. </div>  
SQL: chat.sql
[sql] view plain copy print?
  1. --  
  2. -- 表的结构 `tb_chat`  
  3. --  
  4.   
  5. CREATE TABLE IF NOT EXISTS `tb_chat` (  
  6.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  7.   `username` varchar(32) NOT NULL,  
  8.   `content` text NOT NULL,  
  9.   `send_date` datetime NOT NULL,  
  10.   `ip` varchar(32) NOT NULL,  
  11.   PRIMARY KEY (`id`)  
  12. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;  

注:其中有一问题,若一条message内容过多,或者显示太多的message,div会显示一个滚动条,但是滚动条不能自动到底。
0 0
原创粉丝点击