Zeilenumbrüche?
Matthias
- html
Ich versuch jetzt schon seit Tagen, meinem PHP Gästebuch Zeilenumbrüche beizubringen und bin zu dem Schluss gekommen, dass es eigentlich nur am Formular liegen kann:
echo "<form action='content/gaestebuch/eintragen.php' method='get'>";
echo "<center>";
echo "<table cellspacing='2' cellpadding='2' width='200' border=1 bordercolor='#000000' bgcolor='#00688B'>";
echo "<tr>";
echo " <td bgcolor='#e0e0e0'>Name:</td>";
echo " <td bgcolor='#e0e0e0'><input align='center' checked maxlength='30' name='Name' size='50' type='text' value='Name'></td>";
echo "</tr>";
echo "<tr>";
echo " <td bgcolor='#e0e0e0'>Mail:</td>";
echo " <td bgcolor='#e0e0e0'><input align='center' checked maxlength='30' name='Mail' size='50' type='text' value='@'></td>";
echo "</tr>";
echo "<tr>";
echo " <td bgcolor='#e0e0e0' valign='top'>Text:</td>";
echo " <td bgcolor='#e0e0e0'><Textarea rows=5 cols=38 name='Text' wrap='physical'>Text</Textarea></td>";
echo "</tr>";
echo "<tr>";
echo " <td bgcolor='#e0e0e0'> </td>";
echo " <td bgcolor='#e0e0e0'><input align='center' type='submit' value='Ab dafür!'></td>";
echo "</tr>";
echo "</table>";
echo "</center>";
echo "</form>";
Ich versteh einfach nicht, wieso die Umbrüche nicht übermittelt werden. Muss ich da irgendwas beachten? Kann es sein, dass die Umbrüche von einem Windowssystem anders als die eines anderen Betriebssystems sind? Auf meinem Testserver gehts nämlich und mein Hoster benutzt UNIX.
Für antworten wär ich dankbar,
Matthias
Hallo Matthias,
Ich versteh einfach nicht, wieso die Umbrüche nicht übermittelt werden. Muss ich da irgendwas beachten? Kann es sein, dass die Umbrüche von einem Windowssystem anders als die eines anderen Betriebssystems sind? Auf meinem Testserver gehts nämlich und mein Hoster benutzt UNIX.
Wo werden die Textumbrüche nicht übertragen /angezeigt?
Wo schreibst Du die Daten hin Textdatei /Datenbank?
Sind die Zeilenumbrüche in der Datei / Datenbank korrekt vorhanden?
Wie sieht die eintragen.php aus?
Wie sieht Deine Ausgabe aus?
TomIRL
Anscheinend werden sie nicht korrekt von der Seite an mein Script übertragen, das alles in einer Textdatei speichert. Dabei belegt ein Eintrag eine Zeile, die Einzelnen Felder wie Name, Zeit, E-Mail etc. werden durch §-Zeichen getrennt. Aber in der Datei sind die Umbrüche schon nicht mehr vorhanden.
Das Script sieht so aus:
<?php
if ((isset($Name) && isset($Name)) && (chop($Mail) != "" && chop($Mail) != "") && (chop($Text) != "" && chop($Text) != ""))
{
$dateiname = "gaestebuch.txt";
$daten = file($dateiname);
#Text mit Zeilenumbrüchen formatieren
$Text = nl2br($Text);
$Text = str_replace("\n", "", $Text);
#feststellen, ob ein Wort länger als 50 Zeichen ist
$Text = explode(" ", $Text);
for($x=0; $x < count($Text); $x++)
{
if (strlen($Text[$x]) > 50)
{
echo "<center>Bitte versuchen sie nicht, das Gästebuch zu manipulieren!<br></center>";
echo "<center><a href='../../View.php?content=gaestebuch/gaestebuch.php'>Zurück</a></center>";
exit();
}
}
$Text = implode (" ", $Text);
#§ durch html-character ersetzen
$Text = ereg_replace("§","§",$Text);
$Mail = ereg_replace("§","§",$Mail);
$Name = ereg_replace("§","§",$Name);
$timestamp = time(); //Zeit setzen
$datum = date("d.m.Y", $timestamp);
$zeit = date("H:i", $timestamp);
#String zusammensetzen und an erste Stelle von Daten bringen
$resultat[0] = $Name . "§" . $Mail . "§" . $datum . "§" . $zeit . "§" . $Text . "\n"; //Korrekt
for($x=0; $x < count($daten); $x++)
{
$resultat[$x +1] = $daten[$x];
}
#In Datei schreiben
$resultat = implode("", $resultat);
$filehandle = fopen($dateiname, "w");
fwrite($filehandle, $resultat);
echo "<center>Eintragung erfolgreich!<br></center>";
echo "<center><a href='../../View.php?content=gaestebuch/gaestebuch.php'>Zurück</a></center>";
}
else
{
echo "<center>Du hast ein Feld vergessen!<br></center>";
echo "<center><a href='../../View.php?content=gaestebuch/gaestebuch.php'>Zurück</a></center>";
}
?>
Wenn nun jemand aber jemand
Zeilen
umbruch
eingibt,
kommt Zeilenumbruch raus.
hi,
if (
(isset($Name) &&
isset($Name)) && (
chop($Mail) != "" &&
chop($Mail) != "" ) && (
chop($Text) != "" &&
chop($Text) != ""
))
doppelt geprüft hält besser ...?
gruss,
wahsaga
Hallo Matthias,
Sorry das ich so ein bischen dumm Frage:
Das Skript soll doch nur Daten eintragen oder?
<?php
if ((isset($Name) && isset($Name)) && (chop($Mail) != "" && chop($Mail) != "") && (chop($Text) != "" && chop($Text) != ""))
Jut verstanden.. bis auf den doppelten $text
$dateiname = "gaestebuch.txt";
$daten = file($dateiname);
Warum liest Du die Daten an der Stelle ein?
$Text = implode (" ", $Text);
#§ durch html-character ersetzen
$Text = ereg_replace("§","§",$Text);
$Mail = ereg_replace("§","§",$Mail);
$Name = ereg_replace("§","§",$Name);$timestamp = time(); //Zeit setzen
$datum = date("d.m.Y", $timestamp);
$zeit = date("H:i", $timestamp);#String zusammensetzen und an erste Stelle von Daten bringen
$resultat[0] = $Name . "§" . $Mail . "§" . $datum . "§" . $zeit . "§" . $Text . "\n"; //Korrekt
Ab hier denke ich sitzt das Problem.
Ich würde um die Sache zu vereinfachen die Daten hinten dran schreiben und bei der Ausgabe das Array mit revers umdrehen.
Ich glaube in der folgenden for Schleife liegt Dein Problem meiner Ansicht nach in dem $resulat $resultat[$x +1] = $daten[$x];
Kann mich aber auch irren.
for($x=0; $x < count($daten); $x++)
{
$resultat[$x +1] = $daten[$x];
}
#In Datei schreiben
$resultat = implode("", $resultat);
Außerdem finde ich komisch das Du mit $resultat implode () weiterarbeitest.
Erst hast Du ein Array dass wandelst Du in einen String um?
Warum ?
Warum nicht einfach den String hinten ran klatschen?
Also wie gesagt:
$eintrag = $Name . "§" . $Mail . "§" . $datum . "§" . $zeit . "§" . $Text . "\n";
$filehandle = fopen($dateiname, "w");
fwrite($filehandle, $eintrag);
echo "<center>Eintragung erfolgreich!<br></center>";
echo "<center><a href='../../View.php?content=gaestebuch/gaestebuch.php'>Zurück</a></center>";
Das müßte gehen und dann die Ausgabe formatieren.
Ich hoffe ich konnte Dir wenigstens ein bischen weiterhelfen.
Viele Grüße aus Berlin
TomIRL