jQuery forms.js,每页有多个表单

Posted

技术标签:

【中文标题】jQuery forms.js,每页有多个表单【英文标题】:jQuery forms.js with multiple forms per page 【发布时间】:2010-10-06 14:15:22 【问题描述】:

我想使用 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"; 
?>

【问题讨论】:

为您修正了格式。缩进代码 4 个空格,这样它就不会被处理。 【参考方案1】:

更改此代码:

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 代码中,我添加了 'json' 的 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,因为它们是当今进行查询的“正确”方式。

【讨论】:

这正是我想要的,谢谢 Paolo。我认为这是我收到的关于编码问题的最全面的答案。坚硬的。我发布的代码已经过编辑,以便于阅读,但是代码已经实现了 mysql_real_escape_string。

以上是关于jQuery forms.js,每页有多个表单的主要内容,如果未能解决你的问题,请参考以下文章

将 s-s-rS 报告中的多个页面呈现为单个页面

Oracle实现分页,每页有多少条记录数

媒体查询不起作用,每页有限制吗?

在 PHP 中,每页有多少个 DB 调用是可以的?

在一个布局中使用多个表单作为不同的操作导致哈希验证错误

在 Django 的一个页面上使用多个表单