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

Status
Niet open voor verdere reacties.
Het is inderdaad een scope probleem, de makkelijkste opossing is om je $connection een eigenschap van de class te maken. Zo dus:
PHP:
class Database {//verbinden met de database
    public function __construct(){
        include_once("mysqlgegevens.php");
        $this->connection =new mysqli($host, $user, $pass, $dbdb);
        if(mysqli_connect_errno()){
            echo "Could not establish a database connection.";
        }
    }
    public function databaseExecute($query){//uitvoeren van query's
        $res = $this->connection->query($query) or die(mysqli_connect_error());
        return $res;
    }
En zo voorts. Het is trouwens ook niet handig om je query variabele de naam mysqli te geven, dat is namelijk ook al de naam van de verbindingsklasse.

In veel talen wordt de constructor vernoemd naar de class, maar in PHP heet de constructor van een class altijd "__constuct".
Tegenwoordig wel ja, in oudere versies van PHP had de constructor ook dezelfde naam als de class, die methode werkt nog steeds. Al zijn de twee in dit geval natuurlijk niet exact hetzelfde, of dat werkt weet ik niet zeker. Dus inderdaad handiger om __construct te gebruiken.
 
Laatst bewerkt:
Warning: Missing argument 1 for Database::__construct(), called in /customers/6/a/5/tlindeken.be/httpd.www/test/contact.php on line 37 and defined in /customers/6/a/5/tlindeken.be/httpd.www/test/includes/databaseclass.php on line 3 Fatal error: Cannot access empty property in /customers/6/a/5/tlindeken.be/httpd.www/test/includes/databaseclass.php on line 5

nu krijg ik deze foutmelding

PHP:
<?php
class Database {//verbinden met de database
    public function __construct($connection){
        include_once("mysqlgegevens.php");
        $this->$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 = $this->$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;
        }
    }
}
?>
 
Ja.... wat doet die $connection dan ook in de __construct? Je maakt de verbinding in de constructor zelf aan, hij wordt er niet aan meegegeven.
Dit is trouwens ook fout:
$this->$connection moet $this->connection zijn. De verbinding is geen losse variabele meer, hij is en eigenschap van het object.
 
de foutmeldingen zijn weg maar het formulier komt er niet op vb.ga naar het voorbeeld
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" class="ckeditor"></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>
databaseclass.php
PHP:
<?php
class Database {//verbinden met de database
    public function __construct(){
        include_once("mysqlgegevens.php");
        $this->connection = new mysqli($host, $user, $pass, $dbdb);
        if(mysqli_connect_errno()){
            echo "Could not establish a database connection.";
        }
    }
    public function databaseExecute($query){//uitvoeren van query's
        $res = $this->connection->query($query) or die(mysqli_connect_error());
        return $res;
    }
    public function databaseListId(){
        $res = mysqli_insert_id();
        return $res;
    }
    public function databaseInsert($table, $values){//insert query
        $query = "INSERT INTO";
        $query .= $table;
        $query .= "SET";
        foreach($values as $key =>$value){
            if ($key != "sumbit"){
                if(!$keys){
                    $keys = 1;
                    $query .= $key . " = '" . $value . "'";
                }
                else{
                    $query .= ", " . $key . " = '" . $value . "'";
                }
            }
        }
        $res = $this->databaseExecute($query);
        return $res;
    }
    public function databaseArray($res){
        $row = $res->fetch_array;
        return $row;
    }
    public function databaseSelect($fields, $table, $array='', $where='', $order='', $limit=''){
        $query = "SELECT ";
        $query .= $fields;
        $query .= " FROM ";
        $query .= $table;
        // where clause
        if($where){
            $query .= "where";
            $query .= $where;
        }
        //order clause
        if($order){
            $query .= "order by";
            $query .= $order;
        }
        //limit clause
        if($limit){
            $query .= " LIMIT ";
            $query .= $limit;
        }
        $res = $this->databaseExecute($query);
        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 = ''){
        $query = "UPDATE ";
        $query .= $table;
        $query .= " SET ";
        foreach ($values as $key => $value){
            if($key != "submit"){
                if(!$keys){
                    $keys = 1;
                    $query .= $key . " = '" . $value . "'";
                }
                else{
                    $query .= ", " . $key . " = '" . $value . "'";
                }
            }
            if ($where){
            $query .= " WHERE ";
            $query .= $where;
            }
            $res = $this->databaseExecute($query);
            return $res;
        }
    }
}
?>
 
Laatst bewerkt:
Zoek je de foutmeldingen die je krijgt uberhaupt wel op, of copy/paste je ze hier zodra je ze krijgt?

Je post nu twee scripts en vraagt waarom een ander script niet doet wat jij wilt. Ga eens wat debuggen dan, worden de scripts die je post uberhaupt wel aangesproken?
 
Je test het en als het een foutmelding oplevert plak je de foutmelding hier? Want een melding als "missing required parameter" is toch wel heel erg duidelijk over wat er mis is.
 
