Haai,

Ik krijg bij het volgende de script de volgende error


Fatal error: Declaration of MySQL::query() must be compatible with that of Database::query() in C:\wamp\www\gastenboek\gastenboek.class.php on line 168

Maar ik snap niet wat er nu fout is, Dit is de code

<?php

### Gastenboek class ###

class Gastenboek
{

private $_Adapter;

public function __construct (GastenboekAdapter $Adapter)
{

$this->_Adapter = $Adapter;

}

public function weergeven ()
{

$Reacties = $this->_Adapater->alle_reacties ();

$Resultaat = '<div id="gastenboek">';

foreach ($Reacties as $Reactie)
{

$Gebruiker = new Gebruiker ($Reactie['gebruiker_naam'], NULL, $Reactie['gebruiker_website']);
$Reactie = new Reactie ($this->_Adapter, $Reactie['reactie'], $Gebruiker, $Reactie['datum'], $Reactie['tijd']);

$Resultaat = $Reactie->weergeven ();

}

return $Resultaat . '</div>';

}

}

class Gebruiker
{

private $_Naam;
private $_Email;
private $_Website;

public function __construct($Naam, $Email, $Website)
{

$this->_Naam = $Naam;
$this->_Email = $Email;
$this->_Website = $Website;

}

public function reactie_plaatsen (GastenboekAdapter $Adapter, $Reactie)
{

$Reactie = new Reactie ($Adapater, $Reactie, $this, date ('Y-m-d'), date ('H:i'));
$Reactie->opslaan ();

}

public function weergeven ()
{

if ($this->_Website != NULL)
{

return '<a href="' .$this->_Website. '">' .$this->_Naam. '</a>';

}
else
{

return $this->_Naam;

}

}

public function geef_gegevens ()
{

return array
(
'naam' => $this->_Naam,
'email' => $this->_Email,
'website' => $this->_Website
);

}

}

class Reactie
{

private $_Adapter;
private $_Gebruiker;
private $_Reactie;
private $_Datum;
private $_Tijd;

public function __construct (GastenboekAdapter $Adapater, $Reactie, $Gebruiker, $Datum, $Tijd)
{

$this->_Adapter = $Adapter;
$this->_Reactie = $Reactie;
$this->_Gebruiker = $Gebruiker;
$this->_Datum = $Datum;
$this->_Tijd = $Tijd;

}

public function weergeven ()
{

return
'
<div class="reactie">

<span class="geplaats">Geplaatst door ' .$this->_Gebruiker->weergeven. ' op <strong>' .$this->_Datum. '</strong> om <strong>' .$this->_Tijd. '</strong></span>

<p>' .$this->_Reactie. '</p>
';

}

public function opslaan ()
{

$Gebruiker = $this->_Gebruiker->geef_gevens ();

$this->_Adapter->reactie_toevoegen
(
$this->_Reactie,
$Gebruiker['naam'],
$Gebruiker['email'],
$Gebruiker['website'],
$this->_Datum,
$this->_Tijd
);

}

}

interface Database
{

public function maak_verbinding ($Host, $Gebruikersnaam, $Wachtwoord, $Naam);
public function query ();

}

interface DatabaseResult
{

public function fetch_assoc ();
public function fetch_alles ();
public function aantal_regels ();

}

class MySQL implements Database
{

private $_Connectie;

public function maak_verbinding ($Host, $Gebruikersnaam, $Wachtwoord, $Naam)
{

if (!$this->_Connectie = mysqli_connect($Host, $Gebruikersnaam, $Wachtwoord, $Naam))
{

throw new DatabaseExeception ('Kan geen verbinding met de database leggen');

}

}

public function query ($Query)
{

$Resultaat = mysqli_query ($this->_Connectie, $Query);

if ($Resultaat)
{

throw new DatabaseExeception ('Er is een fout opgetreden met het uitvoeren van de query');

}

return new MySQLResult ($Resultaat);

}

}

