最近搞这个自动取消置顶的东西,非常之烦

一开始方案是采取读出两次数据 ,一组是置顶不过期数据,一组是所有数据。然后进行数组匹配,第二个数组中不在第一个数组的数据累加到第一个数组后头。当文章数目仅仅就10来篇的时候也就罢了,倘若上百篇,这么大的二维数组循环匹配太消耗资源。

想了想,还是放弃了这种方式,实在不可取。最终去在mysql手册中找了控制流程函数IF,终于解决了这个问题。

函数表达式:IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

举个例子就很好理解

mysql > SELECT IF(1>2,'yes ','no');
          > 'yes'

数据库表结构设计:

id: int(11)
title: varchar(255)
istop: tinyint(1) //这个是是否置顶:1表示置顶;0表示非置顶
topdeadline: int(10) //置顶截止时间,时间戳格式..
…… //更多的字段

PHP中操作Mysql:

//这里有额外的要求,当置顶截止时间为空时,代表永久置顶。
$timestamp = mktime(); //获取当前时间戳
//置顶为1时,截止时间大于当前时间或者 截止时间为0,定义一个字段为top为其赋值
$sql = "SELECT id, title,
IF(istop=1 AND (topdeadline>" . $timestamp . " OR topdeadline=0), 1, 0) AS top,1
FROM article ORDER BY id DESC";

一开始我的确正则表达式头疼。不过去网上看了一些文章,其实正则并不是很难,因此记录下学习心得。

1、符号 ^ 和 $ 分别用来匹配字符串的开始和结束:

“^page” 开头一定要有 page 字符串 page=2; page=3&action=list;…
“=add$” 结尾一定要有 =add 的字符串 action=add; age=18&do=add;…
“^index$ 以abc开头和以abc结尾的字符串 index(实际上只有这个结果)
“read” 匹配包含read的字符 action=read&export;…

2、大括号{n,m},其中n<m,当m存在时候:

{n,m},匹配前面字符出现的次数为n-m次

当m不存在时:

{n,}匹配前面字符出现次数大于等于n次

{n}匹配前面字符出现等于n次

“you{2}” o后面一定要跟2个u(一个也不能少) youu
“you{2,}” o后面至少要跟2个u youu;youuu;…
“you{2,4}” o后面至少要跟2-4个u youu;youuu;youuuu;

3、符号 * 匹配前面字符出现0次或者多次;相当于{0,}

符号 + 匹配前面字符出现1次或者多次;{1,}

符号 ? 匹配前面字符出现0次或者1次;{0,1}

要点:’*’ ‘+’ 和 ‘?’ 只管它前面那个字符。

“you*” o后面一定要跟0个或者多个u yo;you;youu;…
“you+” o后面至少要跟1个或者多个u you;youu;youuu;…
“you?” o后面至少要跟0个或者1个u yo;you
“yo+u?” 至少1个以上o后跟着0个或者1个u you;yoou;yo;yooo;…

最近在搞一个投票系统,要求可以发布后的投票可以实现至少选多少个,至多选多少个,和QQ空间的投票类似。其实用Jquery的遍历实现起来非常快。
具体代码如下:

var voteMax = 7
var voteMin = 3 

var errorMsgMax = "最多能选" + voteMax + "个";
var errorMsgMin = "最少能选" + voteMin + "个";

//定义好选择范围后,对name为option[]的复选框进行遍历,当点击的时候赋予事件
$("input:checkbox[name='option[]']").each(function(){
  $(this).click(function(){
  	//点击的时候 得到复选框已经勾选的数目
    var checkNum = $("input:checkbox[name='option[]']:checked").length;
    
    if (checkNum > voteMax ) {
      $(this).attr("checked","");
      alert(errorMsgMax);
    } else if(checkNum < voteMin ) {
      $(this).attr("checked","checked");
      alert(errorMsgMin);
    }
  });

});

在传统页面的设计中,使用select标记作为下拉列表框,但在ExtJs中 ComboBox并不是一个select,不得不说ExtJs把按钮改的面目全非,这看起来和select标记别无二致,只是更加的漂亮了,再看看ExtJs帮我生成的代码,会发现select扯不上任何关系了,取而代之的是N个div,复杂了N多,这便是美丽所付出的代价。

ComboBox组件却需要Ext.data来提供数据。于是Ext.data成了数据的来源,控件则负责显示数据。分工如此的明确,就像PHP中的MVC模式。

今天搞了个登陆框,但是在登陆的时候一直出现等待窗体,又找不出什么原因。用FireBug检验的时候发现数据已经成功POST,但是貌似一直获取不到返回值。卡在waitMsg数据处,死循环。FireBug检查的结果是SYNTAX ERROR :