ja dat er een parameter ontbreekt kan ik lezen maar daarom weet ik nog ni de welke en zij maar gerust da ik zelf kijk als ik et nie kan vinden
 
dat er een parameter ontbreekt kan ik lezen maar daarom weet ik nog ni de welke

Dat is mijn punt: de foutmelding vertelt je precies waar op welke regel de benodigde parameter wordt verwacht en waar je de parameter bent vergeten mee te geven. Toch kom je met een vraag. Dus nee, ik heb niet echt de indruk dat je erg je best doet om uit te vinden wat er mis is vordat je post.

Het is niet dat wij hier voor de kat z'n viool jouw werk zitten te doen, maar dat jij heel veel tijd kwijt bent aan posten en wachten op antwoord, voor kwesties die je zelf in een paar minuten kunt oplossen als je de foutmelding leest.
 
en laat da nu juist het probleem zijn dat er geen foutmelding meer is maar de code na het databasestukje wordt wel niet meer getoond
 
ik heb eens geprobeerd om de include in databaseclass.php buiten de functie te plaatsen en ook eens buiten de class maar dit helpt niet dan heb ik de include op contact.php gecontroleerd en aan deze ligt het ook niet

contact.php(volledig)
PHP:
<?php
$thispage="Contact";// deze variabele wordt gebruikt om in de navigatie weer te geven welke pagina actief is.
include_once("includes/head.php");
?>
<?php
$thispage="Contact";// deze variabele wordt gebruikt om in de navigatie weer te geven welke pagina actief is.
include_once("includes/head.php");
?>
		<style type="text/css">
			fieldset{
			width:550px;
			}
			legend{
			margin-bottom:5px;
			padding-left:5px;
			padding-right:5px;
			font-size:12px;
			}
			label{
			display:block;
			width:150px;
			margin-top:5px;
			float:left;
			}
			input,select,textarea{
			width:390px;
			margin-top:5px;
			float:left;
			}
			textarea{
			height:300px;
			}
		</style>
<?php
include_once("includes/navigatie.php");
include_once("includes/header.php");
include_once("includes/databaseclass.php");
?>
			<article id="tekst">
				hallo
<?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" class="ckeditor"></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>
<?php echo"\n";
?>
				<h2>Deelwijk verantwoordelijken</h2>
				<p>Heeft u vragen bij de verdeling van de infobriefjes in uw buurt,<br />
				dan kan u terecht bij onderstaande personen.<br />
				U kan contact opnemenen met deze personen via het bovenstaande contact formulier.</p>
				<h3>De Groote Ars&egrave;ne:</h3>
				<p>Bremstraat, Elslo, Elslopark</p>
				<h3>Lasseel Martin:</h3>
				<p>Beemdstraat, Bolwerkstraat, Boomgaardstraat, Droogte(tot nrs 63 & 58)<br />
				Elslo (tot nrs 28 & 45), Hoevestraat, Hovenierstraat,Kapellestraat(van nr 80 & 73)<br />
				Kleine Koestraat, Weidestraat, Schuurstraat</p>
				<h3>Van Herck Gaby:</h3>
				<p>Hagewindestraat, Klaproosstraat, Koestraat, Kouterstraat,<br />
				Leo Bruggemanstraat, Veeweg, Zandberg, Everparkstraat,<br />
				Fazantenstraat, Hazegrasstraat, Patrijzenstraat, Vogelwikkestraat</p>
				<h3>Albrecht Steve:</h3>
				<p>Draaitopstraat, Eendeplasstraat, Klaverbeekstraat</p>	 
				<h3>Bart & Mieke Courtmans:</h3>
				<p>Aalbesstraat, Bosbesstraat, Hazelaarstraat, Kriekerijstraat<br />
				Kweepeerstraat, Maagdekensstraat, Mispelaarstraat<br />
				Moerbeistraat, Okkernootstraat, Vlierboomstraat</p>
				<h3>D’hooge Gilbert:</h3>
				<p>Droogte van nrs 65 & 60 tot Maagdekensstraat<br />
				Diksmere tot nrs 33 & 26</p>
			</article>
<?php
include_once("includes/nieuws.php");
include_once("includes/footer.php");
?>
 
Laatst bewerkt:
PHP:
<?php
$thispage="Contact";// deze variabele wordt gebruikt om in de navigatie weer te geven welke pagina actief is.
include_once("includes/head.php");
?>
		<style type="text/css">
			fieldset{
			width:550px;
			}
			legend{
			margin-bottom:5px;
			padding-left:5px;
			padding-right:5px;
			font-size:12px;
			}
			label{
			display:block;
			width:150px;
			margin-top:5px;
			float:left;
			}
			input,select,textarea{
			width:390px;
			margin-top:5px;
			float:left;
			}
			textarea{
			height:300px;
			}
		</style>
