掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
大家都知道Discuz有完善的會(huì)員體系,其中也包含了用戶認(rèn)證體系,比如基本的實(shí)名認(rèn)證等,而且對(duì)于普通應(yīng)用已經(jīng)足夠。在《若拋開Discuz框架,以數(shù)據(jù)庫(kù)讀取數(shù)據(jù)方式實(shí)現(xiàn)小米論壇風(fēng)格》一文中就提到其中Discuz會(huì)員認(rèn)證信息的數(shù)據(jù)庫(kù)保存及獲取可能就會(huì)難住一部分童鞋了。而這種風(fēng)格我相信大家很多人喜歡,這里長(zhǎng)沙現(xiàn)代化建站公司微構(gòu)網(wǎng)絡(luò)旗下的木泉網(wǎng)Dsicuz團(tuán)隊(duì)就給大家分享:
說(shuō)到從數(shù)據(jù)庫(kù)里面讀取會(huì)員認(rèn)證信息,大家可能會(huì)直接查看DZ的數(shù)據(jù)詞典,但結(jié)果卻不是大家想象的那樣了,因?yàn)殛P(guān)于會(huì)員的數(shù)據(jù)表其實(shí)很簡(jiǎn)單,就是那張簡(jiǎn)單的pre_common_member_verify,而pre_common_member_verify_info是存儲(chǔ)用戶具體的信息的,但我們?cè)谧鲂∶罪L(fēng)格的時(shí)候要的則是認(rèn)證的名稱及圖標(biāo)信息。
到這個(gè)地方大家可能會(huì)很簡(jiǎn)單,就是關(guān)聯(lián)用戶表和這個(gè)用戶認(rèn)證表,先獲取用戶uid,就取到了用戶是否被認(rèn)證了。但接下來(lái)怎么辦?接下來(lái)我們要獲取認(rèn)證名稱和認(rèn)證圖標(biāo)都沒有。于是試著為創(chuàng)建認(rèn)證信息(創(chuàng)建了個(gè)人認(rèn)證和官方認(rèn)證),結(jié)果我們熟悉DZ的童鞋都知道(不過(guò)長(zhǎng)沙熟悉DZ的團(tuán)隊(duì)并不是太多喲),其實(shí)在后臺(tái)就可以進(jìn)行設(shè)置。到這里如果進(jìn)一步了解DZ等開源程序的都知道,后臺(tái)的設(shè)置信息其實(shí)有專門的一個(gè)數(shù)據(jù)表去存儲(chǔ)的。那就是pre_common_setting,而其中的verify就是關(guān)于用戶認(rèn)證設(shè)置信息的,其中的值就是svalue了。
[cc lang="sql"]SELECT svalue FROM “.DB::table(‘common_setting’).” where skey=’verify’[/cc]
通過(guò)以上查詢得到其中的svalue的值為下面的
[cc lang="html"]
a:8:{i:6;a:7:{s:5:”title”;s:8:”實(shí)名認(rèn)證”;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:”官方認(rèn)證”;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:”個(gè)人認(rèn)證”;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:”視頻認(rèn)證”;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]
而這個(gè)值大家看MySQL的數(shù)據(jù)結(jié)構(gòu)發(fā)現(xiàn)是text類型的,大家也許一直在思考是不是這個(gè)類型的問題。對(duì)于很多小白來(lái)說(shuō)可能看到這樣的信息就傻了,雖然可能叫他去修改其中的某個(gè)信息能修改,直接拷貝出來(lái)修改再?gòu)?fù)制進(jìn)去不就得了。但如果要他有規(guī)律地去取信息卻無(wú)從下手了。
其實(shí)就是DZ利用了PHP的serialize()函數(shù),該系統(tǒng)函數(shù)的作用就是將輸入的值生成一個(gè)可存儲(chǔ)的值,簡(jiǎn)單來(lái)說(shuō)就是生成一個(gè)更加簡(jiǎn)潔但不影響存儲(chǔ)的值,有點(diǎn)兒json等的感覺,其其有相反的函數(shù)unserialize()。大家也可以通過(guò)PHP的官方網(wǎng)站去參考該函數(shù)的詳細(xì)說(shuō)明,當(dāng)作是做溫習(xí)吧。傳送。
既然是這樣進(jìn)行存儲(chǔ)的,那么大家也可以知道了,那么讀取他的時(shí)候就是利用相反的系統(tǒng)函數(shù)unserialize(),下面我就以已經(jīng)有的認(rèn)證設(shè)置信息為例做個(gè)演示。
[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 “
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流