DANKE!
Punkte 1 bis 4 habe ich nun verstanden, bisher kannte ich die Funktion mysql_real_escape_string() nicht.
zu Punkt 4: Früher habe ich die Eingaben erst mit htmlspecialchars() umgewandelt und dann in der DB gespeichert. Problem dabei: Eine Vorschaufunktion mit z.B. substr($val, 0, 250) führt zu unschönen Ergebnissen, weil sie im ungünstigen Fall die Entities auseinanderreißt. Deshalb mache ich es jetzt umgekehrt, d.h. ich speichere die Daten so wie sie sind und formatiere sie dann bei der Ausgabe.
Plain Text ist nicht böse. Man muß ihn nur passend behandeln und darf ihn eben nicht zu wirksamem HTML werden lassen.
Demnach wäre ich also mit einem $val = mysql_real_escape_string(strip_tags(stripslashes($_POST["val"]))) auf der sicheren Seite.
_
Johannes