Zeilenumbruch erzwingen in PHP

Johann_Isbeer

Cadet 3rd Year
Registriert
März 2003
Beiträge
40
Hallo zusammen,

ich versuche mich gerade daran eine Message History für einen eingeloggten User innerhalb eines Web Frontends zu realisieren. Hier der relevante Code Ausschnitt:

PHP:
$zeit = time(); 
$datum = getdate($zeit);
$text = "Sie wurden am ".$datum[wday]."/".$datum[mon]."/".$datum[year]." von Person ".$dokument["author"]. " als CoAuthor für das Dokument ".$dokument["name"]. " genannt";
$text = $text."\n";
$fp = fopen ("".$dokument["coauth1"].".txt","a");
fwrite($fp,$text,100);
fclose($fp);

Es geht um eine Dokumentenverwaltung. Der User soll bei seinem nächsten Login, den Inhalt der Textdatei (die so heisst wie er, siehe .$dokument["coauth1"].".txt") angezeigt bekommen. Das klappt auch (anderes php Script, dass dann auf die Textdatei zugreift per fread). Das, was ich noch umsetzen will, ist ein Zeilenumbruch nach jedem neuen Eintrag. Im Moment wirft er das sinngemäß so aus:

Sie wurden am 5/6/2005 von Dozent meiser als CoAuthor im Dokument xyz genanntSie wurden am 5/6/2005 von Dozent meiser als CoAuthor im Dokument xyz genanntSie wurden am 5/6/2005 von Dozent meiser als CoAuthor im Dokument xyz genannt (Testdaten, nicht unterscheidbar, da ich ohne Uhrzeit arbeite; es handelt sich aber um versch. Zugriffe auf die Datei)
Durch das $text = $text."\n"; (siehe oben) dachte ich, einen Zeilenumbruch erzwungen zu haben. Stattdessen steht zwischen den Messages immer [] anstelle einer neuen Zeile.
Wie kann ich nun die Messages schön untereinander in die Text Datei packen?

Hoffe, es ist einigermaßen klar, was ich meine.

Gruß und vielen Dank in advance,

Fred
 
Zuletzt bearbeitet von einem Moderator:
PHP:
$datum = getdate();
$text = "Sie wurden am ".$datum['wday']."/".$datum['mon']."/".$datum['year']." von Person ".$dokument['author']." als CoAuthor für das Dokument ".$dokument['name']." genannt\r\n";
$fp = fopen ("".$dokument["coauth1"].".txt","a");
fwrite($fp,$text,100);
fclose($fp);
So müsste es funktionieren. In Dateien wird ein Zeilemumbruch durch \r\n erreicht anstatt nur \n

Mfg
KoЯn
 
Zuletzt bearbeitet:
Danke für die schnelle Antwort, leider hat das nicht geklappt. er schreibt das nach wie vor in eine Zeile.
 
Bin mir nicht sicher, aber evtl. würde ein Return als ASCII-Code 13 und/oder 10 helfen.
z.B. chr(13);
Nur so eine Idee. Vielleicht klappt's ja.
Am besten testen.

bYe
 
wo genau soll ich das einbauen? verstehe es nicht so ganz

Ach ja, ist denn die Gesamtvorgehensweise bzw. der restliche Code soweit korrekt?
 
Wichtiger ist wohl womit Du Dir das Logfile nachher ansiehst ob nur ein \n oder ein
\n\r notwendig ist. Die Zeilenendezeichen unterscheiden sich nämlich unter Unix,
Dos und beim Mac.

function cleantxt($toclean)
{
$patterns = array ("/(\015\012)|(\015)|(\012)/");
$replace = array ("<br>");
$clean = preg_replace ($patterns, $replace, $toclean);
return $clean;
}

Dies ist ein Script hab ich mal wo eingebaut, wandelt Return-Eingaben in <br> um das
in HTML korrekt auszugeben. Mal ist die Zeichenfolgen 15+12 (DOS), 15 (Unix) und beim
Mac 12.

Wenn Du also nur ein \n machst kann es sein, dass das Notepad unter Windows keinen
Zeilenumbruch anzeigt, ein Editor unter Linux aber schon...
 
es geht, es ging schon mit dem Tipp zuvor. Nachdem ich den Rechner heute morgen angemacht habe, ging es sofort mit dem Code von gestern. Wie kann sowas sein? Naja, Hauptsache es geht.
Habt Ihr noch Bock auf ein anderes Problem? :)
 
Danke.

Das Prob ist folgendes: Ich programmiere eine Dokumentenverwaltung (DV). Auf einem Formular kann ein Admin im Frontend der DV Benutzerdaten ändern. Eine Listbox zeigt alle existierenden Benutzer an (Nachnamen aus der Tabelle Namen). Nach Auswahl eines Users sollen die übrigen Felder wie Vorname, Loginname, Tel.Nr. usw. dynamisch aus der DB ausgelesen und in die entsprechenden Formularfelder abgelegt werden. Danach schaut der Admin, was er ändern möchte und drückt einen Submit Button, der dann die Daten per Update oder Insert auf die DB packt.
Leider gelingt es mir nicht auf direkte Weise, die Felder zu befüllen, sondern ich gehe einen Umweg auf eine andere Datei, die dann das Select macht (bisher nur über den Namen, zu Testzwecken). Das Select ist auch erfolgreich. Jetzt möchte ich aber die Select Ergebnisse in die Formfelder des aufrufenden Formulars packen. Der Code des "empfangenden" Scripts:

if (isset($_POST["show"])) //das kommt aus der Formular Datei
{

$benutzer["user"] = $_POST["Sel"]; //Sel = Name der Listbox
echo $benutzer["user"] ;
$DBHost = "********";
$DBUsername = $_POST["username"];
$DBPassword = $_POST["password"];
$DB = "*******";
$connection=@mysql_connect($DBHost, $DBUsername, $DBPassword); $db=@mysql_select_db($DB, $connection);
$query="Select * from Name where Name='".($_POST["Sel"])."'";
echo "<br>";
$result=mysql_query($query, $connection);
echo "User:";

while($row = mysql_fetch_array($result))
{
echo $row['Name']; }
}

Das hier ist bisher nur für Namen. Es fehlen noch Vorname, Email, Tel usw. Wie komme ich von hier wieder zurück in das Start-Form und vor allem, wie übergebe ich dabei die Ergebnisse der DB-Query an die Felder? Hoffe, es ist einigermaßen verständlich.
Vielen Dank schonmal.
Fred
 
Einfach zwei Formulare in einer Seite. Oben eines für die Auswahl des Kunden und sobald
das option feld geändert wird, wert an das zweite formular in der Seite übergeben wo
man die ausgegeben/geänderten daten wieder speichern kann..

So in der Art vielleicht

<form>
Auswahlfeld
submit
</form>


falls $POST form1 dann auch form2 anzeigen
{
<form 2>
inputfelder
submit
<form>
}
 
Zurück
Oben