Fabian St.: & MySQL: Seltsam abgeschnittene DB-Einträge

Beitrag lesen

Hi!

In die Datenbank sollte wirklich nur der in das Formular eingegebene Wert eingetragen werden, d.h. Funktionen wie strip_tags() oder htmlentities() sollten erst bei der _Ausgabe_ angewandt werden.
ich habe irgendwo gelesen, dass strip_tags unbedingt angewandt werden soll, damit man keinen php-Code einschleusen kann, der evtl. bösen Schaden anrichtet?! htmlentities erst bei der Ausgabe ist ja logisch.

Nein, zum Eintragen von Daten in eine DB sollte strip_tags() nicht verwendet werden. Darüber hinaus macht strip_tags() oftmals mehr als einem lieb ist: Stell dir vor jemand gibt 4 < 5 in dein Textfeld ein - anschließend ist von dieser Gleichung nichts mehr zu sehen ;-) Wenn du deine Daten immer folgendermaßen einträgst und beim Ausgeben mit htmlentities() behandelst, solltest du keine Probleme bekommen:

  
  
$sql = "INSERT INTO  
                    tabelle  
                    (feld1, feld2)  
        VALUES  
                    ('".mysql_real_escape_string($_POST['feld1'])."',  
                     '".mysql_real_escape_string($_POST['feld2'])."'  
                    )";  

Beachte hierbei insbesondere die Folge der einfachen und doppelten Anführungszeichen!

Dazu gehört übrigens auch die Entfernung eventueller Maskierungs-Backslashes (bedingt durch magic_quotes).
Heißt das, mein Problem beruht auf magic_quotes? Aber außer strip_tags verwende ich doch nichts vor der Übergabe!?

magic_quotes macht - ebenso wie strip_tags() - oftmals mehr Probleme als es lösen soll. Aus diesem Grund könntest du magic_quotes in der php.ini auf Off stellen oder du verwendest jedesmal nach $_POST oder $_GET eine Funktion, wie du sie auf php.net findest (stripslashes_deep() für Arrays, ansonsten einfaches stripslashes()).

Stattdessen solltest du beim Eintragen auf Funktionen wie mysql_real_escape_string() zurückgreifen, die alle diejenigen Zeichen maskieren, die beim Eintragen Probleme machen könnten.
Ist das die "korrekte Behandlung", die wahsaga von mir fordert?

Ja, das wäre eine Möglichkeit.

Grüße,
Fabian St.