2016-09-07 6 views
-1

私は、私は次のエラーを取得しています理由を理解しようと苦労している:警告:(アレイ上の)不正な文字列オフセット

警告:不正な文字列オフセット「ユーザ名」

このコードで

:私はそれをエコーし​​ようとした場合

if (ggconf::get('signup_use_activation') && isset($user['permissions']) && $user['permissions'] == 'x'){ 
    $errors['username'] = "account not activated"; // <--- this line here 
    gg::writeLog('auth bad - account not activated'); 
} 

私は二回、エラー(エコーライン上の第二の時間)を取得します。
私は本当に何がうまくいかないのか理解していません。特に、私のコードで$ errors配列を何度も使用しているので、これが私のトラブルを引き起こす唯一のブロックです。注型を混合さ

+1

変数 '$のerrors'が配列でない - それは、すでに別の値を保持し、PHPはしたくありませんその場所に暗黙的に配列を作成します。 - おそらく '$ errors ="アクセス禁止 ";'最初に呼び出された –

+1

'$ errors =" access forbidden "; ---これは文字列です。 – zerkms

+0

うわー、私は今理解しています...変数としての$ errorは、未許可のアカウントを持つユーザーがアカウントをアクティブにする前にログインしようとするまで宣言されていません。(権限リストに「r」はありません)それは最初の機能を引き起こした...それは正しい?とにかく私はそれを確認するつもりです。ありがとう、これは私にすでに1時間迷惑をかけていて、疲れているのを見て、それが気づく前にはるかに長くなっていた可能性があることを見ています。どうもありがとう ! – apatik

答えて

0
if(isset($_POST["submit"])) { 

    $user = gg::getUser($_POST['username']); 

    if (isset($user['permissions']) && !strstr($user['permissions'], 'r') || ($user['username'] == 'guest' && ggconf::get('allow_guests') == false)){ 
     $errors = "access forbidden"; 
     gg::writeLog('auth bad - auth not activated'); 
    } 

    if (!isset($_POST['username']) || $_POST['username'] == ''){ 
     $errors['username'] = "enter your username"; 
     gg::writeLog('auth bad - blank username field'); 
    } 

    if (!isset($_POST['password']) || $_POST['password'] == ''){ 
     $errors['password'] = "enter your password"; 
     gg::writeLog('auth bad - blank password field'); 
    } 

    if (isset($user['akey']) && $user['akey'] != '' && strpos($user['akey'], 'otp-') === false){ 
     $errors['username'] = "account not activated"; 
     gg::writeLog('auth bad - account not activated'); 
    } 

    if(!$errors && $user['username'] == $_POST['username'] && gg::checkPassword($_POST['password'], $user['password'])){ 
     $this->loginUser($user); 
    } 

    if(!$user){ 
     $errors['username'] = "wrong username"; 
     gg::writeLog('auth bad - wrong username'); 
    } 

    if(!$errors && $user['username'] == $_POST['username'] && gg::checkPassword($_POST['password'], $user['password']) == false){ 
     $errors['password'] = "wrong password"; 
     gg::writeLog('auth bad - wrong password'); 
    } 

    if (ggconf::get('signup_use_activation') && isset($user['permissions']) && $user['permissions'] == 'x'){ 
     $errors['username'] = "account not activated"; 
     gg::writeLog('auth bad - account not activated'); 
    } 

} 

:(下部)このブロックからである。ここで

コードのサンプルです。

スクリプトの早い段階では、$errorsを文字列として使用します。オフセット 'X' で不正文字列:

<?php 

$variable = "fizz"; 
$variable['x'] = "y"; 

PHPの警告:

if (ggconf::get('signup_use_activation') && isset($user['permissions']) && $user['permissions'] == 'x'){ 
    $errors['username'] = "account not activated"; 
    gg::writeLog('auth bad - account not activated'); 
} 

は、たとえば、次のスクリプトを考えてみます。

if (isset($user['permissions']) && !strstr($user['permissions'], 'r') || ($user['username'] == 'guest' && ggconf::get('allow_guests') == false)){ 
    $errors = "access forbidden"; 
    gg::writeLog('auth bad - auth not activated'); 
} 

はその後、あなたは配列としてそれを使用します/path/file.php on line n

さらに読書:

+0

そうだった。 $エラーが文字列であるという条件がこれまでに引き起こされていなかったので、私はこれまでにそれを捕まえたことはありませんでした。問題の完全な説明をありがとう! – apatik

関連する問題