有人能告诉我我做错了吗?
我想仅在特定房间在线显示用户。
下面的代码是调用我的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;
}
ONLINE.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();
?>
任何帮助?
答案 0 :(得分: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()
的实施留待读者阅读。
答案 1 :(得分: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}'";
}
答案 2 :(得分: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->
引用丢失时可能出现的任何错误。