【问题标题】:Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION解析错误:语法错误,意外的 T_VARIABLE,期望 T_FUNCTION
【发布时间】:2012-05-11 05:13:10
【问题描述】:

谁能告诉我我做错了什么?

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

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

有什么帮助吗?

【问题讨论】:

  • 你在某处创建了一个类型,查看错误附近是否有语法错误。
  • 类型是什么意思?错误指出 $rn = $_GET['room'];我不知道为什么。
  • 这不是你应该做的。永远。
  • 应该是错字。而且你不能在一个类里面有代码,只能在一个类的方法里面。

标签: php ajax syntax-error


【解决方案1】:
$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() 的实现留给读者。

【讨论】:

  • 我尝试根据您的更正替换现在我收到一个 sql 错误 mysql_num_rows() 期望参数 1 是资源,给定布尔值
  • 您不能花时间在这篇文章中回答他的问题吗?关于注入漏洞的要点,但这不是答案......
  • @orourkek:你是对的。这不是一个答案。这是一个解决方案
  • 我同意这显然是必须学习的东西,但实际答案是如此简单,以至于不包含它似乎很愚蠢。无论如何@user1232117,您的问题的答案如下,但您也应该绝对遵循此建议。
  • 您的方法并没有那么好。不要以这种方式构建查询。使用准备好的语句。
【解决方案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}'";
}

【讨论】:

  • 是的,您可以,但只能使用固定值,例如 3"I am a string"
  • @zombaya 我的意思是查询的后变量和初始化
  • 也许在构造函数中添加初始化。
【解决方案3】:

好的,即使这样也会报错:

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-&gt; 引用时可能遇到的任何潜在错误。

【讨论】:

  • 我尝试实现你的代码。它说调用未定义的函数 sanitize()
  • 在我的原始帖子中指出 online.php 行号 10
  • 啊,对不起-我从上面复制了。但这是一个单独的错误。正如他们上面所说,这是由读者来实现的;-) 而不是使用 mysql_safe_string(..)。做出改变。
  • 当我尝试 mysql_safe_string 时调用未定义的函数 mysql_safe_string()
  • 天哪,对不起,太晚了。函数是mysql_real_escape_string(..)
猜你喜欢
  • 2015-05-26
  • 1970-01-01
  • 2018-12-16
  • 2018-07-25
  • 2015-11-19
  • 2015-05-11
  • 1970-01-01
  • 2015-03-09
  • 2011-07-23
相关资源
最近更新 更多