AndreD: Hilfe bei Lösungsansatz: dyn. Stundenplan ohne DB

Hallo zusammen,

Vorneweg:
Rein von der programmiertechnischen Umsetzung sollte es keine Probleme geben, es geht mehr um den theoretischen Lösungsansatz.

Ziel:
Ich möchte über Formulare einen Stundenplan erstellen und diesen mit verschiedenen Daten füllen können. Diese Struktur soll absichtlicht _nicht_ in einer DB, sondern in einer Datei als Array gespeichert werden. Dieses Array soll dann für die Darstellung included und ausgelesen werden.
Wegen der geringen Anzahl der Daten, d.h. max. 7 Tage á 10 Einheiten macht meiner Meinung nach das Speichern der Daten in einer DB keinen Sinn und wäre ein wenig zuviel des Guten.

Lösungsansatz:
-> Das erste Formular besteht aus einem Feld mit dem man die Anzahl der Wochentage wählen kann (also Mo-Mi oder Mo-So) und die max. Anzahl der Unterrichtseinheiten pro Tag (1-10). Nach dem Speichern wird das Array $stundenplan in der entsprechenden Struktur erstellt. Die Felder für die Einheiten sind dann leer (=0).

-> Die zweite Ansicht ist zeigt den aktuellen Plan wie in Formular 1 eingerichtet. Jedes Feld kann durch Klick editiert werden. Klickt man auf ein Feld wird das zweite Formular geöffnet, über die URL werden zwei Parameter übergeben: Der Wochentag und die Ziffer der Einheit. z.B. Dienstag und 3 wäre dann im Array $stundenplan["Dienstag"][3]

-> Das zweite Formular bestimmt anhand des Wochentages und der Einheit das Feld im Array der Stundenplanes. Es können nun mehrere Angaben zur dieser Einheit eingegeben werden. Also z.B. Wann die Stunde anfängt und aufhört, Bezeichung der Stunde, Anmerkung etc...
Diese Daten werden wiederum in ein eindimensionales Array geschrieben. Dieses kann nun auch im mehrdimensionalen Array $stundenplan an entsprechender Stelle $stundenplan["Dienstag"][3] gespeichert werden.

---> BIS DATO FUNKTIONERT MAL ALLES <---

Jetzt habe ich grundsätzlich das Problem das ich nicht weiss ob der bisherige Ansatz überhaupt praktikabel und generell umsetzbar ist. Der augenblickliche Knackpunkt ist das speichern einer Einheit, es wird in die Datei natürlich "Array" geschrieben anstatt die Struktur.
Das könnte ich wohl lösen indem ich wie schon beim ersten Formular das Array nochmal komplett erzeugen lasse, nur was passiert mit den bisherigen Einträgen der Einheiten?

Wer weiss was?
Hab ich nur ein Brett vor dem Kopp oder ist das alles Humbug oder wie?

1. Bisheriger Ansatz soweit ok, oder wo liegt der Denkfehler? Was kann man verbessern oder soll ich diesen komplett verwerfen?

2. Alternative Lösung: Jeder Tag bekommt eine eigene Datei in der die Einheiten und der Inhalt durch unterschiedliche Trennzeichen zeilenweise gespeichert werden. Per explode erstelle ich dann die Arraystruktur für jeden Tag. Praktikabler und besser, oder gibt es auch hier eine Lücke die ich nicht bedacht habe?

3. Weiss jemand eine bessere Lösung ausser DB?

