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="" 属性声明为像 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 回答