2

いくつかの静的なものと一緒にいくつかの動的に追加されたテキストボックスがあります。私が抱えている問題は、動的フォームの1つからアイテムを削除するときに、フォームタグでラップしていない限り、リストから最後のアイテムのみが削除されることです。ただし、フォームタグでラップすると、静的テキストボックスは投稿されません。基本的に、テキストボックスを送信する場合、タグを適切に使用する方法を考えています。

例えば、

<form method="post">
<textbox 1>
<textbox 2>
<textbox 3>

<?
 $tasks->task_form();

?>
 <another textbox> //these text boxes don't POST when the dynamic forms have tags wrapped around them
 <another textbox>
<?    
 $users->dynamic_form_2();
?>

</form>

たとえば、これがtask_formです

function task_form(){

//textbox and submit to add tasks here (omitted to keep shorter)

foreach (array_combine($task, $task_num) as $task => $task_num){
            ?>
            <form method="post">
            <tr><td><? echo $task; ?></td><td><? echo $task_num; ?></td>
            <td><input type="submit" name="remove_task" value="Remove"/></td>
            <td><input type="hidden" name="task_name" value="<? echo $task; ?>"/>
            <td><input type="hidden" name="task_num" value="<? echo $task_num; ?>"/></td></tr>
            </form>
            <?
        }

}

動的フォームの周囲にフォームタグを配置しないと、削除しようとしたアイテムに関係なく、そのフォームの最後のアイテムが削除されます。ただし、フォームタグを使用すると、一部のテキストボックスの値がPOSTされません。

4

3 に答える 3

2

これはおそらく最もクリーンなソリューションではありませんが、jQueryなどのツールキットを使用して、送信ボタンの1つをクリックするだけでajax、各フォームのクエリを並行して送信し、すべてが完了したら、別のページにリダイレクトできます。

フォームを確認することを強くお勧めします。おそらく単一のフォームである必要があります。

于 2012-11-27T03:56:22.483 に答える
1

いいえ、純粋なHTML/PHPで複数のフォームを送信することはできません。

あなたがしなければならないでしょう

  • フォームを作り直して、すべてを同時に送信する(これは通常、実際よりも難しいように聞こえます)または
  • サーバーロジックを作り直して、いくつかのフォームのどれが送信されたかを確認します(おそらくを使用してisset($_POST['whatever']))。

AJAXソリューションは機能する可能性がありますが、それには長所と短所もあります。

于 2012-11-27T03:53:28.823 に答える
0

ループからタグを削除するだけです。

foreach (array_combine($task, $task_num) as $task => $task_num){
            ?>
            <tr><td><? echo $task; ?></td><td><? echo $task_num; ?></td>
            <td><input type="submit" name="remove_task" value="Remove"/></td>
            <td><input type="hidden" name="task_name" value="<? echo $task; ?>"/>
            <td><input type="hidden" name="task_num" value="<? echo $task_num; ?>"/></td></tr>
            <?
        }

他の人が説明したように、フォームをネストすることはできません。とにかく、フィールドは同じフォームに属しているので、必要なフィールドを追加するだけです。

個人的には、フォームの送信を処理するために JQuery に移行しました。これは、ユーザーにより良いエクスペリエンスを提供するためです (サーバーにループする代わりに、すぐにフィードバックを与えることができます)。また、フォームが本当に必要ないため、解放されます。タグまたは入力(必要に応じて書き込み可能な div を使用できます)。

于 2012-11-27T04:08:52.657 に答える