逆风天 发表于 2022-3-5 12:46:03

Discuz 插件开发中的数据序列化与反序列化

本帖最后由 逆风天 于 2022-3-5 12:53 编辑

Discuz 插件开发中的数据序列化与反序列化
需求:
插件中需要设置多个版块,然后前台再根据当前版块的fid对比设置的版块,判断当前版块是否是设置过的版块。

实现:
插件后台设置select多选模式,如下图

当设置好这个功能之后,多选,或者单选,都会自动序列化选中的数据,然后存入数据表。
而数据,看起来是这样
a:4:{i:0;s:1:"2";i:1;s:2:"36";i:2;s:2:"37";i:3;s:2:"39";}问题:
当这条数据从数据库取出来再反序列化,就不会成功。
普通的反序列化
$SetForums = unserialize($setting['q_and_a']);解决:
由于序列化数据存储引号,分号,culry括号,mysql需要自己保存,所以它会自动放入来自gpc_magic_quotes。因此,如果存储序列化数据并且想要使用它,则应在界面中使用html_entity_decode()以确保您具有PHP读取的实际格式。
看起来象这样
$SetForums = unserialize(html_entity_decode($setting['q_and_a']));答案:
对比当前fid是否存在于设置的版块们中
1.php中判断
if (in_array($_GET['fid'], $SetForums)) {
echo "当前版块在后台中已经设置了!";
} else {
echo "未设置!";
}

2.模板中判断
{if (in_array($_GET['fid'], $SetForums))}
当前版块在后台中已经设置了!
{else}
未设置!
{/if}Have Fun!
页: [1]
查看完整版本: Discuz 插件开发中的数据序列化与反序列化