类似jq的即点即改

<?php

namespace app\controllers;

use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\data\Pagination;
use app\models\Users;
use app\models\Yuyue;

//留言
class MessController extends Controller
{
public function actionIndex()
{ //开启session
$session = Yii::$app->session;
$session->open();

//查询所有留言
$sql = “select * from message”;
$mess = \yii::$app->db->createCommand($sql)->queryAll();

//判断是否登录
$user = $session->get(“user”);
$u_id = $session->get(“u_id”);
if(!isset($user)){
$status = 0;
}else{
$status = 1;

//查询隐藏的留言
$sql = “select * from dis_mess where u_id=”.$u_id;
$display = \yii::$app->db->createCommand($sql)->queryAll();

//将m_id遍历为一维数组
foreach($display as $key =>$val){
$display[$key] = $display[$key][‘m_id’];
}
//取出隐藏留言的id,有就 删除该变量
foreach($mess as $k=>$v){
if(in_array($mess[$k][‘id’],$display)){
unset($mess[$k]);
}
}

}
// var_dump($mess);die();

return $this->render(“index”,[‘status’=>$status,’user’=>$user,’mess’=>$mess]);
}
//登录
public function actionLogin()
{
return $this->render(“login”);

}

//ajax 隐藏 不喜欢表
public function actionNot()
{
//开启session
$session = Yii::$app->session;
$session->open();
$u_id = $session->get(“u_id”);

$m_id = \Yii::$app->request->get(‘m_id’); //不喜欢的留言id
// var_dump($u_id);die();
$sql = “insert into dis_mess(u_id,m_id) VALUES (‘$u_id’,’$m_id’)”;
$res = \yii::$app->db->createCommand($sql)->query();

if($res){
return 1;
}else{
return 0;
}
}
//加载更多
public function actionDuo()
{
//开启session
$session = Yii::$app->session;
$session->open();
$u_id = $session->get(“u_id”);
//所有留言
$sql = “select * from message”;
$arr = \yii::$app->db->createCommand($sql)->queryAll();

//查询隐藏的留言
$sql = “select * from dis_mess where u_id=”.$u_id;
$display = \yii::$app->db->createCommand($sql)->queryAll();

//将m_id遍历为一维数组
foreach($display as $key =>$val){
$display[$key] = $display[$key][‘m_id’];
}
//取出隐藏留言的id,有就 删除该变量
foreach($arr as $k=>$v){
if(in_array($arr[$k][‘id’],$display)){
unset($arr[$k]);
}
}
// var_dump($arr);die();
return json_encode($arr);
}
//验证登录
//登录
public function actionLogin_check()
{
//接值
$username = \Yii::$app->request->post(‘username’);
$pwd = \Yii::$app->request->post(‘pwd’);
$sql = “select username,u_id from mess_user where username=‘”.$username.”‘ and pwd=‘”.$pwd.”‘”;
$arr = \yii::$app->db->createCommand($sql)->queryOne();
// var_dump($arr);die();

if(!$arr){
die(“密码错误”);
}else{
//登录成功
//开启session 存u_id ,user
$session = Yii::$app->session;
$session->open();
$session->set(“user”,$arr[‘username’]);
$session->set(“u_id”,$arr[‘u_id’]);
$this->redirect([‘mess/index’]);
}
}
//添加留言 1:成功
public function actionAdd()
{
//接值
$user = \Yii::$app->request->get(‘user’);
$content = \Yii::$app->request->get(‘content’);
$time = \Yii::$app->request->get(‘time’);
//添加留言
$sql = “insert into message(time,content,username) value(‘$time’,’$content’,’$user’)”;
$res = \yii::$app->db->createCommand($sql)->query();

if($res){
return 1;
}else{
return 0;
}
}

}

以上是控制器层

==============================================================

<!doctype html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>留言</title>
</head>
<body>
<center>
<a href=”<?= \yii\helpers\Url::to([‘mess/login’]) ?>”><input type=”button” value=”登录”/></a>
<input type=”text” id=”content”/><input type=”button” value=”留言” id=”btn” /><br>
留言内容:<br>

