0

$ node_numberのユーザー選択に基づいてフォームを作成しているので、フォームは次のようになります。

function createForm($node_number) {
            echo "<form id=\"form\" name=\"form\" action=\"molecule_display.php\" method=\"post\">";
           for ($n = 1; $n <= $node_number; $n++) {
                echo "<fieldset class=\"step\">
                            <input id=\"node_title" . $n . "\" name=\"node_title" . $n . "\" />
                            <input id=\"node_comment" . $n . "\" name=\"node_comment" . $n . "\" type=\"textarea\"  />
                     </fieldset>";
                            }
            echo "<input type=\"hidden\" name=\"node_number\" value=\"" . $node_number . "\">
                    <button id=\"submit_node\" type=\"submit\">Submit</button>"
            echo "</form>";
            }

これにより、そのフォーム要素のバージョンの$node_numberが作成されます。私の質問は、フォーム要素に動的に名前を付けて、処理時にそれらを簡単に管理できるようにする方法です。名前属性に$nイテレータを追加するという現在のやり方は、理想的ではないと思います。

大きい方のフォームの各サブ要素に一意の名前を付けるという点で、name=""属性をname[]=""のような配列として宣言できることを理解しています。

個々のフォームセグメントの多次元配列が必要だと思います...フォーム内および$_POST変数内でそれらを最適に処理する方法がわかりません。

誰か提案はありますか?

4

3 に答える 3

2

私はあなたがこのようにすることができると思います:

function createForm($node_number) {
    echo '<form id="form" name="form" action="molecule_display.php" method="post">';
    for ($n = 1; $n <= $node_number; $n++) {
        echo '<fieldset class="step">
        <input id="node_title'.$n.'" name="nodes['.$n.'][node_title]" />
        <input id="node_comment'.$n.'" name="nodes['.$n.'][node_comment]" type="textarea"  />
        <button id="submit_node" type="submit">Submit</button></p>
        </fieldset>';
    }
    echo '</form>';
}

そして、$_POST['nodes']どれが多次元配列になるかを取得します。これは、で反復できますforeach。などを得ることができます$_POST['nodes'][1] = array('node_title'=>... , 'node_comment'=>...);

于 2012-06-02T23:46:05.260 に答える
2

投稿で言っていたように配列を使用すると、それらに非常に簡単にアクセスできるはずです。

function createForm($node_number) {
    echo "<form id=\"form\" name=\"form\" action=\"molecule_display.php\" method=\"post\">";
    for ($n = 1; $n <= $node_number; $n++) {
        echo "<fieldset class=\"step\">
                  <input id=\"node_title_" . $n . "\" name=\"node_title[" . $n . "]\" />
                  <input id=\"node_comment_" . $n . "\" name=\"node_comment[" . $n . "]\" type=\"textarea\"  />
                  <button name=\"submit_node[" . $n . "]\" type=\"submit\">Submit</button></p>
              </fieldset>";
     }
     echo "</form>";
}

また、submit_node を名前に変更し、ID が一意である必要があるため、配列値を指定しました。これは、どこかで参照している場合にエラーを引き起こします。

次のように結果をループできます。

foreach ($_POST['node_title'] as $key => $response) {
    $title = $response;
    $comment = (!empty($_POST['node_comment'][$key])) ? $_POST['node_comment'][$key] : "";
    // Save title / comment here.
}
于 2012-06-02T23:46:05.373 に答える
0

すべてのフォームには独自の送信ボタンがあるため、すべてのフォームで使用することを妨げるものは何もありません name="node_title"。これを最初に追加<input type="hidden" name="index" value="$n">して読むと、ロジックは非常に簡単になります。

于 2012-06-02T23:42:33.890 に答える