<?php
include_once("includes/navigatie.php");
include_once("includes/header.php");
?>
			<article id="tekst">
				<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" class="ckeditor"></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>
<?php
class Database {//verbinden met de database
    public function __construct(){
       $user = "";
       $pass = "";
       $host = "";
       $dbdb = "";
        $this->connection = new mysqli($host, $user, $pass, $dbdb);
        if(mysqli_connect_errno()){
            echo "Could not establish a database connection.";
        }
    }
    public function databaseExecute($query){//uitvoeren van query's
        $res = $this->connection->query($query) or die(mysqli_connect_error());
        return $res;
    }
    public function databaseListId(){
        $res = mysqli_insert_id();
        return $res;
    }
    public function databaseInsert($table, $values){//insert query
        $query = "INSERT INTO";
        $query .= $table;
        $query .= "SET";
        foreach($values as $key =>$value){
            if ($key != "sumbit"){
                if(!$keys){
                    $keys = 1;
                    $query .= $key . " = '" . $value . "'";
                }
                else{
                    $query .= ", " . $key . " = '" . $value . "'";
                }
            }
        }
        $res = $this->databaseExecute($query);
        return $res;
    }
    public function databaseArray($res){
        $row = $res->fetch_array;
        return $row;
    }
    public function databaseSelect($fields, $table, $array='', $where='', $order='', $limit=''){
        $query = "SELECT ";
        $query .= $fields;
        $query .= " FROM ";
        $query .= $table;
        // where clause
        if($where){
            $query .= "where";
            $query .= $where;
        }
        //order clause
        if($order){
            $query .= "order by";
            $query .= $order;
        }
        //limit clause
        if($limit){
            $query .= " LIMIT ";
            $query .= $limit;
        }
        $res = $this->databaseExecute($query);
        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 = ''){
        $query = "UPDATE ";
        $query .= $table;
        $query .= " SET ";
        foreach ($values as $key => $value){
            if($key != "submit"){
                if(!$keys){
                    $keys = 1;
                    $query .= $key . " = '" . $value . "'";
                }
                else{
                    $query .= ", " . $key . " = '" . $value . "'";
                }
            }
            if ($where){
            $query .= " WHERE ";
            $query .= $where;
            }
            $res = $this->databaseExecute($query);
            return $res;
        }
    }
}

$db = new Database();
$res =  $db->databaseInsert("verzonden_berichten", $_POST);
?>
			<h2>Deelwijk verantwoordelijken</h2>
				<p>Heeft u vragen bij de verdeling van de infobriefjes in uw buurt,<br />
				dan kan u terecht bij onderstaande personen.<br />
				U kan contact opnemenen met deze personen via het bovenstaande contact formulier.</p>
				<h3>De Groote Ars&egrave;ne:</h3>
				<p>Bremstraat, Elslo, Elslopark</p>
				<h3>Lasseel Martin:</h3>
				<p>Beemdstraat, Bolwerkstraat, Boomgaardstraat, Droogte(tot nrs 63 & 58)<br />
				Elslo (tot nrs 28 & 45), Hoevestraat, Hovenierstraat,Kapellestraat(van nr 80 & 73)<br />
				Kleine Koestraat, Weidestraat, Schuurstraat</p>
				<h3>Van Herck Gaby:</h3>
				<p>Hagewindestraat, Klaproosstraat, Koestraat, Kouterstraat,<br />
				Leo Bruggemanstraat, Veeweg, Zandberg, Everparkstraat,<br />
				Fazantenstraat, Hazegrasstraat, Patrijzenstraat, Vogelwikkestraat</p>
				<h3>Albrecht Steve:</h3>
				<p>Draaitopstraat, Eendeplasstraat, Klaverbeekstraat</p>	 
				<h3>Bart & Mieke Courtmans:</h3>
				<p>Aalbesstraat, Bosbesstraat, Hazelaarstraat, Kriekerijstraat<br />
				Kweepeerstraat, Maagdekensstraat, Mispelaarstraat<br />
				Moerbeistraat, Okkernootstraat, Vlierboomstraat</p>
				<h3>D’hooge Gilbert:</h3>
				<p>Droogte van nrs 65 & 60 tot Maagdekensstraat<br />
				Diksmere tot nrs 33 & 26</p>
			</article>
<?php
include_once("includes/nieuws.php");
include_once("includes/footer.php");
?>

ik heb eens zonder includes gewerkt voor de verwerking en ik heb alle resterende code na het formulier voor de verwerking geplaatst ipv er na nu krijg ik de volledige site weer te zien maar als ik op bericht versturen klik worden de gegevens uit het formulier gewist en voor de rest gebeurt er niks de gegevens komen dus niet terecht in de database.

de mogelijkheid die ik nu nog voor ogen zie is de code op lijn 35
PHP:
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
dit is het enige wat ik kan vinden.
Iemand enig idee als het dit is en zoja door wat ik het kan vervangen ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan