2010-07-12 17 views
0

嗨我有一個非常困難的時間應該是一個簡單的問題。從CodeIgniter 1.7開始,'$ this-> input-> post();'支持的數組,但我不能因爲某些原因將值存入數組中。我有一個存儲到一個數組7個複選框「服務[]」,你可以通過這個例子視圖中看到:出於某種原因,無法將數組中的複選框值存儲到數據庫!

<?php $servicesdata = array (
     'name' => 'services[]', 
     'value' => 'in_home_care', 
     ); 
echo form_checkbox($servicesdata, set_checkbox('services[]', 'in_home_care', FALSE)); ?> 

我很確信這是正確的方式,因爲形式也很好的驗證,如果出現錯誤。現在我開始在存儲值時遇到問題。我有7列需要有某種價值...在這一點上,我不在乎,但理想情況下它會是一個布爾值(二進制也可以)。以下是我在我的控制器,每個人都聲稱工作得這麼遠,但少了點:

$c = new Client($servicesdata); 
$c->first_name = $this->input->post('first_name', TRUE); 
$c->in_home_care = $this->input->post('services[in_home_care]'); 

你可以看到我穿上了完美的作品,並插入到一個VARCHAR類型,而數組贏得一個例子字符串不管進入數據庫。我覺得我在這裏錯過了一些東西 - 也就是陣列中的「價值」,但我不確定該從哪裏出發。任何幫助將不勝感激,因爲我可以工作的唯一方法犧牲了我的複選框驗證! :(

回答

1

如果您的複選框被選中時,複選框的值將不被輸入到$ _POST數組中。這可能是哪裏出現了問題。

有解決這個問題。無論是兩種方法都一個框默認選中,或使用類似下面的HTML(這可能是也可能不是最好的做法/有效的,但在過去的工作對我來說)。

<input type="hidden" name="services" value="foo" /> 
<input type="checkbox" name="services" value="in_home_care" /> 

在未選中該複選框的情況下,名稱值「services」的值「foo」將傳遞給$ _POST數組。

+0

+1對老問題有趣的方法。 – NotMe 2010-07-13 00:36:21

+0

非常好!基本上,我把你的頂線和添加'[]'服務結束。我打印出陣列,看起來很棒。現在,如果你不介意幫助他們,那麼如何將這7個值傳遞到他們各自的專欄?根據CI手冊,我的'post()'方法是正確的,但我沒有太多的運氣...... – mpoplin 2010-07-13 06:37:39

+0

您可以通過使用set_value()來從您的複選框中獲得設定值(我認爲你想要的) )函數,即set_value('services []'),然後將其傳遞給字符串/模型/會話。這裏還有更多; http://codeigniter.com/user_guide/libraries/form_validation.html#arraysasfields – 2010-07-13 12:19:21

0

首先,你的表單有一些冗餘(我認爲)。您可以設置複選框的屬性數組中,其中包括它是否被選中與否:

$servicesdata = array (
     'name' => 'services[]', 
     'value' => 'in_home_care', 
     'checked' => FALSE, 
     ); 
echo form_checkbox($servicesdata); 

其次,因爲你在一個數組命名它,需要被分配到另一個之後要訪問的對象變量:

$checkbox_array = $this->input->post('services'); 
$service_type=$checkbox_array[0];//will give you 'in_home_care', [1] would be next in array and so on 
+0

其實可能有冗餘,但我懷疑它會在我創建的數組中,而不是實際的功能。 我很累,但我會明天早上嘗試你的第二種方法,並回到你的!謝謝! – mpoplin 2010-07-13 06:38:56

+0

正在您的示例中創建的數組,它只是多餘的。您可以從'servicesdata'數組中設置名稱,值,然後通過設置名稱,值並在'form_checkbox'回聲中檢查來覆蓋它。您的表單代碼將按原樣工作;問題不在那裏,而是在你的控制器中。由於您的複選框名稱是一個數組,因此您需要將其分配給一個變量,然後按照我的示例通過變量名和鍵(例如'$ var [0]')訪問這些值。 – stormdrain 2010-07-13 13:39:02

0

在db中存儲這些選項的方法是從它們中創建一個字符串並存儲它們。

$ this-> input-> post('colors')? $ colors = implode(' - ',$ this-> input-> post('colors')):$ colors ='';

檢查顏色數組中是否有實際檢查的內容。如果是這樣,請從由破折號分隔的數組值中創建一個字符串。否則將空賦值爲顏色。

你讀分貝串後面接着後:

$ profile_data [ '顏色'] =爆炸( ' - ',$行向>色);

然後,您可以將這些值反饋回表單輸入。