2016-08-16 3 views
0

私は外部アプリケーションのログインコードを書いています。配列作成後に配列要素を評価できません - var_dumpは要素があることを確認します

現在、GET経由で情報を送信しています。情報はエンコードされ、サーバーは情報をデコードし、ユーザーの認証に使用できるデコードされた配列を構築します。

問題は何らかの理由で配列要素にアクセスできないことがわかっているときです。私はvar_dumpを使って確認します。

error_reporting(E_ALL); 

function getNonDecodedParameters(& $a) { 
    foreach (explode ("&", $_SERVER["QUERY_STRING"]) as $q) { 
    $p = explode ('=', $q, 2); 
    $a[$p[0]] = isset ($p[1]) ? $p[1] : ''; 
    } 
} 

function decode_array(&$encyrptArray, &$outputArray) { 

    foreach($encyrptArray as $encrpyKey=>$encrpyValue) { 
     $newKey = decode_my_mt4_string($encrpyKey); 
     $newVal = decode_my_mt4_string($encrpyValue); 

     $outputArray[$newKey] = $newVal;     
    } 
} 

//init arrays 
$inputs = array(); 
$decoded = array(); 

//manually build array from query string 
//bypassing $_GET because $_GET does auto urldecode() 
getNonDecodedParameters($inputs); 

//decode data into new array 
decode_array($inputs, $decoded); 

//var dump 
echo '<pre>'; 
var_dump($inputs); 
echo '<br />'; 
echo 'Decoded array'; 
echo '<br />'; 
var_dump($decoded); 
echo '</pre>'; 

//try access specific array element 
printf('$decoded["cname"] = %s', $decoded['cname']); 

のvar_dumpは、これが働いている示しているが、私は直接の要素を呼び出し、何らかの理由で、phpのエラーは、それが存在しないと言ってスローされます?

array(3) { 
    ["d3JfbG9naW4A"]=> 
    string(12) "dGVzdHVzZXIA" 
    ["cGFzcwA%3D"]=> 
    string(12) "dGVzdHBhc3MA" 
    ["Y25hbWUA"]=> 
    string(14) "REFaV0FSRQA%3D" 
} 

Decoded array 
array(3) { 
    ["wr_login"]=> 
    string(9) "testuser" 
    ["pass"]=> 
    string(9) "testpass" 
    ["cname"]=> 
    string(8) "DAZWARE" 
} 

Notice: Undefined index: cname in /home/website/test2.php on line 58 
$decoded["cname"] = 

私は実際にはこれが動作していない理由を考えることはできません。これはサーバーの問題ではありませんでしたか?

+0

エラーを投げる正確な行がどれかを表示できますか? 58行はどちらですか? – BeetleJuice

+0

おそらくこの1つです。 printf( '$ [[cname "] =%s'、$ decoded ['cname']); –

+0

これはprintf行です。 –

答えて

0

ありがとうございました。

ここで何が起こったのかを確認してください。

変数名のエラーは問題ではありませんでした。私がここで行った誤植です。

私はbase64でエンコードし、そのデータをPHPスクリプトに送信していました。 base64_decode()を使用すると、正しい文字列を吐き出すだけでなく、すべての変数名を破壊していたジャンクバイトも吐き出します。

問題は、使用していた外部プログラムの悪いベース64エンコーダでした。

私はここで私を助けるために時間を割いていただきありがとうございます。

関連する問題