Danke & Grüsse
AndreD

  1. Hi,

    Wegen der geringen Anzahl der Daten, d.h. max. 7 Tage á 10 Einheiten macht meiner Meinung nach das Speichern der Daten in einer DB keinen Sinn und wäre ein wenig zuviel des Guten.

    ab dem Moment wenn Du feststellst, dass Du die Daten nicht nur auslesen und allenfalls _anhängend_ schreiben möchtest, lohnt sich der Gedanke an eine DB. Unabhängig von der Menge der Daten.

    Jetzt habe ich grundsätzlich das Problem das ich nicht weiss ob der bisherige Ansatz überhaupt praktikabel und generell umsetzbar ist. Der augenblickliche Knackpunkt ist das speichern einer Einheit, es wird in die Datei natürlich "Array" geschrieben anstatt die Struktur.

    Für die Struktur der gespeicherten Daten musst Du selbst sorgen, das nimmt Dir die Programmiersprache i.d.R. nicht ab. Insbesondere ab mehr als zwei Dimensionen musst Du Dir für Dateien eh etwas überlegen - beispielsweise den Einsatz von XML.

    1. Bisheriger Ansatz soweit ok, oder wo liegt der Denkfehler? Was kann man verbessern oder soll ich diesen komplett verwerfen?

    Ich empfehle Dir den Einsatz einer Datenbank.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      ab dem Moment wenn Du feststellst, dass Du die Daten nicht nur auslesen und allenfalls _anhängend_ schreiben möchtest, lohnt sich der Gedanke an eine DB. Unabhängig von der Menge der Daten.

      Ok, das stimmt natürlich und ist wohl auch sehr viel praktikabler als das ganze was ich hier versuche.

      Für die Struktur der gespeicherten Daten musst Du selbst sorgen, das nimmt Dir die Programmiersprache i.d.R. nicht ab. Insbesondere ab mehr als zwei Dimensionen musst Du Dir für Dateien eh etwas überlegen - beispielsweise den Einsatz von XML.

      XML wäre wohl gegenüber dem Array die bessere Wahl. Bis heute habe ich leider nur mal recht einfache XML-Stukturen erstellt. Wenn ich es mir recht überlege wäre aber die Struktur für den Stundenplan auch nicht wirklich komplexer als das was ich bisher erstellt habe.

      Ich empfehle Dir den Einsatz einer Datenbank.

      Das war eigentlich auch mein erster Gedanke. Ziel dieses kleinen Versuches ist es eigentlich eben dies auch ohne DB umzusetzen. Hintergedanke war halt das die Datenmenge und Struktur recht klein bleiben würde. Deine erste Anmerkung unterstreicht ja Dein Fazit und ich kann Dir da auch nicht mit Argumenten widersprechen, ausser halt das es auch ohne gehen sollte ;-)

      Vielleicht ist Dein XML-Vorschlag umsetzbar, ich mach mir dazu auf jeden Fall mal im Laufe des Tages dazu Gedanken. Mal schaun was Google dazu meint. Ansonsten bleibt ja noch die Datenbanklösung *g*

      Danke & Gruss

      1. Hi,

        Ich empfehle Dir den Einsatz einer Datenbank.
        Das war eigentlich auch mein erster Gedanke. Ziel dieses kleinen Versuches ist es eigentlich eben dies auch ohne DB umzusetzen. Hintergedanke war halt das die Datenmenge und Struktur recht klein bleiben würde. Deine erste Anmerkung unterstreicht ja Dein Fazit und ich kann Dir da auch nicht mit Argumenten widersprechen, ausser halt das es auch ohne gehen sollte ;-)

        Vielleicht ist Dein XML-Vorschlag umsetzbar, ich mach mir dazu auf jeden Fall mal im Laufe des Tages dazu Gedanken. Mal schaun was Google dazu meint. Ansonsten bleibt ja noch die Datenbanklösung *g*

        "eigentlich" benoetigst Du keine Datenbankloesung. Denn diese waere zu komplex in der geschilderten Anforderungslage. Allerdings haette die Datenbankloesung u.a. den praktischen Vorteil, dass Du Dich nicht mit dem Filesystem herumschlagen muesstest ("Daten weg, ja wo ist denn die Datei? Hat meine Routine denn nach dem Loeschen der Datei die Daten bedingt durch einen kleinen Programmfehler nicht zurueckgeschrieben?" u.s.w.)

        XML ist allerdings m.E. fuer Zwecke der reinen Datenhaltung ideologisch betrachtet weniger geeignet. Vielleicht eine Loesung mit XML-Dokumenten und Datenbanken?   ;-)

        Gruss,
        Lude

        1. Hi,

          Allerdings haette die Datenbankloesung u.a. den praktischen Vorteil, dass Du Dich nicht mit dem Filesystem herumschlagen muesstest

          genau darum ging es mir.

          XML ist allerdings m.E. fuer Zwecke der reinen Datenhaltung ideologisch betrachtet weniger geeignet.

          Wenn ich das Kind mal beim Namen nennen darf: Wenn die Strukturen für CSV zu komplex werden - also mehr als zweidimensional sind - bietet XML eine flexible, ausbaufähige und natürlich auch in der Grundlage auffwändigere Alternative.

          Vielleicht eine Loesung mit XML-Dokumenten und Datenbanken?   ;-)

          Jedes XML lässt sich in eine Datenbankstruktur umwandeln. Von daher ist die Idee nicht so weit hergeholt ;-)

          Cheatah

          --
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
  2. hi,

    Jetzt habe ich grundsätzlich das Problem das ich nicht weiss ob der bisherige Ansatz überhaupt praktikabel und generell umsetzbar ist. Der augenblickliche Knackpunkt ist das speichern einer Einheit, es wird in die Datei natürlich "Array" geschrieben anstatt die Struktur.

    du darfst natürlich nicht einfach $mein_array in die datei schreiben lassen, sondern du musst $mein_array mit einer schleife durchlaufen, und jeden wert einzeln in die textdatei schreiben - wobei du dir natürlich eine geeignete struktur überlegen musst, in der du das auch nachher wieder eingelesen bekommst.

    einfachere lösung: schau dir serialize() / unserialize() an.
    http://www.php.net/manual/de/function.serialize.php
    damit kannst du ein array in einen string umwandeln, und diesen string auch wieder in dein ursprüngliches array.
    du müsstest also nur noch diesen einen string in deine datei schreiben, und beim wieder auslesen liest du nur diesen einen string aus der datei, und wandelst ihn wieder in ein array um.

    gruss,
    wahsaga

    1. Servus wahsaga,

      du darfst natürlich nicht einfach $mein_array in die datei schreiben lassen, sondern du musst $mein_array mit einer schleife durchlaufen, und jeden wert einzeln in die textdatei schreiben - wobei du dir natürlich eine geeignete struktur überlegen musst, in der du das auch nachher wieder eingelesen bekommst.

      Daran hängts wohl gerade, komischerweise kann ich mir grundsätzlich vorstellen wie das ganze funktionieren könnte. Ich denke nur dass das ganze nachher ein wenig XXL ist und man das ganze raffinierter lösen könnte. Naja muss mir mal noch ein paar Gedanken machen.

      einfachere lösung: schau dir serialize() / unserialize() an.
      http://www.php.net/manual/de/function.serialize.php
      damit kannst du ein array in einen string umwandeln, und diesen string auch wieder in dein ursprüngliches array.

      Jan hat mich auch an die Funktion erinnert. Ich habe die auch schon mal angewandt. Danke für den Fingerzeig!

      du müsstest also nur noch diesen einen string in deine datei schreiben, und beim wieder auslesen liest du nur diesen einen string aus der datei, und wandelst ihn wieder in ein array um.

      Ich glaube das ist genau das was ich gesucht habe. Ich probiere das mal im Laufe des Tages und gebe Feedback. Als alternative Lösung könnte ich mir XML für die Stuktur im Moment sogar besser als das Array vorstellen, leider mangelt es ein wenig an Erfahrung bez. PHP & XML, mal sehn! Ich werde auf jeden Fall erstmal das mit serialize/unserialize teste, falls das auch nicht hilft die XML-Variante überlegen und wenn das auch nicht hinhaut das ganze halt doch mit einer Datenbankstruktur umsetzen ;-)

      Vielen Dank für die Hilfe,
      Gruss AndreD

  3. Hallo AndreD,

    Jetzt habe ich grundsätzlich das Problem das ich nicht weiss ob der bisherige Ansatz überhaupt praktikabel und generell umsetzbar ist. Der augenblickliche Knackpunkt ist das speichern einer Einheit, es wird in die Datei natürlich "Array" geschrieben anstatt die Struktur.

    Siehe http://www.php.net/serialize.

    1. Bisheriger Ansatz soweit ok, oder wo liegt der Denkfehler? Was kann man verbessern oder soll ich diesen komplett verwerfen?

    Alternativ koenntest Du eine Konfigurationsdatei anlegen, deren Inhalt Du mithilfe von parse_ini_file() (http://www.php.net/parse_ini_file) in einem Array zurueckgeliefert bekommst.

    Beste Gruesse

    Jan

    1. Hallo Jan

      Siehe http://www.php.net/serialize.

      Ja, ich glaube ich hatte das schon mal im Zusammenhang mit einem Array das per POST verschickt wird angewandt. Danke für den Denkanstoss.

      Alternativ koenntest Du eine Konfigurationsdatei anlegen, deren Inhalt Du mithilfe von parse_ini_file() (http://www.php.net/parse_ini_file) in einem Array zurueckgeliefert bekommst.

      Danke mal für die Anregung, das schau ich mir doch gleich mal an. Ansonsten hatte mich Cheatah noch auf eine mögliche Lösung per XML-File gebracht, er ist wohl eher für eine Datenbank-Lösung. Ich denke halt das man mittels XML die Stundenplan-Struktur sehr schön darstellen könnte? Leider habe ich da nicht so viel Erfahrung im Zusammenspiel mit PHP, mal schau was bei rauskommt.

      Vielen Dank für die Denkanstösse,
      Gruss AndreD