2010-11-20 11 views
0

私のプロジェクトのユーザー管理モジュールにusercakeを使用しています。これは私の最初のPHPプロジェクトであり、私はまだ学んでいます。 Iセットアップデータベースとusercakeプロジェクトが、私はこのエラーを取得しておく -このPHPエラーを解決するには

お知らせ:Cで非オブジェクトのプロパティを取得しようとすると:\ WAMP \ WWW \ userCake \モデル\ライン170上のfuncs.user.php

お知らせ:Cで非オブジェクトのプロパティを取得しようとすると:\ WAMP \ WWW \ userCake \モデル\ライン上funcs.user.php 172

そして、このエラーはありませんがある場合にのみ捕捉されますユーザーがシステムにログインしている。ユーザーがログインすると、このエラーは発生しなくなりました。責任コードは -

function isUserLoggedIn() 
{ 
    global $loggedInUser,$db,$db_table_prefix; 

    $sql = "SELECT User_ID, 
      Password 
      FROM ".$db_table_prefix."Users 
      WHERE 
      User_ID = '".$db->sql_escape($loggedInUser->user_id)."' //line 170 
      AND 
      Password = '".$db->sql_escape($loggedInUser->hash_pw)."' // line 172 
      AND 
      Active = 1 
      LIMIT 1"; 

    $sql = mysql_num_rows($sql); 

    if($loggedInUser == NULL) 
    { 
     return false; 
    } 
    else 
    { 
     //Query the database to ensure they haven't been removed or possibly banned? 
     if(returns_result($sql) > 0) 
     { 
       return true; 
     } 
     else 
     { 
      //No result returned kill the user session, user banned or deleted 
      $loggedInUser->userLogOut(); 

      return false; 
     } 
    } 
} 

私はこれを私の限られた知識で解決しようとしましたができませんでした。私は、このエラーは、オブジェクトリファレンスが.netのオブジェクトのインスタンスに設定されていないのと同じだと思います。私は正しい?そうでない場合、このエラーの原因は何ですか?

どうすればこの問題を解決できますか?

答えて

1

初めてユーザーがログインしていない場合、参照はNULLなので、170行目で$db->sql_escape($loggedInUser->user_id).はnull参照のようなものを引き起こしています。ユーザーがnullの場合は逆参照を停止するコードの先頭に

if($loggedInUser == NULL) { return false; }

を移動してみてください。

0

ユーザがログインしていない限り、グローバル変数$loggedInUserがnullであると思われます。そのため、SQLを使用して、ユーザがログインしているかどうかを検出します。

$loggedInUserがnullの場合、より前のを返すことができます。

1
function isUserLoggedIn() { 
    global $loggedInUser, $db, $db_table_prefix; 

    if ($loggedInUser == NULL) { return false; } 
    else { 
     $sql = "SELECT User_ID, 
       Password 
       FROM " . $db_table_prefix . "Users 
       WHERE 
       User_ID = '" . $db->sql_escape($loggedInUser->user_id) . "' 
       AND 
       Password = '" . $db->sql_escape($loggedInUser->hash_pw) . "' 
       AND 
       Active = 1 
       LIMIT 1"; 

     //Query the database to ensure they haven't been removed or possibly banned? 
     if (returns_result($sql) > 0) { return true; } 
     else { 
      //No result returned kill the user session, user banned or deleted 
      $loggedInUser->userLogOut(); 

      return false; 
     } 
    } 
} 

この機能をこれに置き換えます。 SQL文は、私はまったく同じ問題を抱えていた.. $ loggedInUserがnullの場合、それは確認した後まで

1

を設定するはずの、

私が自分自身のデータベース接続whiceが後userCake接続がした開始されたていたようですこれは明らかにuserCake接続をオーバーライドしてsql_escapeを不可能にします。

userCakeをインクルードした後にデータベース接続を無効にしようとします。

ところで、userCakeをインクルードする前に、session_start()も削除する必要があります。これにより、セッションで__php_incomplete_classエラーが発生します