【发布时间】:2016-12-16 01:13:41
【问题描述】:
在将关联数组的每个成员保存到wp_postmeta 表之前,我需要对其运行加密函数。我的表单允许动态添加/删除行。我一直在尝试使用array_walk() 让它工作。
这是表单的配置方式:
<input type="text" id="z_my_data[][username]" name="z_my_data[0][username]">
<input type="text" id="z_my_data[][password]" name="z_my_data[0][password]">
这是在“save_post”操作上运行的:
// Save encrypted data to post meta
if (isset($_POST['z_my_data'])) {
// Get posted form variables
$my_data = $_POST['z_my_data'];
// Encrypt each member of each row
for ($i = 0; $i < count($my_data); $i++) {
$cryptKey = $this->cryptKey;
array_walk($my_data[strval($i)], create_function('&$val', 'global $cryptKey; $val = Crypto::encrypt($val, $cryptKey);'));
}
if ( ! add_post_meta( $post_id, '_my_data', $my_data, true ) ) {
update_post_meta( $post_id, '_my_data', $my_data);
}
} else {
delete_post_meta( $post_id, '_my_data' );
}
我可以看到数据正在被加密。这是for循环之后的print_r($my_data):
Array
(
[0] => Array
(
[username] => ®ØåÛâÏ0…"ë°?mˤÙ
[password] => xSFç„L¶·3z˜'J0ÖRÅÎj
)
)
但是没有创建 post 元键,也没有生成错误。元键在 postmeta 表中不存在,但 add_post_meta() 返回 false 并且从未添加键/值。
有人看到我做错了吗?
我不知道该怎么说,但我认为 [0] 是命名键而不是索引键。我这么说是因为我可以创建多个并删除 [0] 元素,而剩下的单个元素仍然使用 print_r 显示 [1]。
【问题讨论】:
-
在条件块
if ( ! add_post_meta....中,放置一个else条件并做一些处理。 -
@JeremyHarris
add_post_meta如果它已经存在则返回 false。如果添加成功,则返回 true。我错过了你的意思吗? -
But the post meta key is not created and no error is generated.... 很明显if语句返回 false 。您将unique参数设置为true(最后一个),因此您可能遇到了重复值。你想怎么处理?添加else条件并处理它:-) -
@JeremyHarris 你是对的。添加失败并返回false,然后更新也失败。但是添加应该添加了帖子元。没有重复项。 postmeta 表只有 9 行,所以我可以看到它们。所以......添加失败,我接下来该怎么办?似乎 $my_data 的格式不正确,但我猜。
-
[0] is a named key因为您使用的是$my_data[strval($i)]。相反,只需使用$my_data[$i]创建索引数组
标签: php mysql wordpress wordpress-theming associative-array