xastax: Mit Javascript ein Datenbank eintrag erstellen

Hallo,

ich benutze ein Reihe von JS Timern um Seiten aufzurufen und zu schliessen.
Zwischendurch setze ich, dank PHP, flags in der Datenbank um die Timer neu einzustellen.
Nun schliesse ich ein Fernster mit window.close() und möchte vorher ein flag in der Datenbank setzen. Nur gibt es auf der Seite keinerleih Benutzer interaktion, so das PHP wegfällt.
Mir fehlen gerade die Ansätze wie ich da vorgehen kann. Kann mir da jemand weiterhelfen?

Danke
mfg

  1. Abend!

    Hast du schon mal in Richtung AJAX gedacht?!
    Mit Javascript wirst du nicht weit kommen, weil dies beim Client ausgeführt wird und somit keine Datenbank kennt.

    Eine weitere Lösung, die dir evtl. weiterhelfen könnte wäre eine objektorientierte PHP Programmierung (OOP). Hierbei könntest du eine Klasse erstellen und Instanzen dieser bilden. Sobald das Objekt verschwindet und das wird beim schliessen des Browsers passieren führst du deine Interaktion mit der Datenbank aus.

    Ich meinte die PHP Methode heißt hierbei "destroy()". Einfach mal googl'n, da gibt es mit Sicherheit massig Beispiele.

    Gruß,
    Mr. Luke

    Hallo,

    ich benutze ein Reihe von JS Timern um Seiten aufzurufen und zu schliessen.
    Zwischendurch setze ich, dank PHP, flags in der Datenbank um die Timer neu einzustellen.
    Nun schliesse ich ein Fernster mit window.close() und möchte vorher ein flag in der Datenbank setzen. Nur gibt es auf der Seite keinerleih Benutzer interaktion, so das PHP wegfällt.
    Mir fehlen gerade die Ansätze wie ich da vorgehen kann. Kann mir da jemand weiterhelfen?

    Danke
    mfg

    1. Hallo Mr.Luke,
      danke für deine Antwort.

      Hast du schon mal in Richtung AJAX gedacht?!
      Mit Javascript wirst du nicht weit kommen, weil dies beim Client ausgeführt wird und somit keine Datenbank kennt.

      Mit Ajax habe ich noch nichts gemacht, das ist für mich noch eine ungekannte.

      Eine weitere Lösung, die dir evtl. weiterhelfen könnte wäre eine objektorientierte PHP Programmierung (OOP). Hierbei könntest du eine Klasse erstellen und Instanzen dieser bilden. Sobald das Objekt verschwindet und das wird beim schliessen des Browsers passieren führst du deine Interaktion mit der Datenbank aus.

      Ich meinte die PHP Methode heißt hierbei "destroy()". Einfach mal googl'n, da gibt es mit Sicherheit massig Beispiele.

      Ich werde mal schauen ob ich etwas in dieser Richtung finde, vielleicht ist ja etwas dabei.

      Danke
      mfg

      1. Eine weitere Lösung, die dir evtl. weiterhelfen könnte wäre eine objektorientierte PHP Programmierung (OOP). Hierbei könntest du eine Klasse erstellen und Instanzen dieser bilden. Sobald das Objekt verschwindet und das wird beim schliessen des Browsers passieren führst du deine Interaktion mit der Datenbank aus.

        Ich meinte die PHP Methode heißt hierbei "destroy()". Einfach mal googl'n, da gibt es mit Sicherheit massig Beispiele.

        Ich werde mal schauen ob ich etwas in dieser Richtung finde, vielleicht ist ja etwas dabei.

        Vergiss diesen Ansatz bloß wieder ganz schnell. Struppi hatte es ziemlich treffend formuliert: "Das ist Blödsinn".
        Der destructor einer Klasse wird aufgerufen, sobald das PHP-Script beendet ist (bzw. sobald die Instanz der Klasse zerstört wird), nicht aber wenn der Browser geschlossen wird. Würde ja auch keinen Sinn machen den Konstruktor erst beim Browserschließen aufzurufen, da das vorraussetzen würde, dass das PHP-Script bis zu diesem Augenblick noch aktiv wäre.

        1. Hallo,

          Vergiss diesen Ansatz bloß wieder ganz schnell. Struppi hatte es ziemlich treffend formuliert: "Das ist Blödsinn".
          Der destructor einer Klasse wird aufgerufen, sobald das PHP-Script beendet ist (bzw. sobald die Instanz der Klasse zerstört wird), nicht aber wenn der Browser geschlossen wird. Würde ja auch keinen Sinn machen den Konstruktor erst beim Browserschließen aufzurufen, da das vorraussetzen würde, dass das PHP-Script bis zu diesem Augenblick noch aktiv wäre.

          vielen Dank für die Aufklärung! Ich hab es jetzt doch mit JS lösen können.

          mfg

    2. Hi,

      Hast du schon mal in Richtung AJAX gedacht?!

      Vielleicht für Anfänger etwas kompliziert, aber wohl die schönste Lösung.

      Mit Javascript wirst du nicht weit kommen, weil dies beim Client ausgeführt wird und somit keine Datenbank kennt.

      Aber man kann mit JS (auch ohne AJAX) serverseitige Scripts (z.B. PHP oder Perl) aufrufen. Das geht z.B. mit
      location.href = "script.php?para=eins";
      oder mit
      windwo.open(...);

      Eine weitere Lösung, die dir evtl. weiterhelfen könnte wäre eine objektorientierte PHP Programmierung (OOP). Hierbei könntest du eine Klasse erstellen und Instanzen dieser bilden. Sobald das Objekt verschwindet und das wird beim schliessen des Browsers passieren führst du deine Interaktion mit der Datenbank aus.

      Damit hab ich mich noch nicht wirklich befasst, aber kann PHP wirklich wissen, wann ich mein Browserfenster schließe?
      Ich wäre davon ausgegangen, dass es nur mitbekommt, dass ich die Seite anfordere, aber nicht, wann die Seite bei mir fertig geladen ist, und schon garnicht wann sie geschlossen wird.

      mfG,
      steckl

      1. Hi,

        Damit hab ich mich noch nicht wirklich befasst, aber kann PHP wirklich wissen, wann ich mein Browserfenster schließe?
        Ich wäre davon ausgegangen, dass es nur mitbekommt, dass ich die Seite anfordere, aber nicht, wann die Seite bei mir fertig geladen ist, und schon garnicht wann sie geschlossen wird.

        Sollte es auch nicht koennen. falls doch, hab ich da wohl was verpasst. Ausser man sendet ein "Seite wird geschlossen oder verlassen" Signal (z.B. per AJAX).

      2. Hallo steckl,
        danke für deine Antwort.

        Aber man kann mit JS (auch ohne AJAX) serverseitige Scripts (z.B. PHP oder Perl) aufrufen. Das geht z.B. mit
        location.href = "script.php?para=eins";
        oder mit
        windwo.open(...);

        Dein ansatz hat mich auf den Weg gebracht.

        Ich habe dieses Script gefunden:
        quelle: http://www.tutorials.de/forum/javascript-ajax/202137-reload-scollen-ohne-zucken.html#post1046402

        function daten_php_js_laden() {
        skript=document.createElement('SCRIPT');
        skript.setAttribute('src','datei.js.php');
        document.getElementsByTagName('BODY')[0].appendChild(skript);
        setTimeout('fenster_schliessen()',3000);
        }

        Jetzt funktioniert es wie gewollt.

        Danke an alle
        mfg

        1. Hi!

          document.getElementsByTagName('BODY')[0].appendChild(skript);

          Kann es sein, dass deine Seite damit bei bei jedem schliessen immer groesser wird? Du scheinst ja Javascript zu produzieren und immer wieder mit neuem JS zu ueberschreiben. Guenstig finde ich das nicht. Auch wenn die Idee als solche nicht uninteressant ist.

          1. Hi,

            document.getElementsByTagName('BODY')[0].appendChild(skript);

            Kann es sein, dass deine Seite damit bei bei jedem schliessen immer groesser wird? Du scheinst ja Javascript zu produzieren und immer wieder mit neuem JS zu ueberschreiben. Guenstig finde ich das nicht. Auch wenn die Idee als solche nicht uninteressant ist.

            Er macht das wohl nur einmal, da ja das Fenster anschließend (nach 3 Sekunden) geschlossen wird. Natuerlich nur falls fenster_schliessen() das Fenster schließt, wovon man aber durchaus ausgehen kann.

            mfG,
            steckl

            1. Hallo,

              document.getElementsByTagName('BODY')[0].appendChild(skript);

              Er macht das wohl nur einmal, da ja das Fenster anschließend (nach 3 Sekunden) geschlossen wird. Natuerlich nur falls fenster_schliessen() das Fenster schließt, wovon man aber durchaus ausgehen kann.

              also es dürfte nur einmal ausgeführt werden, da ich danach das Fenster schließe. Die 3 Sekunden sie ein Puffer um dem Server genug Zeit zu lassen alles abzuarbeiten.
              Die Funktion fenster_schliessen()führt nur einen refresh des parent document aus und schließt das Fenster.

              mfg

    3. Eine weitere Lösung, die dir evtl. weiterhelfen könnte wäre eine objektorientierte PHP Programmierung (OOP). Hierbei könntest du eine Klasse erstellen und Instanzen dieser bilden. Sobald das Objekt verschwindet und das wird beim schliessen des Browsers passieren führst du deine Interaktion mit der Datenbank aus.

      Das ist Blödsinn.

      Struppi.

  2. Hi!

    Na, wie funktioniert es denn bei Benutzeraktionen? Die loesen ein Event aus, dass dann deine php Ressourcen aufruft. Dann machst Du das am Besten genauso beim Schliessen. Es macht doch keinen unterschied ob ein Benutzer etwas macht oder ob etwas von JS nach Zeit getriggert wird.

    Php ist jedenfalls nicht Benutzerabhaengig. Dem Phpskript ist es wurscht ob ein User oder JS den Aufruf vorgenommen hat.

    1. Hallo Steel,
      danke für deine Antwort.

      Na, wie funktioniert es denn bei Benutzeraktionen? Die loesen ein Event aus, dass dann deine php Ressourcen aufruft. Dann machst Du das am Besten genauso beim Schliessen. Es macht doch keinen unterschied ob ein Benutzer etwas macht oder ob etwas von JS nach Zeit getriggert wird.

      Bei einer Benutzeraktion kann ich mit GET oder POST alle Zugriffe steuern.
      Durch einen klick z.B.
      Mit JS kann ich aber kein PHP aufrufen.

      1. Hi!

        Aha. Du rufst also php immer per Formular auf, bzw uebergibst Parameter im Link.

        Das geht natuerlich auch per JS. Niemand hindert dich daran ein Formular per JS abzuschicken. Das Problem dabei ist natuerlich, dass dabei gewoehnlich eine neue Seite geladen wird. Selbst wenn das php nichts zurueckgibt packt der Browser diese leere Seite gewoehnlich irgenbdwohin. entweder in ein neues fenster oder er ersetzt damit alte Inhalte.

        Das ist natuerlich unpraktisch.

        Da hat Mr. Luke mit AJAX dann schon eine zielfuehrende Loesung vorgeschlagen.