一、验证码初始化
这几行代码写到php文件中去。
$seccodecheck = 1;
$sechash = 'S'.$_G['sid'];
$seccheckhtml = "<span id=\"seccode_c$sechash\"></span><script type=\"text/javascript\">updateseccode('c$sechash', '<br /><sec> <sec> <sec>', 'admin');</script>";
二、验证码调用
需要的是调用$seccheckhtml
变量。将$seccheckhtml
写到对应插件的html文件中。
其实前端就是放个js函数:
updateseccode('c$sechash', '<br /><sec> <sec> <sec>', 'admin');
三、验证码判断
然后这边需要验证码判断,我们找到了表单提交验证的判断函数:
public static function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) {
if(!getgpc($var)) {
return FALSE;
} else {
global $_G;
if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_GET['formhash']) && $_GET['formhash'] == formhash() && empty($_SERVER['HTTP_X_FLASH_VERSION']) && (empty($_SERVER['HTTP_REFERER']) ||
strncmp($_SERVER['HTTP_REFERER'], 'http://wsq.discuz.com/', 22) === 0 || preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])))) {
if(checkperm('seccode')) {
if($secqaacheck && !check_secqaa($_GET['secanswer'], $_GET['secqaahash'])) {
showmessage('submit_secqaa_invalid');
}
if($seccodecheck && !check_seccode($_GET['seccodeverify'], $_GET['seccodehash'], 0, $_GET['seccodemodid'])) {
showmessage('submit_seccode_invalid');
}
}
return TRUE;
} else {
showmessage('submit_invalid');
}
}
}
可以得知第三个参数$seccodecheck
为是否判断验证码。所以可以这样写:
if (submitcheck('deposit_submit',0,1)){}
其他
其实这些方法万变不离其宗:
观察js函数:updateseccode('c$sechash', '<br /><sec> <sec> <sec>', 'admin');
第一个参数是id,这个作为显示,更新验证码使用。
第二个参数为模板(自己取的名字),可以通过这个修改验证码当时。而<sec>类似于占位符
方法一:
下面这种样式就是通过修改js函数的第二个参数,在发帖的时候可以找到:
$sectpl = '<sec> <span id="sec<hash>" onclick="showMenu(this.id)"><sec></span><div id="sec<hash>_menu" class="p_pop p_opt" style="display:none"><sec></div>';
方法二:
这种方法可以直接显示,在用户修改密码出可以找到
$sectpl = '<table cellspacing="0" cellpadding="0" class="tfm"><tr><th><sec> :</th><td><sec><p class="d"><sec></p></td></tr></table>';