2010-04-19 62 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