0

For a project I am trying to do something in PHP. It requires a for loop and houses one as well. The for loop inside the initial loop functions as expected. It loops through the variables and stops once $i is equal to count($tasks)

However, when I copy paste the exact same loop on top of it, now working with $tasklists the loop stops after just one iteration. Mind you that when I tested count($tasklists) does return for example 3 and in the loop when I echo $i it does echo 0 the first time.

Here is the code with a bunch of comments.

// First let's break up all the tasklists the project has
$tasklists = explode('&', $data['proj_tasklists']);
// Now lets get all the tasks for each tasklist
for($i = 0; $i < count($tasklists); $i++) {
    // Get list_tasks from the tasklist
    $sql_get = "SELECT * FROM tasklists WHERE list_id='".$tasklists[$i]."'";
    $result_get = mysqli_query($con, $sql_get);

    if($result_get) {
        // Now load in the variable
        while($results = mysqli_fetch_array($result_get)) {
            $data['list_tasks'] = $results['list_tasks'];
        };
        // Now let's break that up
        $tasks = explode('&',$data['list_tasks']);
        // Now reset list_tasks
        $data['list_tasks'] = '';
        // Do something for every task
        for($i = 0; $i < count($tasks); $i++) {
            // And get the info for the set task
            $sql_get = "SELECT * FROM tasks WHERE task_id='".$tasks[$i]."'";
            $result_get = mysqli_query($con, $sql_get);

            if($result_get) {
                // Now load it's task_user in a variable
                while($results = mysqli_fetch_array($result_get)) {
                    $data['task_user'] = $results['task_user'];
                };
                // Check if that is the same as that of the user whom was deleted
                if($data['task_user'] == $data['user_id']) {
                    // If the Id is the same update it to ''
                    $sql_update = "UPDATE tasks SET task_user='' WHERE task_id='".$tasks[$i]."'";

                    if (mysqli_query($con, $sql_update)) {
                        // If that worked then add this to the list of addjusted IDs
                        // First check if the variable is empty or not
                        if($data['adjusted'] == '') {
                            // Add the ID plainly
                            $data['adjusted'] = $tasks[$i];
                        } else {
                            // Otherwise preceed the ID with an &
                            $data['adjusted'] = $data['adjusted'].'&'.$tasks[$i];
                        };
                    } else {
                        // Return an error
                        echo json_encode(array(
                            'status'=>'unsuccesful',
                            'where'=>3
                        ));
                        // Exit the php before it returns an succes state
                        exit();
                    };
                };
                // Now reset task_user
                $data['task_user'] = '';
            } else {
                // Return an error
                echo json_encode(array(
                    'status'=>'unsuccesful',
                    'where'=>2
                ));
                // Exit the php before it returns an succes state
                exit();
            };
        };
    } else {
        // Return an error
        echo json_encode(array(
            'status'=>'unsuccesful',
            'where'=>1
        ));
        // Exit the php before it returns an succes state
        exit();
    };
};
4
  • 3
    That's because you're overwriting variable $i in the inner for loop. Use a different variable there for($j = 0; $j < count($tasks); $j++) { ... Commented Aug 15, 2017 at 22:45
  • I feel like proper idiot right now. Thank you very much @RajdeepPaul Now it works perfectly :) Commented Aug 15, 2017 at 22:47
  • 1
    Please write an answer and accept it to close the question, otherwise this question will be floating around SO as open question. Or, if you want you can delete this question altogether, whichever way you feel comfortable. Commented Aug 15, 2017 at 22:51
  • 1
    Let me write an answer for it. for future reference. Commented Aug 15, 2017 at 22:54

2 Answers 2

4

You are using the $i variable in both for loops. This overwrites the $i in the first loop.

for ($i = 0; $i < $yourVar1; i++){
//some code    
    for ($a =0; $a < $yourVar2; a++){
    //some code
    }
//some code
}

I just changed the $i in the inner loop to a $a so that it won't override it anymore. Hope that helps you

Sign up to request clarification or add additional context in comments.

Comments

1
// First let's break up all the tasklists the project has
$tasklists = explode('&', $data['proj_tasklists']);
// Now lets get all the tasks for each tasklist
for($i = 0; $i < count($tasklists); $i++) {
    // Get list_tasks from the tasklist
    $sql_get = "SELECT * FROM tasklists WHERE list_id='".$tasklists[$i]."'";
    $result_get = mysqli_query($con, $sql_get);

    if($result_get) {
        // Now load in the variable
        while($results = mysqli_fetch_array($result_get)) {
            $data['list_tasks'] = $results['list_tasks'];
        };
        // Now let's break that up
        $tasks = explode('&',$data['list_tasks']);
        // Now reset list_tasks
        $data['list_tasks'] = '';
        // Do something for every task
        for($z = 0; $z < count($tasks); $z++) {
            // And get the info for the set task
            $sql_get = "SELECT * FROM tasks WHERE task_id='".$tasks[$i]."'";
            $result_get = mysqli_query($con, $sql_get);

            if($result_get) {
                // Now load it's task_user in a variable
                while($results = mysqli_fetch_array($result_get)) {
                    $data['task_user'] = $results['task_user'];
                };
                // Check if that is the same as that of the user whom was deleted
                if($data['task_user'] == $data['user_id']) {
                    // If the Id is the same update it to ''
                    $sql_update = "UPDATE tasks SET task_user='' WHERE task_id='".$tasks[$i]."'";

                    if (mysqli_query($con, $sql_update)) {
                        // If that worked then add this to the list of addjusted IDs
                        // First check if the variable is empty or not
                        if($data['adjusted'] == '') {
                            // Add the ID plainly
                            $data['adjusted'] = $tasks[$i];
                        } else {
                            // Otherwise preceed the ID with an &
                            $data['adjusted'] = $data['adjusted'].'&'.$tasks[$i];
                        };
                    } else {
                        // Return an error
                        echo json_encode(array(
                            'status'=>'unsuccesful',
                            'where'=>3
                        ));
                        // Exit the php before it returns an succes state
                        exit();
                    };
                };
                // Now reset task_user
                $data['task_user'] = '';
            } else {
                // Return an error
                echo json_encode(array(
                    'status'=>'unsuccesful',
                    'where'=>2
                ));
                // Exit the php before it returns an succes state
                exit();
            };
        };
    } else {
        // Return an error
        echo json_encode(array(
            'status'=>'unsuccesful',
            'where'=>1
        ));
        // Exit the php before it returns an succes state
        exit();
    };
};

Overwriting variable $i in the inner for loop. Use a different variable there.

For this answer I used $z.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.