Michael: Datenbankeintrag bei verlassen des Dokuments löschen

Hallo!
Mein Problem ist folgendes:
Ich möchte beim Verlassen einer Seite Datensätze aus einer Datenbank löschen.
Es sollen dazu keine weiteren Aktionen notwendig sein. Soetwas in der Art wäre "onUnload" wäre optimal.
Allerdings habe ich keinen Ansatz wie ich hier beginnen könnte. Bin für jeden Hinweis dankbar...

  1. ich bin mir nicht sicher ob das funktioniert:

    function BeimVerlassen() {
      <?php
      dein skriptcode
      ?>
      return false;
    }
    ...
    <body onUnload="BeimVerlassen()">

    mfg gerhard

    1. hi,

      ich bin mir nicht sicher ob das funktioniert:

      nein, ganz sicher nicht.

      function BeimVerlassen() {
        <?php
        dein skriptcode
        ?>
        return false;
      }
      ...
      <body onUnload="BeimVerlassen()">

      zu dem zeitpunkt, wo der client die seite erhält - und erst dann kann javascript ausgeführt werden - ist der PHP-code schon längst abgearbeitet worden - und zwar in _jedem_ fall.

      befasse dich mal mehr mit dem unterschied zwischen server- und clientseitigen abläufen.

      gruß,
      wahsaga

      --
      "Look, that's why there's rules, understand? So that you can _think_ about them, before you break 'em."
  2. Dies zum Beispiel zu realisieren, indem Du über das periodische Laden eines Images dem Server signalisiert, daß Du noch da bist. Falls der Server eine solche Rückmeldung nicht mehr erhält, geht er davon aus, daß der User die Seite verlassen hat. Voraussetzung ist hierfür jedoch, daß der User JavaScript aktiviert hat.

    1. Danke für die Antwort. Wie läßt sich einen solche Periode realisieren?
      Geht das über eine Schleife? Wenn ja, wird das System dadurch nicht zu sehr belastet?

      1. Danke für die Antwort. Wie läßt sich einen solche Periode realisieren?

        mit "setInterval"
        Zum Thema Bilder dynamisch laden lies in Selfhtml den Teil "Dynamische graphische Buttons"

        Geht das über eine Schleife? Wenn ja, wird das System dadurch nicht zu sehr belastet?

        Kommt darauf an, ob Du als Interval 1 ms oder 60 min wählst. Ich würde vorschlagen 1 min.

        1. Das hilft mir schonmal weiter. Eine Frage habe ich nur noch:
          Wie "merkt" der Server, dass das Image nicht mehr aktualisiert wird?

          1. Wie merkst denn Du z. B., daß das Mädel an der Tisch gegenüber aufgehört hat, mit Dir anzubändeln? Es sollte nicht allzu schwer sein, den Sachverhalt in einem Programm abzubilden.

            1. hi,

              Wie merkst denn Du z. B., daß das Mädel an der Tisch gegenüber aufgehört hat, mit Dir anzubändeln?

              du (als server) schläfst aber immer sofort ein, wenn das mädel dich nicht mehr anlächelt (der client keinen request mehr macht).

              Es sollte nicht allzu schwer sein, den Sachverhalt in einem Programm abzubilden.

              zunächst mal muss das "aufwecken" abgebildet werden.

              "cronjob" wäre der name eines denkbaren weckers.

              gruß,
              wahsaga

              --
              "Look, that's why there's rules, understand? So that you can _think_ about them, before you break 'em."
  3. Hello,

    Ich möchte beim Verlassen einer Seite Datensätze aus einer Datenbank löschen.
    Es sollen dazu keine weiteren Aktionen notwendig sein. Soetwas in der Art wäre "onUnload" wäre optimal.

    Mit HTTP geht das eigentlich nicht. Uneigentlich aber schon. Auch PHP stellt da eine Möglichkeit zur Verfügung. Das ist aber nicht sehr schön eine tiefere Protokollschicht zu "vergewaltigen", weil das ganze Pronzip der Internet-Client-Server-Technik damit gestört wird. In verbindungsorientierten lokalen Netzen ist das nicht so problematisch. Da hat man auch genug Bandbreite um von hunderten von Clients die "still alive" Rückmeldung einzusammeln.

    Schau Dir mal da Testscript an.
    Es macht nich nicht das, was es soll.
    Insbesondere kann ich von einem Client (IE5.5) auch nur drei laufende Instanzen erzeugen. Ich weiß allerdings nicht, ob es jetzt am Client, oder am Server liegt.

    <?php #### control_center_02.php ####

    ini_set("track_errors","1");
    $php_errormsg;

    set_time_limit(0);
    $pid = getmypid();

    echo "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.1 Transitional//EN">\n";
    echo "<HTML>\n";
    echo "<HEAD>\n";
    echo "  <TITLE>Dauerlauf</TITLE>\n";
    echo "</HEAD>\n";
    echo "<BODY>\n";

    $ok = ignore_user_abort(true);  ## Script läuft bei abort weiter

    echo "User-Abort vor der Einstellung ".($ok?'true':'false')."<br />";
    echo "User-Abort nach der Einstellung ".(ignore_user_abort()?'true':'false')."<br />";
    flush();

    diese Schleife läuft solange, bis der Client einen Abbruch sendet

    while (!connection_aborted())
    {
      echo "$pid ".time()." lebt noch<br />";
      flush();
      sleep(2);
    }

    Hier wäre die Stelle, an der man die DB-Löschungen machen könnte.

    Ersatzweise lebt das Script jetzt noch 30 Sekunden. danach sollte der Prozess

    aus der Prozessliste verschwinden.

    mail('tom@example.com',"prozess: $pid","Prozess $pid stoppt gleich ".date('H:i:s'));
    sleep(30);
    mail('tom@example.com',"prozess: $pid","Prozess $pid stoppt jetzt ".date('H:i:s'));

    echo "</body>\n";
    echo "</html>";
    ?>

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hello,

      Schau Dir mal da Testscript an.
      Es macht noch nicht das, was es soll.
      Insbesondere kann ich von einem Client (IE5.5) auch nur drei laufende Instanzen erzeugen. Ich weiß allerdings nicht, ob es jetzt am Client, oder am Server liegt.

      <?php #### control_center_02.php ####

      ini_set("track_errors","1");
      $php_errormsg ='';

      Das mit den Instanzen scheint wohl irgendwie am Client zu liegen. Der eine kann drei, der andere zwei und der dritte auch drei. Und alle zusammen können sie diese Anzahl auch...

      Daß das Script noch nicht macht, was es soll, liegt an meinem Update auf PHP 4.3.8. Die Mailfunktion geht nicht mehr. Da kann ich also lange warten auf eine Aktion.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau