详解Discuz会员认证信息的数据库保存及获取

2014-11-03 23:36 栏目:技术开发 查看(34436)

大家都知道Discuz有完善的会员体系,其中也包含了用户认证体系,比如基本的实名认证等,而且对于普通应用已经足够。在《若抛开Discuz框架,以数据库读取数据方式实现小米论坛风格》一文中就提到其中Discuz会员认证信息的数据库保存及获取可能就会难住一部分童鞋了。而这种风格我相信大家很多人喜欢,这里长沙现代化建站公司微构网络旗下的木泉网Dsicuz团队就给大家分享:

说到从数据库里面读取会员认证信息,大家可能会直接查看DZ的数据词典,但结果却不是大家想象的那样了,因为关于会员的数据表其实很简单,就是那张简单的pre_common_member_verify,而pre_common_member_verify_info是存储用户具体的信息的,但我们在做小米风格的时候要的则是认证的名称及图标信息。

2233

到这个地方大家可能会很简单,就是关联用户表和这个用户认证表,先获取用户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 “


“;
$b=unserialize($arr);
print_r($b);
$c=$b['1'];
echo “

“;
print_r($c);
echo “

“;
$d=$c['icon'];
$e=$c['title'];
echo ‘认证名称—-’.$e.’
‘;
echo ‘认证图标路径为—’.$d;
[/cc]
得到的结果就是如下
2555
至此相关的处理程序结束,上述过程就是Discuz会员认证信息的数据库保存及获取,其实最关键的地方就是关于PHP的一组函数,也就是serialize()和unserialize()。
如果大家有关于DZ做门户或者社区论坛的需求可以咨询长沙建站公司微构网络,当然其他建站及互联网其他服务也可以来联系我们,我们将用心提供互联网服务。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:详解Discuz会员认证信息的数据库保存及获取 - 微构网络
分享: