Untitled

 avatar
unknown
plain_text
2 years ago
8.3 kB
21
Indexable
<?php 
  /**
   * Tells the browser to allow code from any origin to access
   */
  header("Access-Control-Allow-Origin: *");


  /**
   * Tells browsers whether to expose the response to the frontend JavaScript code
   * when the request's credentials mode (Request.credentials) is include
   */
  header("Access-Control-Allow-Credentials: true");
 


  /**
   * Specifies one or more methods allowed when accessing a resource in response to a preflight request
   */
  header("Access-Control-Allow-Methods: POST, GET, PUT, DELETE");
 
  /**
   * Used in response to a preflight request which includes the Access-Control-Request-Headers to
   * indicate which HTTP headers can be used during the actual request
   */
  header("Access-Control-Allow-Headers: Content-Type");

    require_once 'vendor/thingengineer/mysqli-database-class/MysqliDB.php';

  class API {
    public $db;

    public function __construct()
    {
        $this->db = new MysqliDB('localhost', 'root', '', 'employee');
    }
    /**
     * HTTP GET Request
     *
     * @param $payload
     */
    public function httpGet($payload = array()){
        // execute query
        $query = $this->db->get('information');	

        $exist = $this->db->where('id', 31);

        if($exist){
            //check if query is success or fail
            if ($query) {
                echo json_encode(array(
                    'method' => 'GET',
                    'status' => 'success',
                    'data' => $query,
                ));
            } else {
                echo json_encode(array(
                    'method' => 'GET',
                    'status' => 'fail',
                    'data' => [],
                    'message' => 'Failed to Fetch'
                ));
            }
        }
    }
    /**
     * HTTP POST Request
     *
     * @param $payload
     */
    public function httpPost($payload)
    {
        // Check if payload contains null values
        foreach ($payload as $value) {
            if ($value === null) {
                return json_encode(array(
                    'method' => 'POST',
                    'status' => 'fail',
                    'data' => [],
                    'message' => 'Payload contains null values'
                ));
            }
        }
        if (empty($payload)) {
            echo json_encode(['error' => 'Payload contains null values']);
        }

        //Execute Query
        $query = $this->db->insert('information', $payload);

        //check if query is success or fail
        if ($query) {
            echo json_encode(array(
                'method' => 'POST',
                'status' => 'success',
                'data' => $payload,
            ));
        }
        else {
            echo json_encode(array(
                'method' => 'POST',
                'status' => 'fail',
                'data' => [],
                'message' => 'Failed to Insert'
            ));
        }
    }
    /**
     * HTTP PUT Request
     *
     * @param $id
     * @param $payload
     */
    public function httpPut($id, $payload){
        // Check if the ID in the payload matches the ID in the URL
        if ($id != $payload['id']) {
            echo json_encode(array(
                'method' => 'PUT',
                'status' => 'fail',
                'data' => [],
                'message' => 'Id doesnt match',
            ));
        }
        // Check if any values are present in the payload other than the 'id' field
        unset($payload['id']);
        if (empty($payload)) {
            echo json_encode(array(
                'method' => 'PUT',
                'status' => 'fail',
                'data' => [],
                'message' => 'No fields to update',
            ));
        }
        // select ID
        $this->db->where('id', $payload, 'IN')->update('information', $payload);

        if ($this->db->getLastErrno() === 0)
            echo 'Update succesfull';
        else
            echo 'Update failed. Error: '. $this->db->getLastError();

        //execute query
        //$query = $this->db->update('information', $payload);

        //check if query is success or fail
        // if ($query) {
        //     return json_encode(array(
        //         'method' => 'PUT',
        //         'status' => 'success',
        //         'data' => $payload,
        //     ));
        // }
        // else {
        //     return json_encode(array(
        //         'method' => 'PUT',
        //         'status' => 'fail',
        //         'data' => [],
        //         'message' => 'Failed to Update'
        //     ));
        // } 

    }
    /**
    * HTTP DELETE Request
    *
    * @param $id
    * @param $payload
    */
    public function httpDelete($id, $payload)
    {
        if (empty($id) || !is_numeric($id)) {
            return json_encode(array(
                'method' => 'DELETE',
                'status' => 'fail',
                'data' => [],
                'message' => 'Invalid ID provided'
            ));
        }

        // Explode the ids 
        $payload = ['id' => is_string($id) ? explode(",", $id) : null];	


        // Check if there are any selected ids in the $payload array
        if (count($payload['id'])) {
            // If there are, use the IN operator to search for those specific ids in the 'id' column
            $this->db->where('id', $payload['id'], 'IN');
        } else {
            // If there are no selected ids, use the normal operator to search for the single id in the 'id' column
            $this->db->where('id', $id);
        }

        // Check if there are any selected ids in the $payload array
        if (isset($payload['id']) && count($payload['id'])) {
            // If there are, use the IN operator to search for those specific ids in the 'id' column
            $this->db->where('id', $payload['id'], 'IN');
        } else {
            // If there are no selected ids, return an error message
            return json_encode(array(
                'method' => 'DELETE',
                'status' => 'fail',
                'data' => [],
                'message' => 'No ID provided'
            ));
        }

        try{

            // Execute query
            $query = $this->db->delete('information', $id);
            
            // check if success or fail
            if ($query) {
                echo json_encode(array(
                    'method' => 'DELETE',
                    'status' => 'success',
                    'data' => $payload,
                ));
                return;
            } else {
                return json_encode(array(
                    'method' => 'DELETE',
                    'status' => 'fail',
                    'data' => [],
                    'message' => 'Failed to Delete'
                ));
            }
        }
        catch(Exception $e)
        {
            return 'Message: ' .$e->getMessage();
        }
    }
    //end
}
$request_method = $_SERVER['REQUEST_METHOD'];

// For GET,POST,PUT & DELETE Request
if ($request_method === 'GET') {
    $received_data = $_GET;
} else {
    //check if method is PUT or DELETE, and get the ids on URL
    if ($request_method === 'PUT' || $request_method === 'DELETE') {
        $request_uri = $_SERVER['REQUEST_URI'];


        $ids = null;
        $exploded_request_uri = array_values(explode("/", $request_uri));


        $last_index = count($exploded_request_uri) - 1;


        $ids = $exploded_request_uri[$last_index];

    }

    //payload data
    $received_data = json_decode(file_get_contents('php://input'), true);
}

$api = new API;

//Checking if what type of request and designating to specific functions
switch ($request_method) {
    case 'GET':
        $api->httpGet($received_data);
        break;
    case 'POST':
        $api->httpPost($received_data);
        break;
    case 'PUT':
        $api->httpPut($ids, $received_data);
        break;
    case 'DELETE':
        $api->httpDelete($ids, $received_data);
        break;
}


?>
Editor is loading...