2016-05-12 4 views
0

ログインしたユーザーがオンラインになっているかどうかをチェックし、その情報をhtmlテーブルに入れたいサーバーを作った。HTMLテーブルのJavascript出力のオンラインユーザー名

<?php 
session_start(); 
include_once '../php\connect.php'; 
function removeRefresh(){ 
    $query = connection()->prepare("UPDATE `online` SET `time` = `time`+1"); 
    $query->execute(); 
    $query = connection()->prepare("DELETE FROM `online` WHERE `time` > 5"); 
    $query->execute(); 
} 
function addOrRefresh($ID){ 
    $query = connection()->prepare("SELECT COUNT('id') FROM `online` WHERE `ID` = :ID"); 
    $query->bindParam(':ID', $ID); 
    $query->execute(); 
    $count = $query->fetchColumn(); 
    if($count == 0){ 
     $query = connection()->prepare("INSERT INTO `online`(`ID`, `time`) VALUES(:ID, 0)"); 
     $query->bindParam(':ID', $ID); 
     $query->execute(); 
    } 
    else{ 
     $query = connection()->prepare("UPDATE `online` SET `time` = 0 WHERE `ID` = :ID"); 
     $query->bindParam(':ID', $ID); 
     $query->execute(); 
    } 
} 
$action = filter_input(INPUT_GET, 'action'); 
if($action == 'heartbeat'){ 
    removeRefresh(); 
    $ID = $_GET['id']; 
    addOrRefresh($ID); 
    $query = connection()->prepare("SELECT u.username FROM `nusers` u INNER JOIN `online` o ON o.ID = u.ID"); 
    $query->execute(); 
    $onlineUsers = $query->fetchAll(PDO::FETCH_ASSOC); 
    $resultaat = ""; 
    foreach($onlineUsers as $user){ 
     $resultaat .= "<p>{$user['username']} <br></p>"; 
    } 
    echo "$resultaat"; 
} 

?> 

あなたは登録することができ、あなたは、ロビーにログインするとき、あなたは関数「ハートビート」が毎秒をチェックする「オンライン」のテーブルへ追加されます。

貧しい私の英語を許してください。

編集:システムが動作しています。私は単に 'echo "$ resultaat"を変更して、$ resultaatをtablerowに入れたいだけです。 '}'の後に追加しても動作しません。その回帰ですべての可能性を試してみると、私はそれを回避しようとしました。リクエスト後、私はドキュメント全体を投稿しました。 もう1つのjavascript部分は別のドキュメントに統合されています。

<?php 
session_start(); 
$ID = $_SESSION['ID']; 


if (isset($_POST['logout'])) { 
    session_destroy(); 
    $query = connection()->prepare("DELETE FROM `online` WHERE `ID` = :ID"); 
    $query->bindParam(':ID', $ID); 
    $query->execute(); 
} 
?> 

<html> 
    <head> 
     <title>Stratego</title> 
     <Link href="../layout/style.css" type="text/css" rel="stylesheet" /> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 

     <script src="./js/HeartBeat.js"></script> 
     <script> 
      $(document).ready(function() { 
       heartbeat.setSpelerId(<?php echo $ID; ?>); 
       heartbeat.polling(); 
      }); 
     </script> 
    </head> 
    <body> 
     <form method='post' name='logout' action="../setup/logout.php"> 
      <input type='submit' name='loggout' value='Log me out'>    
     </form> 
     <a href="lobby1.php">Singleplayer</a> 
     <div id="online-list"> 
     </div> 
    </body> 

    <?php echo "<script> 
     function heartbeat(){ 
      var xhttp = new XMLHttpRequest(); 
      xhttp.onreadystatechange = function() { 
       if (xhttp.readyState == 4 && xhttp.status == 200) { 
       console.log(xhttp.responseText); 
       document.getElementById(\"online-list\").innerHTML = xhttp.responseText; 
       } 
      }; 
      xhttp.open(\"GET\", \"./wachtruimterInterface.php?action=heartbeat&id=" . $ID . "\", true); 
      console.log('keeping in touch ༼つ ◕_◕ ༽つ'); 
      xhttp.send(); 
     } 
     setInterval(heartbeat, 1000); 
    </script>"; ?> 
</html> 

コンソールログは、接続が維持されているかどうかをチェックするためのものです。人々は自分のIDを使ってログインしますが、パスワードはありません。

これは現在の様子です.1人はオンラインです。 Luukと名付けられた。 http://www.filedropper.com/screenproof 私の目標は、オンラインになっているすべての人をテーブルに入れることです。 私が動作するようには思えない、ちょうど今

 $resultaat .= "<tr><td>{$user['username']} <br></td></tr>"; 
} 
echo "<table>$resultaat</table>"; 

を試してみた、進行する方法上の任意のヒント?

+0

これまでにお試しいただいた内容は? – itzmukeshy7

+0

私は、 'Echo "$ resultaat"の前後にコードを編集する試みを複数回試みましたが、javascriptスクリプト内にhtmlテーブルを作成するのに十分な経験がありません。 –

+0

'connection() - > p'が正しいことを確認してください。 – itzmukeshy7

答えて

1

問題を修正しました。

$resultaat = ""; 
foreach($onlineUsers as $user){ 
    $naam= $user['username'] 
    $resultaat .= "<tr><td>$naam</td></tr>"; 
} 
echo "<table border=1>$resultaat</table>"; 
関連する問題