Zielenumbrüche In Textarea - Ich weiss nichtmehr weiter...

elchmann

Grünschnabel
Hallo!

Ich stehe vor dem Problem, dass ich für mein Semesterprojekt ein einfaches, textbasierendes Gästebuch schreiben soll (textbasiernd ist die Vorgabe, kein MySQL!).

Ich scheitere im Augenblick an der Umwandlung der Zeilenumbrüche aus einer Textara in den <br>-Umbruch.

Wenn ich in die Textarea folgenden Text schreibe:

Code:
zeile1
zeile2

zeile4

dann soll nach der Umwandlung in meiner Textdatei
Code:
zeile1<br>zeile2<br><br>zeile4

stehen.
Da ich ja nicht nur den Text habe sondern auch andere Infos, möchte ich alles in eine Variable speichern und mit '#' von einander trennen,

Code:
$inhalt = $info1."#".$info2."#".$text;

um später den Inhalt der Textdatei "kommasepariert" duch '#' auszulesen und in ein zweidinemsionales Array zu überführen.

Der Inhalt der Textdatei soll dann folgendermasen aussehen:

Code:
123456#987654#zeile1<br>zeile2<br><br>zeile4

Etwas abgespeckt sieht mein Code so aus:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
</head>
<body>


<?php

if ($_GET["action"] == "speichern")
	{
		$text = $_POST["text"];
		$info1 = 123456;
		$info2 = 987654;
		
		//$text = preg_replace( "/\n\n|\r\r|\n\r\n\r/", "<br />", $text );
		//$text = str_replace("(\n||\r||\r\n)", "<br />",$text);
		nl2br($text);
		
		$inhalt = $info1."#".$info2."#".$text;
		echo $inhalt;
		
		if(!file_exists("test.text"))
			{
				$datei = fopen("test.text", "a");
				fwrite($datei, $inhalt);
   				fclose($datei);
			}
		
			
		
	}
if ($_GET["action"] == "eintragen")
	{
	echo ("
			<form method=\"POST\" action=\"test.php?action=speichern\">
			<textarea rows=\"10\" name=\"text\" cols=\"42\"></textarea><br>
			<input type=\"submit\" value=\"Eintragen\">
			</form>
			
		");
	}



?>

</body>
</html>

Ich habe einiges ausprobiert (nl2br, str_replace, etc.) und auch die Suchfunktion benutzt nur irgendwie komme ich trotzdem nicht dahinter... ; (
 
Danke für die Antwort!

Aber irgendwie funktioniert keines der dort genannten Beispiele ;(

Ich weiss zwar jetzt, dass es neben den einfachen Zeilenumbrüchen ( \r , \n oder \r\n) auch doppelte gibt, welche ich mit <p> oder <br><br> ersetzen kann. Es funktioniert aber einfach nicht. Weder die fertigen Funktionen noch welche, die ich versucht habe anzupassen..

Ich bin einwenig ratlos...Ich habe alle Tests auf WinXP mit XAAMP sowie auf einen Lycos Server durchgeführt, welcher natürlich auch PHP unterstützt...

Hat jemand vielleicht mal lust meinen Quellcode zu testen? Vielleicht liegt der Fehler ja auch woanders. Ich verliere langsam die Übersicht...

Danke.
 
PHP:
$text = str_replace("\r","",$text);  //alle \r entfernen
$text = str_replace("\n","<br>",$text); //alle (evtl übriggebliebenen) \n durch <br> ersetzen...

PS: if(!file_exists("test.text")) brauchste nicht, fopen mit "a" reicht ja.
PS2: Schon bedacht, was passiert, wenn jemand # im Gästebuch-Eintrag verwendet? ;)
 
Dein nl2br kann auch nicht klappen, weil
PHP:
nl2br($text);
ja auch einer Variable zugewiesen werden muss.

Also:
PHP:
$text=nl2br($text);

Dann sollte es klappen.

Ich würde auch einen anderen Trenner verwenden. ^ oder | zB
 
Oder den Eintarg "Serialized" speichern (serialize($array) und danach unserialze($array))..
 
Juhuuu!

Endlich funktioniert es!!

PHP:
$variable = ereg_replace("(\n)", "<br>",$variable);
$variable = ereg_replace("(\r)", "",$variable);

Vielen Dank soweit.

Das mit dem Separator ist natürlich eine etwas unglückliche Sache, das war mir irgendwie schon bewusst. Allerdings wollte ich mich diesem Problem später widmen...
Ich habe zwar versucht etwas über die seralize, bzw. unseralize Funktion herauszufinden, allerdings mit mäsigem Erfolg (soll heissen: ich habs nicht kapiert ;-) )

So der Text ist jetzt also von den Zeilenumbrüchen befreit und enthält dafür die <br> Tags.
ABER!

wenn ich alle Inhalte in eine Variable übergebe, um diese dann in die .txt zuspeichern, werde alle Einträge hintereinander gespeichert...

PHP:
$inhalt = $name."#".$email."#".$internet."#".$datum."#".$uhrzeit."#".$text;

$datei = fopen("gaestebuch.txt", "a");
			
fwrite($datei, $inhalt);
fclose($datei);

Es fehlen jetzt nätürlich noch die Zeilenumbrüche, um jedem Eintragsblock eine Zeile zuzweisen.

Soll es später aussehen:

Code:
name#email#internet#datum#uhrzeit#text
name#email#internet#datum#uhrzeit#text
name#email#internet#datum#uhrzeit#text

Ich habe es auf folgende Weisen probiert:

PHP:
fwrite($datei, "\n".$inhalt); <-- bzw "\r\n".
oder
fwrite($datei, "\n$inhalt");  <-- bzw "\r\n$inhalt"
oder
fwrite($datei, "\n".$inhalt); 
fwrite($datei, "\r".$inhalt); 
usw..

auch das Anhängen an die Variable brachte mir kein Ergebnis...

PHP:
$inhalt="\r\n".$name."#".$email."#".$internet."#".$datum."#".$uhrzeit."#".$text;
etc...

Was mache ich falsch
 
Code:
$inhalt = $name."#".$email."#".$internet."#".$datum."#".$uhrzeit."#".$text."\n";

$datei = fopen("gaestebuch.txt", "a");
            
fwrite($datei, $inhalt);
fclose($datei);
So müsste das eigentlich funktionieren..
 
Zurück