0

フォームに好きなだけフィールドを追加できるJSがいくつかあります。フォームを送信すると、次のようにデータベースに保存する必要があります。

title[1] >> video_id[1] ||| title[2] >> video_id[2] ||| ...

必要なのは、これらすべてを取得して上記のようにまとめることができる PHP コードです。

(値の数は 1 から 100 の間であることに注意してください)、フォームにフィールドがいくつあっても、それらすべてを 1 つの文字列にまとめる必要があります。数が限られているため、現在のコードではこれを達成できません。

$video = $_POST['title[1]'].' >> '.$_POST['video_id[1]'].' ||| '.$_POST['title[2]'].' >> '.$_POST['video_id[2]'].' ||| '.$_POST['title[3]'].' >> '.$_POST['video_id[3]'].' ||| ';

どうすればいいですか?

4

3 に答える 3

2

フロントエンドから PHP バックエンドに多次元データ構造を渡す方法について質問されていると思います。少なくとも 2 つの選択肢があります。

オプション番号 1 - 多次元フォーム データを使用する

PHP は次の構造を解釈できます (簡単にするために、1 行に 1 つのパラメーターを使用しています)。

items[0][title]=Movie1
items[0][video_id]=3123
items[1][title]=Movie2
items[1][video_id]=5422

POST本文として、またはGETクエリ パラメータ内で渡されると、渡された構造が次のように解釈されます。

$data = array(
    'items' => array(
        array(
            'title' => 'Movie1',
            'video_id' => '3123',
        ),
        array(
            'title' => 'Movie2',
            'video_id' => '5422',
        ),
    ),
);

$data = $_GETただし、(クエリパラメーターとして渡す$data = $_POST場合)または(リクエストボディに渡す場合)を実行することで簡単に取得できます。これは非常に単純な例です。

HTML から渡すには、フィールドに適切な名前を付けるだけです (最初に指定したリストでは、フィールドの名前は " " の左側にあり=、値は右側にあります)。したがって、上記の例の値を渡すには、フォームは次のようになります。

<form action="/some/url" method="post">
    <input name="items[0][title]" value="Movie1" />
    <input name="items[0][video_id]" value="3123" />
    <input name="items[1][title]" value="Movie2" />
    <input name="items[1][video_id]" value="5422" />
</form>

同様のパターンに基づいて、非表示のフィールドを含むフォームを作成し (ユーザーに表示されないようにする)、同様の方法で名前を作成することができます (データ構造が維持されるようにします)。

オプション番号 2 - JSON を使用する

JSON は非常に一般的な形式であり、バックエンドにテキストを渡すことができれば、プリミティブデータ (つまり、標準オブジェクト、配列、文​​字列、ブール値、整数、浮動小数点数、および null) をシリアル化し、バックエンドで次のようにデコードできます。

$data = json_decode($_POST['data']);  // assuming 'data' key contains JSON string

それはあなたの質問に答えましたか?

于 2013-08-04T22:23:39.763 に答える
1

私はこれがうまくいくと信じています。まず、 s 用titleに 1 つ、s 用に1 つの配列を作成しますvideo_id>>次に、 andを使用して 2 つを連結し|||ます。

$titles = $_POST['title'];
$video_ids = $_POST['video_id'];
$video = "";

for ($i = 0, $l = count($titles); $i < $l; $i++) {
  $video .= "{$titles[$i} >> {$video_ids[$i]} |||";
}
于 2013-08-04T22:17:31.987 に答える
0

titles の数と同じ数の s があると仮定すると、video_id次のようなものが正しい方向を示している可能性があります。

// Count the number of elements there are in the form
// (you want to do this outside of the for loop so it doesn't
// repeat the calculation each iteration)
$elementCount = count($_POST['title']);
$video = '';

for ($i = 1; $i <= $elementCount; $i++) {
   // Concatenate $_POST['title[i]'] >> $_POST['video_id[i]'] |||
   // to $video
   $video .= $_POST['title[' . $i . ']']    . ' >> '
           . $_POST['video_id[' . $i . ']'] . ' ||| ';
}

echo $video;
于 2013-08-04T22:18:16.500 に答える