dedlfix: MySQL Einträge mit Formular löschen

Beitrag lesen

echo $begrüßung;

Zur Notation von String-Werten in SQL-Befehlen gelten etwas andere Regeln als bei numerischen Werten. Siehe Language Structure -> Literal Values -> Strings

Wunderbar, mit '$del_name' klappts also. Danke!

Nun ist aber noch der harmlose Fall zu beachten, wenn im Namen auch ein ' vorkommt. In dem Fall wäre an diesem Zeichen der Stringwert zu Ende. Der Rest führt im günstigen Fall zu einem ungültigen SQL-Statement. Im ungünstigen Fall wird damit der Befehl so manipuliert, dass er etwas anderes ausführt als vorgesehen. Man spricht dabei von SQL-Injection. Um das zu verhindern müssen die ' in Strings entschärft werden. Das nennt man Maskieren oder im Englischen auch "to escape". Es gibt die PHP-Funktion mysql_real_escape_string(), die dafür sorgt, dass ' und noch eine Reihe anderer ebenfalls kritischer Zeichen maskiert werden. Diese müsstest du auf alle Werte anwenden, die in SQL-Befehle eingebaut werden sollen.

Außerdem ist zu beachten, dass es ein PHP-Feature namens Magic Quotes gibt, welches ebenfalls diese Aufgabe erfüllen soll, aber im Hinblick auf MySQL zu wenig Zeichen berücksichtigt. Sollte dieses Feature eingeschaltet sein, muss es nun ausgeschaltet werden oder dessen Auswirkungen rückgängig gemacht werden, da es sonst zusammen mit mysql_real_escape_string() zu einer doppelten Maskierung kommt. Siehe Disabling Magic Quotes

Die MySQL-Funktionen in PHP geben im Fehlerfall im Allgemeinen false zurück..
Einen Fehler hab ich aber gar nicht bekommen?

MySQL-Fehler werden im Gegensatz zu PHP-Fehlern nicht sofort ausgegeben. Stattdessen wird der Fehlerzustand über den Rückgabewert der mysql_*-Funktion gemeldet. Du musst also prüfen, ob das Ergebnis false ist und dann mysql_error() nach dem Meldungstext befragen.

echo "$verabschiedung $name";