Lieber Felix,
Sprich, wenn die Datenbank nicht nicht existiert dann lege sie an und erstelle alle nötigen Tabellen. bis jetzt sind das etwa 40 die Teilweise direkt mit Daten gefüttert werden.
wenn Du Deinen Chat auf Deiner Seite am laufen hast, wie oft wird es wohl vorkommen, dass Du die Datenbank neu erstellen musst? Genau, niemals!
Das ist richtig. Aber es geht ja nicht nur um den Chat das ist nur eine kleine Funktion die nichtmal 0,1% am gesamten Projekt ausmacht.
Um eine DB einzurichten, verwende ich phpMyAdmin, ein Tool, welches auch viele Webhoster ihren Kunden zur DB-Administration anbieten. Dann ist die DB eingerichtet und meine Software kann loslegen.
Nutze ich auch. Aber da ich häufiger meine Datenbank lösche und wieder neu einrichte, habe ich ganz am Anfang beschloßen das per php zu erledigen.
Du könntest eine Art install.php-Script bereitstellen, welches vor einer ersten Benutzung die Datenbank tatsächlich einrichtet - aber nur ihre Tabellen. Die DB selbst musst Du bei einem "Shared Webhosting" zusammen mit dem DB-Benutzer vorher schon bereitgestellt haben.
Darauf sollte es hinaus laufen.
Außerdem wird eine Transaktion gestartet,
Meine Klasse ist nicht für Transaktionen entwickelt worden.
Dann kann ich die nicht nutzen. Die sind zwingend erforderlich, sonst kommt es zu Fehlern.
Und wie escape ich da richtig?
Was war an meinen Beispielen missverständlich? Dort wird nichts escaped, das übernimmt die PDO-Klasse, die von meiner Klasse benutzt wird.
Hm, achso ok. Danke.
Nein, das lässt Du hübsch als "raw"-Format unverändert. Erst wenn Du Daten an einer bestimmten Stelle in einem bestimmten Kontext (z.B. HTML) ausgibst, maskierst Du sie an eben dieser Stelle kontextgerecht. Also:
// nicht so: $quark = htmlspechialchars($db->get($query['sql'], $query['params'])); echo "<html><head><title>Chat</title></head><body>$quark</body></html>"; // sondern so: $data = $db->get($query['sql'], $query['params']); echo "<html><head><title>Chat</title></head><body>",htmlspecialchars($data),"</body></html>";
Nichts anderes meinte ich.
Im Übrigen bin ich immer noch der Meinung, dass Du für Deinen Chat besser Objekte entwirfst, die (ähnlich wie MyPDO den Umgang mit PDO etwas vereinfacht) in Deinem Programm diverse Vorgänge vereinfachen.
Stellen wir uns doch einmal einen User vor. Was hat der und was kann der?
class ChatUser { // Eigenschaften private $email; private $login; private $pw; // Methoden public function __construct ($db_data) {} // Konstruktor-Funktion, nimmt DB-Daten auf public function change_email () {} public function change_pw () {} public function login () {} public function logout () {} private function save_data () {} // wird von change_email und change_pw benötigt public function send_message () {} }
Die Methoden
change_email
undchange_pw
nutzen intern die Methodesave_data
, welche z.B. mitMyPDO
(oder etwas völlig anderem - egal) den Datenabgleich mit der DB regelt. Möchte sich ein User z.B. bei Deinem Chat anmelden (z.B. example.org/chat/login), so lädt Dein Haupt-Script alle DB-Einträge aus der DB, deren Login-Namen dem gePOSTeten Wert entsprechen und erstellt darausChatUser
-Objekte. Diese dürfen dann der Reihe nach ihrelogin
-Methode ausführen, um einen Login-Vorgang zu testen. Ist er erfolgreich, wird z.B. dasChatUser
-Objekt in $_SESSION['user'] gespeichert, um Deiner Anwendung zu signalisieren, dass da ein erfolgreicher Login war.Die Methode
send_message
hat intern auch wieder Code, der mit der Datenbank interagiert, z.B. die Message in der Tabellechatlog
abzuspeichern.Auf diese Art und Weise modularisierst Du Dein Programm mit Objekten, um im Hauptprogramm dann mit diesen zu operieren.
Das hört sich alles schön und gut an, nur kann ich das nicht umsetzen weil ich mich wie gesagt in Objektorientiertem php nicht auskenne, keine Übung habe und auch nicht sehe welche vorteile das für mich hat. Objektorientiertes php ist für mich einfach komplizierter bzw. unübersichtlicher als das was ich derzeit mache.
Liebe Grüße,
Jo