Orm 深层嵌套if语句问题

Orm 深层嵌套if语句问题,orm,php-5.3,nested-loops,forms,http-post,Orm,Php 5.3,Nested Loops,Forms,Http 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){

好的,我正在编写一个任务管理器脚本,在将子任务标记为完成或未完成时遇到了一些问题。。我的代码如下

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,因此看起来好像它们从未更新过。如何修复此问题?处理此if语句的最佳方法是什么。我尝试了一些变体,但没有效果

好的,一个简单的解决方法是

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

    }


}

子任务::按任务id查找所有任务
几乎像是模型用法!基尔。但是
$\u POST['finished']
在那里做什么?你关掉通知了吗?;)是的,我正在使用CodeIgniter和php activerecord。它一开始只是一个简单的任务组织者,现在它离一个成熟的项目经理不远了……好吧,不远了……但仍然如此$_POST['finished']应该表示任务已完成,如果未检查,则应重新启用任务。我已经完全弄明白了,但我花了大约一天半的时间追踪鬼魂,试图弄明白这一点。