適切なタイトルが何であるかわからないため、タイトルは非常に一般的です。状況を説明しましょう:
と という名前の 2 つのテキストボックスLastName0
とFirstName0
というボタンがあるとしますaddMore
。をクリックaddMore
すると、JavaScript によって別の 2 つのテキスト ボックスが作成されます。これらのテキストボックスには と という名前が付けられLastName1
ますFirstName1
。addMore
ボタンをもう一度クリックすると、別の 2 つのテキスト ボックス ボタンが作成されLastName2
、FirstName2
それぞれ名前が付けられます。addMore
これは、ボタンがクリックされている限り続きます。また、という名前のボタンdeleteThis
がテキストボックスの横に作成されます。クリックすると、作成されたテキストボックスが削除されるだけです。
という変数も初期化しましたcounter
。addMore
ボタンがクリックされるたびに が 1 ずつ増加し、ボタンがクリックcounter
されるたびに が 1ずつ減少します。 の値は非表示の入力型に格納されます。deleteThis
counter
counter
ユーザーがフォームを送信すると、の値を取得しcounter
、For ループを作成して、フォーム内のテキスト ボックスのすべての値を取得します。サンプルコードは次のとおりです。
//Suppose that the user decides to add 2 more textboxes. Now we have the following:
// LastName0 FirstName0
// LastName1 FirstName1
// LastName2 FirstName2
$ctr = $_POST['counter']; //the counter == 3
for ($x = 0; $x < $ctr; $ctr++)
{
$lastname = $_POST["LastName$x"];
$firstname = $_POST["FirstName$x"];
//This will get the values of LastName0,1,2 and FirstName0,1,2
//code to save to database…
}
上記のコードでは、 の値がcounter
3 の場合、テキスト ボックスLastName0,1,2
との値FirstName0,1,2
が保存されます。問題は次のとおりです。ユーザーが and を削除するLastName1
とFirstName1
、For ループが適切に反復できなくなります。
$ctr = $_POST['counter']; //the counter == 2
for ($x = 0; $x < $ctr; $ctr++)
{
//Only LastName0 and FirstName0 will be saved.
$lastname = $_POST["LastName$x"];
$firstname = $_POST["FirstName$x"];
//code to save to database…
}
この問題を解決するために「押してはじける」概念を使用するように誰かに言われましたが、ここでそれを適用する方法についてはよくわかりません。誰かがそれを適用する方法を教えてくれれば、それは素晴らしいことです。