class MySQLResult implements DatabaseResult
{

private $_Resultaat;

public function __construct ($Resultaat)
{

$this->_Resultaat = $Resultaat;

}

public function fetch_assoc ()
{

return mysqli_fetch_assoc ($this->_Resultaat);

}

public function fetch_alles ()
{

$Resultaat = array ();

while ($Regel = $this->fetch_assoc ())
{

$Resultaat[] = $Regel;

}

$Resultaat;

}

public function aantal_regels ()
{

return mysqli_num_rows ($this->_Resultaat);

}

}

class DatabaseException extends Exception
{

}

interface GastenboekAdapter
{

public function reactie_toevoegen ($Reactie, $Gebruiker_naam, $Gebruiker_email, $Gebruiker_website, $Datum, $Tijd);
public function alle_reacties ();

}

abstract class DatabaseGastenboekAdapter implements DatabaseAdapter
{

protected $_Database;

public function __construct (Database $Database)
{

$this->_Database = $Database;

}

public function reactie_toevoegen ($Reactie, $Gebruiker_naam, $Gebruiker_email, $Gebruiker_website, $Datum, $Tijd)
{

$Query =
"
INSERT INTO
reactie
(
reactie,
gebruiker_naam,
gebruiker_email,
gebruiker_website,
datum,
tijd
)
VALUES
(
'" .mysqli_real_escape_string ($this->_Connectie, $Reactie). "',
'" .mysqli_real_escape_string ($this->_Connectie, $Gebruiker_naam). "',
'" .mysqli_real_escape_string ($this->_Connectie, $Gebruiker_email). "',
'" .mysqli_real_escape_string ($this->_Connectie, $Gebruiker_website). "',
'" .mysqli_real_escape_string ($this->_Connectie, $Datum). "',
'" .mysqli_real_escape_string ($this->_Connectie, $Tijd). "'
)
";

$this->_Database->query ($Query);

}

public function alle_reacties ()
{

$Query =
"
SELECT
reactie,
gebruiker_naam,
gebruiker_website,
datum,
tijd
FROM
reactie
ORDER BY
datum
DESC
tijd
DESC
";

return $this->_Database->query ($Query)->fetch_alles ();

}

}

class MySQLGastenboekAdapter extends DatabaseGastenboekAdapter
{

public function __construct (MySQL $MySQL)
{

parent::__construct ($MySQL);

}

}

$Database = new MySQL ();
$Database->maak_verbinding ('localhost', 'root', '', 'gastenboek');
$Adapter = new MySQLGastenboekAdapter ($Database);

$Gastenboek = new Gastenboek ($Adapter);

echo $Gastenboek->weergeven ();

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{

$Gebruiker = new Gebruiker ($_POST['gebruiker_naam'], $_POST['gebruiker_email'], $_POST['gebruiker_website']);
$Gebruiker->reactie_plaatsen ($Adapter, $_POST['reactie']);

}


?>
<html>
<head>
<body>

<form method="POST" action="<?php basename($_SERVER['PHP_SELF']); ?>">

<table>

<tr>
<td>Naam </td><td><input type="text" name="gebruiker_naam" value="" size="30" /></td>
</tr>

<tr>
<td>Email </td><td><input type="text" name="gebruiker_email" value="" size="30" /></td>
</tr>

<tr>
<td>Website </td><td><input type="text" name="gebruiker_website" value="" size="30" /></td>
</tr>

<tr>
<td>Reactie </td><td><textarea name="reactie"></textarea></td>
</tr>

</table>

</form>

</body>
</head>
</html>
dan heeft het weinig zin om alles te gaan posten.
Heb je al error handeling aangezet? Errors naar boven gekomen?
Post alleen relevante code aub:) (aan html code hebben we neit zoveel)
Het lezen van de error zou al voldoende moeten zijn, zeker in dit geval is het zeer duidelijk:

Fatal error: Declaration of MySQL::query() must be compatible with that of Database::query().
Fatale fout: declaratie van MySQL::query() moet compitabel zijn met die van Database::query().

Wat zien we? De klasse MySQL implementeert de interface Database. Bij de klasse MySQL zien we een method query($Query), maar in de interface Database enkel query(). Je moet de parameter $Query dus ook even in de interface Database zetten.
@Jonathan..

Heeeel erg bedankt. Dat was hem idd:)

Reageren