Eingabe erst in SQL-Input escapen ?

Manuel

Mitglied
Hallo,

ich mache es seit geraumer Zeit schon so das ich z.B. bei einem Gästebuch die Nachricht die der Benutzer eingegeben hat erst später mit mysql_real_escape_string(); escape. Früher habe ich es so gemacht:

$blub = mysql_real_escape_string($_POST['blub']);

Doch wenn ich dann im SQL-Input dann die Variable $blub als Nachricht abspeicher, kommt wenn man z.B. doppelt Enter gedrückt hat das eine leere Zeile da ist, kommt statt der leeren Zeile \n\r und so und halt keine leere Zeile. Wenn ich aber erst escape wenn ich abspeicher als dann z.B. INSERT INTO blub (blub) VALUES ('".mysql_real_escape_string($_POST['blub'])."'); dann kommt kein \n\r usw.

Mich würde erstmal interessieren ob das spätere escapen so sicher ist. Hat mir mal einer gesagt. Aber ich denke man kann davor schon Mist anrichten wenn ich später escape. Also mich würde interessieren (ich wiederhole mich ^^):

1. Ist das spätere escapen sicher ?
2. Warum kommt \n\r usw. und bei der anderen Methode also beim späteren escapen nichts ?

Ich hoffe ich habe mich gut ausgedrückt :)
 
Hey...

also ich denke mal, dass das auch so sicher ist, da Du ja trotzdem escapest! Aber 100% kann ich Dir das auch nicht sagen! Bin Designer und kein Programmierer :D

Andere Idee wäre, dass Du ne extra Abfrage schreibst, welche überprüft ob alles ausgefüllt ist, was ich sowieso tun würde:

PHP:
if(empty($blubb))
     Header('Location: index.php?fehler=blubb');
if(empty($blubb2))
     Header('Location: index.php?fehler=blubb2');
usw...

und in Deiner Formulardatei (hab die jetzt mal index.php genannt):

PHP:
if(isset($_GET['fehler'])) {
     echo 'Das Feld '.$_GET['fehler'].' wurde nicht korrekt ausgefüllt. Bitte überprüfen Sie Ihre Eingabe!';
}

(Warum habe ich jetzt 2mal gepostet****?)
 
Zuletzt bearbeitet:
Also wenn man davon ausgeht das Post und Get Variablen (Nicht nur von Formularen) manipulierbar sind und normale Variablen nicht. Dann ist es egal ob du nun vorher oder hinterher escapen tust.
Sonst würde das ja bedeuten man könnte jede Variable manipulieren und das könnte man mit PHP nicht lösen. Rein von der Logik her also egal.
 
Manuel, ich verstehe nicht ganz deine Formulierung.
Meinst du folgendes:
PHP:
$MyText = mysql_real_escape_string($_POST['mytext']);
$Result  = mysql_query("... $MyText ...");

/* oder */
$Result = mysql_query(" ... ".mysql_real_escape_string($_POST['mytext'])."...");
 
Eine Erklärung weiß ich jetzt nicht.
Aber ich mache eigentlich immer die erste Variante aus optischen Gründen. Es ist dann übersichtlicher, vor allem, wenn man viele Variablen im Query hat.
 
Hey,

zu 1.: Ist genauso sicher wie die erste Variante.
Zu 2.: Die escape-Funktion fügt nicht einfach so '\n\r' ein, sondern ersetzt die equivalente Zeichen in solche, dass Dein SQL kein (echten) Zeilenumbruch enthält, sondern lediglich '\n\r'. Sprich, du wirst wohl einfach in $_POST['blub'] ein Zeilenumbruch haben, der mit obigen Zeichen ersetzt wird. Ist somit kein Fehler, sondern durchaus so gewollt.
 
Zurück