2011-07-20 13 views
2

所以我們假設我有一個表格,用戶可以通過按+按鈕來添加任意數量的狗。爲什麼set_value()不能與foo [bar] [x] [lorem]數組輸入一起使用?

的形式是這樣的:

Dog #1 <br/> 
<input name="house[dogs][][name]" value="<?=set_value('house[dogs][0][name'])?>"/> 
<input name="house[dogs][][age]" value="<?=set_value('house[dogs][0][age]')?>" /> 

Dog #2 <br/> 
<input name="house[dogs][][name]" value="<?=set_value('house[dogs][1][name'])?>"/> 
<input name="house[dogs][][age]" value="<?=set_value('house[dogs][1][age]')?>" /> 

在笨,我爲了運行一個表單驗證爲set_value()爲很好地工作:

$house = $this->input->post('house'); 
$dogs = $house['dogs']; 

$i = 0; 
foreach($dogs AS $dog){ 
$this->form_validation->set_rules("house[dogs][$i][name]", 'Dog Name', 'required'); 
$this->form_validation->set_rules("house[dogs][$i][age]" , 'Dog Age' , 'required'); 
$i++; 
} 

這整個事情不工作,如何使set_value()支持這樣的數組輸入?

在此先感謝。

回答

3

您可能必須使輸入nameset_value()的第一個參數完全相同。

一個可能不能是[],而另一個可能使用[0]

+0

我對你在這裏的意思有點不清楚,但現在它是有道理的,我認爲這是問題。 –

1

非常相關:http://codeigniter.com/forums/viewthread/179581/具有諷刺意味的是,我幾個月前發佈的一篇文章今天早上碰到了。

而且相關:CodeIgniter: Validate form with multidimensional POST data


<ignore>

爲了使長話短說,笨默認情況下不處理索引的字段名稱非常好。

要簡單地重新填充各地set_value()的缺點的輸入和工作,你可以嘗試這樣的事:

<?php 
$value = isset($_POST['house']['dogs'][1]['age']) ?  // was the value posted? 
     form_prep($_POST['house']['dogs'][1]['age']) : // if so, clean it 
     '';           // if not, leave empty 
?> 
<input name="house[dogs][1][age]" value="<?php echo $value; ?>" /> 

因爲你很可能使用循環輸出這些,我不認爲它會太麻煩了。你可以填充一個單獨的數值數組,如果你願意的話可以閱讀這些數組,你會明白。 set_value()自動運行form_prep(),所以這就是我添加它的原因。

我不太確定驗證。你可能必須自己做驗證,雖然麻煩,但不應該太難。請記住,您始終可以手動運行驗證方法。例如:

if ($this->form_validation->valid_email($this->input->post('email')) {} 

你可能只想採取簡單的出路,改變你的字段名稱使用單一的指數,像dog_age[],我相信會讓驗證更容易CI處理。祝你好運,希望在CI核心中解決這些問題。

</ignore>


編輯:我不知道這是如何逃過了我,但預期顯然驗證和事實上的工作SET_VALUE 應該 - 不知道這是否是最近的改變,或者如果問題從未真正存在過。我絕對記得之前有過這個問題,而且鏈接的帖子也暗示其他人也是如此。看看這個答案,但:

CodeIgniter: Validate form with multidimensional POST data

我測試了它(運行2.0.2),它實際上是工作一樣。我在change log中沒有看到任何東西,但是我測試了它並確實起作用。請確保您的最新版本,然後再試一次,或者讓我們知道是否在這裏丟失了某些東西。

your other answer一樣,您可能只需明確指定字段名稱,如name="house[dogs][1][name]"而不是name="house[dogs][][name]"

+0

真是巧合,感謝周圍的工作,我同意這不是世界上最乾淨的事情,有時CI會讓我失望:(我之所以使用數組輸入的原因是,它很容易導入整個信息使用簡單的像這樣:'$ this-> input-> post('info')' – Ryan

+0

完全同意,我對此有同樣的感受。使用多維輸入名稱非常方便。欣賞接受,但我會離開這個有一段時間,看看有沒有人有共享的東西,而且只有45分鐘,所以你不必擔心讓問題在幾天之內浮動,直到夜班有機會看到它們:) –

+0

@Ryan:見上面^^^。我也對解決方案感興趣 - 讓我們看看是否有人有更好的解決方案。 –

相關問題