2016-09-12 26 views
0

這可能是重複的,但我找不到任何幫助。爲什麼我的反序列化返回空?

我想通過表單的post方法將所有數據的數組傳遞給另一個頁面。它看起來像這樣:

 <form method="post" action="../resource_load/export.php" target="_blank"> 
     <input type="hidden" name="tipo" value="<?=$_GET['tipo']?>"> 
     <input type='hidden' name='excel_array' value='<?php echo htmlentities(serialize($_SESSION['excel_array']))?>'> 
     <input type='submit' class='submit' id='btnExport' value='Export to Excel' /> 

所以我在這裏序列化$ _SESSION數據。這是什麼樣子:

value="a:1:{s:12:"dpi_strategy";a:1:{s:5:"Plan1";a:1:{i:0;a:9:{i:0;s:3:"PCR";i:1;s:11:"Description";i:2;s:4:"Task";i:3;s:8:"Resource";i:4;s:13:"Baseline Plan";i:5;s:10:"Trend Date";i:6;s:4:"User";i:7;s:20:"Data Inicialização";i:8;s:6:"Status";}}}} 

這裏是我反序列化:

$Excel_array = htmlentities(unserialize($_POST['excel_array'])); 

然而,它返回null。這是爲什麼?

+1

我不明白這一點。你序列化一個會話變量,並在另一個頁面/腳本中解析它?只需訪問您的其他頁面中的會話變量 – Andreas

+0

我想將它變成$ _POST數據,所以當我打開另一個標籤時它不會被替換。 – RazorFinger

+0

它不會被替換。只需訪問其他頁面上的會話數據。嘗試一下。 – Andreas

回答

1

如果你這樣做,使用htmlentities()編碼和html_entity_decode()值進行解碼。

其次,我不認爲輸出序列化和反序列化用戶提交數據的數據是一個好主意。原因是代碼注入是一個主要的安全問題。

取而代之,使用json_encode()json_decode()。 現在,因爲我看到你的數組中有特殊的字符Data Inicialização你確實是正確的將這些字符轉換爲另一個實體,但只要你擁有UTF-8的所有功能,它就可以工作。

<input type='hidden' name='excel_array' value='<?php echo json_encode($_SESSION['excel_array']) ?>'> 

和:

# ../resource_load/export.php 
var_dump(json_decode($_POST['excel_array']); 
+0

我把它變成$ _POST信息,因爲我想保留這些信息,即使我打開另一個頁面,因此,另一個會話。 – RazorFinger

+0

會話通過cookie ID工作,您可以關閉瀏覽器,會話中的數據仍然存在。在cookie過期或通過清理工具刪除之前,這一切都是正確的。如果您通過其他瀏覽器打開它,則會將其作爲新請求處理,並且新會話將開始仍然保持來自其他瀏覽器的數據不變。 – Xorifelse

+0

我相信我沒有正確解釋。我需要同時打開各種「會話」,因爲我將會話數據導出爲ex​​cel。由於我不能通過標籤分開會話,我試圖使用導出$ _POST數據到Excel。 – RazorFinger

0
<?php 

    $temp = array(); 
    $temp['aaa'] = "aaaaaaaaaaaaaaaaaaaaaaa"; 
    $temp['bbb'] = "bbbbbbbbbbbbbbbbbbbbbbb"; 
    $temp['ccc'] = "ccccccccccccccccccccccc"; 

    $arr = array(); 
    $arr['excel_array'] = $temp; 


?> 

<form method="post" action=""> 
    <input type='hidden' name='excel_array' value='<?php echo htmlentities(serialize($arr['excel_array']))?>'> 
    <input type='submit' class='submit' id='btnExport' value='Export to Excel' /> 

</form> 


<?php 


if(isset($_POST['excel_array'])) { 
    echo "<pre>"; 
    $Excel_array = unserialize($_POST['excel_array']); 
    print_r($Excel_array); 
} 


?> 

從反序列化去除ヶ輛,因爲你將反序列化數組和ヶ輛使用字符串