Weblog mit Flat-Files...
azok
- programmiertechnik
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
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:
gruß,
wahsaga
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
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
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
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 | luluKommentar
id | toid | data ...1 | 1 |foo is doll
2 | 1 |foo is blöd
3 | 1 |foo is doll
4 | 2 |lala is nixAnhand 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
hi!
bin schon draufgekommen. geht ziemlich einfach über file() und count().
lg
azok
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
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
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
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.
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
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.
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.
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
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.
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
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.
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
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
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