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>
1.464 views