2

我有基于用户的创建行。当您单击“添加新行”时,会克隆并附加一些内容。

每个克隆的内容都有自己的文本区域,每一行都有一个行键。

<input type="hidden" name="rowkey" value="0">

我使用 jQuery 重写 rowkey 值以匹配.each()创建的行。

ajax 帖子的最终结果是每行都有一个新的 ajax 请求。ajax 帖子看起来像这样

rowkey: 0
application[rows][0][elements][html]: Some HTML here

另一个新行的ajax请求

rowkey: 1
application[rows][1][elements][html]: Some More HTML here

如果创建了另一行,则为另一个

rowkey: 2
application[rows][2][elements][html]: Some More More HTML here

我以前使用过这种方法,但现在在 wordpress 中使用update_post_meta它只使用最后一个 ajax 请求更新wp_postmeta表,在这种情况下,rowkey: 2如上所述。通常我可以把它放到一个数组中。

这里是update_post_meta

$application['rows'][$_POST['rowkey']] = $_POST['application']['rows'][$_POST['rowkey']];

$application = esc_sql(json_encode($application));

    // Update the post's meta field
    update_post_meta($post_id, 'MY_DATABASE', $application);

注意:这是在函数内部,$post_id用作参数没有问题,只是将所有 ajax post 值放入数据库,而不是最后一个。只是把它扔在那里我记得使用ARRAY_A不确定这是否相关。

数据库表meta_value看起来像这样

"rows":{"1":{"elements":{"html":"2"}}}

什么时候应该是这样的:不太确定这是否 100% 准确,但看起来应该相似

"rows":{"1":{"elements":{"html":"1"}}, {"2":{"elements":{"html":"2"}}, {"3":{"elements":{"html":"3"}} }

最后一句话:我希望这足够清楚,而且不会太长。我真的可以在这里使用帮助。我很乐意提供更多信息,我真的很想弄清楚这一点。您需要的任何信息都可以询问。

4

1 回答 1

0

据我了解你的问题,我认为$application['rows'][$_POST['rowkey']] = $_POST['application']['rows'][$_POST['rowkey']];是错误的。

何时$_POST['rowkey']将数字$application['rows'][$_POST['rowkey']]设置为一行的值而不是行数组。

例子:

<?php
$application = array();
$application['rows']=array();
for ($i=0; $i<10; $i++)
{
    $application['rows'][$i]=(object)array('elements',(object)array('html'=>($i+1)));
}   

//var_dump($application);
var_dump(json_encode($application['rows'][3])); // your result
var_dump(json_encode((object)$application['rows'])); //expected result

所以在你的代码$application['rows'][$_POST['rowkey']] = $_POST['application']['rows'][$_POST['rowkey']];中类似于$application['rows'] = $_POST['application']['rows'];

注意meta_value期望一个包含对象且不接受数组的 json 对象时,您必须将每个数组从 $_POST 转换为一个对象。您也可以使用选项 JSON_FORCE_OBJECT(对于 php>=5.3.0)。对象被 {} 包围,而数组被 [] 包围。

于 2013-09-22T20:32:20.837 回答