2014-04-02 75 views
0

我正在循環$ _POST數組(生成的表單元素),我需要獲取我的foreach循環中下一個元素的鍵和值。

編輯:答案的元素名稱(即canbeanynameABC和canbeanynameXYZ)始終未知。

下面是一個例子數組:

Array ( 
[inputid] => 87 [inputoutputtype] => radio [canbeanynameABC] => radio answer 2 
[inputid] => 88 [inputoutputtype] => radio [canbeanynameXYZ] => radio answer 4) 

我的代碼在這裏

foreach ($_POST as $key => $value) { 

switch ($key) { 

    case "inputid": 
      echo "<br/>Value of input_id : " . $value;  
     next($_POST);  
     echo "<br/>Value of inputoutputtype : " . $value; 
     next($_POST);  
     echo "<br/>Value of answer : " . $value;   
     break; 
} 
} 

我認爲,做下一個($ _ POST),指針現在將定位於下一個鍵/值。

顯然,這是行不通的,我得到以下顯示:

Value of input_id : 87 
Value of input_output_type : 87 
Value of answer : 87 

任何幫助將不勝感激。謝謝

編輯:有人建議我使用數組來組織我的表單元素/值。我仍然不知道如何使用數組,以便從表單返回每個答案(值),我實際上得到三個值(answer,inputid,inputoutputtype)

編輯:@CBroe我花了下午試圖瞭解如何在$ _POST中使用數組。表單可以包含任意數量的元素,這些元素可以是文本,電臺,選擇/選項,複選框(可以有多個返回的值)。我從這個表格獲得的每個「值」都必須與「inputid」和「inputoutputtype」相關聯。這些表單和元素是使用php生成的,所以我試圖構建一個php表單處理程序,它將讀取任意數量的元素和類型。生成器爲每個元素創建唯一的名稱,以便值不會被覆蓋。我想弄清楚如何將數組集成到生成器中,但不知道我是否可以爲它們分配一個行號(即[0],[1] ..)..也許我只是沒有看陣列如何適合我的情況。


更新:好吧,現在我想修改我的PHP表單處理程序來處理,可以有任何名稱的元素。我需要能夠從表單中填寫的元素中讀取id,類型和值(3個不同的值)。

我玩弄形式(即使它完全生成),但不知道什麼我應該改變這個帖子的標題,如果方向改變了,但名字我的元素

<input type='hidden' name='inputradio[inputid]' value='1'> 
<input type='hidden' name='inputradio[inputoutputtype]' value='radio'> 
<input type='radio' name='inputradio[output]' value='Radio answer 1'> 

<input type='hidden' name='inputradio[inputid]' value='2'> 
<input type='hidden' name='inputradio[inputoutputtype]' value='radio'> 
<input type='radio' name='inputradio[output]' value='Radio answer 2'> 

<input type='hidden' name='inputtext1[inputid]' value='3'> 
<input type='hidden' name='inputtext1[inputoutputtype]' value='text'> 
<input type='text' name='inputtext1[output]' value='Text answer 1'> 

<input type='hidden' name='inputtext2[inputid]' value='4'> 
<input type='hidden' name='inputtext2[inputoutputtype]' value='text'> 
<input type='text' name='inputtext2[output]' value='Text answer 2'> 

感謝 Ç

+0

我不知道PHP,但從我收集的是,這不是你將如何使用'next(...)'方法。從我收集的是'next(...)'方法用於推進數組的內部指針(右?或類似的東西?)Anywho,「$ key」和「$ value」是你使用,而不是內部指針。所以我會重寫開關來處理所有三種情況,然後忽略第四/五(如果這是你的意圖),看看是否有效。這似乎是因爲你引用了數組的內部指針,所以你通過調用'$ key'和'$ value'沒有太大的作用。合理? –

+2

你的方法從一開始就有缺陷。不要在foreach循環中嘗試訪問下一個元素和之後的元素,應該首先以一種方式命名錶單元素,以便首先獲得可用的數據結構_。提示:您可以在表單元素名稱中使用'['和']'在$ _POST中創建數組,您甚至可以指定所需的索引f.e. 'name =「foo [0] [id]','name =」foo [0] [outputtype]'等 – CBroe

+0

我覺得這不僅僅是評論的答案。 –

回答

0

只有兩種屬性,在$ _ POST,鍵和值的條目。我不知道你在哪裏得到你的示例數組,但它不能像那樣工作。所以如果我有一個單選按鈕組,並且所有名稱都共享一個名稱,我會得到名稱 - >值對。

如果我創建了下面的表格,我用值提交它的單選按鈕組中選擇:

<form method="POST" > 
    <input type="text" name="textbox" value="test"><br/> 
    a.<input type="radio" name="rd" value="a"><br/> 
    b.<input type="radio" name="rd" value="b"><br/> 
    c.<input type="radio" name="rd" value="c"><br/> 
    <input type="submit" value="submit"> 
</form> 

我的$ _ POST將包含以下值:

Array 
(
    [textbox] => test 
    [rd] => a 
) 

如果我試圖通過我的陣列,我會這樣做如下:

for ($_POST as $key->$value) { 
    echo $key . " = " . $value . "\n"; 
} 

這會給我t他以下的輸出:

textbox = test 
rd = a 

你能告訴我你想解決什麼問題,因爲它似乎你是從某些其他語言或框架的角度接近這一點,或者可能你正在尋找與合作PHP中的一些其他數組不是$ _POST?

+0

謝謝Keith,我明白這一點。對於你的例子中的兩個值中的每一個,我想傳遞/關聯一個inputid(來自db的id)和inputoutputtype(文本,廣播等)。最初的形式是由用戶生成的,因此它可以包含許多類型的許多輸入字段。我試圖構建一個php處理程序,通過$ _POST讀取並查找所有不同的值(與inputid和inputoutputtype關聯),即使我不知道輸入元素的名稱(生成名稱),然後編寫值(與它們的類型)在數據庫上(指向正確的輸入ID)。 – user3195559

+0

我可以看到處理它的兩種方法之一。其一,爲每個實際字段添加一個隱藏字段,但在名稱前添加一些內容,以便可以將其過濾掉(或者,一個帶有JSON的隱藏字段或其他相同數據的列表可用於所有表單數據)。其次,你可以閱讀和解析包含表單的頁面並檢查表單和元素。這兩種方法中的任何一種都可以創建所有字段,類型,ID和值的多維列表。 –

+0

謝謝@ keith-rockhold,我試着理解並找到示例,但這超出了我對PHP的知識。我甚至不知道該找什麼。我已經在那裏更新了我的問題。我試圖將3個值組合成一個(數組可能?),並讓我的表單處理程序瞭解發生了什麼,即使名稱對處理程序是未知的。 – user3195559

相關問題