jQuery forms.js每页有多个表单

时间:2009-02-10 07:50:24

标签: php javascript jquery mysql ajax

我想使用php和ajax将信息提交到mySql数据库。

从(form.php)发送信息的页面有多个从“while()”循环生成的表单。

成功之后,我会回复更新提交数据的特定表格上方的div。

我目前正在使用jQuery和jquery form plugin

我已经成功地将数据传输到数据库,但是我在将响应发送回正确的div时遇到了问题。我已经成功地将响应返回到while()循环之外的div。但是,我没有成功地在循环中获得回复div。我在下面的代码中放了一个div:     “> 我想要放置的注释。

我知道这与我的javascript函数有关:

<script type="text/javascript">
jQuery(document).ready(function() {
    jQuery('form').ajaxForm({
        target: '#noteReturn',
        success: function() { $('#noteReturn').fadeIn('slow'); }
    });
});
</script>

#noteReturn函数没有指定应该放置哪个div。

我希望这是有道理的。

感谢您的帮助。

代码如下:

<!-- the form.php page -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/forms.js"></script> 
<script type="text/javascript"> 
jQuery(document).ready(function() { 
    jQuery('form').ajaxForm({ 
    target: '#noteReturn',
    success: function() { 
    $('#noteReturn').fadeIn('slow'); } 
    }); 
});
</script>  
<?php
$query = mysql_query("SELECT * FROM businesses");
while( $row = mysql_fetch_assoc( $query ) ):
    $b_id = $row['bid'];
?>

<div class='notes'> 

<?php  
// query the db for notes associated with business... return notes texts and notes dates
$notesQuery = mysql_query("SELECT business_id, notes, messageDate FROM notes WHERE notes.business_id = $b_id ORDER BY messageDate");
while( $NoteRow = mysql_fetch_assoc( $notesQuery ) ) { 
extract($NoteRow); 
echo "$notes<br/><span class='noteDate'>$messageDate</span><br />"; 
}  // end while$notesQuery
?> 
<!-- this is where i would like jQuery to return the new note -->
<div id="noteReturn<?php echo $b_id; ?>"></div> 

<!-- begin note form -->
<form name="noteForm" action="notesProcess.php" method="post">
    <input type="text"  name="note" />
    <input type="hidden" value="<?php echo $b_id ?>" name="bid" />
    <input type="submit" class="button"  value="Send" />
</form>

</div> <!-- end div.notes --> 
<?php
endwhile;
?> 

<!-- /////////////////////////////////////////////////////
The page that the form submits to is this (notesProcess.php): 
///////////////////////////////////////////////////// -->
<?php
$note = $_POST['note'];
$id = $_POST['bid'];
$sql = "INSERT INTO notes (business_id, notes) VALUES ('$id', '$note')";
$result = mysql_query( $sql );
if( $result ) {
echo " $note"; }
?>

1 个答案:

答案 0 :(得分:10)

更改此代码:

jQuery('form').ajaxForm({ 
    target: '#noteReturn',
    success: function() { 
        $('#noteReturn').fadeIn('slow');
    } 
});

对此:

jQuery('form').ajaxForm({ 
    target: '#noteReturn',
    dataType: 'json',
    success: function(data) { 
        $('#noteReturn' + data.id).html(data.note).fadeIn('slow');
    } 
});

这段代码:

<?php
$note = $_POST['note'];
$id = $_POST['bid'];
$sql = "INSERT INTO notes (business_id, notes) VALUES ('$id', '$note')";
$result = mysql_query( $sql );
if($result) {
    echo " $note";
}
?>

对此:

<?php
$note = mysql_real_escape_string($_POST['note']);
$id = mysql_real_escape_string($_POST['bid']);
$sql = "INSERT INTO notes (business_id, notes) VALUES ('$id', '$note')";
$result = mysql_query( $sql );
if($result) {
    print json_encode(array("id" => $id, "note" => $note));
}
?>

发生了什么事?

对PHP代码的更改是利用PHP的json_encode函数打印出添加了注释的业务的ID以及实际的注释文本。在javascript代码中,我添加了{jon'的dataType来告诉脚本期望的响应格式。在success回调中收到请求后,data变量就是一个对象,其中包含我们通过json_encode传递的值。因此data.id具有商家ID,data.note有新注释。使用jQuery的html()操作函数,div的内部html更新为最新的注释。 div选择器使用我们传递的id,因此我们可以更新相应的div。

此外,这稍微偏离了主题,但请确保在将值放入查询时始终使用mysql_real_escape_string。如果你不使用它,你的查询将是易受攻击的,容易受到注入攻击,并且它们并不漂亮。如果客户决定输入');DROP TABLE businesses;的票据值,您真的会感到痛苦。最好切换为PDOMySQLi并使用prepared statements,因为它们是现在查询的“正确”方式。