Keine Zeilenumbrüche im Gästebuch

mhribernik

Erfahrenes Mitglied
Hallo!

Ich habe ein kleines Gästebuch gecoded.
Es funktioniert alles ganz toll, bis auf das, dass beim anzeigen der alten Einträge keine Zeilenumbrüche gemacht werden.

Hat jemand einen Lösungsvorschlag?

PS: Anbei mein Code...


PHP:
<?
include("#mysql_connect.mlk");

function PostVar($variablen_name) {
	$ergebnis = $_POST[$variablen_name];
	if (get_magic_quotes_gpc()) $ergebnis =
		stripslashes($ergebnis);
	return trim($ergebnis);
}

function format ($text) {
	$ergebnis = htmlentities($text);
	$ergebnis = nl2br($ergebnis);
	return $ergebnis;
}

$text = PostVar("text");
$name = PostVar("name");
$status = $_POST['status'];

$grenzwert = 1000;
$anzeigen = true;
$fehler = "";

if (empty($text)) {
	$fehler .= "<li>Der Eintrag ist leer</li>"; }
if (empty($name)) {
	$fehler .= "<li>Sie haben keinen Namen eingetragen</li>"; }
if (strlen($text) > $grenzwert) {
	$text = substr($text, 0, $grenzwert); }
if (!strpos($text," ") || strpos($text," " > 60)) {
	$text = wordwrap($text, 60," ",1); }
	
?>

<html>
<head>
	<style type="text/css">
	</style>
</head>
<body>
<div align="center">
<table border="0" style="width: 500px">
<tr>
<td>
	<h1 style="text-align:center">Mein G&Auml;stebuch</h1>
	<?
	if (!empty($fehler)) {
		$anzeigen = false;
		echo "<p><b>Leider konnte Ihr Beitrag nicht angenommen werden:</b></p>";
	} elseif ($status == "Vorschau") {
		$anzeige = false;
		$datum = date("\a\m\ j. n. Y \u\m H:i");
		?>
		<h3>So sieht Ihr Beitrag derzeit aus:</h3>
		<hr width="150" noshade="noshade" />
		<p><? echo format($text); ?></p>
		<p>
		<small>
		<b><? echo htmlentities($name),", $datum"; ?></b>
		</small>
		</p>
		<hr width="150" noshade="noshade" />
		<p>
		<b>Um Ihren Beitrag zu bearbeiten, benutzen Sie bitte das Formular.</b>
		</p>
		<?
	} elseif ($status == "Eintragen") {
		$anzeige = true;
		$query = "INSERT INTO guastbook SET Datum = now(), Text = '".addslashes($text)."', Name = '".addslashes($name)."' ";
		$sql = mysql_query($query)
			or die(mysql_error());
	}
	
	if ($anzeige) {
		$query = "SELECT DATE_FORMAT(Datum, 'am %e. %c. %Y um') AS Datum, Text Name FROM guastbook ORDER BY Datum DESC";
		$sql = mysql_query($query)
			or die(mysql_error());
		while ($ds = mysql_fetch_object($sql)) {
			$text = $ds->Text;
			$name = $ds->Name;
			$datum = $ds->Datum;
			?>
			<p>
			<? echo format($text); ?>
			</p>
			<p>
			<small>
			<b><? echo htmlentities($name),", $datum"; ?></b>
			</small>
			</p>
			<hr width="150" noshade="noshade" />
			<?
		}
		unset($text,$name);
	}
	?>
	
	<form action="guastbook.php" method="post">
	<p>
	<small><b>Ihr Beitrag (maximal <? echo $grenzwert; ?> Zeichen):</b></small><br />
	<textarea style="width: 500px; height: 240px" name="text"><? echo htmlentities($text); ?></textarea>
	</p>
	<p>
	<small><b>Ihr Name:</b></small><br />
	<input style="width: 500px" type="text" maxlength="50" name="name" value="<? echo htmlentities($name); ?>" />
	</p>
	<p>
	<input type="submit" name="status" value="Vorschau" />
	<input type="submit" name="status" value="Eintragen" />
	</p>
	</form>
</td>
</tr>
</table>
</div>
</body>
</html>
 
Deine Vorschau hat gesagt.:
HTML:
			<h3>So sieht Ihr Beitrag derzeit aus:</h3>
		<hr noshade="noshade" width="150">
		<p>Test1
Test2
Test3</p>
		<p>
		<small>

		<b>ich, am 6. 2. 2006 um 21:08</b>
		</small>
		</p>
Da sind Deine Zeilenumbrüche! Verwende [phpf]nl2br[/phpf], damit der User auch was davon mitbekommt.

Gruß hpvw
 
Danke erstmal für deine Antwort, aber ist es denn nicht genug, dass ich am Anfang diese Funktion:

PHP:
function format ($text) { 
    $ergebnis = htmlentities($text); 
    $ergebnis = nl2br($ergebnis); 
    return $ergebnis; 
}

habe und sie dann mit dem Argument $text aufruf?
Da ist nl2br() doch bereits integriert.

Im phpmyadmin steht der Text jedoch korrekt formatiert in der Tabelle.

Wochin soll ich nl2br deiner Meinung nach schreiben?
 
Also wenn ich Vorschau klicke, habe ich die Breaks im Text => ok

Wenn du das in die DB einträgt, gibst du die Werte ja mittels addslashes() weiter.
Wenn ich mich recht entsinne, müsstest du dann beim auslesen der Werte aus der DB auch diese Slashes per stripslashes() entfernen. Ich bin mir nicht sicher ob htmlentities() das macht.

Gruss

// Edit: Mal etwas meine deutsche Sprache korrigiert ;) Ok, noch nicht perfekt...ich weiss *g*
 
Zuletzt bearbeitet:
Vielleicht solltest Du die Variable mal an verschiedenen Stellen ausgeben und so dem Fehler auf die Spur kommen.

Gruß hpvw
 
Warum macht ihr es denn so kompliziert ?
Zeilenumrüche in HTML sind : <br>
Und die Zeilenumbrüche, die in einem Input-Feld sind, sind : \n
Also einfach alle \n mit <br> ersetzen.

PHP:
$text = str_replace("\n", "<br>", $text);
$text in diesem Fall, ist der Text, was in die Datenbank eingetragen werden soll.


Gruß KHORN
 
KHORN hat gesagt.:
Also einfach alle \n mit <br> ersetzen.

PHP:
$text = str_replace("\n", "<br>", $text);
$text in diesem Fall, ist der Text, was in die Datenbank eingetragen werden soll.
Du beschreibst die Funktionsweise von [phpf]nl2br[/phpf].
Außerdem sollte man Formatierungen an den Texten erst bei der Ausgabe machen, damit man ggf. die Art der Formatierung leichter anpassen kann.

Gruß hpvw
 
Die nl2br()-Funktion ersetzt jedoch keine physischen Zeilenumbrüche durch HTML-Zeilenumbrüche, sondern setzt sie ihnen nur voran. Der Vorteil der nl2br()-Funktion ist jedoch, dass die Windows-Zeilenumbruchsequenz („CR LF“) nicht zerrissen wird.
 
Zurück