Moin!
mysql_error ergab tatsächlich den Fehler bei der ersten $mP_... Variablen
var_dump ergabe: string(42) "Unknown column 'testtitel' in 'field list'"
Wenn ich die $mP_...Vars durch Strings ersetze, also z.B. gleich $mP_titel durch 'testtitel' klappt alles.
Welche Anführungszeichen muss ich denn jetzt hier verwenden?
Genau die, die du erwähnt hast. Lass dir den erzeugten SQL-String mal ausgeben, dann siehst du, was bei der Datenbank ankommt, und siehst auch den Unterschied zu der Variante mit festen Strings.
Die Vorlage für das INSERT habe ich aus phpMyAdmin, und dann angepaßt, nur bei den Anführungszeichen ist es mir jetzt nicht klar, welche ich da noch verwenden soll?
Als Escape verwende ich:
$mP_titel = htmlentities(nl2br($GLOBALS["mP_titel"]),ENT_QUOTES);
usw....
Geht das auch? Oder erfaßt das nicht alle gefährlichen Zeichen?
Nein, das geht nicht.
htmlentities() ist sowieso überflüssig, htmlspecialchars() reicht vollkommen aus, denn egal welche Zeichencodierung du verwendest: Du kriegst sowieso nur solche Zeichen zurück, die in dieser Codierung enthalten sind, so dass du dafür keine besonderen Entities benötigst für Zeichen, die in der Codierung nicht darstellbar wären.
Allerdings: htmlspecialchars() wird angewendet, wenn man aus der Datenbank etwas ausgelesen hat und es jetzt in HTML ausgeben will - also so, dass die Zeichen nicht als HTML wirksam werden, sondern exakt so angezeigt werden, wie sie im Text enthalten sind.
Deshalb ist deine Platzierung von nl2br() auch falsch. Die gehört NACH htmlspecialchars() angewendet. Aber ebenfalls erst bei der Ausgabe der Daten.
Das korrekte Escaping für das Schreiben in die Datenbank erledigt mysql_real_escape_string(), wie schon erwähnt.
- Sven Rautenberg