1

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();

?>
5
  • Probably a silly question, but are both files in the same directory? You will probably need to check your server log for the actual error message. That would give us/you more of a hint as to where to look for whats causing the error. Commented Feb 10, 2014 at 0:21
  • Yes, file is getting including correctly. I have checked if ((include 'vars.php') == 'OK') { echo 'OK'; } which works fine. I get error only when I try to access public function or extends the class. Commented Feb 10, 2014 at 0:25
  • 1
    Wait, a global method can't have access modifier like public, private or protected. Remove those modifiers from the functions in common.php Commented Feb 10, 2014 at 0:25
  • Have you remove all white-space and newlines before trying to set headers? Like I mentioned previously, you're going to have to enable error logging, and check out your server/http error log file. Commented Feb 10, 2014 at 0:32
  • Hi Phil, please see my EDIT, I have removed everything and still the same error only when I add "extends DBConnection", without it, i get code 200 which is success. I will have to research on how to see this error file! Commented Feb 10, 2014 at 0:45

2 Answers 2

1

You cannot declare functions "public" if they are NOT part of a class. This will trigger a fatal PHP syntax error.

Solutions: Either wrap those functions inside a class, and make them static.

Or remove the visibility modifier "public".

Sign up to request clarification or add additional context in comments.

6 Comments

I just tested it on wampserver, and got a parse-error rather than fatal error.
I'd consider any errors that kill the script "fatal", whatever the correct wording is in this case. :)
Hi Sven, I have removed it and tried again but the same error code 500! Please bear with me, this is first PHP pages I am trying to write.
Then google how to display PHP errors or how to grab them from the server log file. Without a proper error message this will not lead to a solution.
I don't see any obvious errors, so all we need is the error message that is hidden behind the status 500. After that I guess solving it will be very easy.
|
0

I copy your code to my local and run it, it works.

Maybe your DB has issue.

How about you comment out $this->db = new mysqli('xxx', 'xxx', 'xxx', 'xxx'); related codes.

1 Comment

Hi Zac, database working fine absolutely. I think all i need is the error log. I don;t know how to get error logs but will figure it out.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.