2

主に個人的な練習として、私が取り組んでいる個人的な Web サイトのフレームワークを書いています。現在、Web サイトにフォームを表示する一般的な方法を作成しようとしています。PHP によって HTML に変換されるフォームをモデル化するために JSON モデルを使用しています。私が現在許可しようとしているのは、次のようなものです。

[type] [contact address]
[type] [contact address]
+ Add More

「type[]」のようなフォーム要素名を使用すると、さまざまなタイプ フィールドの値が配列として php に送信されることがわかっています。ただし、この場合、atypeと acontact addressは一緒に属します。型をループして関連する他のフィールドを取得するなど、これを実現するさまざまな方法を知っていますが、どういうわけかそれを連想配列に変換すると、コードで使用する方がはるかに簡単に思えます。

これを達成するためのさまざまな方法を知っていることに注意してください。ただし、いくつかのベストプラクティスを実行しようとしています。ウェブサイトの JavaScript の量を最小限に抑えようとしているので、PHP でこれを行うことをお勧めします。

4

2 に答える 2

1

contact[id][type]やのような多次元配列を実際に作成できますcontact[id][address]。したがって、id新しい値を追加する場合は増分値になる可能性がある がある場合は、id両方に同じ値を指定してください。PHP は、 のような多次元配列として認識し$_POST['contact'][1]['type'] == 'sometype, $_POST['contact'][1]['address'] == 'theaddress'ます。

したがって、新しいフォーム入力は次のようになります。

<input id='someid_type_123' name='contact[123][type]' />
<input id='someid_address_123' name='contact[123][address]' />

<input id='someid_type_124' name='contact[124][type]' />
<input id='someid_address_124' name='contact[124][address]' />

その後、ループすることができます$_POST['contact']

foreach ($_POST['contact'] as $id => $values) {
  echo $values['type'] . ' ' . $values['address'];
}

サンプル入力を使用すると、次のvar_dump($_POST)ようになります。

array(1) {
  ["contact"]=>
  array(2) {
    [123]=>
    array(2) {
      ["type"]=>
      string(5) "type1"
      ["address"]=>
      string(5) "addr1"
    }
    [124]=>
    array(2) {
      ["type"]=>
      string(5) "type2"
      ["address"]=>
      string(5) "addr2"
    }
  }
}

JavaScript で ID を生成するために使用する方法 (事前に ID がわからない場合) は、完全にあなた次第です。で変数を開始し、リンク1をクリックするたびに増分することができます。add moreの値はid、入力のペアで同じである限り、実際には問題ではありません。

// Initialize curId on page load.
var curId = 1;

addMoreLink.onclick = function() {
  // append the new inputs using curId
  // and then increment the value
  curId++;
}
于 2012-11-24T15:40:14.193 に答える
0

関連するすべての要素を結合するためのキーが必要です。一意のユーザー ID など、システム全体で一意のもの。したがって、タイプの各要素は何でもかまいませんが、それらが 1 つの親要素 (ユーザー/顧客など) に属している場合は、親オブジェクト ID を共有する必要があります。もっと単純なものがあるとは思えない

于 2012-11-24T15:39:19.223 に答える