Escape-Zeichen landen nach mysql_real_escape_string in DB
Heinz
- datenbank
Guten Abend,
vor einigen Tagen stelle ich eine Frage zum CSV-Export (http://forum.de.selfhtml.org/archiv/2005/11/t119031/). In diesem Zusammenhang wurde mir folgendes geschrieben:
"Die zum Transport eingefügten Maskierungszeichen werden bereits vom Parser eliminiert und landen nicht in den Tabellen."
Nun habe ich die Funktion mysql_real_escape_string auf Post-Variablen angewendet. Die Folge war, dass die Maskierungszeichen (in diesem Fall vor doppelten Anführungszeichen) doch in der DB-Tabelle landeten. Kann ich dies unterbinden, und wenn ja, wie?
Danke
Heinz
Hi!
vor einigen Tagen stelle ich eine Frage zum CSV-Export (http://forum.de.selfhtml.org/archiv/2005/11/t119031/). In diesem Zusammenhang wurde mir folgendes geschrieben:
"Die zum Transport eingefügten Maskierungszeichen werden bereits vom Parser eliminiert und landen nicht in den Tabellen."
Nun habe ich die Funktion mysql_real_escape_string auf Post-Variablen angewendet. Die Folge war, dass die Maskierungszeichen (in diesem Fall vor doppelten Anführungszeichen) doch in der DB-Tabelle landeten. Kann ich dies unterbinden, und wenn ja, wie?
Ohne jetzt das vorangegangene Posting gelesen zu haben, würde ich jetzt einfach mal auf die MagicQuotes tippen, da die in den meisten Fällen für sowas verantwortlich sind. Deaktiviere diese also in der php.ini, sofern du die Möglichkeit hast, oder bastle dir eine Funktion, die alle Backslashes entfernt. Siehe hierzu auch den Eintrag im Manual zu stripslashes().
Grüße,
Fabian St.
Hallo,
gleich am Anfang des Scriptes eine Funktion einbauen:
http://forum.de.selfhtml.org/archiv/2005/4/t104914/#m648008
http://forum.de.selfhtml.org/archiv/2004/1/t68384/#m392313
usw...
Da gibt es genügend Info im Archiv.
LG
Chris
echo $begrüßung;
Da gibt es genügend Info im Archiv.
Man muss sich ja nicht unnötigerweise durch das Archiv kämpfen (-: wenn es dafür im PHP-Handbuch sogar ein eigenes Kapitel gibt, das die angeblichen Vorteile, die Nachteile und Lösungswege aufzeigt: http://de.php.net/manual/en/security.magicquotes.php
echo "$verabschiedung $name";
Danke für eure Antworten!
Leider stellt sich das Problem etwas anders dar, als ihr es vielleicht vermutet. Ich jage die Post-Arrays jeweils durch eine Funktion bevor die Daten in die DB aufgenommen werden.
In dieser Funktion steht dann:
if (get_magic_quotes_gpc()==1) {
$variablen_array["".$key.""] = stripslashes($value);
}
$variablen_array["".$key.""] = mysql_real_escape_string($value, $db_verb_handle);
Nun landen die Slashes, die von der Funktion mysql_real_escape_string gesetzt wurden, in der Datenbank. Kann man das nicht unterbinden?
Heinz
echo $begrüßung;
Danke für eure Antworten!
Leider stellt sich das Problem etwas anders dar, als ihr es vielleicht vermutet. Ich jage die Post-Arrays jeweils durch eine Funktion bevor die Daten in die DB aufgenommen werden.
In dieser Funktion steht dann:
if (get_magic_quotes_gpc()==1) {
$variablen_array["".$key.""] = stripslashes($value);
"". und ."" kannst du weglassen. Das ist überflüssig und unnötig.
$variablen_array["".$key.""] = mysql_real_escape_string($value, $db_verb_handle);
stripslashes() ändert nichts am Inhalt von $value. Der behält natürlich seine Magic Quotes. Du solltest den entquoteten Inhalt, den du im $variablen_array ablegst, weiterverwenden und nicht den immer noch magic-quotierten $value.
Außerdem solltest du zum entmagicen doch lieber die im Handbuch aufgeführte Funktion verwenden. Diese entquotet die Originale und du sparst dir einen weiteren Zwischenspeicher.
echo "$verabschiedung $name";
Guten Abend,
Vielen Dank für deine Hilfe! Damit ist das Problem gelöst.
Heinz