ajax 留言板

时间:2021-08-11 05:45:29
<!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&plus;AspNetPager&plus;Ajax留言板

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

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

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

  3. ajax练习四留言板

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

  4. 瀑布流 &amp&semi;留言板

    实例:瀑布流 留言板(一)瀑布流瀑布流实现原理分析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&period;&period;&period;&period;&period;&period;留言板

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

  7. nodejs中利用expresss脚手架和bootstrap&comma;数据库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. C&num;访问Azure的资源

    官方参考资料在这里:https://msdn.microsoft.com/en-us/library/azure/dn722415.aspx,本文放一些重点及遇到的坑的解决办法. 身份验证 不是说,我 ...

  2. MySQL Replication 常用架构

    转自: http://www.cnblogs.com/ggjucheng/archive/2012/11/13/2768879.html 前言 MySQLReplicaion本身是一个比较简单的架构, ...

  3. 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。

    先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 复制代码 ...

  4. HDU 1069 Monkey and Banana(LIS最长上升子序列)

    B - LIS Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Descripti ...

  5. 走向DBA&lbrack;MSSQL篇&rsqb; 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串

    原文:走向DBA[MSSQL篇] 针对大表 设计高效的存储过程[原理篇] 附最差性能sql语句进化过程客串 测试的结果在此处 本篇详解一下原理 设计背景 由于历史原因,线上库环境数据量及其庞大,很多千 ...

  6. Swift の 函数式编程

    Swift 相比原先的 Objective-C 最重要的优点之一,就是对函数式编程提供了更好的支持. Swift 提供了更多的语法糖和一些新特性来增强函数式编程的能力,本文就在这方面进行一些讨论. S ...

  7. yum 安装Apache

    1.查看是否安装Apache,命令:  rpm    -qa    httpd 2.yum install httpd ,yum安装Apache 3.chkconfig    httpd  on  s ...

  8. IDEA一定要懂的32条快捷键

    阅读本文大概需要 2 分钟.   作者:帝都羊 这些IntelliJ IDEA键盘快捷键可以让你专注于编写代码,让你的双手在键盘上起舞. 1.搜索文件名: ↑   Shift 快速连续按两下 2.显示 ...

  9. FCN的理解

    FCN特点 1.卷积化 即是将普通的分类网络丢弃全连接层,换上对应的卷积层即可 2.上采样 方法是双线性上采样差 此处的上采样即是反卷积3.因为如果将全卷积之后的结果直接上采样得到的结果是很粗糙的,所 ...

  10. MyBatis基础入门《九》ResultMap自动匹配

    MyBatis基础入门<九>ResultMap自动匹配 描述: Mybatis执行select查询后,使用ResultMap接收查询的数据结果. 实体类:TblClient.java 接口 ...