2013-09-22 32 views
2

我有基于用户的创建行。当你点击“添加新行”时,会克隆和追加一些内容。多个Ajax请求,只有一个插入数据库?

每个克隆的内容都有自己的textarea,每一行都有一个行键。

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

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

ajax post中的最终结果是每行都有一个新的ajax请求。阿贾克斯后看起来像这样

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

一个新行

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

另一个Ajax请求然后又如果另一行创建

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

我以前也使用过这种方法,但现在使用update_post_meta在wordpress中工作,它只更新wp_postmeta表,仅使用上面所述的最后一个ajax请求,在这种情况下为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用作论据有任何问题,只是让所有的阿贾克斯后的值到数据库中,而不是最后。只是扔在那里我记得使用ARRAY_A不知道这是否与此有关。

meta_value数据库表看起来像这样

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

当它应该是这样的:不是很确定这是否是100%准确的,但它应该类似于

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

最后一句话:我希望这已经够清楚了,不会太长。我真的可以在这里使用帮助。我会非常乐意提供更多的信息,我真的想弄清楚这一点。任何你需要的信息都可以问。

回答

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)。对象由{}围绕,而数组用[]环绕。

+0

是的,我有一种感觉就是这样,我从另一个应用程序中获得了这种技术,并且在过去没有任何问题使用它。感谢您的答案让我实现这一点,我知道这绝对是在正确的轨道上..我很快发布回来:) –