我正在根据用户选择的$ 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版本。我的问题是如何动态命名表单元素,以便在处理它们时更容易管理它们。通过在name属性中添加$ n迭代器,我现在正在这样做的方式并不理想。
据我所知,我可以将name =“”属性声明为类似name [] =“”...的数组,以便为较大形式的每个子元素赋予唯一名称。
我猜我想要一个单独表单段的多维数组...只是不确定如何最好地处理表单内和$ _POST变量中的那些。
有人有任何建议吗?
答案 0 :(得分: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'=>...);
等等。
答案 1 :(得分: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.
}
答案 2 :(得分:0)
由于每个表单都有自己的提交按钮,因此不会阻止您在所有表单中使用name="node_title"
。如果你现在添加<input type="hidden" name="index" value="$n">
并首先阅读,你的逻辑变得非常容易。