Jump to navigation

You are currently browsing the monthly archives for June 2010

帝国cms 限制会员在特定栏目只能发一条信息的方法

  • Posted on June 23, 2010 at 10:44 am

版本V6.5

分享限制会员在特定栏目只能发一条信息的方法
有些栏目里面,我们需要限制一个会员只能发布一条信息的。
实现的原理就是在数据表中建立一个唯一的字段(发布人的用户名)。

修改数据表,添加一个发布人的字段,名字随便写(假设为aabb),设置为“唯一”。
初始值设置为:$musername
这样它的初始值就是发布人的用户名了。

然后修改模型的前台投稿表单模板
添加[!--aabb--]
为防止会员对其进行修改,再给它加上readonly和hidden属性。
问题是readonly和hidden怎样加?
模板里面只有一个[!--aabb--], 又没有input

我现在的办法是把它外面的tr设置为display:none.

把口碑网的评分系统扒下来了,JS部分重写了

  • Posted on June 22, 2010 at 11:27 am

把口碑网的评分系统扒下来了,JS部分重写了。
比较粗糙,凑合着看吧。
star

计算24点的程序(php版)

  • Posted on June 14, 2010 at 9:54 am

大概思路如下:
如果有四个数字 a b c d 经过+ – * / 运算可以得到24
那么a b c 必然可以得到 24-d 或者 24+d 或者 24/d 或者 24*d 或者 d/24 或者 d-24
那么a与b必然可以得到 …….
那么a必然可以得到….
如此了。
当然a b c d 顺序可以互换。

代码:

<?PHP
 
$a = intval($_GET['a']);
$b = intval($_GET['b']);
$c = intval($_GET['c']);
$d = intval($_GET['d']);
 
 
print modify_24($a,$b,$c,$d);
function modify_24($aa,$bb,$cc,$dd)
{
        $p = array("aa","bb","cc","dd");
	$op = array('+','-','*','/','-1','1/');
	$ok = false;
	$x = 24;
 
        for($ii=0;$ii<4;$ii++)
        {
                $a = $$p[$ii];
        for($jj=0;$jj<4;$jj++)
        {
                if ($jj==$ii) continue;
                $b = $$p[$jj];
        for($kk=0;$kk<4;$kk++)
        {
                if ($kk == $ii || $kk==$jj) continue;
                $c = $$p[$kk];
        for($ww=0;$ww<4;$ww++)
        {
                if ($ww == $ii || $ww==$kk || $ww==$jj) continue;
                $d = $$p[$ww];
 
		$y_array = array('($x-$a)','($x+$a)','($x/$a)','($x*$a)', '($a-$x)','($a/$x)');
		$r = array();
		for($i=0;$i<6;$i++)
		{
			$y = $y_array[$i];
			$r[0] = $op[$i];
 
			$z_array = array('('.$y.'-$b)','('.$y.'+$b)', '('.$y.'/$b)','('.$y.'*$b)','($b-'.$y.')','($b/'.$y.')');
			for($j=0;$j<6;$j++)
			{
				$z= $z_array[$j];
				$r[1] = $op[$j];
				$zz_array = array($z.'-$c',$z.'+$c',$z.'/$c',$z.'*$c','$c-'.$z,'$c/'.$z);
				for($k=0;$k<6;$k++)
				{
					$zz_str = '$zz='.$zz_array[$k].";";
					eval($zz_str);
					$r[2] = $op[$k];
 
					if (intval($d) ==  strval($zz))
					{
						$ok = true;
						break 7;
					}
				}
			}
		}
 
        }}}}
		//输出:
 
        if ($ok )
        {
                $str = $d;
		$str = a($r[2], $str, $c);
		$str = a($r[1], $str, $b);
		$str = a($r[0], $str, $a);
                return $str."=".$x;
        }
        else
        {
 
                return 'TMD,累死了,算不出来...';
        }
}
 
function a($r, $str, $next)
{
		switch($r)
                {
                        case "-1":
                                $str = "(".$next."-".$str.")";
                                break;
			case "1/":
				$str = $next ." / ".$str;
				break;
                        default:
                                $str = "(".$str .$r.$next.")";
                                break;
                }
		return $str;
}

不知道怎样才能改成递归的。

使用js和ajax进行下拉框二级联动

  • Posted on June 13, 2010 at 9:49 am

不多说了,上代码吧:
我们会在代码中进行必要的注释的:

<html> 
 <head> 
<!--  引入 jquery -->
	 <script src=./jquery.js></script>
 </head>
 <body>
<!--这是第一个select-->
<!--给它一个onchange事件-->
<!--this.value 就表示onchange之后,select里面被选中的option的value-->
	 <select id='t1' onChange="b(this.value);">
		 <option value='1' >1111</option>
		 <option value='2' >2222</option>
	 </select>
<!--第二个select-->
	 <select id='t2'>
	 </select>
	 <script>
		 var t = document.getElementById('t2');
		 function b(v)
		 {
//从下面url去获取第二个select需要的options.
			 var url = "http://www.masalife.com/modify/test.php?v="+v;
//这里使用了getJSON.而不是get
//必要的,上面的url也需要返回JSON格式的字符串。
			 $.getJSON(url, function(j)
			 {
//清空第二个select
				 t.options.length=0;
//向第二个select里面循环添加options.
				 for(var postIndex = 0; postIndex < j.r.length; postIndex++) 
				 {
					 var r = j.r[postIndex];
					 a(r.k,r.v);
				 }
			 }
			 );
		 }
 
//这个就是添加option的函数啦。
		 function a(key,value)
		 {
			 var o = new Option(key,value);
			 t.options.add(o);
		 }
	 </script>

