2016-10-25 7 views
-1

PHPで作業する5.5.9PHP:隠し配列のシリアル化/逆シリアル化フォーム

フォームに非表示のシリアル化配列を送信しようとしています。

<?php $sports = array("Basketball", "Football", "Handball");?> 

私は自分のフォームに[OK]ボタンを追加します:私は、ファイルの先頭に配列を初期化

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> 

を使用して、同じファイル内のフォームとアクションスクリプトを持っている

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> 
    <input type="hidden" name="serializedData" value="<?php echo serialize($sports);?>"> 
    <input type="submit" name="okButton" value="OK"><br> 
</form> 

これで、ユーザーが[OK]ボタンを押したときに非表示の配列を逆シリアル化しようとしています。コードでも配列の内容を印刷するようにします。

if(isset($_POST['okButton'])) { 
    $sports_new = unserialize($_POST['serializedData']); 

    // Show array 
    for($i = 0; $i < count($sports_new); $i++) { 
        print $sports_new[$i]."<br/>"; 
    }  

何も表示されません。私のフォームの入力隠し要素はデータを取得しないと思います。しかし$ sports配列はファイルの先頭で初期化されます。なぜシリアル化されないのですか? 私の問題はデシリアライズコードに依存していますか?

+0

'$ _POST ['serializedData']'だけを返すのは何ですか? – Veve

+0

ステップ1:生成されたHTMLコードを確認してください - あなたには間違っていませんか?ステップ2:HTMLコンテキストに入れたデータをどのようにエスケープする必要があるかを調べます。 – CBroe

答えて

-1

私はあなたのヒントに従っています。 前にhtmlentitiesを変換する必要があります:

<input type="hidden" name="serializedData" value="<?php echo htmlentities(serialize($sports));?>"> 
関連する問題