解析错误:语法错误,意外T_VARIABLE,期待T_FUNCTION

时间:2012-05-01 17:35:28

标签: php ajax syntax-error

有人能告诉我我做错了吗?

我想仅在特定房间在线显示用户。

下面的代码是调用我的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();
?>

任何帮助?

3 个答案:

答案 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->引用丢失时可能出现的任何错误。