Backslash wird bei Ausgabe nicht angezeigt

Zenti

Erfahrenes Mitglied
Hallo,
wie der Titel schon sagt, habe ich Probleme mit dem Backslash ( \ ).

Ich speichere mittels mysql_real_escape_string() Formularfelder in der Datenbank und gebe diese später mit stripslashes() wieder aus. Es klappt soweit auch alles sehr gut, nur der Backslash will nicht richtig.

Beispiel:
PHP:
// Formularfeldeingabe ->  \Test
$test = mysql_real_escape_string($_POST[testfeld]);
mysql(INSERT INTO ... $test ...);
// in der Datenbank steht dann ->    \Test
echo strispslahes($test);
// Ausgabe:  Test

Mit Hochkommas und Co hab ich dieses Problem nicht.

Woran könnte das liegen?

Danke im Voraus
 
Ich dachte immer stripslashes entfernt nur das, was mysql_real_escape hinzugefügt hat. Vielen Danke für die Info tombe.

Kann mir denn jemand sagen, wie ich das Problem umgehen kann? Lass ich stripslashes weg, habe ich vor Hochkommas ein Backslash. Lass ich s drin, werden alle Backslashes entfernt. Was ist denn nun des Rätsels Lösung****
 
Zuletzt bearbeitet:
Nee, das wird schon der Fehler sein.

Ich habe ne einfache Klasse. Über die getter geb ich sie direkt aus, sprich:

PHP:
// Ausgabe
echo $user->get_nachname();


// Klasse User
public function get_nachname() {
	return stripslashes($this->nachname);
}

Vor dem speichern in die Datenbank wende ich mysql_real_escape_string an. Die Daten werden normal in der Datenbank abgespeichert, aber gebe ich sie OHNE stripslashes aus, habe ich vor allen Hochkommas und Co nen Backslash stehen.

Hoffe, du kannst mir weiter helfen.
 

Jo xD

Hat ja alles super funktioniert. Wie gesagt, wenn ich aus der Datenbank auslesen, muss ich stripslashes verwenden, damit der keine Backslashes anzeigt. Nur leider macht er auch wichtige Backslashes weg, wie zum Beispiel bei meiner Textarea die Umbrüche (\r\n), die ich in der Datenbank abspeicher und später wieder in die Textarea reinlade.

Weiß ehrlich gesagt nicht weiter
 
stripslahes() ist eben nicht die Gegenoperation zu mysql_real_escape_string(), wie tombe bereits in #2 angedeutet hat.

Zeig mal den Code, mit dem du Daten in die Datenbank einträgst. Denn folgende Aussage macht mich stutzig.
aber gebe ich sie OHNE stripslashes aus, habe ich vor allen Hochkommas und Co nen Backslash stehen.

Benutzt du vielleicht dieses mal MySQL mit parametrisierten Queries und mysql_real_escape_string ist völlig überflüssig?
 
Also Felder die eingelesen werden, werden wie folgt in die Datenbank eingetragen:

PHP:
$test = mysql_real_escape_string(htmlspecialchars(trim(utf8_decode($_POST['test']))));

das utf8_decode fällt bei NICHT AJAX-Formularen weg. Das brauch ich, weil ich ISO-Zeichenkodierung verwendet habe. Sonst werden die Umlaute total verhunzt.
htmlspecialchars nutze ich, damit ich nicht jedes mal bei der Ausgabe darauf achten muss. Es werden alle Felder auf diese Weise eingelesen.

Diese werden dann ohne weitere Umwege, wenn es sich um Text handelt, der keiner weiteren Verarbeitung bedarf, direkt in die Datenbank eingetragen.
Dort erscheinen sie wie in den Eingabefeldern des Formulars, bis auf die Ausnahme von < > & und weiteren HTML-Sonderzeichen.

Wenn ich die Datenbankeinträge nun OHNE stripslashes ausgebe, erscheinen die HOCHKOMMAS und CO mit BACKSLASH. Das verhindere ich dann ja mit stripslashes.
Hab ich da irgendwas falsch verstanden****
 
htmlspecialchars nutze ich, damit ich nicht jedes mal bei der Ausgabe darauf achten muss.

Trägt zwar nichts zur Sache bei, aber man sollte das bei der Ausgabe machen und nicht schon beim Eintragen in die Datenbank. Was machst du, wenn die Daten auf einmal per Webservice in einer Form-Anwendung oder auch IPhone App verwendet werden sollen? Dann ist die HTML-Codierung fehl am Platz.

Wenn ich die Datenbankeinträge nun OHNE stripslashes ausgebe, erscheinen die HOCHKOMMAS und CO mit BACKSLASH. Das verhindere ich dann ja mit stripslashes.
Hab ich da irgendwas falsch verstanden****


Also mir fallen dazu zwei Sachen ein:
1.magic_quotes an oder aus?
2.trägst du die Daten etwa folgendermaßen ein?
PHP:
$test = mysql_real_escape_string(htmlspecialchars(trim(utf8_decode($_POST['test']))));
mysql_query("INSERT INTO tabelle (test) VALUES ('$test')");
 
Zurück