azok: Weblog mit Flat-Files...

hi!

ich habe mir vorgenommen ein weblog zu schreiben, welches ohne datenbank auskommt und nur .dat files verwendet. mittlerweile habe ich mal das grundgerüst (ähnlich einem gästebuch) geschrieben. nun habe ich folgende fragen/probleme, wo ich nicht weiß, wie ich weitermachen soll:

1.) Wie schaffe ich es, dass man jeden Beitrag kommentieren kann? Ich habe es mir so vorgestellt: Nach jedem Beitrag gibt es einen link [Kommentar]. klickt man dort drauf, wird über die url ein ?comment übergeben. php prüft dann mittels $_GET[] welcher wert in der URL steht. (z.b. ?writenews für news zu schreiben). dann wird wiederum ein zweites 'gästebuch' geladen, wo man seine kommentare hinterlassen kann. An sich ist das bis hierher kein Problem. Die Kommentareinträge werden in einer comment.dat abgespeicher und zwar wie folgt:

feld1|feld2|feld3|uniqid("")
feld1|feld2|feld3|uniqid("")

wie kann ich dann aber herausfinden, welches kommentar zu welchem 'basiseintrg' gehört, und das auf dessen dementsprechenden 'gästebuch' ausgeben lassen?

2.) ...ein kleines problem habe ich dann noch, nämlich, die daten, die ich in das .dat file speicher sehen so aus:

uniqid("")|feld1|feld2|feld3

für den nächsten eintrag sollte dann ein "\n" folgen, also eine neue zeile begonnen werden. komischerweise wird das aber nicht gemacht, sondern anstelle der neuen zeile steht in der .dat ein [] (also ein feld, wo ein zeichen nicht angezeigt werden kann). - weiß jemand von euch, was da los ist?

danke schon im voraus!

lg
azok

