扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
大家都知道Discuz有完善的会员体系,其中也包含了用户认证体系,比如基本的实名认证等,而且对于普通应用已经足够。在《若抛开Discuz框架,以数据库读取数据方式实现小米论坛风格》一文中就提到其中Discuz会员认证信息的数据库保存及获取可能就会难住一部分童鞋了。而这种风格我相信大家很多人喜欢,这里长沙现代化建站公司微构网络旗下的木泉网Dsicuz团队就给大家分享:
说到从数据库里面读取会员认证信息,大家可能会直接查看DZ的数据词典,但结果却不是大家想象的那样了,因为关于会员的数据表其实很简单,就是那张简单的pre_common_member_verify,而pre_common_member_verify_info是存储用户具体的信息的,但我们在做小米风格的时候要的则是认证的名称及图标信息。
到这个地方大家可能会很简单,就是关联用户表和这个用户认证表,先获取用户uid,就取到了用户是否被认证了。但接下来怎么办?接下来我们要获取认证名称和认证图标都没有。于是试着为创建认证信息(创建了个人认证和官方认证),结果我们熟悉DZ的童鞋都知道(不过长沙熟悉DZ的团队并不是太多哟),其实在后台就可以进行设置。到这里如果进一步了解DZ等开源程序的都知道,后台的设置信息其实有专门的一个数据表去存储的。那就是pre_common_setting,而其中的verify就是关于用户认证设置信息的,其中的值就是svalue了。
[cc lang="sql"]SELECT svalue FROM “.DB::table(‘common_setting’).” where skey=’verify’[/cc]
通过以上查询得到其中的svalue的值为下面的
[cc lang="html"]
a:8:{i:6;a:7:{s:5:”title”;s:8:”实名认证”;s:9:”available”;i:0;s:8:”showicon”;s:1:”0″;s:12:”viewrealname”;s:1:”0″;s:5:”field”;a:1:{s:8:”realname”;s:8:”realname”;}s:4:”icon”;s:0:””;s:12:”unverifyicon”;s:0:””;}s:7:”enabled”;b:1;i:1;a:6:{s:5:”title”;s:8:”官方认证”;s:9:”available”;i:1;s:8:”showicon”;s:1:”1″;s:7:”groupid”;a:1:{i:0;s:2:”21″;}s:4:”icon”;s:27:”c4/common_1_verify_icon.png”;s:12:”unverifyicon”;s:0:””;}i:2;a:6:{s:5:”title”;s:8:”个人认证”;s:9:”available”;i:1;s:8:”showicon”;s:1:”1″;s:4:”icon”;s:27:”c8/common_2_verify_icon.png”;s:12:”unverifyicon”;s:0:””;s:7:”groupid”;a:0:{}}i:3;a:4:{s:4:”icon”;s:0:””;s:9:”available”;i:0;s:5:”title”;s:0:””;s:12:”unverifyicon”;s:0:””;}i:4;a:4:{s:4:”icon”;s:0:””;s:9:”available”;i:0;s:5:”title”;s:0:””;s:12:”unverifyicon”;s:0:””;}i:5;a:4:{s:4:”icon”;s:0:””;s:9:”available”;i:0;s:5:”title”;s:0:””;s:12:”unverifyicon”;s:0:””;}i:7;a:7:{s:5:”title”;s:8:”视频认证”;s:9:”available”;s:1:”0″;s:8:”showicon”;s:1:”1″;s:14:”viewvideophoto”;s:1:”0″;s:4:”icon”;s:0:””;s:12:”unverifyicon”;s:0:””;s:7:”groupid”;a:0:{}}}
[/cc]
而这个值大家看MySQL的数据结构发现是text类型的,大家也许一直在思考是不是这个类型的问题。对于很多小白来说可能看到这样的信息就傻了,虽然可能叫他去修改其中的某个信息能修改,直接拷贝出来修改再复制进去不就得了。但如果要他有规律地去取信息却无从下手了。
其实就是DZ利用了PHP的serialize()函数,该系统函数的作用就是将输入的值生成一个可存储的值,简单来说就是生成一个更加简洁但不影响存储的值,有点儿json等的感觉,其其有相反的函数unserialize()。大家也可以通过PHP的官方网站去参考该函数的详细说明,当作是做温习吧。传送。
既然是这样进行存储的,那么大家也可以知道了,那么读取他的时候就是利用相反的系统函数unserialize(),下面我就以已经有的认证设置信息为例做个演示。
[cc lang="php"]
$sqlcont=”SELECT svalue FROM “.DB::table(‘common_setting’).” where skey=’verify’”;
$query=DB::query($sqlcont);
$i=1;
while($row=DB::fetch($query)){
$arr.=$row['svalue'];
$i++;
}
echo $arr;
echo “
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流