2017-07-08 9 views
0

個々のユーザーがオンラインかどうかを確認するコードを作成します。PHP/AJAXが最後にオンラインになっていることを確認しています

私は、ユーザーがオンラインの場合に緑色のオンラインサークルを表示できる素敵なスタイルを持っています。私はPHPのために、この機能を行うためのコードを持っていますが、私は、さわやかなページなし(リアルタイムでそれを利用できるように、彼らはオフライン時のために灰色の円にユーザーのアイコンを変更したりしたい

Picture of PHP example

オンライン時の緑色の円)がAJAXを使用している可能性があります。私が言ったように、私はサークルを表示するクラスを持っているので、スタイリングは必要ありません。ちょうどAJAXは彼らがリフレッシュせずにオンラインになっているかどうかをチェックする。

また、リフレッシュせずにオンラインになっているクライアントの数を確認して作業するコードもありますが、個々のクライアントの時間を取得する方法についてはわかりません。私は以下の両方のコードを掲載します。

私のPHPが動作しますがAJAXコードなし(ユーザステータスが変化するため、ページの読み込みが必要です):

<?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> 
      '; 
     } 
    } 
?> 

`

私は(それが現在のオンラインユーザーを取得します)作品、いくつかのPHPコードを持っていますが、私はどのように各ユーザーのオンライン状態をチェックし、オンラインまたはオフラインであれば別のクラスを表示する方法を知らない。

コード:

$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); 

私は今だけのためのオンラインユーザーを取得するためにAJAXを持っています。

<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> 
:取得オンラインのクライアントのため

私のAJAX: は、私は、各ユーザーのオンライン状態を確認し、私はこの質問のトップセクションのコードで使用するさまざまなオンライン/オフラインのクラスが表示されますAJAXコードの一部をしたいです

+0

よく、彼らがオンラインであればどのようにあなたが知っているだろうか?通常、ウェブサイトは接続後の時間に基づいて推測します。 –

+0

@ GarrGodfrey投稿した2番目のコードは完全に動作します。私のテーブルのonline_clientsというフィールドを更新、挿入、削除します。私はちょうどそれが各クライアントのオンライン状態を個別に読む方法をいくつか必要があります。 – Benza

+0

あなたが使用しようとしているAJAXコードを投稿できますか? – Difster

答えて

0

JSONを返すのではなく、そのユーザーに関する情報を他のJSONキーペアと共に返すのではなく、何人のユーザーがオンラインになっているかを提案します。その後、結果に基づいてページ上の要素を更新するために返されるJSONを処理することができます。

+0

ありがとうございます。あなたは私に例を教えてください。 – Benza

+0

まず、ajaxセクションで、dataType: "JSON"を追加する必要があります。これにより、戻り値にJSONがあることがわかります。また、JSONデータをjavascriptで扱う方法に関するチュートリアルもたくさんあります。 PHP側で、返す情報の配列を作成し、json_encode()でそれをエコーし​​ます。ですから、配列$ arrayを持つなら、これをしてください:echo json_encode($ array); JSONがjQueryの成功変数に返されます – Difster

+0

@Difterなぜ各ユーザーのオンライン時間をチェックするために配列を使用しますか? – Benza

0

使用しているDBエンジンは何も言わないでください。私は、あなたが結合を行うことができるMySqlを仮定するつもりです。その場合

は、私はあなたがこのような何かを探していると思う:

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

しかし、私はあなたのスキーマが何であるか、あなたがユーザーにonline_userを接続する方法を伝えることはできません。使用できるセッションテーブルがあるか、またはonline_usersテーブルにユーザーのIDまたはユーザー名を格納する必要があります。今、あなたはセッションと時間しか持っていないので、セッションをどのようにしてユーザーに接続するのか分かりません。

ユーザーがオンライン使用している場合は、その後、言うことができる:

!is_null($users_['time']) 
関連する問題