2017-07-08 5 views
0

Ich möchte ein Stück Code erstellen, der überprüft, ob ein einzelner Benutzer online ist.PHP/AJAX Benutzer zuletzt online überprüfen

Ich habe einen netten Stil, der einen grünen Online-Kreis anzeigen kann, wenn der Benutzer online ist.

Picture of PHP example

ich den Code habe diese Funktion für PHP zu machen, aber ich mag es in Echtzeit (ohne die Seite zu aktualisieren, ändern Sie das Symbol Benutzer auf einen grauen Kreis zur Verfügung stellen, wann sie sind offline oder ein grüner Kreis für wenn sie online sind) vielleicht mit AJAX. Wie ich schon sagte, ich habe die Klassen um die Kreise zu zeigen, also brauche ich kein Styling. Nur der AJAX, um zu überprüfen, ob sie ohne eine Aktualisierung online sind.

Ich habe auch ein Stück Code, der überprüft, wie viele Clients online sind ohne eine Aktualisierung und funktioniert, aber ich bin mir nicht sicher, wie man das in den einzelnen Clients Zeiten zu machen. Ich werde meine beiden Codes unten veröffentlichen.

Meine PHP arbeiten, aber ohne AJAX-Code (benötigter Laden der Seite für den Benutzerstatus ändern):

<?php 
    $user_grab = mysqli_query($con, "SELECT * FROM users"); 
    while($users_ = mysqli_fetch_array($user_grab)) { 



     $last_online = strtotime($users_['lastonline']); 

     if(time() - $last_online < user_session_timeout()) { 
      echo ' 
       <div class="chat-list-item -available" style="background: rgba(255,255,255,0.1);"> 
        <img class="chat-list-avatar" src="'.$users_['profile_picture'].'"/><i class="fa fa-circle chat-list-status"> </i> 
        <div class="chat-list-user">'.$users_['username'].' (<font size="2">'.get_users_level_all($users_['userLevel']).'</font>)</div> 
        <div class="chat-list-excerpt">Online</div> 
       </div> 
      '; 
     } else { 
      echo ' 
       <div class="chat-list-item -offline" style="background: rgba(255,255,255,0.1); padding: 5px;"> 
        <img class="chat-list-avatar" src="'.$users_['profile_picture'].'"/><i class="fa fa-circle chat-list-status"> </i> 
        <div class="chat-list-user">'.$users_['username'].' (<font size="2">'.get_users_level_all($users_['userLevel']).'</font>)</div> 
        <div class="chat-list-excerpt">Offline</div> 
       </div> 
      '; 
     } 
    } 
?> 

`

Ich habe einig PHP-Code, der funktioniert (es den aktuellen Online-Benutzer bekommt), aber Ich weiß nicht, wie man den Online-Status jedes Benutzers überprüfen und verschiedene Klassen anzeigen kann, wenn sie online oder offline sind.

Der Code:

$session = session_id(); 
$time  = time(); 
$time_check = $time - 300;  //We Have Set Time 5 Minutes 


$sql = "SELECT * FROM online_users WHERE session = '$session'"; 
$result = mysqli_query($con, $sql); 
$count = mysqli_num_rows($result); 

//If count is 0 , then enter the values 
if($count == "0") { 
    $sql1 = "INSERT INTO online_users(session, time) VALUES ('$session', '$time')"; 
    $result1 = mysqli_query($con, $sql1); 
} 

// else update the values 
else { 
    $sql2 = "UPDATE online_users SET time = '$time' WHERE session = '$session'"; 
    $result2 = mysqli_query($con, $sql2); 
} 

$sql3    = "SELECT * FROM online_users"; 
$result3   = mysqli_query($con, $sql3); 
$count_user_online = mysqli_num_rows($result3); 
echo "<b>Users Online : </b> $count_user_online "; 

// after 5 minutes, session will be deleted 
$sql4 = "DELETE FROM online_users WHERE time < $time_check"; 
$result4 = mysqli_query($con, $sql4); 

Ich habe nur AJAX für die Online-Nutzer, die sich jetzt zu bekommen. mag ich ein Stück AJAX-Code, der von jedem Benutzer Online-Status überprüfen und die verschiedenen Online-/Offline-Klassen I zeigt im oberen Abschnitt Code dieser Frage verwenden:

Meine AJAX für das Erhalten Online-Kunden:

<script> 
    function fetchOnline() { 
     $.ajax({ 
      url: "includes/get_dash_settings.php", 
      context: document.body, 
      success: function(value){ 
       var data = value.split(","); 
       $('#totalUsers').html(data[0]); 
       $('#totalOnline').html(data[1]); 
       $('#freeModeStatus').html(data[2]); 
       $('#bypassesStatus').html(data[3]); 
      }, 
      complete:function(){ 
       setTimeout(fetchOnline,5000); 
      } 
     }) 
    } 

    $(document).ready(function() { setInterval(fetchOnline,5000); }); 
</script> 
+0

gut, wie würden Sie wissen, wenn sie online sind? In der Regel raten Webseiten nur nach der Zeit seit einer Verbindung. –

+0

@GarrGodfrey Der zweite Code, den ich gepostet habe, funktioniert perfekt. Es aktualisiert, fügt ein und löscht Felder in meiner Tabelle, die online_clients genannt werden.Ich muss nur einige, wie es jeden Kunden Online-Status einzeln lesen lassen. – Benza

+0

Können Sie den AJAX-Code posten, den Sie verwenden möchten? – Difster

Antwort

0

Ich empfehle, anstatt JSON mit Informationen über diesen Benutzer zusammen mit einem anderen JSON-Schlüsselpaar über wie viele Benutzer online sind zurückzugeben. Anschließend können Sie basierend auf den Ergebnissen auf dem JSON-Code reagieren, der zurückgegeben wird, um Elemente auf Ihrer Seite zu aktualisieren.

+0

Danke. Können Sie mir bitte ein Beispiel geben? – Benza

+0

Zunächst müssen Sie in Ihrem Ajax-Abschnitt dataType: "JSON" hinzufügen, damit JSON im Rückgabewert erwartet wird. Und es gibt viele Tutorials zum Umgang mit JSON-Daten in Javascript. Erstellen Sie auf der PHP-Seite ein Array der Informationen, die Sie zurückgeben möchten, und geben Sie diese dann mit json_encode() zurück. Wenn Sie also einen Array-Namen $ array haben, tun Sie dies: echo json_encode ($ array); Anschließend wird JSON an die jQuery-Erfolgsvariable – Difster

+0

@Difter zurückgegeben. Warum würde ich ein Array verwenden, um die Onlinezeit jedes Benutzers zu überprüfen? – Benza

0

Sie sagen nicht, welche db-Engine Sie verwenden. Ich gehe von MySql aus, wo Sie Joins machen können.

In diesem Fall denke ich, Sie für so etwas suchen:

SELECT * FROM users LEFT JOIN online_users ON users.id=online_users.id 

Aber ich kann nicht sagen, was Ihr Schema ist und wie Sie ein online_user einen Benutzer verbinden würden. Sie haben entweder eine Sitzungstabelle dazwischen, die Sie verwenden können, oder Sie müssen die ID oder den Benutzernamen des Benutzers in der Tabelle online_users speichern. Momentan haben Sie nur Sitzung und Zeit und ich bin mir nicht sicher, wie ich eine Sitzung mit einem Benutzer verbinden kann.

Man könnte dann sagen, ob der Benutzer online verwendet:

!is_null($users_['time']) 
Verwandte Themen