test.php中的内容:
这个php文件,可以去数据库或者文件中获取必要的数据。

<?PHP
 
class a
{
	public $r = array();
	function __construct($v)
	{
		if ($v ==1)
		{
			$this->r[0]['k'] = '11111111';
			$this->r[0]['v'] = '1';
			$this->r[1]['k'] = '22222222';
			$this->r[1]['v'] = '2';
		}
		elseif ($v ==2)
		{
			$this->r[0]['k'] = iconv("GBK","UTF-8",'一一一一一');
			$this->r[0]['v'] = '1';
			$this->r[1]['k'] = iconv("GBK","UTF-8",'二二二二二');
			$this->r[1]['v'] = '2';
		}
	}
}
$v = intval($_GET['v']);
$a = new a($v);
//不要忘了json_encode.
$je = json_encode($a);
die($je);

在firefox中使用js操作select控件

  • Posted on June 12, 2010 at 9:41 am
<select>

示例

<select name="drop1" id="drop1" onchange="selectDrop2(this.value)">
    <option value="">请选择</option>
    <option value="...">...下略...</option>
</select>
 
<select name="drop2" id="drop2">
    <option value="...">...动态增加...</option>
</select>

在JavaScript代码中:

var drop1 = document.getElementById("drop1");
var drop2 = document.getElementById("drop2");

一、Firefox中add与remove方法
增加: 1.通用办法:

 var option = new Option(xText,xValue);
 drop2.options.add(option);

2:only IE

 drop2.add(option);

drop2.remove(); (PS:该方法未在IE下测试)

Firefox中this.options.value失效
改为this.value即可。IE与FF都通过。
比如示例中的selectDrop2(this.value)。
在IE7及更高版本中,支持this.options.value。
不过我们还是用this.value吧。习惯如此了。

blog被墙了,不过是误杀,我擦

  • Posted on June 11, 2010 at 9:36 am

blog被墙了,不过是误杀,我擦。

不知道同主机的哪个站惹到他们了,服务器IP被国内封了

把我逼成了翻墙人士。

唉,都是你妈逼我的啊,你妈逼我的啊,你妈逼的。

discuz中发送短消息的函数

  • Posted on June 10, 2010 at 10:02 am
include_once DISCUZ_ROOT.'./uc_client/client.php';
 
$pmid = uc_pm_send(1, $msgto, '', $message, 1, 0, 0);
if ($pmid > 0)
     print "ok".

说明:
uc_pm_send函数。
第一个参数:发送人的uid. 1为admin
第二个参数:$msgto: 接收人的uid
第三个参数: $title : 短消息标题。一般为空。
第四个参数: $message: 短消息内容。不支持html代码。支持discuz代码。
后面三个参数忘记是什么意思了。

返回值: >0 表示成功。返回的值为短消息的id.

任天堂将发布超级玛丽扑克牌

  • Posted on June 9, 2010 at 4:14 pm

2010年7月,
任天堂将在日本发布三款超级玛丽图案的扑克,包括2D版、3D CGI版以及老式的8位渲染图版,
相信这几款扑克将会勾起你无限的童年回忆。
不多说了,上图!





预计售价:1050日元。大概70RMB。
三个版本加一起的话就是210RMB。
来团购吧!

世界足球强队 不同战术曝光

  • Posted on June 8, 2010 at 3:31 pm


英格兰的战术图 – 前锋根据风向而出现在不同的位置。


德国的足球战术图 – 激进,高效率,势不可挡。球速高达每小时297公里。


意大利战术图 – 钢铁防线,中场没有创造力,后腰直传给前锋,前锋制造点球。


巴西的足球战术 – 无语至评


法国人的战术 – 他们尝试一切可能的传球 带球,却无法完成进球。

中国式足球战术 – 在家里看电视 always…..只能看别人踢世界杯,永远如此,永远。。。

你的验证码安全吗

  • Posted on June 7, 2010 at 4:57 pm

验证码的作用主要有防止暴力破解,防止恶意灌水,防止自动提交等,在这里我就不多说了。
验证码的类型也有数字、字母等,甚至我也用过中文的。
但是不管你的验证码多么厉害,只要你在表单验证中存在如下的失误,你的验证码就形同虚设!

验证码的一般思路,就是每次登陆的地方用img src= 来访问一个脚本文件,
该文件生成含验证码的图片并将值写入到Session里,
提交表单的时候判断提交的验证码是否与Session里的一致。
如果密码错误或者验证码错误或者其它错误,
就返回登录页面,由于验证码图片被刷新了,所以验证码也就更新了。
问题的根源就在于:只有在验证码图片被刷新的时候,验证码才会更新!

以暴力破解为例,
使用firefox浏览器打开登录表单,得到验证码。
然后在浏览器里面对这个表单进行修改,去掉图片验证码。
再加一个hidden的验证码的值,
设置表单的target为_blank, 这样提交之后,就会打开新的窗口,
我们修改好的表单就不会被破坏,
这样就可以进行多次提交了。
(firefox有插件可以完成这个功能。)

或者使用Snoopy进行直接的提交。

无论提交多少次,
session中的验证码都不会发生变化。
因为自始至终,验证码图片只被加载过一次。
而验证码的更新只有在图片加载的时候才会进行。
所以一切都没有变。

就这样,使用同一个验证码,可以进行多次的提交。
我们辛辛苦苦构建的验证码机制就形同虚设了。

解决办法:
1 检查到密码出错之后,更新验证码。
对于留言等类型的,还要在提交成功后更新验证码。
总之就是有事件发生,就要更新session中的验证码。
2 防止表单通过外部进行提交。可以使用formhash之类的机制。

Top