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

Status
Niet open voor verdere reacties.

hobielasseel

Gebruiker
Lid geworden
10 apr 2011
Berichten
142
hallo allemaal ik heb een class geschreven waarmee ik makkelijk bewerkingen in mijn database kan doen. maar wanneer ik de query uitvoer krijg ik telkens deze foutmelding: Fatal error: Call to a member function query() on a non-object in /customers/6/a/5/tlindeken.be/httpd.www/test/includes/databaseclass.php on line 11 ik heb mij intussen kapot gezocht op de fout maar kan deze echt niet vinden hopelijk vinden jullie de fout wel.
Alvast Bedankt
mysqlgegevens.php
PHP:
<?php
$user = "";
$pass = "";
$host = "l";
$dbdb = "";
?>
databaseclass.php
PHP:
<?php
class Database {//verbinden met de database
    public function database(){
        include_once("mysqlgegevens.php");
        $connection =new mysqli($host, $user, $pass, $dbdb);
        if(mysqli_connect_errno()){
            echo "Could not establish a database connection.";
        }
    }
    public function databaseExecute($mysqli){//uitvoeren van query's
        $res = $connection->query($mysqli) or die(mysqli_connect_error());
        return $res;
    }
    public function databaseListId(){
        $res = mysqli_insert_id();
        return $res;
    }
    public function databaseInsert($table, $values){//insert query
        $mysqli = "INSERT INTO";
        $mysqli .= $table;
        $mysqli .= "SET";
        foreach($values as $key =>$value){
            if ($key != "sumbit"){
                if(!$keys){
                    $keys = 1;
                    $mysqli .= $key . " = '" . $value . "'";
                }
                else{
                    $mysqli .= ", " . $key . " = '" . $value . "'";
                }
            }
        }
        $res = $this->databaseExecute($mysqli);
        return $res;
    }
    public function databaseArray($res){
        $row = $res->fetch_array;
        return $row;
    }
    public function databaseSelect($fields, $table, $array='', $where='', $order='', $limit=''){
        $mysqli = "SELECT ";
        $mysqli .= $fields;
        $mysqli .= " FROM ";
        $mysqli .= $table;
        // where clause
        if($where){
            $mysqli .= "where";
            $mysqli .= $where;
        }
        //order clause
        if($order){
            $mysqli .= "order by";
            $mysqli .= $order;
        }
        //limit clause
        if($limit){
            $mysqli .= " LIMIT ";
            $mysqli .= $limit;
        }
        $res = $this->databaseExecute($mysqli);
        if($array){
            $res = $this->_databaseArray($res);
        }
        return $res;
    }
    public function databasenumrows($result){
        if(mysqli_num_rows($result) >= 1){
            return mysqli_num_rows($result);
        }
    }
    public function databaseUpdate($table, $values, $where = ''){
        $mysqli = "UPDATE ";
        $mysqli .= $table;
        $mysqli .= " SET ";
        foreach ($values as $key => $value){
            if($key != "submit"){
                if(!$keys){
                    $keys = 1;
                    $mysqli .= $key . " = '" . $value . "'";
                }
                else{
                    $mysqli .= ", " . $key . " = '" . $value . "'";
                }
            }
            if ($where){
            $mysqli .= " WHERE ";
            $mysqli .= $where;
            }
            $res = $this->databaseExecute($mysqli);
            return $res;
        }
    }
}
?>
contact.php
PHP:
<?php
include_once("includes/databaseclass.php");
$db = new Database();
$res =  $db->databaseInsert("verzonden_berichten", $_POST);
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
	<fieldset>
		<legend>Neem contact op met een bestuurslid</legend>
		<label for="naam">Uw naam*</label><input type="text" name="naam" id="naam" required placeholder="uw naam">
		<label for="voornaam">Uw voornaam*</label><input type="text" name="voornaam" id="voornaam" required placeholder="uw voornaam">
		<label for="email">Uw emailadres*</label><input type="email" name="email" id="email" required placeholder="uw emailadres">
		<label for="geadresseeerde">bestuurslid*</label>
		<select name="geadresseerde" id="geadresseeerde" required>
			<option value="nochoice" disabled selected>kies een bestuurslid</option>
			<option value="Gilbert">Gilbert D'Hooge</option>
			<option value="Steve">Steve Albrecht</option>
			<option value="Martin">Martin Lasseel</option>
			<option value="Jorgen">J&oslash;rgen Praet</option>
			<option value="Gaby">Gaby Van Herck</option>
		        <option value="Arsene">ars&egrave;ne De Groote</option>
			<option value="Mieke">Mieke courtmans</option>
			<option value="Bart">Bart Courtmans</option>
			<option value="Jeroen">Jeroen De Lange</option>
			<option value="Wouter">Wouter Geerinckx</option>
			<option value="Jonas">Jonas Geldof</option>
			<option value="Diego">Di&euml;go Lasseel</option>
			<option value="Giovanni">Giovanni Piens</option>
			<option value="Matthias">Matthias Van Den Reeck</option>
			<option value="Webmaster">webmaster</option>
		</select>
		<label for="boodschap">uw boodschap*</label><textarea name="boodschap" id="boodschap" required placeholder="vul hier uw boodschap in"></textarea>
		<label></label><input type="submit" name="submit" value="Bericht Versturen">
		<label></label><input type="reset" name="reset" value="beginwaarden">
		Velden met een * zijn verplicht
	</fieldset>
