2016-09-12 3 views
0

Dies könnte ein Duplikat sein, aber ich konnte niemanden finden, der geholfen hat.Warum wird meine unserialize leer zurückgegeben?

Ich versuche, ein Array aller Daten auf einer anderen Seite durch die Post-Methode eines Formulars zu übergeben. Es sieht so aus:

 <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' /> 

Also hier ich die $ _SESSION Daten serialisieren. und das ist, wie es aussieht:

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";}}}} 

Und hier ist, wo ich unserialize:

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

Doch es gibt null zurück. Warum das?

+1

ich es nicht. Sie serialisieren eine Sitzungsvariable und setzen sie in einer anderen Seite/einem anderen Skript um? Greifen Sie einfach auf die Session-Variable in Ihrer anderen Seite – Andreas

+0

Ich möchte es in $ _POST Daten, so dass es nicht ersetzt werden, wenn ich eine andere Registerkarte öffnen – RazorFinger

+0

Es wird nicht ersetzt werden. Greifen Sie einfach auf die Sitzungsdaten auf Ihrer anderen Seite zu. Versuch es. – Andreas

Antwort

1

Wenn Sie dies tun, verwenden htmlentities() zu kodieren und html_entity_decode() mit rohen Werte zu dekodieren.

Zweitens, ich glaube nicht, dass es eine gute Idee ist, die Daten der serialisierten und unserialisierten Benutzerdaten auszugeben. Der Grund dafür ist Code-Injektion, die ein großes Sicherheitsproblem darstellt.

Verwenden Sie stattdessen json_encode() und json_decode(). Jetzt, da ich sehe, dass Sie spezielle Zeichen in Ihrem Array haben Data Inicialização Sie sind in der Tat richtig, diese Zeichen in eine andere Entität zu konvertieren, aber so lange, wenn Sie alles UTF-8 haben, wird es funktionieren.

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

Und:

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

Ich verwandle es in $ _POST Informationen, weil ich diese Informationen behalten möchte, auch nachdem ich eine andere Seite und folglich eine andere Seite geöffnet habe Session. – RazorFinger

+0

Sitzungen funktionieren mit einer Cookie-ID, Sie können den Browser schließen, und die Daten in einer Sitzung sind weiterhin vorhanden. Dies gilt so lange, bis der Cookie abgelaufen ist oder mittels Clean-Up-Tools entfernt wurde. Wenn Sie es über einen anderen Browser öffnen, wird es als neue Anforderung behandelt, und eine neue Sitzung beginnt, die Daten des anderen Browsers weiterhin intakt zu halten. – Xorifelse

+0

Ich glaube, ich erkläre das nicht richtig. Ich muss verschiedene "Sitzungen" zur gleichen Zeit geöffnet haben, weil ich die Sitzungsdaten nach Excel exportiere. Da ich die Sitzungen nicht über Tabs trennen kann, versuche ich stattdessen, $ _POST-Daten in Excel zu exportieren. – 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); 
} 


?> 

htmlentities von unserialize entfernen, weil Sie ein Array unserialize wird und htmlentities verwenden Strings

Verwandte Themen