2010-04-12 69 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;