This looks simple but I have been struggling this to get working. Please refer following two files, I am trying to use common.php file's public functions and inheriting DBConnection class in login.php, but it doesn't seem to be working, getting error code '500' (internal server error). If I put all common.php stuffs inside login.php it just works fine but I want to use DBConnection class and public functions in many classes so getting around to make this working. Can someone help?
common.php
<?php
function getStatusCodeMessage($status) {
$codes = Array(
100 => 'Continue',
101 => 'Switching Protocols',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
306 => '(Unused)',
307 => 'Temporary Redirect',
400 => 'Bad Request',
401 => 'Unauthorized',
402 => 'Payment Required',
403 => 'Forbidden',
404 => 'Not Found',
405 => 'Method Not Allowed',
406 => 'Not Acceptable',
407 => 'Proxy Authentication Required',
408 => 'Request Timeout',
409 => 'Conflict',
410 => 'Gone',
411 => 'Length Required',
412 => 'Precondition Failed',
413 => 'Request Entity Too Large',
414 => 'Request-URI Too Long',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported'
);
return (isset($codes[$status])) ? $codes[$status] : '';
}
// Helper method to send a HTTP response code/message
function sendResponse($status = 200, $body = '', $content_type = 'text/html') {
$status_header = 'HTTP/1.1 ' . $status . ' ' . getStatusCodeMessage($status);
header($status_header);
header('Content-type: ' . $content_type);
echo $body;
}
class DBConnection
{
protected $db;
// Constructor - open DB connection
function __construct()
{
$this->db = new mysqli('xxx', 'xxx', 'xxx', 'xxx');
$this->db->autocommit(FALSE);
}
// Destructor - close DB connection
function __destruct()
{
$this->db->close();
}
}
?>
login.php
<?php
include 'common.php';
class UserAPI extends DBConnection {
function login() {
// Check for required parameters
if (isset($_POST["username"]) && isset($_POST["password"])) {
// Put parameters into local variables
$username = $_POST["username"];
$password = $_POST["password"];
// Look up code in database
$stmt = $this->db->prepare('SELECT user_username, user_password FROM User WHERE user_username=?');
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->bind_result($existingUsername, $existingPassword);
while ($stmt->fetch()) {
break;
}
$stmt->close();
// Bail if Email exist
if ($existingUsername && $password == $existingPassword) {
$result = array(
"success" => 1,
);
sendResponse(200, json_encode($result));
return true;
}
sendResponse(400, 'Invalid Username or Password. Please try again.');
return false;
}
sendResponse(400, 'Invalid request');
return false;
}
}
$api = new UserAPI;
$api-> login();
?>
[EDIT]
I made login.php simplest. It gives me error when I have "extends DBConnection", if I remove it works!
<?php
include 'common.php';
class UserAPI extends DBConnection {
function login() {
echo "OK";
return true;
}
}
$api = new UserAPI;
$api-> login();
?>