Fatal error: Call to a member function query() on a non-object

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Josef Zorgui

Josef Zorgui

10/12/2007 13:07:00
Quote Anchor link
Goedemiddag,

Ik ben bezig met een script aan het schrijven alleen krijg ik steeds een fout bij het gebruik van classen de foutmelding is
Fatal error: Call to a member function query() on a non-object

Zou iemand mij hierbij kunnen helpen

Hieronder de bestanden.
mysql.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
defined('VALID_CON') or die ('Directe toegang tot deze locatie is niet toegestaan.');
define('DEBUG_MODE', true);
define('CONFIRMATION', true);
define('MESSAGE_RETURN', true);
class dbConnect{
    private $dbHost = 'localhost';
    private $dbName = 'bleaders';
    private $dbUser = 'root';
    private $dbPass = '';
    function
__construct(){
        $link = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass);
        $select = mysql_select_db($this->dbName);
        if (!$link && !$select){
            if (DEBUG_MODE){
                $message = "Er is een fout opgetreden tijdens het verbinden.\n";
                $message .= "MySQL fout: ".mysql_error()."\n";
                $message .= "MySQL fout nummer: ".mysql_errno()."\n";
                $this->melding($message);
            }

            else{
                $message = "Er is een fout opgetreden tijdens het verbinden.\n";
                $this->melding($message);
            }
        }

        else{
            if (CONFIRMATION){
                $message = "Er is een verbinding gemaakt met de database.";
                $this->melding($message);
            }
        }
    }
    function
query($query = '', $taak = 0, $melding = ''){
        $result = mysql_query($query);
        if (!$result){
            if (DEBUG_MODE){
                $message = "Er is een fout opgetreden bij het uitvoeren van deze query.\n";
                $message .= "MySQL fout: ".mysql_error()."\n";
                $message .= "MySQL fout nummer: ".mysql_errno()."\n";
                $this->melding($message);
            }

            else{
                $message = "Er is een fout opgetreden tijden het uivoeren van deze query.\n";
                $this->melding($message);
            }
        }

        else{
            if (CONFIRMATION){
                if ($taak < 4){
                    $this->melding($melding);
                }

                else{
                    $message = "De resultaten zijn uit de database opgehaald.";
                }
            }

            else{
                if (MELDING){
                    if ($taak < 4){
                        $this->melding($melding);
                    }
                }
            }

            if ($taak == 4){
                return $result;
            }
        }
    }

    private function melding($melding = ''){
        echo "<script language=\"javascript\">alert (\"$melding\");</script>";
    }
    function
__destruct(){
        mysql_close();
    }
}

?>


premiumclasses.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<?php
defined('VALID_CON') or die ('Directe toegang tot deze locatie is niet toegestaan.');
include 'includes/mysql.php';
//functies en classen behorende bij admin.administrator.php
$dbObj = new dbConnect;
class premiumActivator {
    //funcite om alle gebruikers die nog geen betaald lidmaatschap hebben te tonen.
    function showNotActive(){
        $query = "SELECT user_id FROM jos_premium";
        echo 'Nou tot hier komt hij wel <br>';
        $this->result = $dbObj->query($query, 4, '');
        $users = array();
        $teller = 0;
        while ($row = mysql_fetch_array($this->result)){
            $users[$teller] = $row['id'];
            $teller++;
        }

        mysql_free_result($this->result);
        $query = "SELECT * FROM jos_users";
        $this->result = $dbObj->query($query, 4, '');
        while ($rows = mysql_fetch_array($this->result)){
            foreach ($users as $premiums){
                if ($premiums == $rows['id']){
                    $isPremium = true;
                }
            }

            if ($isPremium == true){
                
            }
else{
                echo 'Deze gebruiker heeft nog geen betaalde lidmaatschap.<br>';
                echo 'Gebruikersnaam: '.$rows['username'].'<br>';
            }
        }

        mysql_free_result($this->result);
    }

    //functie om alle gebruikers met een betaalde lidmaatschap te tonen.
    function showActive(){
        $query = "SELECT user_id FROM jos_premium";
        $this->result = $dbObj->query($query, 4, '');
        $users = array();
        $aantal = mysql_num_rows($this->result);
        if ($aantal < 1){
            echo 'Er zijn geen gebruikers met betaalde lidmaatschappen.';
        }

        else{
            $teller = 0;
            while ($row = mysql_fetch_array($this->result)){
                $users[$teller] = $row['id'];
                $teller++;
            }

            mysql_free_result($this->result);
            foreach ($users as $premiums){
                $query = "SELECT * FROM jos_users WHERE id = $premium";
                $this->result = $dbObj->query($query, 4, '');
                $row = mysql_fetch_array($this->result);
                echo 'Gebruikersnaam: '.$row['username'].'<br>';
                echo 'Gebruikersnummer: '.$row['id'].'<br>';
                mysql_free_result($this->result);
            }                
        }
    }

    //functie om een gebruiker te activeren als een betaalde lidmaatschap.
    function activateUser($userid, $datums, $datume, $reminder, $debnr){
        $query = "INSERT INTO jos_premiums SET user_id = $userid, date_start = $datums, date_end = $datume, reminder = $reminder, debiteuren_nr = $debnr";
        $this->result = mysql_query($query);
        if (!$this->result){
            echo 'Er is een fout opgetreden bij het toevoegen van deze gebruiker.';
        }

        else{
            echo 'De gebruiker is geactiveerd.';
        }
    }

