处理具有变量名称的动态生成的文本框

时间:2012-11-08 02:24:41

标签: php html

我正在编写一个基于上传的CSV文件写出表单的脚本。 CSV文件包含由仅包含',,,,'的行分隔的部分。每个块包含有关将要启动的服务器的信息。它看起来像这样:

host,tctivt2r6ra03,,,
int,eth0,10.153.196.248,255.255.255.0,10.153.196.1
int,eth1,10.153.157.113,255.255.255.128,10.153.157.1
int,eth2,10.153.157.241,255.255.255.128,10.153.157.129
int,eth3,00:50:56:ac:69:cb,,
part,/home,10,,
part,swap,10,,
part,/opt,60,,
part,/data,30,,
,,,,

此输入被写入包含表格的div。每行输入都是表中的唯一行。某些值最终出现在文本框中。

该脚本生成的输出看起来像this

每个框都是动态生成的,包含从0开始的主机ID和从0开始的框号。例如:

<tr><th>eth0: </th><td><input type="text" value="10.153.196.248" name="host0Box0" /></td><td><input type="text" value="255.255.255.0" name="host0Box1" /></td><td><input type="text" value="10.153.196.1" name="host0Box2" /></td></tr><tr>

我遇到的问题是如何处理具有可变数量框的表单。具体来说,当处理输入的“部分”行时,可以有六个或更多的框。

有四个分区的示例:

<tr><th>Partition name:</th><td> /</td><td>10</td></tr>
<tr><th>Partition name:</th><td> /var</td><td><input type="text" value="10" name="host0Box9" /></td></tr>
<tr><th>Partition name:</th><td> /home</td><td><input type="text" value="10" name="host0Box10" /></td></tr>
<tr><th>Partition name:</th><td> swap</td><td><input type="text" value="10" name="host0Box11" /></td></tr>
<tr><th>Partition name:</th><td> /opt</td><td><input type="text" value="60" name="host0Box12" /></td></tr>
<tr><th>Partition name:</th><td><input type="text" value="/data" name="host0Box13" />/td><td><input type="text" value="30" name="host0Box14" /></td></tr>
<tr><th>Number of Disks: </th><td><input type="text" value="1" name="host0Disks" /></td></tr></table></div><span><br /><br /></span>

六个分区的示例:

<tr><th>Partition name:</th><td> /</td><td>10</td></tr>
<tr><th>Partition name:</th><td> /var</td><td><input type="text" value="10" name="host1Box9" /></td></tr>
<tr><th>Partition name:</th><td> /home</td><td><input type="text" value="10" name="host1Box10" /></td></tr>
<tr><th>Partition name:</th><td> swap</td><td><input type="text" value="10" name="host1Box11" /></td></tr>
<tr><th>Partition name:</th><td> /opt</td><td><input type="text" value="60" name="host1Box12" /></td></tr>
<tr><th>Partition name:</th><td><input type="text" value="/data" name="host1Box13" /></td><td><input type="text" value="30" name="host1Box14" /></td></tr>
<tr><th>Partition name:</th><td><input type="text" value="/test1" name="host1Box15" /></td><td><input type="text" value="30" name="host1Box16" /></td></tr>
<tr><th>Partition name:</th><td><input type="text" value="/test2" name="host1Box17" /></td><td><input type="text" value="20" name="host1Box18" /></td></tr>
<tr><th>Number of Disks: </th><td><input type="text" value="1" name="host0Disks" /></td></tr></table></div><span><br /><br /></span>

这是一项正在进行的工作,我知道为了正确处理每个主机部分,我将不得不进行更改。与此同时,我正试图解决这个问题。

我现在的问题是,当我最终到达处理表单时,在填充$ _POST数组时,我应该使用什么方法来考虑动态分配的项目名称?我是否将数组值拉出并将它们放在不同的数组中?我可以像普通数组一样遍历$ _POST数组吗?还有其他我不知道的选择吗?

2 个答案:

答案 0 :(得分:2)

看起来你在this?

之后

假设您可以更改脚本输出,而不是name="host0Box0"使用name="host[0][Box][]

使用[]会自动填写一个数组,例如

<input type="text" name="foo[]" value="Hello" />
<input type="text" name="foo[]" value="World" />

会给你数组

Array(
  [foo] => Array(
    [0] => Hello
    [1] => World
  )
)

我可能误解了这个问题。

答案 1 :(得分:0)

您可以像任何数组一样迭代超全局$ _POST数组。尝试var_dump($ _ POST)来查看可用的内容。

由于发布的名称未知,如果这些名称包含unusual characters,您可能需要解析原始输入流。 Accepted answer to Question 813487可能会有所帮助。