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

好的,即使这给出了一个错误:

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 回答