版本V6.5
分享限制会员在特定栏目只能发一条信息的方法
有些栏目里面,我们需要限制一个会员只能发布一条信息的。
实现的原理就是在数据表中建立一个唯一的字段(发布人的用户名)。
修改数据表,添加一个发布人的字段,名字随便写(假设为aabb),设置为“唯一”。
初始值设置为:$musername
这样它的初始值就是发布人的用户名了。
然后修改模型的前台投稿表单模板
添加[!--aabb--]
为防止会员对其进行修改,再给它加上readonly和hidden属性。
问题是readonly和hidden怎样加?
模板里面只有一个[!--aabb--], 又没有input
我现在的办法是把它外面的tr设置为display:none.
把口碑网的评分系统扒下来了,JS部分重写了。
比较粗糙,凑合着看吧。
star
大概思路如下:
如果有四个数字 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;
}
不知道怎样才能改成递归的。
不多说了,上代码吧:
我们会在代码中进行必要的注释的:
<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);
示例
<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.remove(); (PS:该方法未在IE下测试)
Firefox中this.options.value失效
改为this.value即可。IE与FF都通过。
比如示例中的selectDrop2(this.value)。
在IE7及更高版本中,支持this.options.value。
不过我们还是用this.value吧。习惯如此了。
blog被墙了,不过是误杀,我擦。
不知道同主机的哪个站惹到他们了,服务器IP被国内封了
把我逼成了翻墙人士。
唉,都是你妈逼我的啊,你妈逼我的啊,你妈逼的。
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.

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

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

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

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

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

中国式足球战术 – 在家里看电视 always…..只能看别人踢世界杯,永远如此,永远。。。
验证码的作用主要有防止暴力破解,防止恶意灌水,防止自动提交等,在这里我就不多说了。
验证码的类型也有数字、字母等,甚至我也用过中文的。
但是不管你的验证码多么厉害,只要你在表单验证中存在如下的失误,你的验证码就形同虚设!
验证码的一般思路,就是每次登陆的地方用img src= 来访问一个脚本文件,
该文件生成含验证码的图片并将值写入到Session里,
提交表单的时候判断提交的验证码是否与Session里的一致。
如果密码错误或者验证码错误或者其它错误,
就返回登录页面,由于验证码图片被刷新了,所以验证码也就更新了。
问题的根源就在于:只有在验证码图片被刷新的时候,验证码才会更新!
以暴力破解为例,
使用firefox浏览器打开登录表单,得到验证码。
然后在浏览器里面对这个表单进行修改,去掉图片验证码。
再加一个hidden的验证码的值,
设置表单的target为_blank, 这样提交之后,就会打开新的窗口,
我们修改好的表单就不会被破坏,
这样就可以进行多次提交了。
(firefox有插件可以完成这个功能。)
或者使用Snoopy进行直接的提交。
无论提交多少次,
session中的验证码都不会发生变化。
因为自始至终,验证码图片只被加载过一次。
而验证码的更新只有在图片加载的时候才会进行。
所以一切都没有变。
就这样,使用同一个验证码,可以进行多次的提交。
我们辛辛苦苦构建的验证码机制就形同虚设了。
解决办法:
1 检查到密码出错之后,更新验证码。
对于留言等类型的,还要在提交成功后更新验证码。
总之就是有事件发生,就要更新session中的验证码。
2 防止表单通过外部进行提交。可以使用formhash之类的机制。