2010-04-19 61 views
0

我有了一个字段从数据库下拉拉窗体域捕获文本。我需要在下拉列表中选中文本,但事先并不知道字段ID是什么。PHP表格处理 - 如何从具有变量名称/ ID

这基本上只是已经生成的一种形式。我不需要从数据库中提取任何东西,它已经在这个页面上。我需要做的就是获取表单信息并发送电子邮件,不写入数据库。

我知道如何为基于ID的其他领域做_REQUEST,但我不知道如何做到这一点的。 ID改变。它可以是ID = 1,ID-2等

我需要做的是这样的:其中ID是LIKE “ID [*]” 或类似的东西_REQUEST形式元件。

任何建议或链接到教程?

这里是什么样的下拉列表呈现在页面上几个样本:

<div class="wrapperAttribsOptions"> 
<h4 class="optionName back"><label class="attribsSelect" for="attrib- 1">Model</label></h4> 
<div class="back"> 
<select name="id[1]" id="attrib-1"> 
    <option value="45">VC3-4C</option> 
    <option value="1">VC3-4PG</option> 
    <option value="3">VC3-4SG</option> 

<div class="wrapperAttribsOptions"> 
<h4 class="optionName back"><label class="attribsSelect" for="attrib-14">SPK Model</label></h4> 

<div class="back"> 
<select name="id[14]" id="attrib-14"> 
    <option value="43">SPK-4</option> 
    <option value="44">SPK-8</option> 
</select> 

TIA

+0

id将作为数组传递给php GET或POST。令人困惑的问题 – Galen 2010-04-19 21:02:55

+0

这有什么困惑吗?无论它使用GET还是POST,它仍然在$ _REQUEST中。 – 2010-04-19 21:08:09

回答

1

括号[]表示PHP将创建一个包含发布值的数组变量。所以你应该有$_REQUEST['id']作为一个数组。应该有一个值由表格中的数字(第一个示例中的$_REQUEST['id'][1],第二个示例中的$_REQUEST['id'][14])键入。

如果有也只是一个值(你不说你想要什么使用这些值做),那么你可以只转移其关闭的阵列。

$value = array_shift($_REQUEST['id']); 

如果将有多个值,可以循环通过他们:

foreach($_REQUEST['id'] as $number => $value) { ... } 
+0

哦,对了,完全忘了那个功能。 – 2010-04-19 21:08:38

+0

就像我说过的,我需要做的就是在选择完成后收集文本并发送电子邮件。我也会研究这个。 – user80151 2010-04-19 21:13:22

+0

使用'array_shift'的性能明显降低,因为正则表达式非常慢。 – 2010-04-19 21:18:22

1

编辑:斯科特·桑德斯是正确的,PHP会自动创建一个阵列给你。如果由于某种原因,他的代码不起作用,下面的代码可能仍然适用(可能因PHP配置而异)。

最简单的方法将使用正则表达式:

foreach($_REQUEST as $key => $value) 
{ 
    if(preg_match("/id\[[0-9]*\]/", $key)) 
    { 
     // $key now contains the name, and $value the value. 
    } 
} 

这是假设的ID将永远是数值。

+0

那么0-9意味着任何/所有数字?这将允许两位和三位数字? (14,15,300等)? – user80151 2010-04-19 20:49:06

+0

是的,这就是*所做的。这意味着:“在零和无限次之间匹配前一位(在这种情况下为[0-9]')。”如果你只想在1到3之间,你可以使用'“/ id \ [[0-9] {1,3} \] /”' 欲了解更多信息,请查看http://www.regular-expressions.info /。 – 2010-04-19 20:57:21

+0

谢谢。我今晚会试一试。但这确实看起来像我需要的东西。 再次感谢! – user80151 2010-04-19 21:01:42

0

如果有大量的字段或ID值的不能知道,我会按照阿尔达的答案。

另一种方法是询问标识集合直接:

$id_1 = $_POST['id'][1]; 
$id_14 = $_POST['id'][14]; 

张贴在他们的名方括号被转换为一个数组服务器中的所有项目。已经指定了指数,就像你所做的那样,根据需要可能会更有益。

+0

有相当多的领域,但我认为只有这个使用数字。所有其他的都通过名称/字符串来标识。 id值将不会提前知道。它基于他们选择的产品。这些是与产品相关的属性。 – user80151 2010-04-19 21:14:18