schnipsel88: Editieren eines Beitrags sollte 5 Minuten möglich sein

Hi!
Ich habe ein Webseite mit einer Art sehr rudimentären Forumfunktion. Leute können Nachrichten schreiben, bislang aber ohne Editiermöglichkeit.
Würde gern, so wie ich es von Blogs kenne, eine Funktion anbieten, dass der Verfasser 5 Minuten nach Absetzen seines Beitrages die Möglichkeit hat, diesen Beitrag doch noch zu editieren.

Auf was muss ich achten bzw. wie muss ich vorgehen? Wo speichere ich am besten, ob derjenige der richtige ist, dass er den Beitrag editieren darf?

In nem Cookie? Über die IP-Adresse?
Ich muss dazu sagen, dass in dem "Forum" jeder, also auch ohne vorheriges anmelden, schreiben darf.

Das Projekt läuft unter PHP und MySQL auf einem Linuxserver.

Danke

  1. Hallo

    Ich habe ein Webseite mit einer Art sehr rudimentären Forumfunktion. Leute können Nachrichten schreiben, bislang aber ohne Editiermöglichkeit.
    Würde gern, so wie ich es von Blogs kenne, eine Funktion anbieten, dass der Verfasser 5 Minuten nach Absetzen seines Beitrages die Möglichkeit hat, diesen Beitrag doch noch zu editieren.

    Auf was muss ich achten bzw. wie muss ich vorgehen? Wo speichere ich am besten, ob derjenige der richtige ist, dass er den Beitrag editieren darf?

    Du musst erstens den Zeitpunkt des Eintrags mit diesem speichern. Zweitens kannst du nur Benutzern das editieren erlauben, die du "irgendwie" (Session Cookie) identifizieren kannst. Wenn du das klargestellt hast, kannst du dein Skript entscheiden lassen, ob und wie lange ein Link zum editieren in den HTML-Quelltext eingebaut wird sowie beim absenden des editierten Postings die Zeit prüfen, die seit dem Anlegen des Eintrags vergangen ist, also ob das Editieren überhaupt noch erlaubt ist.

    Tschö, Auge

    --
    Die deutschen Interessen werden am Liechtenstein verteidigt.
    Veranstaltungsdatenbank Vdb 0.2
    1. Oh, das ging aber flott.

      Vielen Dank euch beiden!

      1. Hallo

        Oh, das ging aber flott.

        Beachte Toms Anmerkung, die Benutzerkennung (typischerweise: Session-ID) ebenfalls mit dem Eintrag zu speichern (also nicht nur den Eintragszeitpunkt). Ansonsten wäre die Zuordnung eines Eintrags zum Eintragenden ... irgendwie ... zum Scheitern verurteilt.

        Tschö, Auge

        --
        Die deutschen Interessen werden am Liechtenstein verteidigt.
        Veranstaltungsdatenbank Vdb 0.2
    2. Hi,

      Wenn du das klargestellt hast, kannst du dein Skript entscheiden lassen, ob und wie lange ein Link zum editieren in den HTML-Quelltext eingebaut wird sowie beim absenden des editierten Postings die Zeit prüfen, die seit dem Anlegen des Eintrags vergangen ist, also ob das Editieren überhaupt noch erlaubt ist.

      Dann veraergere mich aber bitte nicht damit, dass du mir den Link zum Editieren gezeigt hast, ich daraufhin muehsam und umfangreich editiere - und dann beim Abspeichern vor den Latz geknallt bekomme, Abspeichern sei jetzt nicht mehr moeglich ...

      MfG ChrisB

      --
      „This is the author's opinion, not necessarily that of Starbucks.“
      1. Hello,

        Dann veraergere mich aber bitte nicht damit, dass du mir den Link zum Editieren gezeigt hast, ich daraufhin muehsam und umfangreich editiere - und dann beim Abspeichern vor den Latz geknallt bekomme, Abspeichern sei jetzt nicht mehr moeglich ...

        Da ist 'was Wahres dran. Das Konzept für eine solche Berechtigungsart aufzubauen, wird also auf jeden Fall etwas Vorarbeit und Planung benötigen.

        Ich hatte das vorhin auch nur als ersten Ansatz so hingemalt.
        Der "Formular-/Buttonverteiler" wird i.d.R. auch immer außen liegen in der Entscheidungsstruktur.
        Darin eingebettet kommen dann die Funktionen bzw. Methoden, die die tieferen Berechtigungsstufen prüfen.

        Die Aufgabenstellung ist daher schon etwas anspruchsvoller.

        Zusätzlich müssen Konkurrierende Zugriffe beachtet werden, wenn z.B. der Berechtigte dasselbe Formular   in zwei Browsern oder auf zwei Plätzen öffnet oder aber der Admin zwischendurch auf den DSatensatz zugreift.

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
      2. Hallo

        Wenn du das klargestellt hast, kannst du dein Skript entscheiden lassen, ob und wie lange ein Link zum editieren in den HTML-Quelltext eingebaut wird sowie beim absenden des editierten Postings die Zeit prüfen, die seit dem Anlegen des Eintrags vergangen ist, also ob das Editieren überhaupt noch erlaubt ist.

        Dann veraergere mich aber bitte nicht damit, dass du mir den Link zum Editieren gezeigt hast, ich daraufhin muehsam und umfangreich editiere - und dann beim Abspeichern vor den Latz geknallt bekomme, Abspeichern sei jetzt nicht mehr moeglich ...

        Ein berechtigter Einwand (auch ohne Toms weitere Überlegungen bezüglich etwaiger konkurrierender Zugriffe [1]).

        Wenn man voraussetzt, dass das Editieren nur innerhalb eines bestimmten Zeitraums nach dem ursprünglichen Eintrag erlaubt sein soll, kommt man immer an diesen Punkt, egal, wie groß man diesen Zeitraum wählt. Es kann immer vorkommen, dass das Editierformular *vor* Ablauf der Frist geöffnet aber erst *nach* deren Ablauf abgeschickt wird.

        Mögliche Konsequenzen:

        1. Man lässt die Editierfunktion weg.

        2. Man nimmt die Möglichkeit, den letztmöglichen Editierzeitpunkt bei offenem Formular zu verpassen, hin und lässt den Editierenden auflaufen.

        3. Das Formular wird mit einem JavaScript-Countdown ala "Du hast noch 2 Minuten!" (und nun runterzählen) versehen, was einerseits verwirren und Hektik auslösen kann (nicht gerade sehr einladend) und andererseits ohne JavaScript ein statischer Text -ohne Bezug zur aktuell verbleibenden Zeit- bliebe.

        4. Man lässt die zeitliche Begrenzung weg und markiert, wie in vielen Boards üblich, bearbeitete Einträge als editiert.

        [1] Wobei mir durch den Kopf geht, ob die (bei der üblicherweise verwendeten Session) überhaupt auftreten können. Ein anderer Browser, der die gleiche Seite aufruft, würde doch eine neue Session und somit die Editierfuktion erst garnicht angeboten bekommen.

        Tschö, Auge

        --
        Die deutschen Interessen werden am Liechtenstein verteidigt.
        Veranstaltungsdatenbank Vdb 0.2
        1. Hello,

          einfache Möglichkeit:

          Man richtet eine absolute Zeitspanne ein, in der der Eintrag noch geändert werden darf und eine relative, kürzere Zeitspanne, die seit dem letzten Schreibvorgang gilt und den Barbeitungszeitraum zwischen Aufruf und Zurückschreiben kennzeichnet.

          Der Bearbeitungszeitraum muss noch in den maximal zulässigen passen.

          Beim Aufruf zeigt man dem User an, wieviel Zeit er noch bis zum Zurückschreiben hat. Da kann man dann auch einen Countdown per JavaScript mitschicken (Zur Sicherheit ein paar Sekunden kürzer).

          Solange der Maxiamal zulässige Zeitraum nicht überschritten wird, kann man den "kleinen Bearbeitungszeitraum" immer nachtriggern lassen bei jeder Änderung oder Editieranforderung.

          Liebe Grüße aus Syburg bei Dortmund

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hallo

            Hoi, bleibt ja was für's Archiv. :-)

            Man richtet eine absolute Zeitspanne ein, in der der Eintrag noch geändert werden darf und eine relative, kürzere Zeitspanne, die seit dem letzten Schreibvorgang gilt und den Barbeitungszeitraum zwischen Aufruf und Zurückschreiben kennzeichnet.

            Lass mich mal "Heiteres Beruferaten" spielen:

            Gehe ich recht in der Annahme, dass "Schreibvorgang" hier den Aufruf des Bearbeitungsformulars meint?

            Wenn das stimmt, muss der Zeitpunkt des Aufrufs zwischengespeichert werden.

            Der Bearbeitungszeitraum muss noch in den maximal zulässigen passen.

            Beim Aufruf zeigt man dem User an, wieviel Zeit er noch bis zum Zurückschreiben hat. Da kann man dann auch einen Countdown per JavaScript mitschicken (Zur Sicherheit ein paar Sekunden kürzer).

            Solange der Maxiamal zulässige Zeitraum nicht überschritten wird, kann man den "kleinen Bearbeitungszeitraum" immer nachtriggern lassen bei jeder Änderung oder Editieranforderung.

            Da wir in diesem Thread von einem recht kurzen Bearbeitungszeitraum reden, kann alles dazugehörige eigentlich in der Session gespeichert werden. Da es aber andererseits um ein Forum geht, dessen Inhalte in einer MySQL-Datenbank gespeichert werden, kann das alles auch in die Datenbank, wozu deren Tabellenstruktur entsprechend angepasst werden müsste.

            Tschö, Auge

            --
            Die deutschen Interessen werden am Liechtenstein verteidigt.
            Veranstaltungsdatenbank Vdb 0.2
            1. Hello,

              Gehe ich recht in der Annahme, dass "Schreibvorgang" hier den Aufruf des Bearbeitungsformulars meint?

              Wenn das stimmt, muss der Zeitpunkt des Aufrufs zwischengespeichert werden.

              Der Bearbeitungszeitraum muss noch in den maximal zulässigen passen.

              Nein, Schreibvorgang kennzeichnet den Post-Request vom Client zum Server, mit der Bitte an den Server, die geänderten Daten wegzuschreiben.

              Ob nun beim Lesen (Anforderung der alten Daten zum Ändern am Client) und beim Schreiben nachgetriggert werden muss, ist sicherlich ein Stückchen Philosphie, aber ich würde es so machen:

              Formular zum Eintragen wird aufgerufen
                 Zeitstempel für Edittime wird gesetzt
                    Innerhalb der Edittime muss nun der Post-Request mit den Daten
                    beim Server angekommen sein. Nicht zu kurz, aber auch nicht länger als
                    z.B. 1/2 Stunde, damit Robots das Leben etwas schwerer gemacht wird.

              Post-Request mit "btn[save]" kommt am Server an.
                    Edittime wird geprüft.
                    Daten werden angezeigt.
                    Zeitstempel für Write wird gesetzt. Von Writetemp bis Writetemp + XX
                    kann nun der Beitrag noch editiert werden. Mit jedem Wegschreiben wird
                    Writetemp nachgetriggert (also wieder auf dem aktuellen Stand gebracht),
                    aber nur solange, bis die gesamte Edittime erreicht ist.

              Erst mit dem Anfordern eines neuen leeren Formulares wird Edittime wieder
              aktualisiert, wenn man das will...

              Beim Aufruf zeigt man dem User an, wieviel Zeit er noch bis zum Zurückschreiben hat. Da kann man dann auch einen Countdown per JavaScript mitschicken (Zur Sicherheit ein paar Sekunden kürzer).

              Liebe Grüße aus Syburg bei Dortmund

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Hallo

                Gehe ich recht in der Annahme, dass "Schreibvorgang" hier den Aufruf des Bearbeitungsformulars meint?

                Wenn das stimmt, muss der Zeitpunkt des Aufrufs zwischengespeichert werden.

                Der Bearbeitungszeitraum muss noch in den maximal zulässigen passen.

                Nein, Schreibvorgang kennzeichnet den Post-Request vom Client zum Server, mit der Bitte an den Server, die geänderten Daten wegzuschreiben.

                Du willst bei jeder Änderung einen neuen Zeitpunkt eintragen? Ist das nicht (gerade bei der hiesigen Fragestellung) oversized? Eigentlich sollte doch der Vergleich mit dem Eintragszeitpunkt+Editierfrist(+eventueller Galgenfrist bei Aufruf der Bearbeitungsfunktion innerhalb von Eintragszeitpunkt+Editierfrist) reichen.

                Tschö, Auge

                --
                Die deutschen Interessen werden am Liechtenstein verteidigt.
                Veranstaltungsdatenbank Vdb 0.2
        2. [5] man blendet den editierbutton nach 5 minuten zwar aus, erlaubt dem benutzer aber tatsächlich noch 10 minuten extra, seinen beitrag zu bearbeiten

          1. Hallo

            [5] man blendet den editierbutton nach 5 minuten zwar aus, erlaubt dem benutzer aber tatsächlich noch 10 minuten extra, seinen beitrag zu bearbeiten

            Galgenfrist, auch 'ne Möglichkeit. :-)

            Tschö, Auge

            --
            Die deutschen Interessen werden am Liechtenstein verteidigt.
            Veranstaltungsdatenbank Vdb 0.2
          2. Hello,

            [5] man blendet den editierbutton nach 5 minuten zwar aus, erlaubt dem benutzer aber tatsächlich noch 10 minuten extra, seinen beitrag zu bearbeiten

            Und kurz bevor die Galgenfrist abgelaufen ist, lässt man den Save-Button langsam blinken und rot anlaufen  :-)
            Dann wird auch er disabled.

            Es wäre ganz interessant, mal einen Formularplan (mit Buttons) aufzustellen für diesen gesamten Fall. Ich mach mir mal Gedanken darüber und bastele ein paar Dummy-Srceen-Shots.

            Dann kann man daran anschließend das Steuerflußregelwerk aufstellen. Vielleicht wird eine Musterlösung  daraus? Macht Ihr mit?

            Liebe Grüße aus Syburg bei Dortmund

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Dann kann man daran anschließend das Steuerflußregelwerk aufstellen. Vielleicht wird eine Musterlösung  daraus? Macht Ihr mit?

              du hast zu viel freizeit :D

              1. Hello,

                Dann kann man daran anschließend das Steuerflußregelwerk aufstellen. Vielleicht wird eine Musterlösung  daraus? Macht Ihr mit?

                du hast zu viel freizeit :D

                Ich will mich doch nur vor meinen eigenen Hausaufgaben drücken :-P

                Liebe Grüße aus Syburg bei Dortmund

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Hallo

                  Dann kann man daran anschließend das Steuerflußregelwerk aufstellen. Vielleicht wird eine Musterlösung  daraus? Macht Ihr mit?

                  du hast zu viel freizeit :D

                  Ich will mich doch nur vor meinen eigenen Hausaufgaben drücken :-P

                  <zitat style="tonfall:mutti;">Erst die Hausaufgaben machen, dann kannst du spielen gehn!</zitat> ;-)

                  Tschö, Auge

                  --
                  Die deutschen Interessen werden am Liechtenstein verteidigt.
                  Veranstaltungsdatenbank Vdb 0.2
  2. Hello,

    Ein einfacher Weg:

    Du eröffnest beim Besuch des Angebotes eine Session.
    Du teilst jedem WebLog-Beitrag einen eindeutigen Schlüssel zu.

    Diesen Schlüssel, sowie den Erstellzeitpunkt trägst Du in die Session des Besuchers ein.
    Bei jedem Request, der den Beitrag betrifft, kannst Du nun feststellen, ob der User in seiner Session die passenden Berechtigungen hat.

    if (!isset($_SESSION['blog']))   ## erstmaliger Besuch des blog-Bereiches
      {
          $_SESSION['blog']= array();
          $_SESSION['blog']['time_firstvisit']= time();
          create_output($template_blog_new);             ## Ins Output-Array das passende Fomular einfügen
      }
      elseif(!isset($_SESSION['blog']['time_saved']))  ## Blog war noch nicht gesichert
      {
          if (isset($_POST['save']))
          {
              $_SESSION['blog']['time_saved'] = time();

    ## usw.

    }

    }
      elseif(isset($_SESSION['blog']['time_saved']))
      {
          if (isset($_POST['save']))
          {
              if (checktime ($_SESSION['blog']['time_saved'], time()))
              {

    }
              else
              {

    ## usw.
              }
          }

    }

    ## usw.
      ...

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de