Ik heb met volle overtuiging 3 klasses gecreeerd, waarvan de eerste 2 het alleen maar fatsoenlijk doen...
<?php
class SystemComponent
{
public $settings;
function getSettings()
{
// System variables
$settings['siteDir'] = $_SERVER['SCRIPT_FILENAME'];
// Database variables
$settings['dbhost'] = 'localhost';
$settings['dbusername'] = 'root';
$settings['dbpassword'] = 'pass';
return $settings;
}
}
class DbConnector
{
public $link;
//*** Function: DbConnector, Purpose: Connect to the database ***
function DbConnector($db)
{
// Load settings from parent class
$settings = SystemComponent::getSettings();
// Get the main settings from the array we just loaded
$host = $settings['dbhost'];
$user = $settings['dbusername'];
$pass = $settings['dbpassword'];
// Connect to the database
if ( ! $this->link = mysql_connect($host, $user, $pass))
{
trigger_error('Een error m.b.t. de MySQL Connectie: ' .mysql_error(),E_USER_ERROR);
}
mysql_select_db($db);
register_shutdown_function(array(&$this, 'close'));
}
//*** Function: query, Purpose: Execute a database query ***
function query($query)
{
if ( ! $query = mysql_query($query, $this->link) )
{
trigger_error('Een error m.b.t. de MySQL Query: ' .mysql_error(), E_USER_ERROR);
}
return $query;
}
//*** Function: fetchArray, Purpose: Get array of query results ***
function fetchArray($result)
{
if ( $fetched = mysql_fetch_assoc($result) )
{
trigger_error('Een error m.b.t. het <i>fetchen</i> van het MySQL resultaat: ' .mysql_error(), E_USER_ERROR);
}
return $fetched;
}
//*** Function: close, Purpose: Close the connection ***
function close()
{
mysql_close($this->link);
}
}
class Menu
{
public function buildMenu($parentId, $menuData)
{
$connector = new DbConnector('mark moes');
// Use the query function of DbConnector to run a database query
$result = $connector->query("SELECT id, parentId, name FROM menu ORDER BY parentId, name");
// prepare special array with parent-child relations
$menuData = array(
'items' => array(),
'parents' => array()
);
while ($menuItem = $connector->fetchArray($result))
{
$menuData['items'][$menuItem['id']] = $menuItem;
$menuData['parents'][$menuItem['parentId']][] = $menuItem['id'];
}
$html = "";
if (isset($menuData['parents'][$parentId]))
{
$html = "<ul>\n";
foreach ($menuData['parents'][$parentId] as $itemId)
{
$html .= "<li>" . $menuData['items'][$itemId]['name'];
// find childitems recursively
$html .= $this->buildMenu($itemId, $menuData);
$html .= "</li>\n";
}
$html .= "</ul>\n";
}
return $html;
}
}
?>
Wat ik nu wil doen is de class Menu met de functie buildMenu('0', 'blaat') uitvoeren. dit resulteert in de volgende foutmelding:
Fatal error: Een error m.b.t. het fetchen van het MySQL resultaat: in C:\xampp\htdocs\website\Class\Class.php on line 60
Hieruit maak ik op dat het fetchen dus niet is gelukt... Maar ik begrijp nog niet volledig waarom niet.
M.I. is er ergens iets fout gegaan met het heen en weer gebruiken van de $string's in OOP, maar ik kan nog niet helemaal volgen hoe het wel moet.
Kan iemand mij helpen?
Bij voorbaat bedankt