\r\n bei mysql_real_escape_string

suntrop

Erfahrenes Mitglied
Hallo zusammen.

Ich schreibe gerade ein Eingabeformular, damit ich einige Adressen in eine MySQL-DB schrieben kann.

Vorher "entschärfe" ich die Variablen wie folgt:
PHP:
if(!get_magic_quotes_gpc()) {
  $_POST = array_map('mysql_real_escape_string', $_POST); 
} else {  
   $_POST = array_map('stripslashes', $_POST); 
   $_POST = array_map('mysql_real_escape_string', $_POST); 
}
Jetzt stört mich aber, dass in einem Textarea-Feld statt dem Umbruch \r\n steht.
Das schaut schlecht aus.
Wenn ich mysql_real_escape_string entferne, dann funktioniert es korrekt und die Umbrüche werden als solche angezeigt.

Habe ich hier einen Denkfehler oder was mache ich falsch? Die "\r\n" werden doch dann auch in der DB gespeichert. Ist das so korrekt? Wie gebe ich das dann wieder aus?

Würde mich über ein paar Zeilen und Hilfe freuen. Danke!

Grüße - suntrop
 
Verstehe dein Anliegen nicht ganz aber möchte es trotzdem versuchen:
Wenn in einer textarea jemand von sich auch eine neue Zeile erzeugt hat, wird diese selbstverständlich auch in $_POST sein. Das in die SQL zu speichern finde ich in Ordnung.
Ich speicher das auch immer mit \r\n ab und nutze zur Ausgabe wieder nl2br()
Das Verhalten des Browsers im Textfeld kann man über das Attribut wrap ändern, was allerdings nicht alle Browser gleich behandeln.

Hoffe konnte helfen.

EDIT: Vielleicht meinst du auch stripslashes() ? Quasi das entfernen von \r\n im Textfeld?
 
Zuletzt bearbeitet:
Wieso verarbeitest du auch alle Werte und nicht nur diejenigen, die schließlich in einer Datenbankabfrage verwendet werden?
 
Danke für euch beiden für euere Antwort.

@Gumbo
Ich verarbeite alle Daten, weil auch alle Daten in die DB sollen.

Anscheinend habe ich mich nicht genau genug ausgedrückt ;)


Ich habe ein Formular, in das ich Name, Adresse, … eingeben kann.
Ich prüfe die Eingaben der User und bei einem Fehler wird das Formular wieder angezeigt mit einer Fehlermeldung und natürlich stehen die User-Eingaben noch in den Feldern, damit der User sie nicht erneut eintippen muss.
Bei dem Adress-Feld (Textarea) steht jedoch nicht genua das drin, was ich eingetippt hatte, sondern statt einem Zeilenumbruch steht jetzt \r\n an dieser Stelle.
Und genau das soll dort nicht stehen. Der User soll selbstverständlich wieder seinen Zeilenumrbuch sehen, nicht \r\n.

Was muss ich umstellen?
PHP:
<textarea id="adresse" name="adresse_3" class="textarea"><?= $_POST['adresse']; ?></textarea>
 
HTML ist eben nicht MySQL. Und wenn du Daten in einem HTML-Dokument ausgeben möchtest, darfst du sie nicht mit Funktionen für MySQL verarbeiten.
 
Hi,
ist zwar nimmer so aktuell, aber ich hab genau das gleiche Problem gehabt wie du. Nachdem ich eine ganze Zeit alle Möglichkeiten ausprobiert habe, hat es schließlich folgendermaßen geklappt:

PHP:
	$message = strip_tags($adresse['post']);
	$message = str_replace("\\r\\n","<br>", $message);

	echo "<br /><br />";
	echo nl2br($message);

so müsste es funktionieren, falls du es nicht schon geschaft hast :)

Mfg
Andy
 
Danke. Tipps sind immer aktuell :-)
Ich weiß nicht mehr, wie ich es damals gelöst hatte. Werde aber beim nächsten Mal deinen Code zu Rate ziehen.

Grüße
suntrop
 
Zurück