2011-12-26 38 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

我必須說我不太明白這個函數的目的 - 爲什麼你會有一個函數以加密和解密的格式返回相同的數據,即使這有些用處,做額外的工作來解密你剛剛加密的數據並返回結果,當你只能返回你加密的數據時...