2013-08-21 40 views
0

我有一個添加和編輯窗體相同的代碼。因此,在控制器中,我需要一個檢查來檢查a)提交的POST變量(用於保存),如果不是那麼b)原始值(用於編輯),如果不是那麼則沒有值(用於添加的空白)。我把它們放在$ data數組中傳遞給視圖。然後在形式,我可以把:有沒有比這更短的方式來檢查值時使用相同的添加表單編輯

value="<?php echo $member_id;?>" 

所以我的問題是,在笨有沒有比當時以下檢查POST,那麼如果存在的原始數據,如果不檢查,如果沒有一個較短的方式其沒有。

$data = array(
    'member_id' => (isset($_POST['member_id']) ? $_POST['member_id'] : (isset($member->member_id) ? $member->member_id : '')) 
); 

我知道SET_VALUE(),但看起來這不會在目前的數據編輯表單時添加,所以沒有使用的。

+1

有毛病'SET_VALUE()'?第一個參數是郵政填寫的字段名稱,第二個參數是如果沒有發佈郵政所需的值。 – tomexsans

+0

本身不起作用。如果沒有帖子或沒有數據傳遞,仍然必須爲添加表單分配一個空變量。儘管可能有一種方法可以使用它並減少上面的代碼,但如果沒有值被set_value重新調用(因爲我的視圖窗體在字段值中有一個變量,它仍然需要成爲條件的一部分,並賦值爲空)通知這是否存在)。 –

回答

1

你可以爲它做功能。

function get_value_or_default($array, $key, $default) { 
    return isset($array[$key] ? $array[$key] : 
     isset($default) ? $default : ''; 
} 

甚至更​​好:

function update_from_post($object) { 
    $data = array(); 
    foreach ($object as $prop_name => value) { 
     $value = get_value_or_default($_POST, $prop_name, $object->{$prop_name}); 
     $data[$prop_name] = $value; 
} 
+0

是的,會給出一個鏡頭,好主意 –

+0

我已經使用了第一個建議並且工作正常,因爲第二個不會爲添加表單設置空值,因爲$對象不會添加,因此我得到了PHP聲明。 (我在控制器中將其設置爲空白,而不是在視圖窗體中進行檢查)。 –

0

假設你已經在控制器不同的方法來創建VS編輯:(您可以通過指定它在$this->load->view()使用不同的方法相同的看法):

您的創建方法會假定它是新的,並且總是讀取$ _POST變量(如果$ _POST)

您的編輯方法會首先從數據庫,然後用$ _POST變量覆蓋(如果存在)。

最後,笨有輸入助手:

$this->input->post('field_name'); 

回報false如果該字段是不是在$ _ POST。

要使用以上代碼:

創建

$data = array(
    'member_id' => $this->input->post('member_id') ? $this->input->post('member_id') : '') 
); 

編輯

$data = array(
    'member_id' => $this->input->post('member_id') ? $this->input->post('member_id') : $member->member_id) 
); 
+0

同樣的方法,抱歉應該更清楚。因爲兩個提交相同操作的表單都是相同的。 –

+0

更聰明的方法是分開保存這些方法。使用CodeIgniter表單助手來解決提交目標的問題。然後一個視圖可以根據調用者提交給多個方法: '<?php echo form_open($ this-> uri-> uri_string(),$ attributes); ?> –

+0

我明白,但想嘗試相同的方法來減少代碼。似乎工作正常,但認爲上面的行很長,當有很多值,所以我想嘗試在另一個回覆中發佈的函數。它只是Add方法中的一半代碼是Edit方法(儘管我可以創建一個函數),因此試圖讓一個方法處理這兩個方法。似乎工作正常。 –

相關問題