Untitled

mail@pastecode.io avatar
unknown
php
2 years ago
8.6 kB
1
Indexable
Never
<?php

session_start();

if (isset($_POST['email']) && isset($_POST['password']) && isset($_POST['confirmpassword']) && isset($_POST['firstname']) && isset($_POST['lastname']) && isset($_POST['gender']) && isset($_POST['preferred_course']) && isset($_POST['country']) && isset($_POST['working_experiences'])) {

    $email = $password = $confirmPassword = $firstname = $lastname = $gender = $preferredCourse = $country = $workingExperiences = ""; // Define variables with empty values

    // if a fields is validated, will be assigned to 1
    $email_validated = $password_validated = $confirm_password_validated = $firstname_validated = $lastname_validated = $gender_validated = $course_validated = $country_validated = $validated = 0;
    $we_title_validated = $we_start_date_validated = $we_end_date_validated = $we_emp_validated = $we_desc_validated = 0;

    $results = []; // form validation results

    // Get inputs from the register form
    $email = validateData($_POST['email']);
    $password = $_POST['password'];
    $confirmPassword = $_POST['confirmpassword'];
    $firstname = validateData($_POST['firstname']);
    $lastname = validateData($_POST['lastname']);
    $gender = $_POST['gender'];
    $preferredCourse = $_POST['preferred_course'];
    $country = validateData($_POST['country']);
    $workingExperiences = $_POST['working_experiences'];

    // Validate email address
    if (empty($email)) {
        $validated = 0;
        $results += array('emailerror' => "Please enter a valid email address");
    } elseif (validateEmail($email) == false) {
        $validated = 0;
        $results += array('emailerror' => "Invalid email format. eg: alex@gmail.com");
    } else {
        $validated = 1;
    }

    // Validate password and confirm it
    if (empty($password)) {
        $validated = 0;
        $results += array('passworderror' => "Password should be at lease 8 characters with one capital letter, a number and a special character");
    } elseif (!validatePassword($password)) {
        $validated = 0;
        $results += array('passworderror' => "Password should be at lease 8 characters with one capital letter, a number and a special character");
    } elseif (empty($confirmPassword)) {
        $validated = 0;
        $results += array('confirmpassworderror' => "Please confirm your password");
    } elseif ($password != $confirmPassword) {
        $validated = 0;
        $results += array('confirmpassworderror' => "Passwords does not match. Please check again");
    } else {
        $validated = 1;
    }

    // Validate first name
    if (empty($firstname)) {
        $validated = 0;
        $results += array('firstnameerror' => "Please enter your first name");
    } else {
        $validated = 1;
    }

    // Validate last name
    if (empty($lastname)) {
        $validated = 0;
        $results += array('lastnameerror' => "Please enter your last name");
    } else {
        $validated = 1;
    }

    // Validate gender
    if (empty($gender)) {
        $validated = 0;
        $results += array('gendererror' => "Please select a gender");
    } else {
        $validated = 1;
    }

    // Validate preferred course
    if (empty($preferredCourse)) {
        $validated = 0;
        $results += array('preferredcourseerror' => "Please select at least one preferred course");
    } else {
        $validated = 1;
    }

    // Validate country
    if ($country == "") {
        $validated = 0;
        $results += array('countryerror' => "Please select your country");
    } else {
        $validated = 1;
    }

    // Validate working experiences
    for ($i = 0; $i < sizeof($workingExperiences); $i++) {

        if (empty($workingExperiences[$i]['title'])) {
            $we_title_validated = 0;
            $results += array('wetitleerror' => "Please enter the work experience title/profession");
        } else {
            $we_title_validated = 1;
        }

        if (empty($workingExperiences[$i]['start_date'])) {
            $we_start_date_validated = 0;
            $results += array('wesderror' => "Please enter the start date of your work experience");
        } elseif (!validateDate($workingExperiences[$i]['start_date'])) {
            $we_start_date_validated = 0;
            $results += array('wesderror' => "Invalid date format. Please use the format of dd/mm/yyyy");
        } elseif (checkFutureDate($workingExperiences[$i]['start_date']) == true) {
            $we_start_date_validated = 0;
            $results += array('wesderror' => "Please select a date in the past");
        } else {
            $we_start_date_validated = 1;
        }

        if (empty($workingExperiences[$i]['end_date'])) {
            $we_end_date_validated = 0;
            $results += array('weederror' => "Please enter the end date of your work experience");
        } elseif (!validateDate($workingExperiences[$i]['end_date'])) {
            $we_end_date_validated = 0;
            $results += array('weederror' => "Invalid date format. Please use the format of dd/mm/yyyy");
        } elseif (checkFutureDate($workingExperiences[$i]['end_date']) == true) {
            $we_end_date_validated = 0;
            $results += array('weederror' => "Please select a date in the past");
        } elseif (!isStartLessThanEndDate($workingExperiences[$i]['start_date'], $workingExperiences[$i]['end_date'])) {
            $we_end_date_validated = 0;
            $results += array('weederror' => "End date cannot be before start date");
        } else {
            $validated = 1;
        }

        if (empty($workingExperiences[$i]['employer'])) {
            $we_emp_validated = 0;
            $results += array('weemperror' => "Please state your employer");
        } else {
            $we_emp_validated = 1;
        }

        if (empty($workingExperiences[$i]['description'])) {
            $we_desc_validated = 0;
            $results += array('wedescerror' => "Please add a little bit about your experience");
        } else {
            $we_desc_validated = 1;
        }
    }

    // sleep(10);

    if (
        $we_title_validated === 1 &&
        $we_start_date_validated === 1 &&
        $we_end_date_validated === 1 &&
        $we_emp_validated === 1 &&
        $we_desc_validated === 1
    ) {
        // Save the form data to a session as an array
        $form_data = array(
            "Email" => $email,
            "Password" => $password,
            "First Name" => $firstname,
            "Last Name" => $lastname,
            "Gender" => $gender,
            "Preferred Courses" => $preferredCourse,
            "Country" => $country
        );

        $_SESSION['register_form_data'] = $form_data;
        $results += array('success' => 1);

        echo json_encode($results);
    } else {
        echo json_encode($results);
    }

    // echo json_encode($results);
}