<table border=”1″ id=”table”>
<tbody id=”blog”>
<?php $num=0;?>
<?php foreach($mess as $k=>$v) { ?>
<?php if($num==5){break;} ?>

<tr>
<td><?= $v[‘username’] ?></td>
<td><?= $v[‘content’] ?></td>
</tr>
<tr m_id=”<?= $v[‘id’]?>” class=”tr”>

<td>日期:<?= $v[‘time’] ?></td>
<td><input type=”button” value=”隐藏” class=”yin”/></td>
</tr>
<?php $num++;?>
<?php } ?>
</table>
</tbody>

<input type=”button” value=”更多” id=”btn2″/>
<script src=”./js/jquery.min.js”></script>
<script>
$(function(){
//更多
$(“#btn2″).click(function(){
$.ajax({
url:”<?= \yii\helpers\Url::to([‘mess/duo’]) ?>”,
type: “GET”,
success: function(xml){
// alert(xml)
//拼接字符串
obj= $.parseJSON(xml);
var str = new String();
$.each(obj,function(i,n){
//拼接字符串
str+=”<tr>”;
str+=”<td>”+n.username+”</td>”;
str+=”<td>”+n.content+”</td>”;
str+=”</tr>”;
str+=”<tr m_id=‘”+n.id+”‘ >”;
str+=”<td>日期:”+n.time+”</td>”;
str+=”<td><input type=’button’ value=’隐藏’ class=’yin’/></td>”;
str+=”</tr>”;
})
$(“#table”).append(str);
$(“#btn2”).css(“display”,”none”);//隐藏更多按钮
}
})
})
//隐藏 问题:追加的tr触发不了点击事件
//bind live on delegate
$(“#blog”).delegate(“.yin”,”click”,function(){
// alert(“隐藏”);
var m_id = $(this).parent().parent().attr(“m_id”); //获取到id
var obj = $(this).parent().parent();

$.ajax({
url : “<?= \yii\helpers\Url::to([‘mess/not’]) ?>”,
type: “GET”,
data: “m_id=”+m_id,
success: function (msg) {
// alert(msg)
if(msg==1){
//隐藏成功 注意移除的顺序,当先杀当前变量时,当前的兄弟节点就会找不到
obj.prev().remove();
obj.remove();
}
}
})

})

//点击留言
$(“#btn”).click(function(){
//检测是否登录
var status =”<?= $status ?>”;

//未登录时
if(status==0){
alert(“请登录”);
$(“#btn”).attr(“disabled”,”true”)
}
//留言
time =”<?= date(‘Y/m/d’,time()) ?>”;
content =$(“#content”).val();
user = “<?php echo $user ?>”;
$.ajax({
url:”<?= \yii\helpers\Url::to([‘mess/add’]) ?>”,
type: “GET”,
data: “time=”+time+”&content=”+content+”&user=”+user,
success: function(msg){
//留言成功时
if(msg==1){
//拼接字符串
var str = new String();
str+=”<tr>”;
str+=”<td>”+user+”</td>”;
str+=”<td>”+content+”</td>”;
str+=”</tr>”;
str+=”<tr>”;
str+=”<td>日期:”+time+”</td>”;
str+=”<td><input type=’button’ value=’隐藏’ class=’yin’/></td>”;
str+=”</tr>”;

$(“#table”).append(str);
}
}
})
})

})
</script>

</center>

</body>
</html>

时间: 2024-12-26 14:37:26

类似jq的即点即改的相关文章

实现一个类似jquery选择器的小轮子(一)

 最近在做移动端的项目,主管说不用jq,尽量用轻量级的类库.但是自己对jq的选择器又比较依靠,因此尝试着在两晚的时间里自己做一个选择器出来,功能当然也是尽量像jq靠拢. 先大致的整理下自己的思路: 每一次遍历dom元素,每一次遍历到的元素便是下一次遍历到的元素的父级. <div class="firstPapas"><!--第一个父级--> <li class="secondsPapa"><!--第二个父级--> &l

快速学习jq

jq的风靡是我们都看的到的,之所以它会在众多的框架中脱颖而出,必定有其优秀之处,我在下面文章中跟大家分享一下jq中工作中经常遇到的API总结,相信它可以让一个不懂jq的人迅速的掌握到jq的强大,好了,废话不多说,一点点看 1 jQuery 入口的三种方法 第一种: $(function(){ }); 第二种: $(document).ready(function(){ }); 第三种: jQuery(function(){ }); 需要注意的是 js和jq的入口函数不同点: 1:js的入口函数只

NodeJs编写小爬虫

一,爬虫及Robots协议 爬虫,是一种自动获取网页内容的程序.是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化. robots.txt是一个文本文件,robots是一个协议,而不是一个命令.robots.txt是爬虫要查看的第一个文件.robots.txt文件告诉爬虫在服务器上什么文件是可以被查看的,搜索机器人就会按照该文件中的内容来确定访问的范围. 如上图,我们可以在网站中直接访问robots.txt文件查看网站禁止访问和允许访问的文件. 二,使用NodeJs爬去

JS杂谈系列-函数知识、函数模式

函数,函数,function,function,go go go! 创建函数: 第一种:function aa(){alert(1)}; 第二种:var aa=function(){alert(1)}; 其实对于使用没有太大的区别,第一个是用函数关键字创建,第二个是创建变量,然后赋值为一个函数. 同样我们还可以创建匿名函数 function(){alert(1)}; 函数的里面可以传递参数arg function aa(arg){alert(arg)}; function aa(arg1,arg

(转)为C# Windows服务添加安装程序

本文转载自:http://kamiff.iteye.com/blog/507129 最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻塞系统,不用用户登录之类.哈 哈,扯远了,今天讲一下那个怎么给Windows服务做个安装包.为什么做安装包?当然是方便了,不用每次调用InstallUtil,还有,就是看上去 正规些. 不多说了,先来看看怎么做吧.首先,当然是创建一个Windows服务的项目.这个大家应该都知道怎么做(这都不明白的留

MySQL分区表姿势

大部分内容整理自姜承尧的innodb存储引擎2学习笔记. 分区: 分区的功能不是在存储引擎层实现的.因此不只是InnoDB才支持分区.MyISAM.NDB都支持分区操作. 分区的过程是将一个表或者索引分解为多个更小.更可管理的部分.从逻辑上将,只有一个表或者索引,但是在物理上这个表或索引可能由数十个物理分区组成. 每个分区都是独立的对象,可以独自处理,也可以作为一个更大对象的一部分进行处理. MySQL只支持水平分区,不支持垂直分区. 水平分区:将同一表中不同行的记录分配到不同的物理文件中. 垂

如何让popWindow显示在view上方

看了bilibili的客户端搜索按钮,很喜欢大爱!自己也想做个类似的(相似度 10% 哈哈) popWin的出现退出动画也可以自己设定,用过其方法setAnimationStyle(R.style.xxx)设置Style文件进而设置显示退出动画 <!-- popwindow进入和退出动画 --> <style name="popwin_anim_style"> <item name="android:windowEnterAnimation&qu

一些关于angular的总结

1. Angular介绍 1.1. 库和框架的区别 jQuery:库 库一般都是封装了一些常用的方法 自己手动去调用这些方法,来完成我们的功能 $('#txt').val('我是小明'); $('div').text('xx'); angular:框架 框架都是提供一种规范或者模式, 我们却要按照它提供的这种规则去写代码 框架会自动帮助我们去执行相应的代码. 其实可以简单的理解为:大而全的是框架,小而精的是库 1.2. AngularJs是什么 百度百科http://baike.baidu.co

zepto和jquery的区别,zepto的不同使用8条小结

1. Zepto 对象 不能自定义事件 例如执行: $({}).bind('cust', function(){});  结果:  TypeError: Object has no method 'addEventListener'   解决办法是创建一个脱离文档流的节点作为事件对象: 例如: $('').bind('cust', function(){}); 2. Zepto 的选择器表达式: [name=value]  中value 必须用 双引号 "  or 单引号 ' 括起来 例如执行: