Ollum: Event ohne Client

Hallo Leute.

Gibt es eine Möglichkeit einen Datenbankeintrag zu einer bestimmten Zeit automatisch vom Server durchführen zu lassen?

Das heisst jemand postet zum beispiel einen Beitrag, läd etwas hoch oder mach sonst irgend etwas und per UPDATE soll dann ein Datensatz in dem Beitrag geändert werden (beispielsweise den wert 1 auf 0 setzen)

Geht das ohne das ein Client eine Form abschickt? ich denke nicht :(

  1. Moin!

    Das heisst jemand postet zum beispiel einen Beitrag, läd etwas hoch oder mach sonst irgend etwas und per UPDATE soll dann ein Datensatz in dem Beitrag geändert werden (beispielsweise den wert 1 auf 0 setzen)

    Wenn "irgendjemand irgendwas" macht, hast du doch deinen Event, an dem du das Update aufhängen kannst.

    - Sven Rautenberg

    1. Wenn "irgendjemand irgendwas" macht, hast du doch deinen Event, an dem du das Update aufhängen kannst.

      Nein nein, da hab ich mich vielleicht nicht deutlich genug ausgedrückt. Weiter oben habe ich ja gefragt:

      Gibt es eine Möglichkeit einen Datenbankeintrag zu einer bestimmten Zeit automatisch vom Server durchführen zu lassen?

      Ich erklärs nochmal anhand eines Beispiels:

      Ein Besucher läd ein Bild hoch. Dieses soll auf der Seite jedoch noch nicht angezeigt werden sondern erst 20 minuten nachdem das Bild eines vorigen Besuchers angezeigt wurde. Es soll sozusagen eine Warteschlange entstehen wie zum Beispiel "Pic of the day":

      Ich z.B habe auf meiner Seite ein Bild rechts oben. Mehrere Bilder wurden vor Kurzem hochgeladen. Das Bild soll alle 20 minuten durch das ersetzt werden, welches etwas später hochgeladen wurde.

      vertieft:

      Alex läd um 12:00 Uhr ein Bild hoch: 1.jpg
      Peter läd um 12:05 Uhr ein Bild hoch: 2.jpg
      Antje läd um 12:10 Uhr ein Bild hoch: 3.jpg

      Auf der Seite wird nun als erstes das Bild von Alex angezeigt: 1.jpg

      nach 20 minuten (also um 12:20) das von Antje: 2.jpg

      Es soll alle 20 Minuten ein anderes Bild aus der Datenbank angezeigt werden in der Reihenfolge wie sie eingeschickt wurden, solange es noch aktuelle Bilder in der Datenbank gibt.(In der Datenbank muss also ein wert "active" auf 1 gesetzt werden und alle anderen auf 0)
      die 1 "wandert" also in der Datenbank bis ganz nach unten bis es kein aktuelles Bild mehr gibt

      So :) kompliziert aber anders kann ich es net erklären

      1. Moin!

        Alex läd um 12:00 Uhr ein Bild hoch: 1.jpg
        Peter läd um 12:05 Uhr ein Bild hoch: 2.jpg
        Antje läd um 12:10 Uhr ein Bild hoch: 3.jpg

        Auf der Seite wird nun als erstes das Bild von Alex angezeigt: 1.jpg

        nach 20 minuten (also um 12:20) das von Antje: 2.jpg

        Du mußt nicht alle 20 Minuten ein Bild "ersetzen", du mußt dann, wenn jemand ein Bild sehen will, das für diese Zeit gültige ausliefern. Also doch eventgesteuert.

        - Sven Rautenberg

        1. das mit dem Bild war auch nur ein beispiel. ;)

          Der Kern Meiner Frage war: Kann sich eine MySQL Datenbank - ohne, dass ein Client eine Form abschickt oder eine Variable übergibt -

          selbst updaten bzw selbst daten in sich speichern (wenn sie z.B irgendwo in einer Datei abgelegt sind)?

          1. Moin!

            das mit dem Bild war auch nur ein beispiel. ;)

            Entweder du fragst genau, was du willst, oder du leidest darunter, dass man dir exakte Lösungsansätze für deine Beispiele gibt, die aufgrund der mangelhaften Beispiele danebenzielen.

            Der Kern Meiner Frage war: Kann sich eine MySQL Datenbank - ohne, dass ein Client eine Form abschickt oder eine Variable übergibt -

            selbst updaten bzw selbst daten in sich speichern (wenn sie z.B irgendwo in einer Datei abgelegt sind)?

            Die Datenbank selbst kann das nicht. Aber wie ich schon bei meinem Lösungsansatz mit den Bildern versucht habe deutlich zu machen: Wenn niemand den Inhalt der Datenbank wissen will, ist es auch egal, ob die Datenbank verändert wird - weil es ja sowieso keiner merkt.

            Andreas' Tipp mit den Cronjobs wäre eine Lösung, die du nur einsetzen kannst, wenn du frei cronjobs definieren darfst. Und weil das eben bei gewöhnlichen Providern eher selten ist - und ganz nebenbei auch keine wirklich schöne Lösung für Allerweltsaufgaben, sondern eigentlich nur für tatsächlich zeitabhängige Aktionen, und bestenfalls noch zum Aufräumen (wenn man allerdings per cronjob aufräumen muß, hat man eher was falsch programmiert) - habe ich diese Möglichkeit gleich außer Acht gelassen.

            Also: Was willst du wirklich haben? Wenn es um die regelmäßige Erfassung eines Messwertes geht, brauchst du einen Cronjob. Wenn es nur darum geht, zeitabhängig irgendeine Ausgabe zu realisieren, brauchst du keinen Cronjob, sondern kannst zum Zeitpunkt der Ausgabe die aktuell gültige Ausgabe berechnen/feststellen und dann in die Datenbank schreiben.

            - Sven Rautenberg

      2. Hi!

        Nein nein, da hab ich mich vielleicht nicht deutlich genug ausgedrückt. Weiter oben habe ich ja gefragt:

        Gibt es eine Möglichkeit einen Datenbankeintrag zu einer bestimmten Zeit automatisch vom Server durchführen zu lassen?

        Naja, das ging jetzt nicht _direkt_ aus Deiner Frage hervor ;-)

        Ich hätte 3 Ideen:

        1. Du machst das wie Du vor hast, was aber meist nicht möglich ist per cronjob, d.h. Du erstellst einen cronjob der alle 20 Minuten die Datenbank verändert. Dazu brauchst Du aber die Möglichkeit crontabs frei bearbeiten zu können, ich kenne keinen großen Provider der das zuläßt.

        2. Du errechnest die "anzeige-zeit" schon beim Eintrag in die Datenbank(direkt nach dem Upload), erst ein Insert(!) und dann berechnest Du wieviele Datensätze zwischen dem aktuell angezeigten und Deinem Neuen sind, und kannst somit die Uhrzeit wie der Neue dran ist fest in die DB schreiben, das kann man dann jedesmal auslesen.

        3. Du schreibst den Datensatz einfach rein, mit timestamp, und errechnest immer live welcher Datensatz dran ist, z.B. indem Du die aktuelle Zeit einträgst, der aktuelle Datensatz hat eine extra Zeitspalte, und in den aktuellen Datensatz trägst Du beim 1. mal die aktuelle Zeit ein, und prüfst dann jedesmal üb diese Zeit > 20 min ist. Wenn sie größer ist liest Du den nächten Datensatz aus, und schreibst die aktuelle Zeit da rein, und vielleicht löscht Du noch die alte im anderen Datensatz... ich hoffe Du verstehst wa ich meine...

        Naja, gibt sicher noch bessere Methoden, das war mir jetzt mal spontan eingefallen.

        Grüße
        Andreas

        1. Hey, die 2. Variante könnte eine Lösung sein.

          Die erste verstehe ich nicht da ich nicht weiss um was es sich bei einem "cronjob" handelt ;)

          die 3. lass ich besser sein, weil mit timestamp habe ich bisher noch nicht gearbeitet!

          Danke für deinen helfenden Beitrag! :)

          Gruß Ralf

          1. Hi!

            Die erste verstehe ich nicht da ich nicht weiss um was es sich bei einem "cronjob" handelt ;)

            cron ist ein Dämon der zeitgesteurt Scripte/Programme starten kann(unter unix, für windows gibts at), siehe: http://www.selflinux.de/html/cron01.html#d32e75

            die 3. lass ich besser sein, weil mit timestamp habe ich bisher noch nicht gearbeitet!

            dann wirds aber mal Zeit ;-) Welche Datenbank verwendest Du? Für mysql empfehle ich mal folgendes zu lesen:
            http://www.mysql.com/doc/de/DATETIME.html
            http://www.mysql.com/doc/de/Date_and_time_functions.html
            http://www.mysql.com/doc/de/Date_calculations.html
            http://php-faq.de/ch/ch-database_mysql.html
            http://php-faq.de/ch/ch-databases.html

            Danke für deinen helfenden Beitrag! :)

            gerne!

            Grüße
            Andreas