为规范代码书写、提高作品质量、加强开发素养,同时使审核省时省力,快速通过,整理一些提审应用中遇到的常见问题(有些问题是老生常谈),供开发者参考。下面是一些discuz x插件开发中常见的一些问题整理。
1、获取客户端IP地址问题:
$ip = $_SERVER["REMOTE_ADDR"];
复制代码
有些开发者用这种常规代码来获取IP,并非不可以,但是对DZ的一些变量了解不足。DZ已经预置了一个安全获取IP的变量,即$_G['clientip'],可以直接使用。
2、关于C::t(...)->insert(...)用法不熟,如:
C::t('#plname#tbname')->insert($uid, $uname, $message, $timenow, $ip);
复制代码
然后在table_tbname.class.php数据表类文件中是这样写的
p
ublic function insert($uid, $uname, $message, $time, $rormip) {
return DB::insert($this->_table, array(
'uid' => $uid,
'unane' => $uname,
'message' => $message,
'time' => $time,
'rormip' => $rormip
), true, true);
}
复制代码
以上重写insert函数,说明对C::t方法认识不足,甚至完全没搞懂如何运用,没有通读《技术文库》有关章节。在"新增数据层:数据层的规范和约定"中明确"数据表类继承discuz_table基类",而该基类实现了UID(UPDATE、INSERT、DELETE)方法,直接继承使用就行了,没必要重写。上例可修改如下:
$data = array('uid'=>$uid,'unane' => $uname,'message' => $message,'time' => $time,'rormip' => $rormip);
C::t('#plname#tbname')->insert($data,true,true);
复制代码
相关的数据类文件中保留构造函数即可
class table_tbname extends discuz_table
{
public function __construct() {
$this->_table = 'tbname';
$this->_pk = 'id';
parent::__construct();
}
}
复制代码
3、对函数参数的意义认识不足,有照葫芦画瓢之嫌:
如上面的C::t('#plname#tbname')->insert($data,true,true);
其中insert函数的第二参数表示是否返回新纪录的ID值,而该语句第二参数要求返回新ID,却没有赋值变量,因此如是写法不仅毫无意义,而且降低了执行效率(尽管仅此一句可以忽略不计,但要是有N个这样的语句呢?)
4、请求来路合法性验证问题
对于表单数据处理,不少人习惯于如下写法
if($_GET['submit']){...}
复制代码
这种写法不能保证安全性,因此必须使用规范写法,即
if(submitcheck('submit')){...}
复制代码
关于submitcheck函数机制请努力研读source/class/helper/helper_form.php,加深理解
还没有评论,来说两句吧...