深层嵌套if语句问题

时间:2011-11-20 16:25:02

标签: orm php-5.3 nested-loops html-form-post

好的,所以我正在编写一个任务组织者脚本,我在将子任务标记为完整或不完整时遇到了一些问题..我的代码如下......

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所以那些得到在DB中设置为null因此使SEEM好像它们永远不会更新。我怎么能解决这个问题,解决这个问题的最佳途径......我尝试了一些变化但无济于事。

1 个答案:

答案 0 :(得分:0)

好的,这是一个简单的解决方法/解决方案..

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);
        }

    }


}