• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Textarea: Pro Zeile eine Zeile in DB

aJunkie

Mitglied
Hallo,

ich wollte sicher gehen, dass ich es auf die richtige Weise mache.

Also ich habe ein Textarea, wo ich Daten eingeben will und die Daten voneinander durch ein Zeilenumbruch trennen möchte.

Nun möchte ich, dass jeweils eine Zeile im Textarea auch jeweils in eine Zeile in der Datenbank geschrieben wird.

Wäre es so richtig, dass das Script die Daten durch explode (\n) voneinander trennt und die Daten dann in einer foreach Schleife eingetragen werden?

Edit: Beispiel:
<textarea>
Zeile 1 /n
Zeile 2 /n
Zeile 3 /n
</textarea>

Datenbank:
ID, Zeile 1
ID, Zeile 2
ID, Zeile 3

statt so:
ID, Zeile 1, Zeile 2, Zeile 3
 
Du müsstest vorher die Zeilenumbrüche vereinheitlichen "\r" (Mac OS) -> "\n" und "\r\n" (Windows) -> "\n".

PHP:
$s = str_replace("\r\n", "\n", $s);
$s = str_replace("\r", "\n", $s);

Außerdem sollten Leerzeilen abgefangen werden:

PHP:
$lines = explode("\n", $s);
foreach ($lines as $line) {
    $line = trim($line);
    if ($line !== '') {
        // verarbeiten
    }
}
 
oder:
PHP:
<form name="form1" method="post" action="">
  <label>
  <textarea name="text" id="textarea" cols="80" rows="15"></textarea>
  </label>
  <label>
  <input type="submit" name="button" id="button" value="Senden">
  </label>
</form>
<?php
	$text = $_POST['text'];
	$lines = preg_split("/[\r\n|\r|\n]+/",$text);
	//var_dump($lines);
	foreach ($lines as $line) {
		$line = trim($line);
		if ($line !== '') {
			// verarbeiten
		}
	} 
?>
 
Du meinst:

PHP:
$lines = preg_split('/[\r\n]+/', $text);

Es gibt kein "|" (Pipe) als ODER in Charakterklassen. Alle Elemente entsprechen einem Character und werden automatisch mit ODER verknüpft.

Du hast oben eine "Menge" mit dem Inhalt (\r, \n, |, \r, |, \n) definiert.
 
Nein. Das Problem hier ist, dass in den Nutzereingaben theoretisch ein beliebiger Mischmasch aus \r-, \r\n- und \n-Umbrüchen auftauchen kann. PHP_EOL symbolisiert aber -- wenn ich mich nicht sehr irre, genaue Doku ist irgendwie schwer zu finden -- den jeweilig nativen Zeilenumbruch des Serversystems, also im Prinzip nur eine von drei Möglichkeiten.

Edit: Der Standard für Textareas ist zwar \r\n, aber ich gehe davon aus, dass sich das irgendwie manipulieren lässt (im Zweifel direkt über den Header). Deshalb halte ich's schon für sinnvoll, alle Umbrüche zu vereinheitlichen, wenn's vielleicht auch im Zweifel nicht zu Sicherheitslücken führen würde, wenn sich in einem String noch ein \n oder ein \r befinden.
 
Zuletzt bearbeitet:
Zurück
Oben