Kai: Wie kann ich eine, durch Benutzer bearbeitbare, Liste erstellen.

Ahoi!

Ich möchte auf einer Webseite eine Liste bereitstellen, die durch Benutzer ergänzt und editiert werden kann. Am liebsten wäre mir eine möglichst einfache Umsetzung mit PHP, Javascript und einer einfachen Textdatei.

Die Liste sollte neben jedem Eintrag einen "löschen / "-""- und einen "bearbeiten / "Stift""-Button haben und unter der Liste ein Feld für neue Einträge ("+").

Leider habe ich nur Tutorials oder Anleitungen gefunden, die direkt mit SQL und fortgeschrittenen Ajax-Techniken funktionieren.

Hat da jemand eine Lösung oder einen Ansatz, der auf "höhere" Datenbanksachen verzichtet?

sonnige Grüße
kai

  1. Hi,

    Hat da jemand eine Lösung oder einen Ansatz, der auf "höhere" Datenbanksachen verzichtet?

    Das ist nicht besonders sinnvoll, denn alle Features die die Datenbank dir bietet, implementierst du dann selber für deine Textdatei (Datensätze identifizieren, löschen, ändern, hinzufügen).

    Mach dir lieber den Aufand, dich ein bisschen mit SQL zu beschäftigen; und als Datenbank-Syste, tut’s dann auch sowas einfaches wie SQLite.

    MfG ChrisB

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    1. Hallo,

      Hat da jemand eine Lösung oder einen Ansatz, der auf "höhere" Datenbanksachen verzichtet?

      Das ist nicht besonders sinnvoll, denn alle Features die die Datenbank dir bietet, implementierst du dann selber für deine Textdatei (Datensätze identifizieren, löschen, ändern, hinzufügen).

      Manchmal sind auch "kleine" Lösungen sinnvoll. Erfolgserlebnisse für Anfänger machen Mut, weiter einzusteigen.

      Du kannst eine einfache Textdatei einlesen, jede Zeile ist dann das Element eines Arrays. Du zeigst die Zeilen als Eingabefeld an, damit sie änderbar sind. Zusätzlich ein leeres Eingabefeld für eine neue Position.

      Bei Empfang des Formulars schreibst du ausgefüllte Felder als Zeilen in die Textdatei zurück. Leere Felder natürlich nicht, das sind dann die gelöschten Einträge.

      Problem ergibt sich, wenn mehrere Benutzer die Datei einlesen und bearbeiten. Die letzte Änderung überschreibt die vorhergehenden.

      Linuchs

      1. Hallo,

        Hat da jemand eine Lösung oder einen Ansatz, der auf "höhere" Datenbanksachen verzichtet?

        Das ist nicht besonders sinnvoll, denn alle Features die die Datenbank dir bietet, implementierst du dann selber für deine Textdatei (Datensätze identifizieren, löschen, ändern, hinzufügen).

        Manchmal sind auch "kleine" Lösungen sinnvoll. Erfolgserlebnisse für Anfänger machen Mut, weiter einzusteigen.

        Du kannst eine einfache Textdatei einlesen, jede Zeile ist dann das Element eines Arrays. Du zeigst die Zeilen als Eingabefeld an, damit sie änderbar sind. Zusätzlich ein leeres Eingabefeld für eine neue Position.

        Bei Empfang des Formulars schreibst du ausgefüllte Felder als Zeilen in die Textdatei zurück. Leere Felder natürlich nicht, das sind dann die gelöschten Einträge.

        Problem ergibt sich, wenn mehrere Benutzer die Datei einlesen und bearbeiten. Die letzte Änderung überschreibt die vorhergehenden.

        Linuchs

        Danke für die Hinweise, mindestens als Fingerübung werde ich das mal probieren, muss einfach wieder warm werden mit JScript, PHP etc.

        Daran, dass dabei natürlich auch Versionskollisionen passieren können habe ich noch gar nicht gedacht - Versionsverwaltung a la git dürfte für die angestrebte Minimallösung doch zu umfangreich sein ;o)

        1. Hallo,

          Daran, dass dabei natürlich auch Versionskollisionen passieren können habe ich noch gar nicht gedacht - Versionsverwaltung a la git dürfte für die angestrebte Minimallösung doch zu umfangreich sein ;o)

          Versionsverwaltung a la git? Für was? Für die Einträge in der Liste?

      2. Hello,

        Hat da jemand eine Lösung oder einen Ansatz, der auf "höhere" Datenbanksachen verzichtet?

        Manchmal sind auch "kleine" Lösungen sinnvoll. Erfolgserlebnisse für Anfänger machen Mut, weiter einzusteigen.

        Finde ich auch. Insbesondere, da dann erstmal Wert auf die Basics gelegt werden kann.

        Du kannst eine einfache Textdatei einlesen, jede Zeile ist dann das Element eines Arrays.

        Er kann auch gleich eine ganze mehrdimensionale Datenstruktur ("Array") serialisieren und abspeichern. Das ist bequem, also mittels der PHP-Funktionen leicht zu handhaben. Es ist übersichtlich und bis zur Dateigröße von ca. 1MB auch noch akzeptabel für die Geschwindigkeit, wenn es sich um einen begrenzten Benutzerkreis handelt.

        BTW: auch eine Datenbank wird irgendwann zusammenbrechen, wenn die Anzahl der Statements zu groß wird.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bikers-lodge.com
      3. Hi!

        Problem ergibt sich, wenn mehrere Benutzer die Datei einlesen und bearbeiten. Die letzte Änderung überschreibt die vorhergehenden.

        Das laesst sich relativ einfach und platt loesen: Schreibe einen Timestamp in die Datei und ueberpruefe den vorm Schreiben. Ist der neuer als beim Laden, gibt sowohl die eigenen Veraenderungen als auch die neue Liste wieder aus.

        --
        Signaturen sind bloed.
        1. Hello,

          Problem ergibt sich, wenn mehrere Benutzer die Datei einlesen und bearbeiten. Die letzte Änderung überschreibt die vorhergehenden.

          Das laesst sich relativ einfach und platt loesen: Schreibe einen Timestamp in die Datei und ueberpruefe den vorm Schreiben. Ist der neuer als beim Laden, gibt sowohl die eigenen Veraenderungen als auch die neue Liste wieder aus.

          Ein Timestamp ist in der Praxis zwar meistens ausreichend, in der Theorie aber falsch, da seine Ordinalität nicht abhängig vom Schreibvorgang ist. Es könnten immer noch mehrere Schreibvorgänge auf einen Wert entfallen.

          Besser ist ein Schreibzähler, der bei jedem Schreiben um Eins erhöht wird.

          Wenn man etwas mehr Manipulationssicherheit will, gibt man den Zähler nicht aus, sondern speichert ihn beim vorhergen Lesen in der Session, oder aber man gibt z.B. einen Hash für den Zähler aus, den man dann beim Rückschreiben überprüfen kann. Die Fehlerwahrscheinlichkeit durch den Hash ist beträgt nur einen Bruchteil der Gefahr durch Manipulation...

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bikers-lodge.com
    2. Hi,

      Hat da jemand eine Lösung oder einen Ansatz, der auf "höhere" Datenbanksachen verzichtet?

      Das ist nicht besonders sinnvoll, denn alle Features die die Datenbank dir bietet, implementierst du dann selber für deine Textdatei (Datensätze identifizieren, löschen, ändern, hinzufügen).

      Mach dir lieber den Aufand, dich ein bisschen mit SQL zu beschäftigen; und als Datenbank-Syste, tut’s dann auch sowas einfaches wie SQLite.

      Da hast Du vermutlich Recht... hätte ich dennoch irgendwie ganz schön gefunden...

      Habe jetzt auch was gefunden, falls wer ähnliches vor hat:

      http://tutorialzine.com/2010/03/ajax-todo-list-jquery-php-mysql-css/
      Lösung mit ajax, jquerry, php, css und SQL - schon relativ einfach, werde das vermutlich für meine Ansprüche noch etwas weiter vereinfachen.

      http://www.appelsiini.net/projects/jeditable
      Genauer ansehen werde ich mir außerdem "jeditable", es wirkt recht simpel und vielseitig

      Werde nochmal posten, wenn ich DIE Lösung für mich gefunden habe (also möglichst simpel, im besten Fall ohne fremde Frameworks) - falls jemand DIE Lösung schon hat, freue ich mich - nach wie vor - über Vorschläge, Ideen, Lösungen...

      sonnige grüße
      kai

      1. Hello,

        Habe jetzt auch was gefunden, falls wer ähnliches vor hat:

        http://tutorialzine.com/2010/03/ajax-todo-list-jquery-php-mysql-css/
        Lösung mit ajax, jquerry, php, css und SQL - schon relativ einfach, werde das vermutlich für meine Ansprüche noch etwas weiter vereinfachen.

        Du fängst Doch gerade an mit der Web-Programmierung, oder?

        Da verstehe ich nicht, warum Dir die Kollegen hier gleich alles auf einmal empfehlen und Du dir dann auch noch eine "Lösung" heraussuchst, die dich gleich "vom Nichtschwimmer zum Tiefseetaucher" machen will.

        Wesentlicher ist mMn die Klärung der Rahmenbedingungen für dieses Projekt:

        Wie groß soll die Liste werden?
        Wie genau sollen die Benutzerrechte zugeteilt werden?
          Darf jeder Berechtigte alle Datensaätze sehen, verändern, löschen?

        Das Beispiel ist nicht gerade ideal zum Start.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bikers-lodge.com
        1. Hi Tom,

          Wesentlicher ist mMn die Klärung der Rahmenbedingungen für dieses Projekt:

          Wie groß soll die Liste werden?
          Wie genau sollen die Benutzerrechte zugeteilt werden?
            Darf jeder Berechtigte alle Datensätze sehen, verändern, löschen?

          Gerade fuer einen Anfaenger ist das nun wirklich sekundaer. Fuer ihn wird's sicher erstmal darum gehen, wie er mit PHP eine Textdatei zum Schreiben aufmacht und wieder zu und die Sache mit den HTTP Requests hinbekommt fuer das Hinzufuegen und veraendern, Dann hat er das Grundgeruest um sich die Gedanken ueber Benutzerberechtigungen zu machen.

          Das Beispiel ist nicht gerade ideal zum Start.

          Stimme ich zu.

          Ciao, Frank

          1. Hello Frank,

            Wesentlicher ist mMn die Klärung der Rahmenbedingungen für dieses Projekt:

            Wie groß soll die Liste werden?
            Wie genau sollen die Benutzerrechte zugeteilt werden?
              Darf jeder Berechtigte alle Datensätze sehen, verändern, löschen?

            Gerade fuer einen Anfaenger ist das nun wirklich sekundaer. Fuer ihn wird's sicher erstmal darum gehen, wie er mit PHP eine Textdatei zum Schreiben aufmacht und wieder zu und die Sache mit den HTTP Requests hinbekommt fuer das Hinzufuegen und veraendern, Dann hat er das Grundgeruest um sich die Gedanken ueber Benutzerberechtigungen zu machen.

            Darum frage ich ja danach, wie kompliziert er es haben will.

            Vielleicht ist Kai ja gar kein Anfänger, wenn er denn sofort die diversen Sprachen und Hilfsmittel mischen will? JQuery und AJAX sind ja nun auch nicht ohne...

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bikers-lodge.com
            1. Vielleicht ist Kai ja gar kein Anfänger, wenn er denn sofort die diversen Sprachen und Hilfsmittel mischen will? JQuery und AJAX sind ja nun auch nicht ohne...

              Das wuerde/soellte man (eigentlich) an der Art und Weise der Fragestellung erkennen koennen. :-)

              Cheers, Frank

  2. Mahlzeit,

    und einer einfachen Textdatei.

    Diese Lösung dürfte aber das komplizierteste sein, was du dir aussuchen kannst.
    Wenn  du keinen zwingenden Grund hast, auf ein DBMS zu verzichten, dann nutze eines.

    --
    42
  3. hi,

    Hat da jemand eine Lösung oder einen Ansatz, der auf "höhere" Datenbanksachen verzichtet?

    Der Ansatz "Textdatei" wäre zu überlegen, d.h., warum "Textdatei"? Guck mal, in PHP gibt es einen prima Serializer, der kann auch mit Dateien und wie die Datei innendrinnen aussieht, ist doch letztendlich völlig egal, wenn nach dem Lesen Deine Datenstruktur unzerknittert wiederhergestellt wird.

    Du konzentrierst Dich ganz einfach aufs Erstellen und den Umgang mit einer zweckmäßigen Datenstruktur (Tipp: Array) in Deinem Programm und überlässt die Dateiarbeit den Funktionen, wo dafür gemacht sind. Fertig.

    Oder willste Das Rad neu erfinden ;)

    1. Meine Herren!

      in PHP gibt es einen prima Serializer, der kann auch mit Dateien und wie die Datei innendrinnen aussieht, ist doch letztendlich völlig egal […]

      Für dieses einfache Beispiel und zum Lernen ist das ein gangbarer Ansatz. Aber ich möchte noch den Warnhinweis hinzufügen, dass das in der Produktiv-Welt möglichst vermieden wird. Man erzeugt damit eine Abhängigkeit zwischen Programmiersprache und Daten, die man nur schwer wieder dekomponieren kann. Wenn wir an Skalierbarkeit denken, dann müssen wir berücksichtigen, dass unsere Daten in Zukunft möglicherweise von anderen Quellen angezapft und gefüttert werden, die nicht mit PHPs serialize umgehen können.

      --
      “All right, then, I'll go to hell.” – Huck Finn
      1. Hallo

        … Wenn wir an Skalierbarkeit denken, dann müssen wir berücksichtigen, dass unsere Daten in Zukunft möglicherweise von anderen Quellen angezapft und gefüttert werden, die nicht mit PHPs serialize umgehen können.

        Öhhm, ist PHPs serialize anders als andere serializes?

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
        Veranstaltungsdatenbank Vdb 0.3
        1. Meine Herren!

          Hallo

          … Wenn wir an Skalierbarkeit denken, dann müssen wir berücksichtigen, dass unsere Daten in Zukunft möglicherweise von anderen Quellen angezapft und gefüttert werden, die nicht mit PHPs serialize umgehen können.

          Öhhm, ist PHPs serialize anders als andere serializes?

          Ja sicher, JSON zählt beispielsweise auch als Serialisierung. Abstrakt betrachtet ist eine Serialisierung nur die Überführung von einem Objekt-Zustand in ein persistent speicherbares Format. PHPs serialize macht aber heimlich mehr als man vermuten würde: siehe __sleep() oder __wakeup() unter den Magic Methods.

          --
          “All right, then, I'll go to hell.” – Huck Finn
          1. Hallo

            … Wenn wir an Skalierbarkeit denken, dann müssen wir berücksichtigen, dass unsere Daten in Zukunft möglicherweise von anderen Quellen angezapft und gefüttert werden, die nicht mit PHPs serialize umgehen können.

            Öhhm, ist PHPs serialize anders als andere serializes?

            Ja sicher, JSON zählt beispielsweise auch als Serialisierung. Abstrakt betrachtet ist eine Serialisierung nur die Überführung von einem Objekt-Zustand in ein persistent speicherbares Format. PHPs serialize macht aber heimlich mehr als man vermuten würde: siehe __sleep() oder __wakeup() unter den Magic Methods.

            Isat ja schön, meine Frage ging aber dahin, ob sich das Datenformat des PHP-serialize von anderen serialises unterscheidet? Was während der Serialisierung geschieht, kann mir voin außen ja vollkommen Wurscht sein, das Ergebnis interessiert mich aber schon.

            Tschö, Auge

            --
            Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
            Terry Pratchett, "Wachen! Wachen!"
            ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
            Veranstaltungsdatenbank Vdb 0.3
            1. Hi,

              Isat ja schön, meine Frage ging aber dahin, ob sich das Datenformat des PHP-serialize von anderen serialises unterscheidet?

              Du hast doch schon den Hinweis bekommen, dass bspw. JSON auch eine Form von Serialisierung ist – damit sollte die Frage sich doch wohl schon von selber beantworten …?

              (Dass PHPs serialize *kein* JSON erzeugt, setze ich mal als bekannt voraus.)

              Was während der Serialisierung geschieht, kann mir voin außen ja vollkommen Wurscht sein, das Ergebnis interessiert mich aber schon.

              Wie 1UnitedPower schon versuchte dir zu verdeutlichen, ist „Serialisierung” einfach eine Bezeichnung für ein bestimmtes Vorgehen; es ist *keine* Spezifikation eines bestimmten Formates.

              MfG ChrisB

              --
              Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
              1. Hallo

                Isat ja schön, meine Frage ging aber dahin, ob sich das Datenformat des PHP-serialize von anderen serialises unterscheidet?

                Du hast doch schon den Hinweis bekommen, dass bspw. JSON auch eine Form von Serialisierung ist …

                Ja, ich frage nicht, ob sich etwas von anderem unterscheidet, wenn ich nicht wüsste, dass es anderes gibt.

                … damit sollte die Frage sich doch wohl schon von selber beantworten …?

                Sollte sie das? MMn nicht.

                (Dass PHPs serialize *kein* JSON erzeugt, setze ich mal als bekannt voraus.)

                Naja, eben nicht. Mit JSON habe ich bisher selbst nicht gearbeitet, also mich damit auch nur mitlesend beschäftigt. Für mich sahen serialisierte JSON-Zeichenketten beim drüber schauen genauso aus, wie die von PHP.

                Was während der Serialisierung geschieht, kann mir voin außen ja vollkommen Wurscht sein, das Ergebnis interessiert mich aber schon.

                Wie 1UnitedPower schon versuchte dir zu verdeutlichen, ist „Serialisierung” einfach eine Bezeichnung für ein bestimmtes Vorgehen; es ist *keine* Spezifikation eines bestimmten Formates.

                Mittlerweile ist mir das klar. Hottis Parallelposting stellte das für mich auch klar. Ich hab das aber erst nach dem Schreiben meines vorherigen Postings gelesen.

                Tschö, Auge

                --
                Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
                Terry Pratchett, "Wachen! Wachen!"
                ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
                Veranstaltungsdatenbank Vdb 0.3
                1. Moin,

                  Naja, eben nicht. Mit JSON habe ich bisher selbst nicht gearbeitet, also mich damit auch nur mitlesend beschäftigt. Für mich sahen serialisierte JSON-Zeichenketten beim drüber schauen genauso aus, wie die von PHP.

                  Der wesentliche Unterschied ist, dass PHP::serialize() mit "byteLength" arbeitet, wohingegen eine JSON zeichenorientiert ist, also gar keine Bytes kennt sondern nur Zeichen.

                  Mittlerweile können moderne Browser jedoch auch mit Bytes umgehen, eine echte Chance, Low-Level Serializer zu bauen, die aus dem Sandkasten heraus kommen ;)

      2. Meine Herren!

        in PHP gibt es einen prima Serializer, der kann auch mit Dateien und wie die Datei innendrinnen aussieht, ist doch letztendlich völlig egal […]

        Für dieses einfache Beispiel und zum Lernen ist das ein gangbarer Ansatz. Aber ich möchte noch den Warnhinweis hinzufügen, dass das in der Produktiv-Welt möglichst vermieden wird. Man erzeugt damit eine Abhängigkeit zwischen Programmiersprache und Daten, die man nur schwer wieder dekomponieren kann.

        Ok, wenn serialize() als Builtin irgendwann mal wegfällt oder als deprecated eingestuft wird. Kannst Du soweit in die Zukunft schauen?

        Andererseits ist es freilich erstrebenswert, die Datenhaltung zu abstrahieren, so dass einen etwaige Umstellung der Datenhaltung von "Datei" auf "DB" nur den Austausch einer Klasse (Interface, DAL, Data Abstraction Layer) erfordert. In solchen Fällen werden die Daten auf das andere Medium portiert und gut isses.

        Die Abhängigkeit heißt dann eben nicht serialize() sondern DAL und der ist austauschbar, egal, wo der die Daten hinschreibt.

        Wenn wir an Skalierbarkeit denken, dann müssen wir berücksichtigen, dass unsere Daten in Zukunft möglicherweise von anderen Quellen angezapft und gefüttert werden, die nicht mit PHPs serialize umgehen können.

        In meiner Freizeit befasse sich mich seit vielen Jahren mit dem Thema "Daten serialisieren" und ich sehe da auch einen erheblichen Handlungsbedarf, der nicht etwa darin besteht, die Serializer (c, PHP, Perl, Java, JavaScript) verbessern zu wollen, sondern um sie untereinander (siehe obenstehenden Klammerausdruck) kompatibel zu machen.

        Das nenne ich, genau wie Du, Skalierbarkeit: Sequenzen (Dateien), die serverseitig mit PHP oder Perl erzeugt werden (Serialize) mit geringem Bandbreitenbedarf zu übertragen und in modernen Browsern (JavaScript) wiederherzustellen als Datenstruktur, die server- wie clientseitig gleichermaßen werwendet wird. Das Übertragungsmedium und die darunterliegenden Protokolle werden transparent und es ist auch egal, ob Sequenzen via Websocket oder Ajax unterwegs sind oder auch mal im Dateisystem oder direkt im Browser gespeichert werden.

        PHPs serialize() ist für solche Dinge ungeeignet aber es gibt Lösungen und auch welche die für einen Produktiveinsatz (oder gerade deswegen) um Größenordnungen zweckmäßiger sind.

        Horst