2009-10-14 46 views
0

我每次點擊包含聯繫人ID的鏈接時,都希望在contact_status_id字段中的聯繫人表中切換狀態編號。該頁面顯示沒有錯誤,但該操作不會更改該號碼。尚未實施驗證。CakePHP,無法發現編輯操作中的問題

也許一組清新的眼睛可以發現一個問題?

function inbox_toggle_number_status($id=null) 
{ 
    //Call from the inbox when the number is clicked and status toggled. 

    $this->User->Contact->id = $id; 

    if (!empty($id)) 
    { 

     $current_status = $this->User->Contact->find('first', array('conditions' => array('id' => $id))); 

     if ($current_status['Contact']['contact_status_id'] == '1'): 
      $this->User->Contact->saveField('contact_status_id', '2'); 
      exit(); 

     elseif ($current_status['Contact']['contact_status_id'] == '2'): 
      $this->User->Contact->saveField('contact_status_id', '3'); 
      exit(); 

     elseif ($current_status['Contact']['contact_status_id'] == '3'): 
      $this->User->Contact->saveField('contact_status_id', '2'); 
      exit(); 

     else: 
      exit(); 

     endif; 
    } 
} 
+2

我看到一個問題,代碼沒有正確縮進,並且在一行上有多個語句,這使得它很難閱讀,這使得很難發現問題,而且很難維護。所以這應該是您的第一筆業務,讓代碼可讀。 – 2009-10-14 10:06:22

+0

你說得對,我收拾了一下。 – ondrobaco 2009-10-14 10:18:31

回答

1
function inbox_toggle_number_status($id = null) 
{ 
    if(!$id) 
    { 
     $this->Session->setFlash('no id'); 
     $this->redirect(array('action' => 'index')); 
    } 

    $this->User->Contact->id = $id; 
    $current_status = $this->User->Contact->read(null, $id); 

    switch($current_status['Contact']['contact_status_id']) 
    {     
     case 1: 
      $this->User->Contact->saveField('contact_status_id', 2); 
      break; 

     case 2: 
      $this->User->Contact->saveField('contact_status_id', 3); 
      break; 

     case 3: 
      //should yu not go back to 1? 
      $this->User->Contact->saveField('contact_status_id', 2); 
      break; 
    } // switch 
} 
0

我從來沒有多少運氣與蛋糕中的一些保存方法。出於這個原因,我幾乎總是使用Model :: save(array()),該數組包含id和要更新的字段。如果你想要走這條路線,你可以這樣做:

if(!empty($id)) { 
    $arr = array('Contact' => array('id' => $id)); 

    $current_status = $this->User->Contact->find('first', array('conditions' => array('id' => $id))); 

    if ($current_status['Contact']['contact_status_id'] == '1'): 
     $arr['Contact']['contact_status_id'] = 2; 
    <other conditional clauses here> 


    $this->User->Contact->save($arr); 
    exit(); 
} 

如果你想繼續你的路線,請設置您的調試級別2,讓我們知道,如果腳本甚至試圖將值保存到數據庫(給我們在頁面底部的SQL轉儲)。

0

我有一個想法;看到這條線?

$this->User->Contact->id = $id; 

這個ID設置可能只持續設置完成後執行第一查詢,

所以

你可能只包含saveField通話if語句之前再次設置。但是,在查找(...)調用之前,您並不需要它,因爲您已將$ id設置爲查找(...)「條件」數組的一部分。

解決方案

嘗試移動$這個 - >用戶 - >非接觸> ID = $ ID,該行發現(......)之後,所以它會在未來setField(設置。 ..)電話。

此外

而不是使用!空(...),嘗試開始函數

if(!isset($id)){ 
    $this->redirect(/*some url with an error message*/); 
} 

其次,如果$ id爲有效,將執行代碼