【问题标题】:Pull multiple values from array inside of array from function call PHP从函数调用PHP中从数组内部的数组中提取多个值
【发布时间】:2012-01-28 03:50:35
【问题描述】:

这可能很容易,但我似乎无法得到它。这是所有代码:

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 数组中的每个项目已经超出创建函数时,如何显示它?

谢谢!

【问题讨论】:

  • 你能对 logRequest($currIP) 返回的内容做一个 var_dump 或 printr 吗?它可能会揭示出问题所在。

标签: php arrays variables mcrypt


【解决方案1】:

问题是当manual 要求传递一个字符串时,您已将数组$combinedVars 传递给mcrypt_encrypt() 的第三个($data) 参数。这将导致数组被转换为字符串Array,这就是你看到的解密结果。

From the manual:

数组总是被转换成字符串"Array"

您需要以更智能的方式将字符串转换为数组,以显示值 - 所以您可能想要 serialize() 它,或 json_encode() 它,或者可能只是 print_r() 它,传递 @987654333 @ 到第二个参数以返回字符串。您要做什么取决于您要对数据做什么。

唯一明显错误的另一件事是combinded 可能应该说combined

我必须说我不太明白这个函数的目的 - 为什么你会有一个函数以加密和解密格式返回相同的数据,即使这有一些用处,这样做的意义何在解密您刚刚加密的数据并返回结果的额外工作,当您可以返回您加密的数据时......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    相关资源
    最近更新 更多