2010-04-12 87 views
0

有一個簡單的表單(這裏只提取字段),但由於某種原因,JQserilization不起作用;在alert()中看起來很好,但只有第一個表單字段獲取帖子。建議請及時 - 在此先感謝Jquery序列化不起作用

形式:

<form id="neweventform" method="post" action=""> 
<div class="grid_4 alpha">Setup date *</div> 
<div class="grid_7 omega"> 
<select name="setup_day" id="setup_day"><?php days_list(); ?></select> 
<select name="setup_month" id="setup_month"><?php month_list(); ?></select> 
<select name="setup_year" id="setup_year"><?php year_list(); ?></select> 
<div class="grid_11"> 
<input type="submit" name="createevent" value="Create" id="createevent" /> 
</div> 
</form> 

jQuery的

$j(document).ready(function(){ 
$j('#neweventform').live('submit',function() { 
var data= $j('#neweventform').serialize(); 
alert(data); 
$j.ajax({type: "POST", url: "scripts/process.php",data: "newevent=newevent&event_options=" + data, cache: false, complete: function(data){ 
$j('#neweventform').fadeOut(2000),loading.fadeOut('slow'),$j('#content').fadeIn(2000), $j('#content').load('scripts/events.php #eventslist'); 
} 
}); 
return false; 
}); 
}); 

而且PHP處理

if(isset($_POST['newevent'])) : 
$insert = mysql_query("INSERT INTO events (event_options) VALUES ('".$_POST['event_options']."')"); 
endif; 

有什麼建議?

+1

你應該避免從後到查詢直接串聯。非常危險的sequrity問題 – fmsf 2010-04-12 13:48:48

回答

0

OK,嘗試的混合,但最終得到了這個工作:

$j(document).ready(function(){ 
    $j('#neweventform').live('submit',function() { 
     var optdata= $j('#neweventform').serialize(); 
     $j.ajax({ 
      type: "POST", 
      url: "scripts/process.php", 
     data: "newevent=" + $j('#neweventform').serialize(), 
     cache: false, 
      complete: function(data) { 
       $j('#neweventform').fadeOut(2000), 
      loading.fadeOut('slow'), 
      $j('#content').fadeIn(2000), 
      $j('#content').load('scripts/events.php #eventslist'); 
      } 
     }); 
     return false; 
    }); 

});

然後在PHP

if(isset($_POST['newevent'])) : 
    $tryit = serialize($_POST); 
    $insert = mysql_query("INSERT INTO events (event_options) VALUES ('".$tryit."')"); 
endif; 
0

第一。嘗試做一個簡單的

<?php 

print_r($_POST); 

?> 

看看你在後期變種var。

二。重命名參數

var data 

到更多的東西「獨家」

我不此刻的回憶,如果你可以有用來撥打電話的「數據」符號的衝突,但至少可以從這裏開始調試。

0

你的數據將被序列化到這樣的事情:

setup_day=1&setup_month=2&setup_year=2010 

然後,您可以構建這樣的數據:

newevent=newevent&event_options=setup_day=1&setup_month=2&setup_year=2010 

這個查詢字符串是錯誤的(兩個「=」無「& '),可能這是你問題的根源。

0

試試這個:

$j.ajax({ 
    type: "POST", 
    url: "scripts/process.php", 
    data: { newevent: newevent, event_options: $j('#neweventform').serialize() }, 
    cache: false, 
    complete: function(data) { 
     ... 
    } 
}); 
1

看一看如何serialize()作品。它創建一個字符串,你的情況,應該是這樣的:

"setup_day=foo&setup_month=bar&setup_year=baz" 

然後你Concat的這個字符串與另一個(數據),這會導致一個無效的參數字符串:

data: "newevent=newevent&event_options=" + data 

// gets 
"newevent=newevent&event_options=setup_day=foo&setup_month=bar&setup_year=baz" 

根據event_options是在你的數據庫是什麼類型(從表單中的數據我認爲它是一個包含日期字段),你可能會想這樣做:

的Javascript:

data: "newevent=newevent&" + data 

PHP(淨化用戶輸入!):

if(isset($_POST['newevent'])) : 
    $date = $_POST['setup_year']. '-' . $_POST['setup_month'] . '-' . $_POST['setup_day']; 
    $insert = mysql_query("INSERT INTO events (event_options) VALUES ('". $date . "')"); 
endif;