Probelm mit Daten in Textdatei speichern

  • Hey,


    ich speichere die Formulardaten in eine Txt-datei. Dann gebe ich jedem Post ein Zeilenumbruch. Nun öffne ich diese Datei auf einer anderen Seite und tuh dann die Abschnitte mit dem delimeter "\r\n" auseinander splitten, in einzelne Teile. Nur werden von Anfang an, obwohl nichts in der Txt-Datei ist schon 2 felder ausgegeben. Verstehe es nicht.


    Habe es schon mit nem Array versucht, den 1 sten Wert überprüft ob es den gibt, und wenn nicht soll es so gemacht werden, sonst so. Aber da bekam ich die gleichen Probleme.


    Meine PHP Datei:



    So ist der Inhalt der Txt datei:


    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.


    So sieht es dann aus:

    http://prntscr.com/gb2tq8

  • 1. Etwas Wichtiges fehlt, nämlich wie du die Datei anlegst. Da dürfte der Fehler für die erste (falsche) Ausgabe sein. Mit einem einfachen Erzeugen einer leeren Datei konnte ich das Problem nicht nachstellen bzw. wurde dieses vermieden:

    Code
    $fd=fopen("datei.txt","w+");
    fclose($fd); // leere Datei mit 0 Byte Länge erzeugt


    2. Das letzte "78." ohne folgenden Text wird wohl angelegt, weil explode zuerst den Trenner erkennt, ein Element anlegt und dieses dann befüllen würde, aber nichts mehr zum Befüllen da ist (so meine einfache Erklärung). Dies kannst du leicht umgehen, in dem du den String vor dem foreach mit trim() behandelst.


    3. Wenn ich den hier im Forum geposteten Beispieltext per Copy & Paste verwende, enthält dieser ein zusätzliches "\r\n". Das ist so nicht erkennbar und kann an den verschiedenen Editoren oder Browsern liegen.


    4. Nur als Frage: Warum verwendest du eine Zeilenschaltung als Trennzeichen? Damit ist den Benutzern eine Zeilenschaltung im Eingabetext nicht mehr möglich, denn die würde ja als Trennzeichen interpretiert werden. Hängt natürlich stark vom Einsatz ab, ob das zuzulassen wäre.

    Einmal editiert, zuletzt von Jav () aus folgendem Grund: In erster CodeZeile Doppelpunkt durch Semikolon ersetzt.

  • Hey,


    wie meinst du das? Ich habe die txt-datei schon erstellt und füge dort die Daten hinzu. Das geht ja alles. Ich möchte jeden string der eingegeben wird splitten. Darum mache ich ja das \r\n hin oder z.b. - . Aber beides hat bisher nicht so funktioniert wie ich es mir vorstelle.


    Habe es mal mit dem fopen, fread, fclose, fputs versucht. Ist das selbe Problem.


    Wie ich es eigentlich vorhatte war, dass ich die einzelnen Eingaben in ein Array speicher. Dann bekommt jede eingabe einen eigenen key. Dann wollte ich überprüfen ob key 0 schon exsistiert oder nicht und wenn dieser schon exsistieren würde, habe ich "-" vor der value des keys getan. Aber das hat auch nicht funktioniert. Da wurden entweder die - , 2-fach oder 1 fach auf jeder seite ausgegeben. Ich muss es erreichen, dass das Zeichen - nur ab dem key 1 an den zuvor vergebenden key hinzufügt sodass es so aussieht in der txt datei:


    test-test-test


    Dann sind auch keine weiteren freien felder mehr. Nur die 3.


    Das \r\n habe ich benutzt, damit die eingaben immer 1ne Zeile bekommen. Und da es eh drin ist, dachte ich mir ich splitte es mit dem.


    Das Problem ist bei dem array, dass kein neuer schlüssel angelegt wird sondern der eine überschrieben wird. Habe schon mit der for schleife es versucht, bei jedem eingang der daten den key zu erhöhen. Auch kein erfolg.


    ich muss es hinbekommen, dass der key hochgezählt wird und jeder neue eintrag einem neuen key zugewiesen wird. Dann würde es auch kein Problem darstellen. Aber das geht nicht.

  • Im Eingangsbeitrag schreibst Du:

    Zitat

    Nur werden von Anfang an, obwohl nichts in der Txt-Datei ist schon 2 felder ausgegeben. Verstehe es nicht.

    Wenn "nichts" in der Datei steht, ist die Dateigrösse 0, dann können auch keine 2 Felder ausgegeben werden, zumindest nicht wegen des Dateiinhaltes. Daher war es interessant zu wissen, wie du die Datei erzeugt hast. Wenn das Problem aber gelöst ist, ist ja gut.


    Zu den Array-Keys:

    Wenn du einem neu angelegten leeren Array ein Element hinzufügst, ist der Index des ersten Elementes immer 0. Du könntest zB mit count() prüfen, ob überhaupt ein Element vorhanden ist.


    Im ersten Beispielcode ist die Zeile 10 ohne Funktion, da keine Zuweisung zu einer Variablen erfolgt. Die Datei wird dadurch auch nicht geändert. Ansonsten ist in den Beispielcodes nicht erkennbar, warum da Keys überschrieben werden sollten, da ja nur der Dateiinhalt eingelesen und in ein Array aufgesplittet wird.

  • Das ist die Lösung:


    Erklärung: In $file_daten steckt der ganze Inhalt der txt datei drin. Wenn diese datei leer ist soll zur beschreibung kein - hinzugefügt werden. Aus diesem Grund überprüfe ich, ob file_daten leer ist und wenn ja setze ich kein - und wenn nicht setze ich ein - . Das wars.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!