【问题标题】:Multiple checkbox values in array gives strange characters in database数组中的多个复选框值在数据库中给出了奇怪的字符
【发布时间】:2017-12-20 14:17:47
【问题描述】:

我将数组中复选框中的值保存到数据库中,但在数据库中,该字段包含奇怪的字符,例如:s:44:"a:2:{i:0;s:8:"0 -4 年";i:1;s:8:"第 10 组";}";

我只需要0-4年第10组的部分。如何防止角色以我想要的方式获得它?

这是表格的一部分:

<input type="checkbox" name="wmw_age[]" value="0-4 years">
<input type="checkbox" name="wmw_age[]" value="10th group">

这是我提交后将它获取到数据库的方式:

$data=serialize($_POST['wmw_age']);
update_post_meta($post_id, 'wmw_age', $data);

如果两个字段都被选中,这是数据库中的结果:

s:44:"a:2:{i:0;s:8:"0-4 years";i:1;s:8:"10th group";}";

是否只能在数据库中获取这个:0-4年,第10组

我希望有人可以帮助我!

谢谢。

【问题讨论】:

  • 那是Serialize()'d 所以你需要unserialize()它回到一个PHP数据结构
  • 或者一开始就不要序列化它。
  • @FirstOne 是的,这对我有用:)
  • @FirstOne 已经序列化了,又要序列化了
  • 为了得到你想要的,你必须将$_POST['wmw_age']预处理成一个逗号分隔的列表。 虽然这比序列化更糟糕

标签: php arrays database wordpress


【解决方案1】:

这应该可以解决问题:

$data = join(', ', $_POST['wmw_age']);

您不必序列化数组,它可以与join 函数连接,该函数将通过将所有值与给定字符串(胶水)连接起来将其转换为字符串。 (上例中的', '

结果将是:0-4 年,第 10 组,如果选中两个复选框,第 10 组0-4 年如果只选中一个复选框,如果没有选中则为空字符串。

感谢@RiggsFolly 指出,序列化后的字符串会被update_post_meta 再次序列化,因此不需要反序列化。

【讨论】:

  • 虽然在单个表列中用逗号分隔列表比序列化它更糟糕
  • 想想$_POST['wmw_age'] 无论如何都不是序列化的。那只是一个数组!
  • @RiggsFolly 我同意,如果以后要再次分析数据,将逗号分隔的列表存储到数据库中是个坏主意。对于简单的输出是可以的。
  • @RiggsFolly 基于提供的示例$_POST['wmw_age'] 是一个序列化数组。
  • 不,数组$_POST['wmw_age'] 被序列化为$data$data 被存储、序列化到数据库中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
相关资源
最近更新 更多