Hi dedlfix,
Was aber eine Klasse, die man in anderen Projekten wiederverwenden möchte, nicht tun sollte, ist, einfach das komplette Script sterben zu lassen, wenn ein Fehler auftritt. Stattdessen sollte man das dem aufrufenden Programmteil mitteilen und diesem dann die aus dessen Sicht geeigneten Maßnahmen überlassen.
Stimmt - da hast du natürlich recht, ich habe es jetzt so gemacht, dass in $instanz->error die letzte Fehlermeldung gespeichert wird und die Funktionen im Fehlerfall false zurück liefern.
Die übergebenen Parameter für Datenbank- und Tabellennamen werden nicht maskiert, was man unter Umständen für SQL-Injection ausnutzen kann.
Hm, eine ernste Sache, die du da ansprichst - erst mal vorweg, denkst du wirklich jemand könnte auf die Idee kommen, die Export Klasse mit Userdaten zu füttern?
Wie dem auch sein - das Script sollte natürlich so oder so sicher sein, allerdings dachte ich bis jetzt, dass es das ist. Jetzt könnte ich natürlich über die Datenbank- und Tabellennamen noch mal mysql_real_escape_string() drüber laufen lassen, jedoch sehe ich folgendes Problem darin:
Angenommen magic_quotes ist aktiviert, dann müsste man auf $_POST bzw. $_GET Daten erst stripslashes() laufen lassen, weil es sonst ein doppeltes Escapen geben würde - allerdings kann ich im Script ja nicht feststellen, ob die Werte aus $_POST bzw. $_GET kommen oder ob sie von Hand eingegeben wurden - es könnte also sein, dass ich mit stripslashes() was entferne, was gar nicht durch magic_quotes dahin gekomme ist.
Hm, ist das jetzt verständlich ausgedrückt gewesen? ;-)
Weiterhin würde ein „wissender“ PHP Programmierer ja über die Daten selber noch mal mysql_real_escape_string() drüber laufen lassen, wozu es dann auch zu einem doppelten Escapen kommen würde.
Und last but not least bin ich mir gar nicht sicher, ob man beim Datenbanknamen SQL Injections machen kann... Auch bei den Tabellennamen weiß ich nicht so genau - erst mal setze ich die Namen alle zwischen Backticks (`) und zweitens findet das Script selber ja die Tabellennamen herraus indem es sie sich von MySQL holt.
Wie dem auch sein - ich habe die in Sachen Error Handling überarbeitete Version jetzt mal online gestellt.
Ich würde mich freuen, wenn du sie dir nochmal anschaust.
MfG, Dennis.