Hi,
ich finde dein Projekt ist sehr gut zum üben auch wenn du dir einiges vorgenommen hast. Und lass dich nicht von OOP abbringen. Wenn du üben willst dann direkt richtig. Und vielleicht willst du ja später auch mal was anderes Programmieren. Desktopanwendungen in einer anderen Programmiersprache zum Beispiel. Dann wirst du um OOP nicht mehr herumkommen. Große Programme sind so gut wie gar nicht umsetzbar. Programme lassen sich einfach besser strukturieren und dein Code wird leichter verwalltbar.
Was ich gar nicht verstehen kann ist das PHP-Programmierer OOP oft kritisch gegenüberstehen. Wenn du ein Problem hast, dass du immer wieder lösen musst, dann ist es doch besser es einmal in einer Klasse zu behandeln die du dann in deinem code mit ein paar Zeilen aufrufen kannst, als die Methoden mit Copy und Paste in ein anderes Script zu schreiben. Wenn du dann mal was an der Funktion ändern musst kannst du das in einer einzigen Klasse machen und brauchst nicht überall in deiner Seite danach zu suchen. Anders wären große Projekte (und ein CMS zähle ich dazu) nur mühseelig zu bearbeiten. Ich benutze zum Beispiel eine Klasse für meine Datenbankzugriffe.
<?php
/********************************************************************************************************************
*
* DB
*
* Copyright (C) 2009 Marcel Melzig
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program;
* if not, see http://www.gnu.org/licenses/.
*
*********************************************************************************************************************/
include('connectionData.php'); //Importiert die Datei mit den Verbindungsdaten.
class DB
{
// Speichert die Connection.
private $Connection;
public function __construct()
{
$this->Connection = $this->getConnection();
}
// �ffnet die Datenbankverbindung.
public function getConnection()
{
$dbc = new PDO(ConnectionData::servertyp.":host=".ConnectionData::server.";dbname=".ConnectionData::db, ConnectionData::user, ConnectionData::password, array(PDO::ATTR_PERSISTENT => true));
return $dbc;
}
// L�scht aus der Datenbank. �bergeben wird der Name der Tabelle aus der gel�scht werden soll und eine Liste mit Parametern.
// Als Parameter wird ein Array mit Parametern �bergeben die mit dem Objekt SQLParameters erstellt wird.
// Wird das Statement erfolgreich usgef�hrt gibt die Methode true zur�ck. Ansonsten false.
public function deleteFromDB($tableName, $parameters)
{
$query = "DELETE FROM ".$tableName;
$query .= " WHERE (1=1)";
foreach($parameters as $parameter)
$query .= " AND (".str_replace(':', '', $parameter->getParamName())." = ".$parameter->getParamName().")";
if(executeStmt($query, $parameters))
return true;
else
return false;
}
// Die Methode l�scht eine Tabelle aus der Datenbank. Kann die Tabelle gel�scht werden, gibt die Methode true
// zur�ck. Ansonsten false.
public function dropTable($tableName)
{
$query = "DROP TABLE ".$tableName;
if(execute($query))
return true;
else
return false;
}
// Die �berladene Methode execute f�hrt das Statement aus.
public function execute($query)
{
executeStmt($query, array());
}
//Ist der 2te Parameter eine Array mit Parametern wird direkt die Methode executeStmt aufgerufen.
//Andernfalls wird erst ein Array erstellt und der �bergebene Parameter in das Array eingetragen.
public function executeOneParameter($query, $parameter)
{
if(is_array($parameter))
executeStmt($query, $parameter);
else
{
$tmpParams = array();
$tmpParams[] = $parameter;
executeStmt($query, $tmpParams);
}
}
// Führt das Statement aus. Die Methode gibt einen Boolean zurück.
private function executeStmt($query, $parameters)
{
$dbc = $this->Connection;
$stmt = $dbc->prepare($query);
foreach($parameters as $parameter)
$stmt->bindParam($parameter->getParamName(),$parameter->getParamValue());
if($stmt->execute())
return true;
else
return false;
}
// Liefert ein result aus der Datenbank zur�ck.
public function getResultWithQuery($query)
{
return getResult($query, $this->Connection);
}
public function getResultWithConnection($query, $dbc)
{
return getResult($query, $dbc, array());
}
public function getResultWithParameter($query, $dbc, $parameter)
{
if(is_array($parameter))
getResultFromDB($query, $dbc, $parameter);
else
{
$parameters = array();
$parameters[] = $parameter;
getResultFromDB($query, $dbc, $parameters);
}
}
// Die Methode leifert entweder das Result zurück oder null falls der Datenbankzugriff nicht glückt.
// Falls Sie mal eine Objekt aus der Datenbank auslesen müssen, also das result nur aus einem Wert besteht,
// dann greifen Sie in ihrer Methode mit result[0][0] auf dieses Element zu.
public function getResultFromDB($query, $dbc, $parameters)
{
if(!is_array($parameters))
return null;
$stmt = $dbc->prepare($query);
if($parameters != null)
foreach($parameters as $param)
$stmt->bindParam($parameter->getParamName(),$parameter->getParamValue);
if($stmt->execute())
{
$result = $stmt->fetchAll();
if($result != null)
return $result;
else
return null;
}
else
return null;
}
// Die Methode gibt ein Objekt aus einem Result zurück.
public function getObject($result, $fieldName)
{
if($result->fieldName)
return $result->key;
}
// Speichert Daten in die Datenbank.
public function saveToDB($tableName, $parameter)
{
if(is_array($parameters))
saveDataToDB($tableName, $parameter, true);
else
{
$parameters = array();
$parameters[] = $parameter;
saveDataToDB($tableName, $parameters, true);
}
}
//Die Methode aktualisiert Werte in der Datenbank oder f�gt Werte ein. Sie gibt false oder true zur�ck.
public function saveDataToDB($tableName, $parameters, $idParameter = NULL)
{
$query = null;
$benutzteParameter = array();
if($idParameter != NULL)
{
$query = "UPDATE $tableName SET ";
foreach($parameters as $param)
if(!empty($param))
{
$query .= str_replace(':', '', $param->getParamName())." = ".$param->getParamName().",";
$benutzteParameter[] = $param;
}
else
$query .= str_replace(':', '', $param->getParamName())." = NULL,";
$query = trim($query, " ,\t\n\r\0\x0B");
$query .= " WHERE ".str_replace(':', '', $idParameter->getParamName())." = ".$idParameter->getParamName().";";
$benutzteParameter[] = $idParameter;
}
else
{
$names;
$values;
foreach($parameters as $param)
if(!empty($param))
{
$names = str_replace(':', '', $param->getParamName()).",";
$values = $param->getParamName().",";;
$benutzteParameter[] = $param;
}
$query = "INSERT INTO $tableName (".trim($names, " ,\t\n\r\0\x0B").") VALUES (".trim($values, " ,\t\n\r\0\x0B").");";
}
if($this->executeStmt($query, $benutzteParameter))
return true;
else
return false;
}
}
?>
<?php
/********************************************************************************************************************
*
* DB
*
* Copyright (C) 2009 Marcel Melzig
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program;
* if not, see http://www.gnu.org/licenses/.
*
*********************************************************************************************************************/
class SQLParameter
{
// Properties
private $paramName;
private $paramValue;
// Constructor
public function __construct($Name, $Wert)
{
if(substr($Name, 0, 1) != ':')
{
$Name = ':'.$Name;
}
$this->paramName = $Name;
$this->paramValue = $Wert;
}
// Getter und Setter
public function getParamName()
{
return $this->paramName;
}
public function setParamName($Name)
{
if(substr($Name, 0, 1) != ':')
{
$Name = ':'.$Name;
}
$this->paramName = $Name;
}
public function getParamValue()
{
return $this->paramValue;
}
public function setParamValue($Value)
{
$this->paramValue = $Value;
}
}
?>
<?php
class ConnectionData
{
const server = "localhost";
const servertyp = "mysql";
const user = "root";
const password = "";
const db = "hanswurst";
}
?>
Die Klasse DB bietet Methoden an mit der man Daten aus der Datenbank holen, speichern, updaten oder löschen kann. Die Klasse SQLParameter diffiniert einen Parameter der an das Statement gebunden wird. Ich rate dir auch mal dazu PDO zu nutzen. Einfach mal danach googlen. Das kann die Performance deiner Datenbankzugriffe erhöhen und schützt dich vor SQL-Injections.
Das Speichern von Daten sieht in meinem Programm dann so aus:
$parameters[] = new SQLParameter(':text', $this->text);
if($this->db->saveDataToDB('texte', $parameters, new SQLParameter(':name', 'bio')))
return true;
else
return false;
Sieht ja dann schon viel übersichtlicher aus. Im Grunde würden auch zwei Zeilen reichen, aber ich habe mir angewöhnt jeder Methode einen Rückgabewert zu verleihen. Entweder true oder false um den Erfolg der Methode in einer if()-Bedingung überprüfen zu können oder zumindest null bei einem Misserfolg.
Und es spricht nichts dagegen den Inhalt deiner Seiten in eine Datenbank zu schreiben. Das Parsen einer Textdatei ist wohl kaum schneller. Genau aus diesem Grund nimmt man ja eine Datenbank. Um seine Daten zu verwallten. Und weil deine HTML Seiten ja auch nur Text sind hält sich die Größe der String die du in die Datenbank schreibst in Grenzen. Was du nicht machen solltest ist Binärdaten in deine Datenbank zu schreiben. Zum Beispiel die Bilder deiner Galerie. Speicher die Bilder lieber als Datei und schreibe nur den Pfad in die Datenbank, da sowas wirklich langsam sein kann.
Für deine Galerie musst du natürlich dein Datenbankmodell erweitern. Du brauchst Tabellen, in der du Galerien mit Bildern und Vorschaubildern verknüpfst. Eventuell speicherst du noch zu jedem Bild einen Namen und eine Beschreibung ect.
Und du musst das Rad ja auch nicht bei allem neu erfinden.
Schau dir mal das an:
ckeditor.com/
Damit kannst du z.B. den Inhalt deiner Seiten erstellen.
Ich hoffe ich konnte dir ein wenig helfen. Tschö