Du bist nicht angemeldet.

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

1

10.10.2011, 15:44

8. Die Config-Klasse

Um die MYSQl-Daten wie Benutzer, Passwort, ... und die Datenbank-Klasse zu trennen, erstellen wir heute eine neue Klasse, namens "Config".
Die Klasse heißt genauso, wie die Datei "Config.php" und liegt im Verzeichnis "CMS/classes".

Config.php:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php

class Config {

    private $config;
    private $configdatei;//Erst einmal unnötig, wird später noch gebraucht.

    public function Config ($configdatei) {//Pfad zur Ini-datei (wegen Wiederverwertbarkeit)

        if (file_exists($configdatei)) {
            $this->config parse_ini_file($configdateiTRUE);
            $this->configdatei $configdatei;
        } else {
        $config "";
        throw new Exception("Es konnte keine Verbindung zur MYSQL-datenbank hergestellt werden."); // dann Exception werfen

        $this->configdatei "";
        }

    }

    public function getConfig () {

        if (!empty($this->config)) {
            return $this->config;
        } else {
            return false;
        }

    }

}

?>
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

2

10.10.2011, 15:46

Dem Konstruktor wird der Dateipfad der Config.ini übergeben.
Die Methode getConfig() gibt die Konfiguration in einem Array zurück.

Die "DBManager.php" im Verzeichnis "CMS/classes" sieht jetzt so aus:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php

class DBManager {

private $is_init false;
private $db_;

    public function DBManager ($config) {

    if ($config != FALSE) {
        $this->is_init true;
    } else {
        throw new Exception("parameter_has_no_config");
    }

    if ($this->isInit()) {

        require("CMS/databases/" $config['DBManager']['DatabaseDriver'] . ".php");
        $klasse   $config['DBManager']['DatabaseDriver'];
        $this->db_ = new $klasse('.'/*$config['DBManager']['DatabaseDriver']*/);
        return $this->db_;

    } else {
        $this->db_ false;
    }

    }

    public function isInit () {
        return $this->is_init;
    }

    public function getDBDriver () {

    if (isset($this->db_) && !empty($this->db_)) {
        return $this->db_;
    } else {
        throw new Exception("db doesn't exists."); // dann Exception werfen
    }

    }

}

?>
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »JuKu« (10.10.2011, 16:03)


JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

3

10.10.2011, 16:11

Jetzt zur "Database.php" im Verzeichnis "CMS/classes". (Achtung: Sie heißt jetzt nicht mehr "database.php", sondern "Database.php"):

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

abstract class Database {

protected $host "localhost";//Host
protected $user "root";//Benutzername
protected $password "Passwort";
protected $database "CMS";
public $db_link;

    public abstract function connect($config);
    public abstract function query($sql);
    public abstract function escape($string);
    public abstract function fetch_array($db_erg);

}

?>


Der Code ist stark zusammen geschrumpft. :D
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

4

10.10.2011, 16:14

Jetzt müssen wir natürlich noch die "MySqlDatabase.php" im Verzeichnis "CMS/databases" aktualisieren:

MySqlDatabase.php:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php

class MySqlDatabase extends Database {

public function connect ($config) {

    $this->host $config['Database']['host'];
    $this->benutzer $config['Database']['user'];
    $this->password $config['Database']['password'];
    $this->database $config['Database']['database'];

    $this->db_link mysql_connect($this->host$this->user$this->password) or die("Anfrage fehlgeschlagen.");

    mysql_select_db($this->database) or die("Die datenbank konnte nicht ausgew&auml;hlt werden.");

}

public function escape ($string) {
    return mysql_real_escape_string(trim($string));
}

public function query ($sql) {

    $db_erg mysql_query($sql);

    if($db_erg) {
        return $db_erg;
    } else {
        return false;
    }

}

public function fetch_array($db_erg_) {
    if (!isset($db_erg_) or empty($db_erg_)) {
        return false;
    } else {
        return mysql_fetch_array($db_erg_MYSQL_ASSOC);
    }
}

}

?>


Wie ihr seht, gibt es die Methode loadConfig() der Klasse Database nicht mehr. :D

So, jetzt muss nur noch die "index.php" aktualisiert werden.

index.php:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

error_reporting(E_ALL);

require("CMS/classes/database.php");//Hinweis: Ihr könnt die Klammern auch weglassen, nähere Infos gibt es bei Simon^^ (http://www.developertalk.de/user/2-simon/)
require("CMS/classes/Lang.php");
require("CMS/classes/settings.php");
require("CMS/classes/DBManager.php");
require("CMS/classes/Config.php");

$config_ = new Config("config.ini");
$DBManager = new DBManager($config_->getConfig());

if (!$DBManager->isInit() || !$DBManager->getDBDriver()) {
    echo "Ein Fehler ist aufgetreten.";
    exit;
}

$db $DBManager->getDBDriver();
$db->connect($config_->getConfig());

echo Settings::getSetting("selectedskin");//Zum testen, danach bitte diese zeile entfernen

?>
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Ähnliche Themen