查看 1445
回复 0
Discuz 插件开发中的数据序列化与反序列化
逆风天

16

主题

0

回帖

105

积分
发表于 2022-3-5 12:46:03
显示全部楼层 阅读模式
本帖最后由 逆风天 于 2022-3-5 12:53 编辑
Discuz 插件开发中的数据序列化与反序列化

需求:
插件中需要设置多个版块,然后前台再根据当前版块的fid对比设置的版块,判断当前版块是否是设置过的版块。

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

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

  7. 2.模板中判断
  8. {if (in_array($_GET['fid'], $SetForums))}
  9. 当前版块在后台中已经设置了!
  10. {else}
  11. 未设置!
  12. {/if}
复制代码
Have Fun!

本帖子中包含更多资源

您需要登录才可以下载或查看,没有账号?立即注册
您需要登录后才可以回帖 登录 立即注册
QQ 快速回复 返回列表