2012-05-01 24 views
3

誰かが間違っていることを教えてもらえますか?構文解析エラー:予期しないT_VARIABLE、T_FUNCTIONを予期しない構文エラー

特定の部屋にオンラインでユーザーを表示したいとします。

以下のコードは私のchat.phpの の下にある私のonline.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

を試してみてください[OK]を、これでもエラーを与える:

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

これはあなたが今を打破する必要が悪い癖があります。 sanitize()

protected function get_status_query($rn) { 
    return "SELECT * FROM `online_users` WHERE `room` =  '". sanitize($rn) . "'"; 
}; 

実装は読者に任されています。

+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

関連する問題