多个ajax请求,只有一个插入数据库?

时间:2013-09-22 12:24:11

标签: php jquery ajax

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

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

<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

之前我使用过这种方法,但现在使用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用作参数,没有问题,只是将所有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"}} }

最后的一句话:我希望这很清楚,也不会太久。我真的可以在这里使用帮助。我非常乐意提供更多信息,我真的想弄明白这一点。您需要提供任何信息。

1 个答案:

答案 0 :(得分: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&gt; = 5.3.0)。对象由{}环绕,而数组用[]环绕。