</form>
 
Laatst bewerkt:
Gevoelsmatig (ben géén echte programmeur) zou ik het idee krijgen dat het probleem zit in het ongebreidelde gebruik van de variabele $res zónder 'm lokaal te declareren in je functies.
Ik kan er ook helemaal naast zitten. :P

Zie bijv. het volgende:
public function databaseExecute($mysqli){//uitvoeren van query's
$res = $connection->query($mysqli) or die(mysqli_connect_error());
return $res;
}

En verderop:
$res = $this->databaseExecute($mysqli);

waar $res wordt gebruikt als variabele/object van een functie die zelf ook (ongedeclareerd, dus geen variabele met lokale scope) $res gebruikt als de return value.

Tijs.
 
Laatst bewerkt:
connection is alleen in scope in de functie database. je moet die defineeren op class niveau als je hem in meerdere functies wil gebruiken
 
Parse error: syntax error, unexpected T_INCLUDE_ONCE, expecting T_FUNCTION in /customers/6/a/5/tlindeken.be/httpd.www/test/includes/databaseclass.php on line 3
deze foutmelding krijg ik nu bij deze code

PHP:
<?php
class Database {//verbinden met de database
    include_once("mysqlgegevens.php");
    $connection =new mysqli($host, $user, $pass, $dbdb);
    public function database(){
        if(mysqli_connect_errno()){
            echo "Could not establish a database connection.";
        }
    }
    public function databaseExecute($mysqli){//uitvoeren van query's
        $res = $connection->query($mysqli) or die(mysqli_connect_error());
        return $res;
    }
    public function databaseListId(){
        $res = mysqli_insert_id();
        return $res;
    }
    public function databaseInsert($table, $values){//insert query
        $mysqli = "INSERT INTO";
        $mysqli .= $table;
        $mysqli .= "SET";
        foreach($values as $key =>$value){
            if ($key != "sumbit"){
                if(!$keys){
                    $keys = 1;
                    $mysqli .= $key . " = '" . $value . "'";
                }
                else{
                    $mysqli .= ", " . $key . " = '" . $value . "'";
                }
            }
        }
        $res = $this->databaseExecute($mysqli);
        return $res;
    }
    public function databaseArray($res){
        $row = $res->fetch_array;
        return $row;
    }
    public function databaseSelect($fields, $table, $array='', $where='', $order='', $limit=''){
        $mysqli = "SELECT ";
        $mysqli .= $fields;
        $mysqli .= " FROM ";
        $mysqli .= $table;
        // where clause
        if($where){
            $mysqli .= "where";
            $mysqli .= $where;
        }
        //order clause
        if($order){
            $mysqli .= "order by";
            $mysqli .= $order;
        }
        //limit clause
        if($limit){
            $mysqli .= " LIMIT ";
            $mysqli .= $limit;
        }
        $res = $this->databaseExecute($mysqli);
        if($array){
            $res = $this->_databaseArray($res);
        }
        return $res;
    }
    public function databasenumrows($result){
        if(mysqli_num_rows($result) >= 1){
            return mysqli_num_rows($result);
        }
    }
    public function databaseUpdate($table, $values, $where = ''){
        $mysqli = "UPDATE ";
        $mysqli .= $table;
        $mysqli .= " SET ";
        foreach ($values as $key => $value){
            if($key != "submit"){
                if(!$keys){
                    $keys = 1;
                    $mysqli .= $key . " = '" . $value . "'";
                }
                else{
                    $mysqli .= ", " . $key . " = '" . $value . "'";
                }
            }
            if ($where){
            $mysqli .= " WHERE ";
            $mysqli .= $where;
            }
            $res = $this->databaseExecute($mysqli);
            return $res;
        }
    }
}
?>
 
