Извлечь несколько значений из массива внутри массива из вызова функции PHP - PullRequest
1 голос
/ 27 декабря 2011

Это может быть легко, но я не могу понять это ... Вот весь код:

function logRequest($currIP){

include("include/opendb.php");

$gets = $_SERVER['QUERY_STRING'];
$posts = http_build_query($_POST);

$ref = $_SERVER['HTTP_REFERER'];
$agent = $_SERVER['HTTP_USER_AGENT'];
$date = date('Y-m-d H:i:s');
$rlookup = $_SERVER['REMOTE_HOST'];
$requestType = $_SERVER['REQUEST_METHOD'];
$languageset = $_SERVER['HTTP_ACCEPT_LANGUAGE'];

$key = "GSICHECKPOINT1";
$combinedVars = array("combinded" ,$date, $currIP, $ref, $agent, $rlookup, $requestType, $languageset, $gets, $posts);
$array[0] = $encryptID = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $combinedVars, MCRYPT_MODE_CBC, md5(md5($key))));
$array[1] = $decryptID = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encryptID), MCRYPT_MODE_CBC, md5(md5($key))), "\0");   


$query = "INSERT INTO loadAttempts (date, IP, ref, useragent, dnslookup, requestType, language, gets, posts) VALUES ('$date', '$currIP', '$ref', '$agent', '$rlookup','$requestType', '$languageset', '$gets', '$posts')";
$result = mysql_query($query);

return $array;


}

Я хочу вернуть из функции как $ encryptID, так и $ decryptID, поэтому я поместил их в массив. (это было неправильно?)

Затем я пытаюсь передать эти возвращенные значения в другую функцию, используя этот код:

        if(in_array($_SERVER['REMOTE_ADDR'], $blockIP)){
            // Log attempt to get here.
            list($encryptID, $decryptID) = logRequest($currIP);
            // Send user to blockpage.
            blockPage($encryptID, $decryptID);
        }else{ 
                       blah blah blah

Мой вопрос: когда я извлекаю эти возвращенные значения, blockPage отображает «Массив» для $ decryptID, и я не знаю, где я испортил извлечение этих значений из функции. Как показать каждый элемент внутри массива $ decrpytID, когда он уже не входит в функцию создателя?

Спасибо!

1 Ответ

0 голосов
/ 27 декабря 2011

Проблема в том, что вы передали массив $combinedVars третьему ($data) аргументу mcrypt_encrypt(), когда manual вызывает строку для передачи. Это приведет к преобразованию массива в строку Array, поэтому вы видите, что это расшифровано.

Из руководства :

Массивы всегда преобразуются в строку "Массив"

Вам необходимо преобразовать строку в массив более интеллектуальным способом, который показывает значения - так что вы можете захотеть serialize() это или json_encode() это или, возможно, просто print_r() it, передав TRUE второму аргументу для возврата строки. Что вы хотите сделать, зависит от того, что вы хотите сделать с данными.

Единственное, что явно неверно, это то, что combinded должно, вероятно, сказать combined.

Должен сказать, что я не совсем понимаю назначение этой функции - зачем вам иметь функцию, которая возвращает те же данные в зашифрованном и зашифрованном виде, и даже если это полезно, какой смысл делать дополнительная работа по расшифровке только что зашифрованных данных и возвращению результата, когда вы можете просто вернуть зашифрованные данные ...

...