2010-05-04 94 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), 
    ... 
});