--
Murphys Law: "Alles Schöne im Leben ist entweder illegal, ungesetzlich oder es macht dick."
Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:( n4:° ss:| de:] js:| ch:( sh:) mo:) zu:)
  1. hi,

    für den nächsten eintrag sollte dann ein "\n" folgen, also eine neue zeile begonnen werden. komischerweise wird das aber nicht gemacht, sondern anstelle der neuen zeile steht in der .dat ein [] (also ein feld, wo ein zeichen nicht angezeigt werden kann). - weiß jemand von euch, was da los ist?

    vermutung:

    • du überträgst die datei per FTP binary statt ascii.
    • du schaust dir die datei mit einem editor an, der nicht in der lage ist, automatisch zwischen unix- und windows-zeilenumbrüchen zu kovertieren.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  2. Hi,

    feld1|feld2|feld3|uniqid("")
    wie kann ich dann aber herausfinden, welches kommentar zu welchem 'basiseintrg' gehört

    unique muss nicht unique sondern die id des Eintrages sein, der kommentiert werden soll. Finden entweder mit substr($line, strrpos($line, "|") +1) oder als letztes Arrayelement nach explode("|", $line), vor dem Vergleich mit der ID trimmen (wegen moeglicher Leerzeichen).

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. hi!

      unique muss nicht unique sondern die id des Eintrages sein, der kommentiert werden soll. Finden entweder mit substr($line, strrpos($line, "|") +1) oder als letztes Arrayelement nach explode("|", $line), vor dem Vergleich mit der ID trimmen (wegen moeglicher Leerzeichen).

      ok. vielleicht hätte ich dazu sagen sollen, dass ich in php (erst) mäßig fortgeschritten bin. kann deshalb leider mit der antwort noch nicht so viel anfangen. (die funktionen etc. sind mir schon ein begriff, aber die logik (noch) nicht). bzw. sollte man der uniqid ein präfix zuordnen, welches sich je nach 'basiseintrag' ändert? z.b. nachricht1[uniqid]
           nachricht2[uniqid]

      lg
      azok

      --
      Murphys Law: "Alles Schöne im Leben ist entweder illegal, ungesetzlich oder es macht dick."
      Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:( n4:° ss:| de:] js:| ch:( sh:) mo:) zu:)
      1. Hi,

        ok. vielleicht hätte ich dazu sagen sollen, dass ich in php (erst) mäßig fortgeschritten bin.

        hm, das hat eigentlich nicht direkt was mit php zu tun. Ich wuerde sowas machen:

        Eintrag
        id | data | data ...
        --------------------
        1  | foo  | bar
        2  | lala | lulu

        Kommentar
        id | toid | data ...
        --------------------
        1  | 1    |foo is doll
        2  | 1    |foo is blöd
        3  | 1    |foo is doll
        4  | 2    |lala is nix

        Anhand der toid kannst Du jeden Kommentar zur Id eines Eintrages zuordnen.

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
        1. hi!

          hm, das hat eigentlich nicht direkt was mit php zu tun. Ich wuerde sowas machen:

          Eintrag
          id | data | data ...

          1  | foo  | bar
          2  | lala | lulu

          Kommentar
          id | toid | data ...

          1  | 1    |foo is doll
          2  | 1    |foo is blöd
          3  | 1    |foo is doll
          4  | 2    |lala is nix

          Anhand der toid kannst Du jeden Kommentar zur Id eines Eintrages zuordnen.

          das klingt logisch, ja. - eine andere frage habe ich jedoch noch, und zwar, wie ich die einzelnen id's erstellen kann, ohne einer zusätzlichen .dat bzw. .txt die einfach nur hinaufzählt?

          lg
          azok

          --
          Murphys Law: "Alles Schöne im Leben ist entweder illegal, ungesetzlich oder es macht dick."
          Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:( n4:° ss:| de:] js:| ch:( sh:) mo:) zu:)
          1. hi!

            bin schon draufgekommen. geht ziemlich einfach über file() und count().

            lg
            azok

            --
            Murphys Law: "Alles Schöne im Leben ist entweder illegal, ungesetzlich oder es macht dick."
            Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:( n4:° ss:| de:] js:| ch:( sh:) mo:) zu:)
            1. Hello,

              bin schon draufgekommen. geht ziemlich einfach über file() und count().

              Das ist dann aber keine ID (Primärschlüssel), sondern eine laufende Nummer in der Abfrage.
              Im Multiuser-Betrieb macht das auf jeden Fall dann Probleme. Da benötigst Du ECHTE Primärschlüssel.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. hi!

                Im Multiuser-Betrieb macht das auf jeden Fall dann Probleme. Da benötigst Du ECHTE Primärschlüssel.

                gibt es dazu sowas wie ein tutorial oder ähnliches?

                lg
                azok

                --
                Murphys Law: "Alles Schöne im Leben ist entweder illegal, ungesetzlich oder es macht dick."
                Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:( n4:° ss:| de:] js:| ch:( sh:) mo:) zu:)
                1. Hello,

                  gibt es dazu sowas wie ein tutorial oder ähnliches?

                  noch nicht wirklich. Aber wesentliche Grundüberlegungen, was man mit Flatfiles alles erreichen kann, findest Du unter http://selfhtml.bitworks.de unter den experiemntellen Flatfile-Funktionen oder in dem Beispiel mit der Adressdatei

                  Harzliche Grüße aus http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  1. Hi Tom,

                    (...) unter http://selfhtml.bitworks.de unter den experiemntellen Flatfile-Funktionen oder in dem Beispiel mit der Adressdatei

                    Btw: Hast du mittlerweile mal (irgend-) eine E-Mail von mir bekommen? Oder spinnt mein E-Mail Client etwa immer noch ... ?

                    MfG, Dennis.

                    --
                    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:| [decode]
                    Das Leben ist kein Warenhaus - es nimmt nichts zurück. (Anette Louisan)
                    1. Hello,

                      Btw: Hast du mittlerweile mal (irgend-) eine E-Mail von mir bekommen? Oder spinnt mein E-Mail Client etwa immer noch ... ?

                      Ich ahbe schon diverse eMails von Dir bekommen, aber die sind immer verstümmelt, was ich Dir ja auch schon mitgeteilt habe. Nur die letze bezüglich der Seriösität mit Serverrechten, und ob Fabian das auch gutheißt, die kam relativ vollständig an. Ich hatte nur noch keine Zeit, mich um die Definition eines

                      PHP-Script-Pools für selfhtml

                      zu kümmern.

                      Das wird dann ja ein etwas besonderes Forum werden müssen. Es soll etwas komplexere Zusammenhänge darstellen, dazu Erklärungen und Beschreibung von Fallen wiedergeben. Außerdem sollen die Scripte in ca. fünf Levels eingeteilt werden, die dann auch unterneinander verlinkt wrden können. Ohne Level 1 zu können, kann man Level 3 nicht verstehen ... Es muss also auch für Irrläufer einen Rückweg geben, um sich zu einem Thema sofort die passenden Basisinformationen ziehen zu können.

                      Wer Lust hat, das System erstmal mit zu definieren, sollte sich bei Dennis oder mir melden oder hier posten, soweit es die Allgemeinheit betrifft.

                      Harzliche Grüße aus http://www.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau
                      1. Hi Tom,

                        Ich ahbe schon diverse eMails von Dir bekommen, aber die sind immer verstümmelt, was ich Dir ja auch schon mitgeteilt habe. Nur die letze bezüglich der Seriösität mit Serverrechten, und ob Fabian das auch gutheißt, die kam relativ vollständig an. Ich hatte nur noch keine Zeit, mich um die Definition eines

                        Das "verstümmelt" liegt wohl daran, dass ich E-Mail zu weilen so zu zitieren pflege, wie man hier im Forum zitiert ;-)

                        Aber wenigstens ist die E-Mail überhaupt angekommen - Mozilla Thunderbird hat sich bewährt *g*

                        MfG, Dennis.

                        --
                        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:| [decode]
                        Antworten per E-Mail gibts hier nicht!
                      2. Hi Tom,

                        Es soll etwas komplexere Zusammenhänge darstellen, dazu Erklärungen und Beschreibung von Fallen wiedergeben. Außerdem sollen die Scripte in ca. fünf Levels eingeteilt werden, die dann auch unterneinander verlinkt wrden können. Ohne Level 1 zu können, kann man Level 3 nicht verstehen

                        Mein Vorschlag wäre als erstes: Die Dateifunktionen (ist ja eigentlich nur flat_open_lock(), oder?) sowie grundsätzliche überall zu gebrauchende Funktionen (z.B. get_microtime()) zu extrahieren und daraus die erste Basis zu erstellen.

                        MfG, Dennis.

                        --
                        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:| [decode]
                        Antworten per E-Mail gibts hier nicht!
                        1. Hello,

                          Es soll etwas komplexere Zusammenhänge darstellen, dazu Erklärungen und Beschreibung von Fallen wiedergeben. Außerdem sollen die Scripte in ca. fünf Levels eingeteilt werden, die dann auch unterneinander verlinkt wrden können. Ohne Level 1 zu können, kann man Level 3 nicht verstehen

                          Mein Vorschlag wäre als erstes: Die Dateifunktionen (ist ja eigentlich nur flat_open_lock(), oder?) sowie grundsätzliche überall zu gebrauchende Funktionen (z.B. get_microtime()) zu extrahieren und daraus die erste Basis zu erstellen.

                          Mir geht es nich nur um diese Flat-File-Funktionen sondern um alle Beispiele, die sich im Laufe der Zeit so ansammeln. Gästebuch in verschiedenen Schwierigkeitsgraden, Userverwaltung, geschlossene Bereiche, Bildgalerie, Navigation durch Landkarten, ... usw.

                          Also alles Sachen, die man immer mal wieder braucht ;-)

                          Harzliche Grüße aus http://www.annerschbarrich.de

                          Tom

                          --
                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                          Nur selber lernen macht schlau
                          1. Hi Tom,

                            Mein Vorschlag wäre als erstes: Die Dateifunktionen (ist ja eigentlich nur flat_open_lock(), oder?) sowie grundsätzliche überall zu gebrauchende Funktionen (z.B. get_microtime()) zu extrahieren und daraus die erste Basis zu erstellen.

                            Mir geht es nich nur um diese Flat-File-Funktionen sondern um alle Beispiele, die sich im Laufe der Zeit so ansammeln. Gästebuch in verschiedenen Schwierigkeitsgraden, Userverwaltung, geschlossene Bereiche, Bildgalerie, Navigation durch Landkarten, ... usw.

                            Ich habe da auch noch irgendwo eine export.lib.php rumfliegen, mit der sich eine MySQL Datenbank exportieren lässt und der Dump direkt als .gz File speichern lässt. Vielleicht sollte ich das Ding aber auch noch zu einer vernüftigen Klasse umschreiben ;-)

                            Mal noch eine grundliegende Frage: Sollen wir uns an PHP 4 oder an PHP 5 orientieren?
                            Mein Vorschlag wäre: Die FlatBox (o.ä.) bleibt weiterhin so bestehen wie jetzt, weiterentwickelt wird allerdings nur in PHP 5.

                            MfG, Dennis.

                            --
                            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:| [decode]
                            Wissen ist gut, Können ist besser, aber das Beste und Interessanteste ist der Weg dahin! (Detlef G.)
                            1. Hello Dennis,

                              Mal noch eine grundliegende Frage: Sollen wir uns an PHP 4 oder an PHP 5 orientieren?
                              Mein Vorschlag wäre: Die FlatBox (o.ä.) bleibt weiterhin so bestehen wie jetzt, weiterentwickelt wird allerdings nur in PHP 5.

                              Das halte ich auch für sinnvoll.
                              Allerdings muss ich dann endlich mal ein PHP 5 aufsetzen und aktiv damit arbeiten.

                              Es muss aber trotz PHP 5 nicht alles in OOP erstellt werden, auch wenn das auf den ersten Blick so erscheinen mag.

                              Ich werde die nächsten Tage mal aufräumen und dann den Zugang freigeben.

                              Harzliche Grüße aus http://www.annerschbarrich.de

                              Tom

                              --
                              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                              Nur selber lernen macht schlau
                              1. Hi Tom,

                                Mal noch eine grundliegende Frage: Sollen wir uns an PHP 4 oder an PHP 5 orientieren?
                                Mein Vorschlag wäre: Die FlatBox (o.ä.) bleibt weiterhin so bestehen wie jetzt, weiterentwickelt wird allerdings nur in PHP 5.

                                Das halte ich auch für sinnvoll.
                                Allerdings muss ich dann endlich mal ein PHP 5 aufsetzen und aktiv damit arbeiten.

                                Hehe, ich hatte bis jetzt auch keins ;-) Habe mir jetzt aber unter Windows mal das neuste XAMPP installiert und das noch so umgefriemelt, dass ich PHP 4 (.php) und PHP 5 (.php5) gleichzeitig laufen habe. Standardmäßig ist da ja so ein komischer PHP Switcher dabei.
                                Und unter Linux bin ich ja gerade dabei mir alles von Hand zu kompilieren und zusammen zu basteln, aber da haperts i.M. noch mit dem MySQL Server ...

                                Es muss aber trotz PHP 5 nicht alles in OOP erstellt werden, auch wenn das auf den ersten Blick so erscheinen mag.

                                Ganz meine Meinung, zumal ich in OOP sowieso noch ziemlich am Anfang stehe.

                                Ich werde die nächsten Tage mal aufräumen und dann den Zugang freigeben.

                                OK.

                                MfG, Dennis.

                                --
                                Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:| [decode]
                                Die Definition des SelfCodes ist hier zu finden, es gibt auch einen Encoder.
            2. Hallo

              bin schon draufgekommen. geht ziemlich einfach über file() und count().

              Damit kannst du nur die Anzahl der Einträge ermitteln. Wenn du mitten in der Datei einen Eintrag gelöscht hast, sagen wir die IDs der beuiträge sehen so aus: 0,1,2,3,5,6,7 (Beitrag 4 wurde gelöscht), wird nach deiner Programmlogik für den neuen, den achten erfolgten, Eintrag, die ID 7 ein zweites Mal vergeben.

              Tschö, Auge

              --
              Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
              (Victor Hugo)
              Veranstaltungsdatenbank Vdb 0.1
  3. Hi,

    okay, gute Idee. Aber hast Du Dir auch schon Gedanken über die Dateizugriffe selbst gemacht? Lesen ist relativ unproblematisch aber beim Schreiben mußt Du die Dateien sperren, damit nicht versehentlich was kaputt geht. Das kann sonst nämlich schon mal passieren, wenn zwei oder mehr Benutzer gleichzeitig zugreifen...

    MfG
    Danny

    1. Hi,

      Lesen ist relativ unproblematisch aber beim Schreiben mußt Du die Dateien sperren, damit nicht versehentlich was kaputt geht.

      Dafuer kann man flock nehmen... Ich habe hier ganz gute Hinweise bekommen: http://forum.de.selfhtml.org/archiv/2005/1/t99170/#m605510

      Gruesse, Joachim

      --
      Am Ende wird alles gut.