Глубоко вложенные, если проблемы с утверждениями - PullRequest
0 голосов
/ 20 ноября 2011

Хорошо, я пишу скрипт организатора задач и у меня возникают некоторые проблемы с маркировкой подзадач как завершенных или не завершенных ... мой код выглядит следующим образом ...

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, как будто они никогда не обновляются .. Как я могу это исправить, что является лучшим путем для решения этого оператора if .. Я пробовал несколько вариантов, но безрезультатно.

1 Ответ

0 голосов
/ 21 ноября 2011

Хорошо, так что простой обходной путь / решение было это ..

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

    }


}
...