//test has been created successfully, or test ID for update is there
 //insert containers:
 $db_containers = array();
 //will hold mapping of object ID to database ID (needed for insertion of solutions)
 for ($i = 0; $i < $test_data['containers']['counter']; $i++) {
     $container = $test_data['containers']['objects'][$i];
     $db_containers[$i] = $container['db_id'];
     //mapping to current ID (will hold null if new container, updated below)
     if ($container['deleted'] == 'false') {
         //NEW CONTAINER:
         if ($container['newly_created'] == 'true') {
             $container_id = $db_con->insertEntry(false, 'dragdrop_containers', array("container_test_ID" => $test_id, "container_text" => $container['container_text']));
             $db_containers[$i] = $container_id;
         } else {
             if ($container['edited'] == 'true') {
                 $db_con->updateEntry(false, 'dragdrop_containers', array("container_text" => $container['container_text']), array("where" => "container_ID = " . $container['db_id']));
             }
         }
         //else if
     } else {
         if ($container['newly_created'] == 'false') {
             $db_con->deleteEntries(false, 'dragdrop_containers', array("where" => "container_ID = " . $container['db_id']));
         }
     }
     //else
 }
 //for
 //insert items:
 for ($i = 0; $i < $test_data['items']['counter']; $i++) {
     $item = $test_data['items']['objects'][$i];
     if ($item['deleted'] == 'false') {
                         $question_b = $test_data['questions']['objects'][$j];
                         if ($question_b['current_id'] != $question['current_id'] && $question_b['added_from_db'] == "true" && $question_b['db_id'] == $question['db_id'] && $question_b['edited'] == "false") {
                             $save_to_change = false;
                         }
                         //if
                     }
                     //for
                 }
                 //else
                 if (!$save_to_change) {
                     //original question is still needed -> delete lookup and insert as new question
                     $db_con->deleteEntries(false, 'dynmc_lookup', array("where" => "lookup_question_ID = " . $question['db_id'], "and" => "lookup_test_ID = " . $test_id, "limit" => "1"));
                     insertNewQuestion($question, $test_id);
                 } else {
                     //question only belongs to this test once -> update
                     $db_con->updateEntry(false, 'dynmc_questions', array("question_text" => $question['question_text'], "question_correct_answer" => $question['correct_answer']), array("where" => "question_ID = " . $question['db_id']));
                     $db_con->deleteEntries(false, 'dynmc_incorrect', array("where" => "incorrect_question_ID = " . $question['db_id']));
                     for ($j = 0; $j < sizeof($question['incorrect_answers']); $j++) {
                         $db_con->insertEntry(false, 'dynmc_incorrect', array("incorrect_text" => $question['incorrect_answers'][$j], "incorrect_question_ID" => $question['db_id']));
                     }
                     //for
                 }
                 //else
             }
         }
     }
     //else if
 } else {
     //deleted question
     if ($question['newly_created'] == 'false' && $question['added_from_db'] == 'false') {
         //DELETED QUESTION:
 } else {
     $test_id = $_POST['save_test']['test_ID'];
     updateTestGeneral($_POST['save_test']);
 }
 //else
 $db_con = new Db_Connection();
 $test_data = $_POST['test_data'];
 $error = '';
 if (is_numeric($test_id)) {
     //test has been created successfully, or test ID for update is there
     //GRID OF NEW TEST:
     if ($_POST['action'] == 'new') {
         $db_con->insertEntry(false, 'crossword_grid', array("grid_test_ID" => $test_id, "grid_x" => $test_data['grid']['x'], "grid_y" => $test_data['grid']['y']));
     } else {
         if ($test_data['grid']['edited'] == 'true') {
             $db_con->updateEntry(false, 'crossword_grid', array("grid_x" => $test_data['grid']['x'], "grid_y" => $test_data['grid']['y']), array("where" => "grid_test_ID = " . $test_id));
         }
     }
     //else if
     for ($i = 0; $i < $test_data['questions']['counter']; $i++) {
         $question = $test_data['questions']['objects'][$i];
         if ($question['deleted'] == 'false' && $question['number'] != 'null') {
             //word has not been deleted and has been placed
             //NEW QUESTION:
             if ($question['newly_created'] == 'true') {
                 $question_id = $db_con->insertEntry(false, 'crossword_questions', array("question_test_ID" => $test_id, "question_text" => $question['question_text'], "question_correct_answer" => $question['correct_answer'], "question_position_x" => $question['position']['x'], "question_position_y" => $question['position']['y'], "question_orientation" => $question['position']['orientation'], "question_number" => $question['number']));
             } else {
                 if ($question['edited'] == 'true') {
                     $db_con->updateEntry(false, 'crossword_questions', array("question_text" => $question['question_text'], "question_correct_answer" => $question['correct_answer'], "question_position_x" => $question['position']['x'], "question_position_y" => $question['position']['y'], "question_orientation" => $question['position']['orientation'], "question_number" => $question['number']), array("where" => "question_ID = " . $question['db_id']));
                 }
             }