2012-05-01 130 views
3

有人能告訴我我做錯了什麼嗎?解析錯誤:語法錯誤,意外的T_VARIABLE,期待T_FUNCTION

我想僅在特定房間在線顯示用戶。

下面的代碼是調用我的online.php的函數,這是我的聊天.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

您在某個地方創建了一個類型,查看錯誤的鄰域並查看是否存在語法錯誤。 – Zombaya

+0

你是什麼意思按類型?錯誤指出$ rn = $ _GET ['room'];我不知道爲什麼。 – user1232117

+0

這不是你應該怎麼做的。永遠。 –

回答

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->引用丟失。

+0

我試着實現你的代碼。它說調用未定義的功能sanitize() – user1232117

+0

在我原來的帖子指出online.php行號10 – user1232117

+0

啊,對不起 - 我從上面複製它。但那是一個單獨的錯誤。正如他們上面所說,這是讀者實現的;-)而是使用mysql_safe_string(..)。做出改變。 – craigmj

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()留給讀者。

+0

我試圖根據您的更正 現在我得到一個SQL錯誤 mysql_num_rows()期望參數1是資源,布爾給定 – user1232117

+0

你不能花時間在這篇文章中回答他的問題?關於注入漏洞的重點,但這不是一個答案... – orourkek

+0

@orourkek:你說得對。這不是一個答案。這是*解決方案*。 –

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}'"; 
} 
+1

是的,你可以,但只有固定值像'3'或'「我是一個字符串」' – Zombaya

+0

@zombaya我的意思是後變量和初始化查詢 –

+0

那麼,這是正確的。 – Zombaya

相關問題