2011-11-20 57 views
0

好了,我正在寫一個任務管理器的腳本,我有帶標記的子任務的完成或沒有完成的一些問題..我的代碼如下...深嵌套的if語句發出

if($_POST['finished']){ // $_POST['finished'] is an html array of check boxes 
      $subtask = Subtask::find_all_by_task_id($task->id); 
      foreach($subtask as $stask){ 
       foreach($_POST['finished'] as $fin){ 
        if($stask->id == $fin){ 
         $stask->finished_at = date('Y-m-d H:i:s', time()); 
         $stask->save(); 
        } elseif($stask->id != $fin){ 
         $stask->finished_at = ""; 
         $stask->save(); 
        } 
       } 
      } 
     } else { // This works as expected when un-checking all checkboxes 
      $subtask = Subtask::find_all_by_task_id($task->id); 
      foreach($subtask as $stask){ 
       if($stask->finished_at != null){ 
        $stask->finished_at = null; 
        $stask->save(); 
       } 
      } 
     } 

我的問題我相信是if語句滾動兩個值(當前只有兩個子任務),當它達到最後的值時,所有其他$ fin不等於$ stask-> id,所以那些返回在數據庫中爲空,因此使它SEEM好像他們從來沒有更新..我怎麼能解決這是最好的途徑來解決這個如果聲明..我已經嘗試了一些變化,但無濟於事。

+0

'子任務:: find_all_by_task_id'看起來很像模型的使用! KEWL。但是,'$ _POST ['finished']'在那裏取消選中的是什麼?您是否關閉了通知? ;) – Rudie

+0

是的,我使用CodeIgniter和php-activerecord。它起初是一個簡單的任務組織者,現在它已經臨近一個完全成熟的項目經理......好吧,還沒有那麼遠......但仍然如此。 $ _POST ['finished']應該表示任務已完成,如果沒有檢查,它應該重新啓用任務..我想到了這一切,但我花了大約一天半的時間追捕鬼魂,出。 –

回答

0

OK,這樣一個簡單的解決方法/解決方案是這樣的..

function completetask($tasktype, $id, $return_uri = 'edittask'){ 
    if($tasktype == "subtask"){ 
     $task = Subtask::find($id); 
     if($task->finished_at == null){ 
      $task->finished_at = date("Y-m-d H:i:s", time()); 
      $task->save(); 
      switch($return_uri){ 
       case 'showtask': 
        redirect('taskdisplay/showtask/' . $task->task_id); 
        break; 
       case 'edittask': 
        redirect('admintask/edittask/' . $task->task_id); 
        break; 
       default: 
        redirect('admintask/edittask/' . $task->task_id); 
      } 

     } else { 
      $task->finished_at = null; 
      $task->save(); 
      switch($return_uri){ 
       case 'showtask': 
        redirect('taskdisplay/showtask/' . $task->task_id); 
        break; 
       case 'edittask': 
        redirect('admintask/edittask/' . $task->task_id); 
        break; 
       default: 
        redirect('admintask/edittask/' . $task->task_id); 
      } 
     } 
    } else { 
     $task = Task::find($id); 
     if($task->finished_date == null && $task->taskcomplete == 0){ 
      $task->finished_date = date("Y-m-d H:i:s", time()); 
      $task->taskcomplete = 1; 
      $task->save(); 
      redirect('admintask/edittask/' . $task->id); 
     } else { 
      $task->finished_date = null; 
      $task->taskcomplete = 0; 
      $task->save();  
      redirect('admintask/edittask/' . $task->id); 
     } 

    } 


}