2011-06-05 64 views
1

這是我的第一個問題,如果你能幫助我,我會非常高興。Codeigniter和jQuery的動態輸入

我必須捕捉一組動態輸入的值,我使用jQuery生成輸入。我不知道這是否是使用相同的名稱都用括號在年底這樣一個很好的解決方案:

<!-- first set of entries --> 
<input type="text" name="nombre_contacto[]"> 
<input type="text" name="mail_contacto[]"> 

<!-- second set of entries --> 
<input type="text" name="nombre_contacto[]"> 
<input type="text" name="mail_contacto[]"> 

<!-- etc... --> 

或者只是使用一個計數器在名稱末尾,就像這樣:

<!-- first set of entries --> 
<input type="text" name="nombre_contacto1"> 
<input type="text" name="mail_contacto1"> 

<!-- second set of entries --> 
<input type="text" name="nombre_contacto2"> 
<input type="text" name="mail_contacto2"> 

<!-- etc... --> 

我可以在控制器上捕捉每一件物品嗎?這可能嗎?

謝謝!

回答

0

最好的辦法就是使用數組,就像你在第一個例子中做的那樣。

要獲取所有結果,這樣的事情會工作:

$names = $this->input->post('nombre_contacto'); 
$emails = $this->input->post('mail_contacto'); 

兩個變量,現在是數組,它們的值是無論用戶輸入的是,他們的鑰匙在他們出現的順序您形成。

像這樣的東西應該給你一個想法:

foreach ($names as $key => $value) 
{ 
    $contact[$key] = $value; 
} 
foreach ($emails as $key => $value) 
{ 
    $contact[$key] .= ' - '.$value; 
} 

現在你有一個新的數組,其值如下所示:John Smith - [email protected]

這只是一個例子,我不知道你的」重視價值觀。

再舉一個例子:如果由於某種原因,你不得不進入第三個名字貼,你可以這樣做:

echo $_POST['nombre_contacto'][2]; // Arrays have 0 based index, so this is #3 

這是含brackets[]您輸入的名字。這在我看來,絕對是最好的方式。你不需要猜測有多少輸入,因爲它將是一個數組。

只是爲了闡明:在字段名稱中使用括號將輸入轉換爲數組,當它到達服務器時,可以使用相同的字段名稱發佈多個值。沒有括號,它將是一個字符串值技術上不同的字段。