Ik ben bezig geweest met OOP (voor de config), voor het uit te proberen. Maar het werkt niet, het geeft geen errors...
<?php
$__error_reporting_level=1;
$_CONFIG = parse_ini_file($_SERVER["DOCUMENT_ROOT"] . '/../datafile.ini', true);
$hostnaam = $_CONFIG['hostnaam'];
$gebruikersnaam = $_CONFIG['gebruikersnaam'];
$wachtwoord = $_CONFIG['wachtwoord'];
$database = $_CONFIG['database'];
define('HOSTNAAM', $hostnaam);
define('GEBRUIKERSNAAM', $gebruikersnaam);
define('WACHTWOORD', $wachtwoord);
define('DATABASE', $database);
error_reporting($__error_reporting_level);
class sql
{
protected $hostnaam = HOSTNAAM;
protected $gebruikersnaam = GEBRUIKERSNAAM;
protected $wachtwoord = WACHTWOORD;
protected $database = DATABASE;
private function connect()
{
$connections = mysql_connect($this->hostnaam, $this->gebruikersnaam, $this->wachtwoord) or die ('Unabale to connect to the database');
mysql_select_db($this->database) or die ('Unable to select database!');
return;
}
}
?>
index.php (STUKJE)
// IMPORTEER DE BENODIGE CODE \\
include $_SERVER["DOCUMENT_ROOT"] . '/paneel/assets/include/init.php';
include $_SERVER["DOCUMENT_ROOT"] . '/paneel/assets/include/functions.php';
$obj = new sql;
Oude mysql functies heb ik net al aangepast :P had even niet opgelet. Hij verwacht een error te geven als de gegevens verkeerd zijn in datafile.ini maar dit gebeurt niet.
[size=xsmall]Toevoeging op 05/01/2017 12:09:41:[/size]
Ook zou ik je class in een apart bestand opslaan, om de code schoon te houden.
[sub]NB: Los van dit is MySQLi zelf al een class op zich die je niet nogmaals in een andere class hoeft te wrappen. Maar ik neem aan dat het puur om oefening gaat. Als je echt serieus met de MySQLi-class aan de slag wilt gaan is het extenden al een handige bezigheid.[/sub]
Het is beter om constanten te gebruiken voor de errorlevels dan hun numerieke waarde. Deze numerieke waarden kunnen mogelijk in de toekomst veranderen, de constanten blijven... constant. Gebruik bijvoorbeeld E_ALL (ik zou niet eens weten wat "1" zou moeten rapporteren).
Met error_reporting() geef je aan wat je rapporteert, maar je moet ook aangeven waar er gerapporteerd moet worden. Dit doe je met display_errors() ini_set('display_errors', <locatie>);. Voor <locatie> kun je bijvoorbeeld 'stdout' gebruiken.
<?php
$_CONFIG = parse_ini_file($_SERVER["DOCUMENT_ROOT"] . '/../datafile.ini', true);
define('HOSTNAAM', $_CONFIG['hostnaam']);
define('GEBRUIKERSNAAM', $_CONFIG['gebruikersnaam']);
define('WACHTWOORD', $_CONFIG['wachtwoord']);
define('DATABASE', $_CONFIG['database']);
class DB {
protected $hostnaam = HOSTNAAM;
protected $gebruikersnaam = GEBRUIKERSNAAM;
protected $wachtwoord = WACHTWOORD;
protected $database = DATABASE;
public function connect() {
$connect_db = @new mysqli($this->hostnaam, $this->gebruikersnaam, $this->wachtwoord, $this->database);
if (mysqli_connect_errno()) {
printf("Er is een fout opgetreden. Foutcode ". mysqli_connect_error().'.');
exit();
}
return true;
}
}
?>
[size=xsmall]Toevoeging op 05/01/2017 13:03:35:[/size]
NB: Los van dit is MySQLi zelf al een class op zich die je niet nogmaals in een andere class hoeft te wrappen. Maar ik neem aan dat het puur om oefening gaat. Als je echt serieus met de MySQLi-class aan de slag wilt gaan is het extenden al een handige bezigheid.
Ehmm kunt u dit nog een keer maar dan anders voor mij uitleggen? Of een linkje sturen met uitleg
[quote]
Quote:
NB: Los van dit is MySQLi zelf al een class op zich die je niet nogmaals in een andere class hoeft te wrappen. Maar ik neem aan dat het puur om oefening gaat. Als je echt serieus met de MySQLi-class aan de slag wilt gaan is het extenden al een handige bezigheid.
Ehmm kunt u dit nog een keer maar dan anders voor mij uitleggen? Of een linkje sturen met uitleg
[/quote
Ja, maar dan moet je nog een contructor in je class aanmaken. Uiteraard kan je die connect daar direct uitvoeren, i.p.v. een method die je steeds maar weer aanroept. Want een connectie hoort direct te gebeuren als je de database-class aanroept.
Als we het over het extenden van MySQLi hebben, dan gebruik ik het volgende.
Op deze manier heb ik binnen de overervende Database-class meteen foutafhandeling in mijn $db->query(".....");
<?php
class Database extends mysqli
{
function query($query)
{
$result = parent::query($query);
if($this->error) {
throw new Exception(mysqli_error($this), mysqli_errno($this));
}
return $result;
}
}
?>
Ikzelf gebruik geen eigen aparte class voor mijn database, maar een extend op de bestaande MySQLi. Anders sta je feitelijk het wiel opnieuw weer uit te vinden. Met deze manier kan je zelf nieuwe functies toevoegen of huidige overerven...