2

誰かが私が間違っていることを教えてもらえますか?

特定のルームのみオンラインのユーザーを表示したい。

以下のコードは、私の online.php を呼び出す関数です。これは、私の chat.php の下にあり、ページをロードすると、この関数もロードされます。

function whos_online() {
  if ( window.XMLHttpRequest ) {
    xmlhttp = new XMLHttpRequest();
  } else { 
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.open("GET", "online.php?room=<?php $_SESSION['room']?>", false);
  xmlhttp.send();
  document.getElementById("whos_online").innerHTML = xmlhttp.responseText; 
}

オンライン.PHP

これは私の online.php の内容です

<link rel="stylesheet" type="text/css" href="style.css" />
<?php

    session_start();
    include 'db.inc.php';

    class WhosOnline{
        $rn = $_GET['room'];
        protected $get_status_query = "SELECT * FROM `online_users` WHERE `room` = '{$rn}'";
        public function DisplayUsers(){
            $get_current_status = mysql_query( $this->get_status_query );
            if( mysql_num_rows( $get_current_status ) != 0 ) {
                while( $row_status = mysql_fetch_array( $get_current_status ) ) {
                    if( $_SESSION['username'] == true ) {
                        echo "<div class='online_margin'>
                                <b>".base64_decode($row_status['username'])."</b>
                              </div>
                              <hr style='border: 0; border-top: solid 1px #D8D8D8;margin: 5px 10px 5px 10px;' />";
                    }
                }
            }
        }
    }

    $Online = new WhosOnline;
    $Online->DisplayUsers();
?>

何か助けはありますか?

4

3 に答える 3

2
$rn = $_GET['room'];
protected $get_status_query = "SELECT * FROM `online_users` WHERE `room` =     '{$rn}'";

これは、今すぐにやめなければならない悪い習慣です。

protected function get_status_query($rn) {
  return "SELECT * FROM `online_users` WHERE `room` =     '". sanitize($rn) . "'";
};

の実装はsanitize()読者に任されています。

于 2012-05-01T17:40:08.737 に答える
2

クラスで変数を直接初期化できませんでした。これを試してください

public $rn;
protected $get_status_query;

public __construct(){
      $this->rn = $_GET['room'];
      $this->get_status_query = "SELECT * FROM `online_users` WHERE `room` = '{$this->rn}'";
}
于 2012-05-01T17:42:17.550 に答える
1

OK、これでもエラーが発生します:

class WhosOnline{
    public $rn = $_GET['room'];
}

これもエラーになります:

$v = "Hi there";
class WhosOnline{
    public $rn = $v;
}

エラーは、クラス定義の別の変数に基づいて変数を設定しようとしているためです。コンストラクターでこれを行うことができます。または、CONSTANTS に基づいてクラス メンバーを設定することもできます (クエリ文字列で行っていたように)。しかし、WhosOnline メソッドを次のように書き直してはどうでしょうか。

public function DisplayUsers(){
    $get_current_status = mysql_query(
        "SELECT * FROM `online_users` WHERE `room` = '" 
            . mysql_real_escape_string($_GET['room']) . "'");
    if(mysql_num_rows($get_current_status)!=0){
        while($row_status = mysql_fetch_array($get_current_status)){
            if($_SESSION['username']==true){
                echo "<div class='online_margin'>   <b>".base64_decode($row_status['username'])."</b></div><hr style='border: 0; border-top:  solid 1px #D8D8D8;margin: 5px 10px 5px 10px;' />";
            }
        }
    }
}

$this->これにより、参照が欠落している可能性のある潜在的なエラーも削除されます。

于 2012-05-01T17:48:01.057 に答える