2

ユーザーベースで作成された行があります。「新しい行を追加」をクリックすると、一部のコンテンツが複製されて追加されます。

複製された各コンテンツには独自のテキストエリアがあり、各行は行キーを取得します。

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

jQuery を使用して、作成された行と一致するように行キーの値を書き換えます.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

以前にこの方法を使用したことがありますが、現在はこれを使用してワードプレスで作業しており、この場合は上記の最後の ajax リクエストのみでテーブルをupdate_post_meta更新します。通常、これを配列に入れることができます。wp_postmetarowkey: 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']]が行の配列ではなく、1 つの行の値に設定される場合。

例:

<?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'];

オブジェクトを排他的に含み、配列を受け入れないjsonmeta_valueオブジェクトを予期する場合は、$_POST からすべての配列をオブジェクトにキャストする必要があります。オプション JSON_FORCE_OBJECT も使用できます (php>=5.3.0 の場合)。オブジェクトは {} で囲み、配列は [] で囲みます。

于 2013-09-22T20:32:20.837 に答える