"Please specify experience ID.")); exit(); } else if(mysqli_query($connection, "SELECT * FROM experience WHERE id = '$id';")->num_rows !== 1) { http_response_code(400); echo json_encode(array("error" => "Given experience ID ($id) not in database.")); exit(); } // INSPECT TITLE // Check that experience title is not empty // And that it's less than 60 characters in length (database limit) if($newTitle === "") { http_response_code(400); echo json_encode(array("error" => "Please specify title.")); exit(); } else if(mb_strlen($newTitle) > 60) { http_response_code(400); echo json_encode(array("error" => "Title too long (max. is 60 characters).")); exit(); } // INSPECT DESCRIPTION // Check that experience title is not empty // And that it's less than 60 characters in length (database limit) if($newDescription === "") { http_response_code(400); echo json_encode(array("error" => "Please specify description.")); exit(); } else if(mb_strlen($newDescription) > 100) { http_response_code(400); echo json_encode(array("error" => "Description too long (max. is 100 characters).")); exit(); } // INSPECT TYPE // Check that experience type is not empty // And that it's either Test, CBRE or URE if($newType === "") { http_response_code(400); echo json_encode(array("error" => "Please specify type.")); exit(); } else if($newType !== 'Course-Based Research Experience' AND $newType !== 'Undergraduate Research Experience' AND $newType !== 'Test') { http_response_code(400); echo json_encode(array("error" => "Invalid type ($newType).")); exit(); } function validDate($date) { $d = date_create_from_format("Y-m-d", $date); return $d && date_format($d, "Y-m-d") === $date; } // INSPECT START DATE // Check that startDate is not an empty string // And that startDate is in appropriate format YYYY-MM-DD (e.g. 2222-02-22) // WARNING: only handling AST // HELP: https://www.codexworld.com/how-to/validate-date-input-string-in-php/ // if($newStart === "") { // http_response_code(400); // echo json_encode(array("error" => "Please specify experience's start date.")); // exit(); // } else if(!validDate($newStart)) { // http_response_code(400); // echo json_encode(array("error" => "Experience's start date ($newStart) given in wrong format (use YYYY-MM-DD instead).")); // exit(); // } // INSPECT END DATE // Check that endDate is not an empty string // And that endDate is in appropriate format YYYY-MM-DD (e.g. 2222-02-22) // WARNING: only handling AST // HELP: https://www.codexworld.com/how-to/validate-date-input-string-in-php/ if($newEnd === "") { http_response_code(400); echo json_encode(array("error" => "Please specify experience's end date.")); exit(); } else if(!validDate($newEnd)) { http_response_code(400); echo json_encode(array("error" => "Experience's end date ($newEnd) given in wrong format (use YYYY-MM-DD instead).")); exit(); } // Calculate duration in seconds $duration_seconds = strtotime($newEnd) - strtotime($newStart); // Check that endDate occurs after the startDate if($duration_seconds <= 0) { http_response_code(400); echo json_encode(array("error" => "Experience's end date ($newEnd) must occur at least a day after the start date ($newStart).")); exit(); } // Change seconds to weeks and round up $duration_weeks = round($duration_seconds / 604800); // 60 * 60 * 24 * 7 // UPDATE TITLE, DESCRIPTION, TYPE, END DATE & DURATION $newDuration = mysqli_real_escape_string($connection, trim($duration_weeks)); $query = "UPDATE `experience` SET `title` = '$newTitle', `description` = '$newDescription', `type` = '$newType', `end_date` = '$newEnd', `duration_weeks` = '$newDuration' WHERE `id` = '$id';"; $result = mysqli_query($connection, $query) or die("Error: ".mysqli_error($connection)); // UPDATE START DATE // $query = "UPDATE `experience` SET `start_date` = '$newStart' WHERE `id` = '$id';"; // $result = mysqli_query($connection, $query) or die("Error: ".mysqli_error($connection)); }