2017-06-11 1 views
0

このエラーが発生していますか?どういう意味ですか?unserialize():オフセット9の13バイトのエラー

unserialize(): Error at offset 9 of 13 bytes 

これは私がシリアライズし、データベースに配列を格納した後に得るものです:

a:3:{i:0;s:6: 

そしてアンシリアライズ時の

が、それはエラーになります!私は何をすべきか? 元のアレイを元に戻して表示したい。

私は

Create1.php(隠された入力による次のページへのシリアライズされた配列を渡す)

<form action="create2.php" method="POST"> 
<table cellpadding="10"> 
<tr> 
    <td>Name</td> 
    <td><input type="text" name="name" value="<?php echo $name; ?>" readonly="readonly" ></td> 
</tr> 
<tr> 
    <td>Mobile</td> 
    <td><input type="text" name="mobile" value="<?php echo $mobile; ?>" readonly="readonly" /></td> 
</tr> 
<tr> 
    <td>Email</td> 
    <td><input type="text" name="email" value="<?php echo $email; ?>" readonly="readonly" /></td> 
</tr> 
<tr> 
    <td>Company</td> 
    <td><input type="text" name="company" value="<?php echo $company; ?>" readonly="readonly" /></td> 
</tr> 
<tr> 
    <input type="hidden" name="original_list" value="<?php echo serialize($original_list); ?>" /> 
    <input type="hidden" name="xerox_list" value="<?php echo serialize($xerox_list); ?>" /> 
</tr> 
<tr> 
    <td><input type="submit" value="Confirm" /></td> 
</tr> 
</table> 
</form> 

Create2.php .. basencoder /デコードのように、他のポストを試してみましたが、あまりにも動作していないthatsの(データベース内でシリアル化された配列を取得し、保存する)

$name = $_POST['name']; 
$mobile = $_POST['mobile']; 
$email = $_POST['email']; 
$company = $_POST['company']; 
$original = $_POST['original_list']; 
$xerox = $_POST['xerox_list']; 


echo $sql = "INSERT INTO users (name,mobile,email,company,original,xerox) 
VALUES ('$name','$mobile','$email','$company','$original','$xerox')"; 
mysqli_query($con,$sql); 
+2

有効なシリアル化された文字列ではありません。切り詰められています。 – apokryfos

+2

データベース列に長さ制限がありますか? –

+1

また、[documentation](http://php.net/manual/en/function.serialize.php)に以下のように書かれています:*これはバイナリ文字列であり、ヌルバイトを含む可能性があります。そのように扱われる。たとえば、serialize()の出力は、通常、CHARまたはTEXTフィールドではなく、データベースのBLOBフィールドに格納されます。* – apokryfos

答えて

1

私はそれが(HTTPは、すべての後にテキストプロトコルである)HTMLでのバイナリ文字列を使用しても安全ですか分かりません。シリアル化の代わりにJSONエンコーディングを使用することをお勧めします。

<input type="hidden" name="original_list" value="<?php echo json_encode($original_list); ?>" /> 
<input type="hidden" name="xerox_list" value="<?php echo json_encode($xerox_list); ?>" /> 

あなたが行うことができますエントリへのアクセス:

json_decode($row['original'],true); //you get the idea 
+0

あなたの答えは正しいです!同じ問題を抱えている他のユーザーは、ベースコード/デコーダまたはJSONエンコード/デコードを使用します。そしてそれはうまく動作します:) –

関連する問題