dedlfix: php5 magic quotes ausschalten??

Beitrag lesen

Hi!

post-daten, die in eine datenbank kommen sollen, habe ich nun mit
mysql_real_escape_string(stripslashes($_POST['beschreibung'])); versehen.

Besser wäre, wenn du die Eingangsdaten abhängig vom M.Q.-Wert und einmalig an zentraler Stelle säubertest und nicht überall im Script verteilst. Dann kannst du bei geänderten Bedingungen einfacher drauf reagieren (einen Block rauswerfen statt alles einzeln durchgehen).

Das mysql_real_escape_string() kommt jedoch an die Stelle, wo es wirken soll, also unmittelbar vor dem SQL-Statement oder besser direkt bei dessen Zusammenbau.

in der msql-datenbank stehen dann Dinge wie Das ist ein 'Test' oder ein "Test" dann ohne Backslashes drinnen.

So gehört sich das, weil diese nur für das SQL-Statement gebraucht werden.

Wenn ich diese Werte aber wieder auslese, bricht der Satz bei Das ist ein 'Test' oder ein   ab. Was kann denn da der Grund sein?

Beispielsweise, dass du einen weiteren Kontextwechsel, diesmal bei der Ausgabe übersehen hast.

Muss ich die Anführungszeichen beim Abfragen aus der db wieder irgendwie escapen?

Nein, aber beim Einfügen in HTML (mindestens bei Attributwerten). Und für andere Medien musst du deren Regeln berücksichtigen. Siehe SELFHTML-Wiki: Kontextwechsel

oder sollten sie in der db tatsächlich mit Backslashes drinnenstehen?

Nein, was sollen sie da? Da würden sie als ganz normales Zeichen zählen, Stringlängen verfälschen und andere Stringverarbeitung behindern.

Lo!