Hallo Jonathan.
Ein wenig konstruktive Kritik:
- Deine gesamte Anwendung ist anfällig für
SQL-Injections, weil du Nutzereingaben (POST und GET) direkt in die Queries einsetzt. Ein Beispiel: Wenn ich
"1' OR 1 -- " (ohne die äußeren Anführungszeichen) als POST['delete'] an nachrichten.php schicke, räume ich damit die gesamte PN-Tabelle leer. (Zumindest dann, wenn auf dem Server "magic quotes" deaktiviert sind, was der Normalfall und bald wohl der einzige Fall ist.)
- Der erste Punkt gilt übrigens für alle Daten, die direkt oder indirekt vom Benutzer stammen. Nimm mal diesen Ausschnitt:
PHP:
$sql_2 = mysql_query("UPDATE t_user SET passwort = '".$pw_1."' WHERE username LIKE
'".$_SESSION["username"]."'");
Wenn der Benutzername passend gewählt wird, lässt sich hier mit einem ähnlichen Trick wie beim vorherigen Punkt jedes Benutzerpasswort auf $pw_1 setzen, was beliebiges Einloggen ermöglicht. Ein Grund mehr, solche Abfragen mit der Benutzer-ID durchzuführen. (Siehe überübernächster Punkt.)
- t_pn: Die Spalten "empf" und "von" sollten nicht den Namen, sondern die ID der entsprechenden Nutzer enthalten. "datum" und "zeit" sollten zu einer Spalte vom Typ DATETIME zusammengefasst werden.
- t_termine: "user" sollte auf die ID zeigen, "tag", "monat", "jahr", "stunde", "minute" ergeben zusammengefasst wieder eine Spalte vom Typ DATETIME. (Du wirst angenehm überrascht sein, was du damit anstellen kannst, falls du irgendwann alle Daten ausgeben möchtest, die in einer Woche liegen oder so.)
- Analog dazu sollte auch in $_SESSION der Dreh- und Angelpunkt die User-ID sein, nicht der Name. (Grob dazu: Du prüfst bei der Registrierung nicht, ob ein Nutzername schon vergeben ist.)
- Du könntest im HTML-Markup versuchen, von Tabellen wegzukommen und nicht alles per echo auszugeben, um mehr Übersicht zu gewinnen. Siehe auch übernächster Punkt.
- Zudem könntest du vielleicht mal andenken, den Code in "Module" zu unterteilen (bietet sich hier an: PN und Termine und eventuell Optionen oder so). Etwa:
?module=pn&action=edit&id=9. Das ginge dann allerdings -- wie auch der nächste Punkt -- schon arg Richtung Objektorientierung, wenn man es ordentlich machen will.
- Aktuell sind die einzelnen Dateien noch nicht so umfangreich, dass Übersicht zu einem größeren Problem wird, aber generell ist es nie verkehrt, zusätzlich auf eine Trennung von "Logik" und "Ausgabe" abzuzielen. Das heißt, die Ermittlung/Verarbeitung der darzustellenden Daten in einer Datei zu erledigen, die Ausgabe in einer anderen. Der Vorteil davon ist, dass die "Darstellungsschicht" beliebig ausgetauscht werden kann und nicht so eng mit der Logik "verzahnt" ist. optionen.php ist vielleicht ein ganz gutes Beispiel, wo die Probleme mit der Übersicht so langsam anfangen.
Ich hoffe, du bist jetzt von den vielen Anmerkungen nicht völlig überrollt. :)
Gruß Marc