    //functie om alle debiteuren in te zien.
    function showDeb(){
        $query = "SELECT id FROM jos_users";
        $this->result = mysql_query($query) or die ('Kan deze query niet uitvoeren.');
        $users = array();
        $teller = 0;
        while ($row = mysql_fetch_array($this->result)){
            $users[$teller] = $row['id'];
            $teller++;
        }

        mysql_free_result($this->result);
        foreach ($users as $user){
            $query = "SELECT * FROM debiteuren WHERE user_id = $user";
            $this->result = mysql_query($query) or die ('Kan de query niet uitvoeren.');
            $aantal = mysql_num_rows($this->result);
            if ($aantal < 1){
                mysql_free_result($this->result);
            }

            else{
                while ($row = mysql_fetch_array($this->result)){
                    echo '<b>Debiteurennr</b>: '.$row['debiteuren_nr'].'<br>';
                    echo '<b>Naam:</b> '.$row['naam'].'<br>';
                    echo '<b>Bedrijf:</b> '.$row['bedrijf'].'<br>';
                    echo '<b>Adres:</b> '.$row['adres'].'<br>';
                    echo '<b>Plaats:</b> '.$row['plaats'].'<br>';
                    echo '<b>Postcode:</b> '.$row['postcode'].'<br>';
                    $getSQL = "SELECT * FROM facturen WHERE debiteuren_nr = ".$row['debiteuren_nr'];
                    $sqlReturn = $dbObj->query($query, 4, '');
                    $facturen = mysql_num_rows($sqlReturn);
                    echo '<b>Facturen:</b> '.$facturen.'<br>';
                    mysql_free_result($sqlReturn);
                    echo '<hr>';
                }

                mysql_free_result($this->result);
            }
        }
    }

    //facturen van de debiteuren inzien.
    function showFactuur($debnr){
        $query = "SELECT * FROM facturen WHERE debiteuren_nr = $debnr";
        $this->result = $dbObj->query($query, 4, '');
        $aantal = mysql_num_rows($this->result);
        if ($aantal < 1){
            echo 'Deze gebruiker heeft geen facturen (controleer of deze gebruiker zich wel aangemeld heeft).';
            mysql_free_result($this->result);
        }

        else{
            while ($row = mysql_fetch_array($this->result)){
                echo 'Factuurnr: '.$row['factuur_nr'].'<br>';
                echo 'Factuurdatum: '.$row['datum'].'<br>';
                echo 'Status: In behandeling';
                echo '<hr>';
            }

            mysql_free_result($this->result);
        }
    }

    //factuur status wijzigen
    function changeFactuurState($factuurnr){
        $query = "UPDATE facturen SET status = $status WHERE factuur_nr = $factuurnr";
        $this->result = $dbObj->query($query, 1, '');
        if (!$this->result){
            echo 'Er is een fout opgetreden tijdens het wijzigen van de status.';
        }

        else{
            conRedirect('index.php?action=premium&taak=active');
        }
    }

    //factuur downloaden.
    function dowloadFactuur($factuurnr){
        
    }
    function
blockPremium($userid){
        $query = "UPDATE jos_premium SET blocked = 1 WHERE user_id = $userid";
        $this->result = $dbObj->query($this->result);
        if (!$this->result){
            echo 'Er is een fout opgetreden bij het blokkeren van deze gebruikers.';
        }

        else{
            conRedirect('index.php?action=premium&taak=active');
        }
    }
    function
unblockPremium($userid){
        $query = "UPDATE jos_premium SET blocked = 0 WHERE user_id = $userid";
        $this->result = $dbObj->query($this->result);
        if (!$this->result){
            echo 'Er is een fout opgetreden bij het deblokkeren van deze gebruikers.';
        }

        else{
            conRedirect('index2.php?action=premium&taak=active');
        }
    }
}

unset($dbObj);
?>
 
PHP hulp

PHP hulp

19/11/2024 00:41:16
 
Joren de Wit

Joren de Wit

10/12/2007 13:17:00
Quote Anchor link
Het zou makkelijk zijn als je ook even het regelnummer erbij gaf. Maar ik gok dat het gaat om regel 11 in premiumclasses.php?

Binnen de klasse bestaat $dbObj namelijk nog niet. Je instantieert wel op regel 5, maar dat is niet binnen de klasse premiumActivator...
 
TJVB tvb

TJVB tvb

10/12/2007 13:18:00
Quote Anchor link
public en private voor functies wat netter. (Ik ga uit van PHP5)

je premiumActivator kent de $dbObj niet.
Je kunt die meegeven met aan de constructor
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
    private $dbObj = null;
    
    public function __construct($nwdbObk){
        $this->dbObj = $nwdbObk;
    }

?>


Je aanroep:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?Php
$dbObj
= new dbConnect();
$prem = new premiumActivator($dbObj);
?>


Dan in je functies niet:
$dbObj->query($query, 4, '');
Maar:
$this->dbObj->query($query, 4, '');
 
Josef Zorgui

Josef Zorgui

10/12/2007 13:22:00
Quote Anchor link
om de functies van premiumActivator aan te roepen gebruik ik
premiumActivator::functie

Het is niet echt een echte klasse maar meer een namespace idee en dan werkt het niet.
 
Joren de Wit

Joren de Wit

10/12/2007 13:26:00
Quote Anchor link
Dan zul je dus aan elke statische aanroep wel je database object mee moeten geven. Elke methode in de klasse premiumActivator die dat object nodig heeft, zal dan ook zo'n parameter moeten accepteren...
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.