2012-10-07 153 views
1

Possible Duplicate:
What to do with php after jquery .serialize()PHP反序列化错误反序列化时,jQuery的序列化形式

我序列化使用jQuery下面的表格,用ajax将其发送到服务器,并使用PHP反序列化。

当我反序列化我的错误:

Error at offset 0 of 39 bytes

<form id="Marriage" style="display: none"> 
    <input type="text" name="city" class="txtt" value="city"/> 
    <input type='button' value='Apply' id="msendsend" class="sendaf" name="jobforming"/> 
</form> 

这里是jQuery的函数来发送这种形式

$(document).ready(function() { 
    $('#msendsend').click(function() { 
     var id=getParam('ID'); 
     $.ajax({ 
      type:'POST', 
      url:"send.php", 

      data:{option:'apply', sr:$("form").serialize()}, 
      success:function (jd) { 
      } 
     }); 
    }); 
}); 

这是服务器代码:

if($_REQUEST['option']=='catapply') { 
    $sc=$_POST['sr']; 
    mysql_query("insert into user_data(uid,data) values('$session->userid','$sc')"); 
    } 

而我在这里反序列化。

$sql = mysql_query("SELECT * from user_data"); 
     while ($row = mysql_fetch_array($sql)) { 
      $un = unserialize($row['data']); 

      $city=$un['city']; 
      echo $city; 
     } 

在数据库中的数据被示出为

to=&select_category=25&msg=&city=laho 
+0

如果我没有弄错,当你序列化一个表单并且有一个输入被隐藏时,它会跳过它......你隐藏了整个表单... –

+1

激情学习:只有两样东西有一个类似的名字,它绝不意味着他们属于彼此。这里:PHP不是jQuery。 – hakre

+2

欢迎来到Stack Overflow!请不要使用'mysql_ *'函数来编写新的代码。他们不再维护,社区已经开始[弃用程序](http://goo.gl/KJveJ)。请参阅* [红盒子](http://goo.gl/GPmFd)*?相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定哪些,[这篇文章](http://goo.gl/3gqF9)会帮助你。如果你选择PDO,[这里是很好的教程](http://goo.gl/vFWnC)。 –

回答

4

jQuery的serialize函数是从PHP的方式不同。它会创建一个查询字符串,就像你在数据库中看到的一样。
这种格式可以在PHP中用parse_str function解码。使用它而不是反序列化。

除了手动解析它的,不过,你可能会更好张贴表单数据作为查询字符串:

data: $("form").serialize(), 

您可以添加一个隐藏字段,以传送选项=应用价值。

这样,你不需要解码任何东西(它已经在$ _POST中)并且你可以将每个值插入到一个单独的行中。它将为您在未来节省很多麻烦,例如当有更多的数据,你需要搜索它。

+0

非常感谢,他工作 –