[Funktion] Inaktivität <=> User 'prüfen' User

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Funktion] Inaktivität <=> User 'prüfen' User

    Hio PHP-Checker :*)

    Ich bin dabei eine Community zu coden, die eigentlich auch schon fast fertig ist und auch so fehlerfrei funktioniert. Irgendwie bin ich heute der Logik nicht ganz Herr! Würde mich freuen, wenn ihr mir da bisschen abhelfen könntet. Es geht hier nicht darum, wieviele User online sind.. Sondern es soll geprüft werden, ob User länger inaktiv waren, wenn ja, dann sollen die jenigen nach der festgelegten Zeit auf "Offline" gestellt werden. Sind sie offline, werden sie automatisch umgeleitet.

    Problem:
    Ich bin mit der Time() Funktion irgendwie in Konflikt geraten bzw. sie zu vergleichen zwecks Inaktivität zu prüfen. Ich liste hier jetzt 2 PHP Codes ein..

    1. Das ganze Prüf-Script ( Übrigens selber geschrieben )
    zu 1. muss ich noch hinzufügen, dass das Script includet wird und der Befehl $DB festgelegt ist, an einer Fehlermeldung liegts nicht, sondern komm grad mit der 'Logik' nicht klar!
    2. Wo ich hängen bleib ( wegen der Logik )

    1.)
    PHP-Code:
    <?php

    ############# Dieses Script ist ein weiter Schutz und Onlinefähigkeit zugleich ##############


     ### Zeit die man bei Inaktivität Online bleibt. ###

      
    $online_dauer 60;


     
    ### Datenbank fragen, ob dieser User überhaupt online ist ###

       
    $result mysql_query("SELECT * FROM user WHERE nickname='$nickname'");
       while ( 
    $profildaten mysql_fetch_array$result ) ) {
        
    $online $profildaten["online"];
        
    $neueid =$profildaten["id"];
        
    $neuernickname $profildaten["nickname"]; }

        if ( 
    $online == )

         {
         
    ?> <META HTTP-EQUIV="refresh" CONTENT="0; URL=loginfehler.php"> <? die ("<font color=#2187F8 size=3><center>Du wirst umgeleitet, falls Dein Browser keine Umleitung unterstützt, klicke <a href='loginfehler.php'>hier.</a>");
         }

        #### Alle User Prüfen, ob die Zeit abgelaufen ist und wenn ja,  ####
        #### Dann Offline kicken !! ####

        ## Zuerst Time umwandeln! ##

        $abgelaufen = time()-$online_dauer;

        ## Alle abfragen und evtl. offline kicken ##

       $result = mysql_query("SELECT * FROM user ORDER BY id");
       while ( $profildaten = mysql_fetch_array( $result ) ) {
        $time = $profildaten["time"];
         $id = $profildaten["id"];

        if ( $time > $abgelaufen )
          {

         $sqlbefehl = "UPDATE user SET
        online='0'
          WHERE id='$id' limit 1;";
            mysql_query($sqlbefehl, $db) or die(mysql_error()); }

            }


         ### Wir prüfen nochmal, ob der User online ist! ###

          ### Datenbank fragen, ob dieser User überhaupt online ist ###

       $result = mysql_query("SELECT * FROM user WHERE nickname='$neuernickname'");
       while ( $profildaten = mysql_fetch_array( $result ) ) {
        $online = $profildaten["online"]; }

        if ( $online == 0 )

         {
         ?> <META HTTP-EQUIV="refresh" CONTENT="0; URL=loginfehler.php"> <? die ("<font color=#2187F8 size=3><center>Du wirst umgeleitet, falls Dein Browser keine Umleitung unterstützt, klicke <a href='loginfehler.php'>hier.</a>");
         }


      ### Nach dem wir das geklärt hätten gehts weiter... ###
      ### Wir aktuallisieren dem ONLINE User seine Zeit   ###

       ### Zeitaktuallisieren ###
         $neuezeit = time()+$online_dauer;

      ### Neue Zeit eintragen ###

        mysql_query("UPDATE user SET zeit='$neuezeit' WHERE id='$neueid' LIMIT 1",$db);

     $id = $neueid;
     $nickname = $neuernickname;

     ?>
    2.

    PHP-Code:
    ### Zeit-Festlegung ###
    $abgelaufen time()-$online_dauer
    Hier ein Plus oder Minus ?

    PHP-Code:
        ### Prüfen ob Zeit abgelaufen ist ###
        
    if ( $time $abgelaufen 
    Größer oder Kleiner??

    PHP-Code:
     ### Zeitaktuallisieren ###
         
    $neuezeit time()+$online_dauer
    Hier ein Plus oder Minus, oder gar nix??( Im Login natürlich auch... )


    Ich bedank mich bei allen im voraus, die mir helfen... Wer möchte, kann dann das verbesserte Script gerne bei sich verwenden

    Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
    sondern mit den Augen das Manual zu lesen.

  • #2
    Hi,

    hier gibts nen schönes Beispiel:
    http://www.php4-forum.de/beispiele/user_online.htm
    Grüsse,
    Sebastian


    Profil Flex Freelancer
    Twitter twitter.com/flashhilfe
    Web Flash und Flex Community

    Kommentar


    • #3
      Hm, wieso legst du nicht eine LastAction Spalte in der DB an. Dann rechnest du aus ob now()-LastAction aus und vergleichst per PHP, ob die Zeit überschritten wurde oder nicht. Und vergleichst mit der Online-Dauer...

      Wäre doch simpler?
      Für Rechtschreibfehler übernehme ich keine Haftung!

      Kommentar


      • #4
        Original geschrieben von Damian1984
        Hm, wieso legst du nicht eine LastAction Spalte in der DB an. Dann rechnest du aus ob now()-LastAction aus und vergleichst per PHP, ob die Zeit überschritten wurde oder nicht. Und vergleichst mit der Online-Dauer...

        Wäre doch simpler?
        hm.. mit LastAction und now() hatte ich noch net viel am Hut.. *Befehle mal aufschreib zum Lernen * Allerdings würde ich trotzdem gerne erfahren, wo da der Fehler hängt... Denn eingentlich müsste das "komplizierte Script auch funktionieren, wenn die Logik stimmt.. Aber trotzdem danke!

        Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
        sondern mit den Augen das Manual zu lesen.

        Kommentar


        • #5
          Die Tabelle hat ne Spalte wo last_action steht.
          Immer wenn derjenige User die Seite aktualisiert wird das Script neu aufgerufen.
          Wenn time() - last_action größer als das und das ist dann ist User inaktiv.

          So macht man das
          PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

          Kommentar


          • #6
            was soll größer sein bzw. kleiner, und bei welcher zeit die dauer abziehen?

            Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
            sondern mit den Augen das Manual zu lesen.

            Kommentar


            • #7
              Original geschrieben von xManUx
              was soll größer sein bzw. kleiner, und bei welcher zeit die dauer abziehen?
              lies dir doch erst einmal das TUT durch.

              http://www.php-resource.de/tutorials/read/38/1/
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Original geschrieben von Abraxax
                lies dir doch erst einmal das TUT durch.

                http://www.php-resource.de/tutorials/read/38/1/
                und dann??

                hab dort nichts brauchbares für mein Anliegen gefunden!! Es ging nicht darum ob sie nun eingeloggt sind oder nicht sondern darum, dass andere user das script aufrufen, dieses wieder prüft wie lange die user inaktiv waren und diese user mit zeitüberschreitung sollen dann offline gekickt werden... und in diesem TUT hab ich nichts gefunden, WAS dies anging.. falls ich falsch liege tuts mir leid, aber ich glaub nicht...

                Inzwischen klappts übrigens bei mir!!

                PHP-Code:
                <?php

                ############# Dieses Script ist ein weiter Schutz und Onlinefähigkeit zugleich ##############


                 ### Zeit die man bei Inaktivität Online bleibt. ###

                  
                $online_dauer 20*60;


                 
                ### Datenbank fragen, ob dieser User überhaupt online ist ###

                   
                $result mysql_query("SELECT * FROM zonyuser WHERE nickname='$nickname'");
                   while ( 
                $profildaten mysql_fetch_array$result ) ) {
                    
                $online $profildaten["online"];
                    
                $neueid =$profildaten["id"];
                    
                $neuernickname $profildaten["nickname"]; }

                    if ( 
                $online == )

                     {
                     
                ?> <META HTTP-EQUIV="refresh" CONTENT="0; URL=loginfehler.php"> <? die ("<font color=#2187F8 size=3><center>Du wirst umgeleitet, falls Dein Browser keine Umleitung unterstützt, klicke <a href='loginfehler.php'>hier.</a>");
                     }

                    #### Alle User Prüfen, ob die Zeit abgelaufen ist und wenn ja,  ####
                    #### Dann Offline kicken !! ####

                    ## Zuerst Time umwandeln! ##

                    #$abgelaufen = time()-$online_dauer;

                    ## Alle abfragen und evtl. offline kicken ##

                   $result = mysql_query("SELECT * FROM user where online='1' ORDER BY id");
                   while ( $profildaten = mysql_fetch_array( $result ) ) {
                    $timea = $profildaten["zeit"];
                     $id = $profildaten["id"];

                      $chek = time()-$online_dauer;
                         echo $chek." | aus der db".$timea;
                    if ( $chek > $timea )
                      {

                     $sqlbefehl = "UPDATE user SET
                    online='0',
                    UserSession=NULL
                      WHERE id='$id' limit 1;";
                        mysql_query($sqlbefehl, $db) or die(mysql_error());

                        }

                        }


                     ### Wir prüfen nochmal, ob der User online ist! ###

                      ### Datenbank fragen, ob dieser User überhaupt online ist ###

                   $result = mysql_query("SELECT * FROM user WHERE nickname='$neuernickname'");
                   while ( $profildaten = mysql_fetch_array( $result ) ) {
                    $online = $profildaten["online"]; }

                    if ( $online == 0 )

                     {
                     ?> <META HTTP-EQUIV="refresh" CONTENT="0; URL=loginfehler.php"> <? die ("<font color=#2187F8 size=3><center>Du wirst umgeleitet, falls Dein Browser keine Umleitung unterstützt, klicke <a href='loginfehler.php'>hier.</a>");
                     }


                  ### Nach dem wir das geklärt hätten gehts weiter... ###
                  ### Wir aktuallisieren dem ONLINE User seine Zeit   ###

                  ### Neue Zeit eintragen bzw. aktua. ###
                  $news=time();
                 mysql_query("UPDATE user SET zeit='$news' WHERE id='$neueid' LIMIT 1",$db);

                 $id = $neueid;
                 $nickname = $neuernickname;

                 ?>
                Wer es mag, darfs gerne für sich verwenden @Admin, ich schenks Dir *g*


                Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                sondern mit den Augen das Manual zu lesen.

                Kommentar

                Lädt...
                X