2010-05-04 55 views
0

为什么我永远不能让JQuery序列化以正常工作。我想我一定会错过一些东西。JQuery发布到php

我可以序列化表单数据,并将其显示在一个警告:

var forminfo = $j('#frmuserinfo').serialize(); 
alert(forminfo); 

我然后张贴到我的PHP页面这样的:

$j.ajax({ 
    type: "POST", 
    url: "cv-user-process.php", 
    data: "forminfo="+forminfo, 
    cache: false, 
    complete: function(data) { 

    } 
}); 

但每当(不是第一次),我尝试插入/更新数据库中的数据我只能得到1变量传递:

这是我的PHP脚本:

$testit = mysql_query("UPDATE cv_usersmeta SET inputtest='".$_POST['forminfo']."' WHERE user='X'"); 

通过的数据只能获得第一个变量。为什么?

我认为这是更多的方式来处理PHP,但它驱使我疯了,总是需要我太长时间才能找到我要出错的地方。

回答

0

我相信这是因为你的forminfo变量下环绕整个序列化形式。

这将导致一个形式VAR如forminfo=field1=val1&field2=val2 - 所以整个事情涉及到PHP作为forminfo

你并不需要做的是:

$j.ajax({ 
type: "POST", 
url: "cv-user-process.php", 
data: forminfo, 
cache: false, 
complete: function(data) { 

} 
0

在PHP脚本中有这样的顶部:

<?php 
print_r($_POST); 
exit; 
?> 

这会帮助你在寻找什么能为你是想错了。

0

你需要以不同的方式传递了一下,像这样:

$j.ajax({ 
    type: "POST", 
    url: "cv-user-process.php", 
    data: $j('#frmuserinfo').serialize(), 
    cache: false, 
    complete: function(data) {  
    } 
}); 

在你的PHP不使用$_POST['forminfo']而是$_POST['nameOfTheInput']。此外,你应该净化输入,就像这样:

$testit = mysql_query("UPDATE cv_usersmeta SET inputtest='".mysql_real_escape_string($_POST['nameOfTheInput'])."' WHERE user='X'"); 

这可以防止SQL注入攻击,which I suggest you read more about :)

0

如果你仍然需要发送整个序列化数据,您必须使用escape()函数对您的字符串进行编码。就像这样:

$j.ajax({ 
    data: "forminfo="+escape(forminfo), 
    ... 
});