<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>留言本</title>
<link rel="stylesheet" href="css.css" type="text/css" />
<script src="ajax.js"></script>
<script>
window.onload = function ()
{
//初始化
var ouser = document.getElementById('user');
var ouserinfo = document.getElementById('userinfo');
var oreg = document.getElementById('reg');
var ologin = document.getElementById('login'); updata(); function updata()
{
var uid = getCookie('uid');
var username = getCookie('username'); if(uid)
{
//登陆状态
ouser.style.display = 'block';
ouserinfo.innerHTML = username;
oreg.style.display = 'none';
ologin.style.display = 'none'; } else
{
ouser.style.display = 'none';
ouserinfo.innerHTML = '';
oreg.style.display = 'block';
ologin.style.display = 'block';
} }; showlist();//列出其中几条 //验证用户名开始
var ousername1 = document.getElementById('username1');
var overifyUserNameMsg = document.getElementById('verifyUserNameMsg');
ousername1.onblur = function ()
{
ajax('get','guestbook/index.php','m=index&a=verifyUserName&username='+this.value,function (data)
{
var d = JSON.parse(data);
overifyUserNameMsg.innerHTML = d.message;
if(d.code)
{
overifyUserNameMsg.style.color = 'red';
}
else
{
overifyUserNameMsg.style.color = 'green';
}
});
}
//验证用户名结束 //用户注册开始
var opassword1 = document.getElementById('password1');
var obtnReg = document.getElementById('btnReg'); obtnReg.onclick = function ()
{
ajax('post','guestbook/index.php','m=index&a=reg&username='+encodeURI(ousername1.value)+'&password=' + opassword1.value,function (data)
{
var d = JSON.parse(data);
alert(d.message); });
}
//用户注册结束 //用户登录开始
var ousername2 = document.getElementById('username2');
var opassword2 = document.getElementById('password2');
var obtnLogin = document.getElementById('btnLogin'); obtnLogin.onclick = function ()
{
ajax('post','guestbook/index.php','m=index&a=login&username='+encodeURI(ousername2.value)+'&password=' + opassword2.value,function (data)
{ var d = JSON.parse(data);
alert(d.message);
if(!d.code)
{
updata();
}
});
}
//用户登录结束 //用户退出开始
var ologout = document.getElementById('logout')
ologout.onclick = function ()
{
ajax('get','guestbook/index.php','m=index&a=logout',function (data)
{
var d = JSON.parse(data);
alert(d.message);
if(!d.code)
{
updata();
}
}); return false;
}
//用户退出结束 //用户留言开始
var ocontent = document.getElementById('content');
var obtnPost = document.getElementById('btnPost');
obtnPost.onclick = function ()
{
ajax('post','guestbook/index.php','m=index&a=send&content='+encodeURI(ocontent.value),function (data)
{
var d = JSON.parse(data);
alert(d.message);
if(!d.code)
{
createList(d.data,true);
}
})
}
//用户留言结束
var olist = document.getElementById('list'); function createList(data,insert)
{
var odl = document.createElement('dl');
var odt = document.createElement('dt');
var ostrong = document.createElement('strong');
ostrong.innerHTML = data.username;
odt.appendChild(ostrong); var odd1 = document.createElement('dd');
odd1.innerHTML = data.content; var odd2 = document.createElement('dd');
odd2.className = 't';
var oa1 = document.createElement('a');
oa1.href ='';
oa1.innerHTML = '顶(<span>'+data.support+'</span>)';
var oa2 = document.createElement('a');
oa2.href = '';
oa2.innerHTML = '踩(<span>'+data.oppose+'</span>)'; odd2.appendChild(oa1);
odd2.appendChild(oa2); odl.appendChild(odt);
odl.appendChild(odd1);
odl.appendChild(odd2); if(insert && olist.children[0])
{
olist.insertBefore(odl,olist.children[0]);
}
else
{
olist.appendChild(odl);
}
} //点击查看更多内容
var oshowMore = document.getElementById('showMore');
var ipage = 1;
oshowMore.onclick = function ()
{
ipage++;
showlist();
} function showlist()
{
ajax('get','guestbook/index.php','m=index&a=getList&n=2&pages=' + ipage,function (data)
{
var d = JSON.parse(data);
var data = d.data; if(data)
{
for(var i = 0; i < data.list.length; i++ )
{
createList(data.list[i]);
}
}
else
{
if(ipage == 1)
{
olist.innerHTML = '现在还没有留言,快来请沙发...';
}
oshowMore.style.display = 'none'; }
})
} //获取cookie function getCookie(key)
{
var arr1 = document.cookie.split('; ');
for (var i=0; i<arr1.length; i++)
{
var arr2 = arr1[i].split('=');
if (arr2[0]==key)
{
return arr2[1];
}
}
}
}
</script>
</head> <body>
<div id="header"></div> <div id="container"> <div id="list">
<!--<dl>
<dt>
<strong>zmouse</strong> 说 :
</dt>
<dd>内容</dd>
<dd class="t">
<a href="javascript:;" id="support">顶(<span>0</span>)</a>
|
<a href="javascript:;" id="oppose">踩(<span>0</span>)</a>
</dd>
</dl>-->
</div>
<div id="showMore">显示更多...</div> <div id="sidebar"> <div id="user" style="margin-bottom: 10px;">
<h4><span id="userinfo"></span> <a href="" id="logout">退出</a></h4>
</div> <!-- 注册 -->
<div id="reg">
<h4>注册</h4>
<div>
<p>用户名:<input type="text" name="username" id="username1"></p>
<p id="verifyUserNameMsg"></p>
<p>密码:<input type="password" name="password" id="password1"></p>
<p><input type="button" value="注册" id="btnReg" /></p>
</div>
</div> <!-- 登陆 -->
<div id="login">
<h4>登陆</h4>
<div>
<p>用户名:<input type="text" name="username2" id="username2"></p>
<p>密码:<input type="password" name="password2" id="password2"></p>
<p><input type="button" value="登陆" id="btnLogin" /></p>
</div>
</div> <!-- 留言发表 -->
<div id="sendBox">
<h4>发表留言</h4>
<div>
<textarea id="content"></textarea>
<input type="button" value="提交" class="btn1" id="btnPost" />
</div>
</div>
</div> </div> </body>
</html>
<?php
/**
* @ controller Index.class.php
* @ zmouse@vip.qq.com
*/ defined('IN_APP') or exit('Denied Access!'); class IndexController extends Controller { public function index() {
echo '<p>欢迎</p>';
//$result = $this->db->get("select * from users", 1);
//dump($result);
} /**
* @ interface 用户名验证
*/
public function verifyUserName() { $username = trim(isset($_REQUEST['username']) ? $_REQUEST['username'] : ''); switch ($this->_verifyUserName($username)) {
case 0:
$this->sendByAjax(array('message'=>'恭喜你,该用户名可以注册!'));
break;
case 1:
$this->sendByAjax(array('code'=>1,'message'=>'用户名长度不能小于3个或大于16个字符!'));
break;
case 2:
$this->sendByAjax(array('code'=>2,'message'=>'对不起,该用户名已经被注册了!'));
break;
default:
break;
} } /**
* @ interface 用户注册
*/
public function reg() {
$username = trim(isset($_REQUEST['username']) ? $_REQUEST['username'] : '');
$password = trim(isset($_REQUEST['password']) ? $_REQUEST['password'] : '');
$avatar = trim(isset($_REQUEST['avatar']) && in_array($_REQUEST['avatar'], array(1,2,3,4,5,6,7,8,9)) ? intval($_REQUEST['avatar']) : 1); if ($this->_verifyUserName($username) !== 0 || strlen($password)<3 || strlen($password) > 20) {
$this->sendByAjax(array('code'=>1,'message'=>'注册失败!'));
}
$password = md5($password);
if (false === $this->db->query("INSERT INTO `users` (`username`, `password`, `avatar`) VALUES ('{$username}', '{$password}', {$avatar})")) {
$this->sendByAjax(array('code'=>1,'message'=>'注册失败!'));
} else {
$this->sendByAjax(array('message'=>'注册成功!'));
}
} /**
* @ 用户登陆
*/
public function login() {
$username = trim(isset($_REQUEST['username']) ? $_REQUEST['username'] : '');
$password = trim(isset($_REQUEST['password']) ? $_REQUEST['password'] : ''); if (isset($_COOKIE['uid'])) {
$this->sendByAjax(array('code'=>1,'message'=>'你已经登陆过了!'));
} if ($rs = $this->db->get("SELECT * FROM `users` WHERE `username`='{$username}'")) {
if ($rs['password'] != md5($password)) {
$this->sendByAjax(array('code'=>1,'message'=>'登陆失败!'));
} else {
setcookie('uid', $rs['uid'], time() + 3600*60, '/');
setcookie('username', $rs['username'], time() + 3600*60, '/');
$this->sendByAjax(array('code'=>0,'message'=>'登陆成功!'));
}
} else {
$this->sendByAjax(array('code'=>1,'message'=>'登陆失败!'));
}
} /**
* @ 用户退出
*/
public function logout() {
if (!isset($_COOKIE['uid'])) {
$this->sendByAjax(array('code'=>1,'message'=>'你还没有登陆!'));
} else {
setcookie('uid', 0, time() - 3600*60, '/');
$this->sendByAjax(array('code'=>0,'message'=>'退出成功!'));
}
} /**
* 用户留言保存
*/
public function send() {
if (!isset($_COOKIE['uid'])) {
$this->sendByAjax(array('code'=>1,'message'=>'你还没有登陆!'));
} else {
$content = trim(isset($_POST['content']) ? $_POST['content'] : '');
if (empty($content)) {
$this->sendByAjax(array('code'=>1,'message'=>'留言内容不能为空!'));
}
$dateline = time();
$this->db->query("INSERT INTO `contents` (`uid`, `content`, `dateline`) VALUES ({$_COOKIE['uid']}, '{$content}', {$dateline})");
$returnData = array(
'cid' => $this->db->getInsertId(),
'uid' => $_COOKIE['uid'],
'username' => $_COOKIE['username'],
'content' => $content,
'dateline' => $dateline,
'support' => 0,
'oppose' => 0,
);
$this->sendByAjax(array('code'=>0,'message'=>'留言成功!','data'=>$returnData));
}
} /**
* @ 顶
*/
public function doSupport() {
if (!isset($_COOKIE['uid'])) {
$this->sendByAjax(array('code'=>1,'message'=>'你还没有登陆!'));
} else {
$cid = isset($_REQUEST['cid']) ? intval($_REQUEST['cid']) : 0;
if (!$cid) $this->sendByAjax(array('code'=>1,'message'=>'无效留言cid!'));
$content = $this->db->get("SELECT cid FROM `contents` WHERE `cid`={$cid}");
if (!$content) $this->sendByAjax(array('code'=>1,'message'=>'不存在的留言cid!'));
$this->db->query("UPDATE `contents` SET `support`=support+1 WHERE `cid`={$cid}");
$this->sendByAjax(array('code'=>0,'message'=>'顶成功!'));
}
} /**
* @ 踩
*/
public function doOppose() {
if (!isset($_COOKIE['uid'])) {
$this->sendByAjax(array('code'=>1,'message'=>'你还没有登陆!'));
} else {
$cid = isset($_REQUEST['cid']) ? intval($_REQUEST['cid']) : 0;
if (!$cid) $this->sendByAjax(array('code'=>1,'message'=>'无效留言cid!'));
$content = $this->db->get("SELECT cid FROM `contents` WHERE `cid`={$cid}");
if (!$content) $this->sendByAjax(array('code'=>1,'message'=>'不存在的留言cid!'));
$this->db->query("UPDATE `contents` SET `oppose`=oppose+1 WHERE `cid`={$cid}");
$this->sendByAjax(array('code'=>0,'message'=>'踩成功!'));
}
} /**
* @ 获取留言列表
*/
public function getList() {
$page = isset($_REQUEST['page']) ? intval($_REQUEST['page']) : 1; //当前页数
$n = isset($_REQUEST['n']) ? intval($_REQUEST['n']) : 10; //每页显示条数
//获取总记录数
$result_count = $this->db->get("SELECT count('cid') as count FROM `contents`");
$count = $result_count['count'] ? (int) $result_count['count'] : 0;
if (!$count) {
$this->sendByAjax(array('code'=>1,'message'=>'还没有任何留言!'));
}
$pages = ceil($count / $n);
if ($page > $pages) {
$this->sendByAjax(array('code'=>2,'message'=>'没有数据了!'));
}
$start = ( $page - 1 ) * $n;
$result = $this->db->select("SELECT c.cid,c.uid,u.username,c.content,c.dateline,c.support,c.oppose FROM `contents` as c, `users` as u WHERE u.uid=c.uid ORDER BY c.cid DESC LIMIT {$start},{$n}");
$data = array(
'count' => $count,
'pages' => $pages,
'page' => $page,
'n' => $n,
'list' => $result
);
$this->sendByAjax(array('code'=>0,'message'=>'','data'=>$data));
} /**
* @ 用户名验证
*/
private function _verifyUserName($username='') {
if (strlen($username) < 3 || strlen($username) > 16) {
return 1;
}
$rs = $this->db->get("SELECT `username` FROM `users` WHERE `username`='{$username}'");
if ($rs) return 2;
return 0;
}
}

