2011-12-26 35 views
1

拉出多个值,这可能是容易的,但我似乎无法得到它..继承人所有代码:从阵列阵列内从函数调用PHP

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和$从函数中解密ID,所以我把它们放入一个数组中。 (是这样错了吗?)

然后我试图使用此代码,这些返回的值提交到另一个功能:

 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数组已经不在创建者函数中时,如何显示$ decrpytID数组中的每个项目?

谢谢!

+0

你可以做一个var_dump或printr什么logRequest($ currIP)返回?它可能会揭示什么是错误的。 – MrGlass 2011-12-26 20:38:48

回答

0

的问题是,你已经通过数组$combinedVarsmcrypt_encrypt()第三($data)的说法,当一个字符串manual电话传递。这将导致数组被转换为字符串Array,这就是您看到解密的原因。

From the manual

数组将被转换成字符串“阵列”

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

唯一明显错误的是combinded应该说是combined

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