0
votes

I have been working on an Android App, now I want to have a database on the server from where my App will fetch the data.

I found making a REST API with PHP to access a MySQL database is the easiest solution, but am totally alien to php (touching it for the first time).

I am getting "404 Page not found" when I try to hit -- http://localhost/oneview_alerts/v1/notifications

My WAMP server is up and running.

My code is very small and simple, and I referred below URLs to take help: 1) https://www.androidhive.info/2014/01/how-to-create-rest-api-for-android-app-using-php-slim-and-mysql-day-12-2/

2) https://www.androidhive.info/2014/01/how-to-create-rest-api-for-android-app-using-php-slim-and-mysql-day-23/

I am absolutely new to PHP and not able to understand where to start debugging. Its not like my Java or Python where I could straight away see the error logs in logcat or debugger. Or may be there is a way, I am just not aware of it.

Please help!!

In my access.log file am getting "127.0.0.1 - - [26/Dec/2018:19:15:59 +0000] "GET /oneview_alerts/v1/notifications HTTP/1.1" 404 532"

index.php

<?php
/**
 * Created by PhpStorm.
 * User: JM00490784
 * Date: 12/26/2018
 * Time: 6:05 PM
 */

ini_set('display_errors', 'On');
error_reporting(E_ALL);

require_once '../include/DbHandler.php';
require '.././libs/Slim/Slim.php';

\Slim\Slim::registerAutoloader();

$app = new \Slim\Slim();

function echoResponse($status_code, $response) {
    $app = \Slim\Slim::getInstance();
    // Http response code
    $app->status($status_code);

    // setting response content type to json
    $app->contentType('application/json');

    echo json_encode($response);
}

$app->run();

$app->get('/notifications', function() {

    $response = array();
    $db = new DbHandler();

    // fetching all user tasks
    $result = $db->getAllNotifications();

    $response["error"] = false;
    $response["notifications"] = array();

    // looping through result and preparing tasks array
    while ($notification = $result->fetch_assoc()) {
        $tmp = array();
        $tmp["id"] = $notification["id"];
        $tmp["notification_text"] = $notification["notification_text"];
        $tmp["hostname"] = $notification["hostname"];
        $tmp["service"] = $notification["service"];
        $tmp["value"] = $notification["value"];
        $tmp["timestamp"] = $notification["timestamp"];
        array_push($response["notifications"], $tmp);
    }

    echoResponse(200, $response);
});

?>

DBHandler.php

<?php

/**
 * Class to handle db operations
 * This class will have CRUD methods for database tables
 *
 * @author Jotinder Singh Matta
 */
class DbHandler {

    private $conn;

    function __construct() {
        require_once dirname(__FILE__) . './DbConnect.php';
        // opening db connection
        $db = new DbConnect();
        $this->conn = $db->connect();
    }

    public function getAllNotifications() {
        $stmt = $this->conn->prepare("SELECT * FROM notification ORDER BY timestamp DESC");
        $stmt->execute();
        $notifications = $stmt->get_result();
        $stmt->close();
        return $notifications;
    }


}

?>

DBConnect.php

<?php

/**
 * Handling database connection
 *
 * @author Jotinder Singh Matta
 */
class DbConnect {

    private $conn;

    function __construct() {
    }

    /**
     * Establishing database connection
     * @return database connection handler
     */
    function connect() {
        include_once dirname(__FILE__) . './Config.php';

        // Connecting to mysql database
        $this->conn = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);

        // Check for database connection error
        if (mysqli_connect_errno()) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }

        // returing connection resource
        return $this->conn;
    }

}

?>

Config.php

<?php
/**
 * Database configuration
 */
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
define('DB_NAME', 'oneview_alerts');

?>

.htaccess

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ %{ENV:BASE}index.php [QSA,L] 

desc notificatiion table

desc notification



id  int(11) NO  PRI 
    NULL
    auto_increment  
notification_text   varchar(250)    YES     
    NULL

hostname    varchar(255)    NO      
    NULL

service varchar(255)    NO      
    NULL

value   varchar(255)    NO      
    NULL

timestamp   timestamp   YES     CURRENT_TIMESTAMP       
1
Add your project folder path.gitwithash
Where do I need to add it and In what format.Jotinder Singh
I mean, post the pathname to your project folder here.gitwithash
Project Path - E:\wamp64\www\oneview_alerts Below is the directory structure under this parent directory:- E:\wamp64\www\oneview_alerts\include E:\wamp64\www\oneview_alerts\include\Config.php E:\wamp64\www\oneview_alerts\include\DbConnect.php E:\wamp64\www\oneview_alerts\include\DbHandler.php E:\wamp64\www\oneview_alerts\libs E:\wamp64\www\oneview_alerts\libs\Slim E:\wamp64\www\oneview_alerts\v1 E:\wamp64\www\oneview_alerts\v1\.htaccess E:\wamp64\www\oneview_alerts\v1\index.phpJotinder Singh
I assume you're using windows To get the folder path in windows, Go to the folder that contains index.php of your project. Hold down the Shift key on your keyboard and then right-click on the file.Then, choose "Copy as path" from the menu.gitwithash

1 Answers

0
votes

From your comments, I assume that your Document root is E:\wamp64\www\oneview_alerts\v1\ and there is an .htaccess file on the same level as index.php

Replace the content of .htaccess file with this.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

Then create a vhost file

<VirtualHost *:80>
DocumentRoot "E:/wamp64/www/oneview_alerts/v1/"
ServerName oneview_alerts.local
<Directory "E:/wamp64/www/oneview_alerts/v1/">
</Directory>
</VirtualHost>

Add the following to your hosts file

127.0.0.1 localhost oneview_alerts.local

Then restart the WAMP server