ajax 留言板的更多相关文章

  1. Repeater+AspNetPager+Ajax留言板

    最近想要巩固下基础知识,于是写了一个比较简单易懂实用的留言板. 部分样式参考了CSDN(貌似最近一直很火),部分源码参照了Alexis. 主要结构: 1.前期准备 2.Repeater+AspNetP ...

  2. LigerUi框架+jquery+ajax无刷新留言板系统的实现

    前些天发布了LigerUi框架的增.删.改代码,一堆代码真的也没一张图片.有的网友推荐上图,所有今天把涉及到这个框架的开源的留言板共享给大家.在修改的过程中可能有些不足的地方希望大家拍砖. 因为留言板 ...

  3. ajax练习四留言板

    留言界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  4. 瀑布流 &留言板

    实例:瀑布流 留言板(一)瀑布流瀑布流实现原理分析1.ajax文件内容function ajax(method, url, data, success) {    var xhr = null;   ...

  5. 用pdo实现的织梦后台留言板

    <?php //ini_set("display_errors", "On"); include("data/common.inc.php&qu ...

  6. php......留言板

    部门内部留言板 一.语言和环境 实现语言 PHP 二.要求: 本软件是作为部门内员工之间留言及发送消息使用. 系统必须通过口令验证,登录进入.方法是从数据库内取出用户姓名和口令的数据进行校验. 用户管 ...

  7. nodejs中利用expresss脚手架和bootstrap,数据库mongodb搭建的留言板案例

    ## 1. 先打开编辑器,创建一个项目 ## 2. 再打开cmd命令提示符下载express脚手架 express   项目名   --view=ejs 或express   -e    项目名 ## ...

  8. AngularJs学习笔记(制作留言板)

    原文地址:http://www.jmingzi.cn/?post=13 初学Anjularjs两天了,一边学一边写的留言板,只有一级回复嵌套.演示地址 这里总结一下学习的过程和笔记.另外,看看这篇文章 ...

  9. dd——留言板再加验证码功能

    1.找到后台-核心-频道模型-自定义表单 2.然后点击增加新的自定义表单 diyid 这个,不管他,默认就好 自定义表单名称 这个的话,比如你要加个留言板还是投诉建议?写上去呗 数据表  这个不要碰, ...

随机推荐

  1. Redis Cluster架构和设计机制简单介绍

    之前另一篇文章也介绍了 Redis Cluster (link,在文章的后半部分) 今天看到这一篇,简单说一下(http://hot66hot.iteye.com/blog/2050676) 作者的目 ...

  2. Java里面instanceof怎么实现的

    开始完全一头雾水呀,后面看了Java指令集的介绍,逐渐理解了. https://www.zhihu.com/question/21574535/answer/18998914 下面这个答案比较直白 你 ...

  3. Git基础(二)

    本章内容将介绍第二部分:本地仓储操作.为了加深对每个命令操作的理解,我们可以事先获取一个仓储边学边操作.这里首先 你要明白一个概念,所有本地工作目录下的文件状态无不在乎两种,已跟踪和未跟踪.已跟踪文件 ...

  4. ArrayList集合的语句示例

    namespace ArrayList集合的语句示例{    class Program    {        static void Main(string[] args)        {    ...

  5. CodeForces Round #297 Div.2 E (中途相遇法)

    当时打比赛的时候卡在D题了,没有看E.现在看来E还是不难的. 将n个数排序后,其实不排序也是可以的,只是排序能快一半的时间. 枚举前一半能得到多少种和,放到map里面: 然后在后一半数中枚举,然后在m ...

  6. 一招解决OpenERP8.0安装旧版模块报错

    有喜欢尝鲜的网友开始玩8.0了,可是版本还没发布,社区的很多特别好的模块还没有升级到8,所以经常碰到模块无法安装的问题. No module name osv 网友提出将模块的 from osv im ...

  7. 自己实现内存操作函数memset(),memcmp(),memcpy(),memmove()

    1.memset()内存设置函数(初始化) void *my_memset(void* dest, int c, size_t count) { assert(dest != NULL); char  ...

  8. A*寻路初探 GameDev.net 转载

    A*寻路初探 GameDev.net 译者序:很久以前就知道了A*算法,但是从未认真读过相关的文章,也没有看过代码,只是脑子里有个模糊的概念.这次决定从头开始,研究一下这个被人推崇备至的简单方法,作为 ...

  9. mokoid android open source HAL hacking in a picture

    /************************************************************************** * mokoid android HAL hac ...

  10. db2数据库创建一张表,并为该表加上主键递增的性能和中间表的创建的sql语句

    创建角色表 CREATE TABLE NBCTXP.TBL_NBC_NONBANKROLE (    ID BIGINT NOT NULL,    ROLENAME VARCHAR(50),    C ...