<!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. gridview 单击行时如何让SelectedIndexChanging事件响应

    在gridview控件上单击行的时候,是不触发SelectedIndexChanging事件的,那么想要单击时触发SelectedIndexChanging事件时怎么做呢? 我是这样做的: 在grid ...

  2. 概述hibernate入门安装配置

    1.jdbc连接的优缺点 JDBC的优点 直接底层操作,提供了很简单.便捷的访问数据库的方法,跨平台性比较强.灵活性比较强,可以写很复杂的SQL语句. JDBC的缺点 1).因为JAVA是面向对象的, ...

  3. java.lang.InstantiationException: DWR can't find a spring config. See the logs for solutions

    在spring整合dwr时,报找不到配置文件 DWRcan't find a spring config. See the logs for solutions 解决办法: 在web.xml中添加一下 ...

  4. 9.6. MySQL中保留字的处理

    尝试使用一个识别符,例如使用嵌入式MySQL 数据类型或函数名作为表名或列名,例如TIMESTAMP 或GROUP ,会造成一个常见问题.允许你这样操作( 例如,ABS 可以作为一个列名) .但是,默 ...

  5. Machine Learning for hackers读书笔记(六)正则化:文本回归

    data<-'F:\\learning\\ML_for_Hackers\\ML_for_Hackers-master\\06-Regularization\\data\\' ranks < ...

  6. 51nod1199 Money out of Thin Air

    链剖即可.其实就是利用了链剖后子树都在一段连续的区间内所以可以做到O(logn)查询和修改. 线段树细节打错了..要专心!肉眼差错都能找出一堆出来显然是不行的!. #include<cstdio ...

  7. window下python 扩展库安装 使用第三方镜像源

    0.前言     由于python的官方镜像位于国外,若使用pip或者easy_install安装第三方插件时或许会被限制,甚至连easy_install或pip也无法安装,例如在windows环境下 ...

  8. Java 动态太极图 DynamicTaiChi (整理)

    package demo; import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import jav ...

  9. Activiti 多个并发子流程的应用

    多个部门发起资金计划,最后统一到财务部审批,每个部门发起资金计划是一个子流程,财务部审批是多个部门的计划同时审批,审批完成后,再提交上级领导审批. 流程如下: 要解决以上问题,需要实现多个子流程并行处 ...

  10. UVa725 - Division

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int ...