aan dnties

ik denk zelf ook dat je er helemaal naast zit.

schoenmaker blijf bij je leest zou ik zeggen want in windows server ben je een krak en heb je me al veel kunnen helpen

toch bedankt voor de aangeboden hulp
 
Je moet alleen $connection definieeren, de rest van de code kan in de originele functie blijven
 
Je moet alleen $connection definieeren, de rest van de code kan in de originele functie blijven

Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in /customers/6/a/5/tlindeken.be/httpd.www/test/includes/databaseclass.php on line 3
nieuwe foutmelding nu

PHP:
<?php
class Database {//verbinden met de database
    $connection =new mysqli($host, $user, $pass, $dbdb);
    public function database(){
        include_once("mysqlgegevens.php");
        if(mysqli_connect_errno()){
            echo "Could not establish a database connection.";
        }
    }
    public function databaseExecute($mysqli){//uitvoeren van query's
        $res = $connection->query($mysqli) or die(mysqli_connect_error());
        return $res;
    }
    public function databaseListId(){
        $res = mysqli_insert_id();
        return $res;
    }
    public function databaseInsert($table, $values){//insert query
        $mysqli = "INSERT INTO";
        $mysqli .= $table;
        $mysqli .= "SET";
        foreach($values as $key =>$value){
            if ($key != "sumbit"){
                if(!$keys){
                    $keys = 1;
                    $mysqli .= $key . " = '" . $value . "'";
                }
                else{
                    $mysqli .= ", " . $key . " = '" . $value . "'";
                }
            }
        }
        $res = $this->databaseExecute($mysqli);
        return $res;
    }
    public function databaseArray($res){
        $row = $res->fetch_array;
        return $row;
    }
    public function databaseSelect($fields, $table, $array='', $where='', $order='', $limit=''){
        $mysqli = "SELECT ";
        $mysqli .= $fields;
        $mysqli .= " FROM ";
        $mysqli .= $table;
        // where clause
        if($where){
            $mysqli .= "where";
            $mysqli .= $where;
        }
        //order clause
        if($order){
            $mysqli .= "order by";
            $mysqli .= $order;
        }
        //limit clause
        if($limit){
            $mysqli .= " LIMIT ";
            $mysqli .= $limit;
        }
        $res = $this->databaseExecute($mysqli);
        if($array){
            $res = $this->_databaseArray($res);
        }
        return $res;
    }
    public function databasenumrows($result){
        if(mysqli_num_rows($result) >= 1){
            return mysqli_num_rows($result);
        }
    }
    public function databaseUpdate($table, $values, $where = ''){
        $mysqli = "UPDATE ";
        $mysqli .= $table;
        $mysqli .= " SET ";
        foreach ($values as $key => $value){
            if($key != "submit"){
                if(!$keys){
                    $keys = 1;
                    $mysqli .= $key . " = '" . $value . "'";
                }
                else{
                    $mysqli .= ", " . $key . " = '" . $value . "'";
                }
            }
            if ($where){
            $mysqli .= " WHERE ";
            $mysqli .= $where;
            }
            $res = $this->databaseExecute($mysqli);
            return $res;
        }
    }
}
?>
 
