Fjarlaegur
Fjarlaegur

Reputation: 1443

PHP Using an Object from an included file in another included file

I will be straight to the point with this. Can't seem to find it anywhere on the internet. Maybe it is not even possible, i dont know. I do really like to use the method "divide and rule", created it myself. Splitting as much files as possible for easy management (small files and such).

But here is my problem:

I have 5 files:

index.php
inc/config.php
inc/Database.class.php
inc/sidebar.php
inc/forms.php

Okay, what i have done is this:

in my config.php file i included the Database.class.php file and created an object.

include 'Database.class.php';

$user = "root";
$pass = "";
$host = "localhost";
$database = "blah blah";

$db = new Database($user, $pass, $host, $database);
$db->connect();

So i included this config.php and sidebar.php in my index.php file.

(shortened the code, but it functions the same)

include 'inc/config.php';
include 'inc/sidebar.php';

In my sidebar i have a form, for users to login.

in sidebar.php i just include forms.php, this is the forms.php: (I used print_r to debug my file, to see if anything returns and i left out the method loginFormShow because it is very long and not relevant)

function loginFormProcess($user, $pass)
{
    $db->select(blah blah some variables);
    $res = $db->getResult();
    print_r($res); 
}


if (!isset($_POST['submit'])) {
    loginFormShow();
} else {

    if ($_POST['user'] == "") 
    {
        loginFormShow(1);
    } 
    else if ($_POST['pass'] == "") 
    {
        loginFormShow(2);
    } 
    else 
    {
        $user = $_POST['user'];
        $pass = $_POST['pass'];
        loginFormProcess($user, $pass);
    }
}

And thus, what the problem is. When i try to call the function loginFormProcess, it cant use the object $db.

Can i use 1 object for this? Because on the index page i am going to require some other data from the database. Do i need to create an object for the index page and one for the login form?

Is there any other solution? If i am not clear, i would love to give some more explanation.

Cheers,

Clemenz

Upvotes: 1

Views: 5747

Answers (4)

kDjakman
kDjakman

Reputation: 116

The variable $db is created as a global variable in your config.php file. This is invisible from inside the loginFormProcess function. A shotcut solution you can use is declaring your intention of using a global variable by adding the statement global $db; as the first statement inside your function

Upvotes: 0

fbitterlich
fbitterlich

Reputation: 913

You need to declare $db as global.

Try this:

function loginFormProcess($user, $pass)
{
    global $db;
    $db->select(blah blah some variables);
    $res = $db->getResult();
    print_r($res); 
}

See: http://www.php.net/manual/en/language.variables.scope.php

Upvotes: 0

Thomas
Thomas

Reputation: 364

Try this:

function loginFormProcess($user, $pass)
{
    global $db;
    $db->select(blah blah some variables);
    $res = $db->getResult();
    print_r($res); 
}

For reference: http://php.net/manual/en/language.variables.scope.php

Upvotes: 0

Madara's Ghost
Madara's Ghost

Reputation: 174957

The best solution would be to pass the database object to the function's arguments as follows:

function loginFormProcess($user, $pass, Database $db) {

And call it with an appropriate Database object. This is what know as .

Upvotes: 3

Related Questions