function validateData($data)
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);

    return $data;
}

function validateEmail($email)
{
    return filter_var($email, FILTER_VALIDATE_EMAIL);
}

function validatePassword($password)
{
    // Password should be at lease 8 characters with one capital letter, a number and a special character",
    $uppercase = preg_match('@[A-Z]@', $password);
    $lowercase = preg_match('@[a-z]@', $password);
    $number    = preg_match('@[0-9]@', $password);
    $specialChars = preg_match('@[^\w]@', $password);

    if (!$uppercase || !$lowercase || !$number || !$specialChars || strlen($password) < 8) {
        return false;
    } else {
        return true;
    }
}

function validateDate($date)
{
    $matches = array();
    $pattern = '/^([0-9]{1,2})\\/([0-9]{1,2})\\/([0-9]{4})$/';
    if (!preg_match($pattern, $date, $matches)) return false;
    if (!checkdate($matches[2], $matches[1], $matches[3])) return false;
    return true;
}

function checkFutureDate($date)
{
    // Verify the selected date is not a future date
    $inputdate = date_format(date_create_from_format('d/m/Y', $date), 'Y/m/d');
    $currentdate = date('Y/m/d', strtotime("now"));

    if ($inputdate < $currentdate) {
        return false;
    } else {
        return true;
    }
}

function isStartLessThanEndDate($sdate, $edate)
{
    // Check whether the start date is less than end date
    $sdate = date_format(date_create_from_format('d/m/Y', $sdate), 'Y/m/d');
    $edate = date_format(date_create_from_format('d/m/Y', $edate), 'Y/m/d');

    if ($sdate < $edate) {
        return true;
    } else {
        return false;
    }
}