PHP:
<?php
class Database {//verbinden met de database
    private $connection
    public function database(){
        include_once("mysqlgegevens.php");
        $connection =new mysqli($host, $user, $pass, $dbdb);
        if(mysqli_connect_errno()){
            echo "Could not establish a database connection.";
        }
    }
    public function databaseExecute($mysqli){//uitvoeren van query's
        $res = $connection->query($mysqli) or die(mysqli_connect_error());
        return $res;
    }
    public function databaseListId(){
        $res = mysqli_insert_id();
        return $res;
    }

volgens mij is dat alles wat je moet veranderen aan het origineel
 
Laatst bewerkt:
ik heb dit gedaan als ik het doe zoals jij zonder ; bekom ik deze foutmelding Parse error: syntax error, unexpected T_PUBLIC, expecting ',' or ';' in /customers/6/a/5/tlindeken.be/httpd.www/test/includes/databaseclass.php on line 4

als ik het doe met foutmelding krijg ik opnieuw deze foutmelding:Fatal error: Call to a member function query() on a non-object in /customers/6/a/5/tlindeken.be/httpd.www/test/includes/databaseclass.php on line 12
 
ik krijg wel nog steeds deze foutmelding:
Call to a member function query() on a non-object in /customers/6/a/5/tlindeken.be/httpd.www/test/includes/databaseclass.php on line 12
 
Ik vermoed dat dat zal zijn omdat je (tot dat moment dan toch in ieder geval) (nog) niet de functie database () hebt aangeroepen, en (dus) $connection nog niet geïnitialiseerd/gevuld is.
Ik zie namelijk nergens die functie aangeroepen worden.

[Nu weer in non-programmeurmodus, dus kan er dik naast zitten :P]
Je zou 'm evt. in de constructor kunnen stoppen (?) ipv. in database()
PHP:
    function __construct(){
        include_once("mysqlgegevens.php");
        $connection =new mysqli($host, $user, $pass, $dbdb);
        if(mysqli_connect_errno()){
            echo "Could not establish a database connection.";
        }
    }

[Ik geen niet op, misschien wordt ik nog eens een echte programmeur. :D]

Tijs.
 
uhm maar waar roep je de functie database aan? Ik heb nog eens door je code gelopen, maar je voorbeeld roept:
Code:
$res =  $db->databaseInsert(
    $res = $this->databaseExecute($mysqli);
          public function databaseExecute($mysqli)
maar in die chain wordt nergens de database geopend.
 
Niet via de constructor die ik aangaf in posting #12 ??

Tijs.
 
ik weet het niet ik probeer ervaring op te doen en alleen door fouten te maken leer je iets bij en doe je ervaring op
 
Dan hoop ik dat wampier uitsluitsel/hulp kan geven (of iemand anders natuurlijk).

Tijs.
 
Laatst bewerkt:
In veel talen wordt de constructor vernoemd naar de class, maar in PHP heet de constructor van een class altijd "__constuct".

Dus als je de method "database()" hernoemt naar __construct dan wordt hij automatisch uitgevoerd wanneer je de class instantieert in een object en dan zou $connection gevuld moeten worden.
 
En daarnaast: probeer eens overal $this->connection te gebruiken (behalve bij de defnitie). Kijk ook eens hier.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan