2013-04-12 31 views
1

我相对较新的jQuery和我有问题动态添加表单元素使用jQuery然后遍历这些表单元素与PHP添加到数据库。动态添加表单元素与jQuery和提交到数据库与PHP

基本上我所拥有的是一个表格,当点击一个div时,会添加一个包含表单元素的新表格行。代码如下所示:

$('.addRow1').click(function() { 
     <?php $count++; ?> 
     $('.mainTable > tbody:last').one().append('<tr><td>Chronic Pain Referral</td><td>Chronic referral</td><td><input type="hidden" name="count" value="<?php echo $count; ?>"><textarea name="notes"></textarea></td></tr>'); 
    }); 

正如你所看到的,我试图使用PHP所以每加入一排时,将加1 to $count来添加计数器,然后我可以简单地做一个foreach()语句通过迭代为每一行形成数据。

但是这没有奏效。如果我尝试在计数器上使用foreach(),并且如果我简单地添加大量表格行并单击submit,那么当我打印计数器值时,无论添加多少行,它总是以1结尾。

+1

JS/jQuery是客户端,PHP是服务器端。基本上'<?php $ count ++; ?>'在服务器上只运行一次。 – HamZa

+0

了解HTTP协议:jQuery如何执行HTTP请求以及PHP如何处理它们[并生成相应的HTTP响应]。 – moonwave99

回答

0

据我所知,PHP脚本在服务器端执行,代码<?php $count++; ?>不会在循环中执行。它将在服务器端执行一次。您必须反过来,在PHP脚本中迭代列表并相应地附加事件。

我没有PHP技能,所以不能提供代码示例。

希望这会有所帮助。

0

PHP代码只在服务器端被发送到浏览器之前执行,您需要使用javascript获得行计数。

尝试这样:

var cnt = $('.mainTable > tbody > tr').length + 1; 
var row = '<tr><td>Chronic Pain Referral</td><td>Chronic referral</td><td><input type="hidden" name="count" value="' + cnt + '"><textarea name="notes"></textarea></td></tr>'; 

现在,如果你是在一次你需要一个[]添加到每个行的字段名称提交的所有行。这告诉PHP数据是一个数组。这可能是使用foreach时出现错误的地方,而不是将它传递给数组。

<textarea name="notes[]"></textarea> 

然后,当你在PHP中获取表单提交你不需要计数,可以简单地做:

<?php 
if (!empty($_POST['notes'])) { 
    foreach ($_POST['notes'] as $note) { 
    ... 
    } 
} 
?> 

的阿德里安的方式的例子:

<textarea name="notes_"' + cnt + '"></textarea> 

PHP:

<?php 
if (!empty($_POST)) { 
    foreach ($_POST as $key => $value) { 
    $pieces = explode('_', $key); 
    $field = $pieces[0]; 
    if ($field == 'notes') { 
     $row = $pieces[1];   
     // Process data... 
    } 
    } 
} 
?> 
+0

阿德里安对于将计数附加到字段名称而不是单独的字段是正确的。我的方式假定您只是插入多行新数据。如果您需要唯一标识行,则需要将cnt附加到字段名称。 – bstonehill

1

The PHP code 0在页面发送给客户端之前,在服务器上执行;它在JavaScript函数触发时不会执行。您需要为增量字段计数使用JavaScript变量。

此外,在您的表单中,您只需重复实例名为“count”的字段,其值增加,并且文本区域的实例称为“notes”。 “count”字段将毫无意义,因为您无法将它们与文本区域关联(表单字段不保证以表单的任何特定顺序提交。)

您可能想要将计数附加到动态字段上的字段名称,以便能够知道哪些字段连在一起。然后,您可以遍历表单处理程序中的发布字段,并使用字段名称末尾的索引将相关字段匹配在一起。我做了很多次,这有点棘手,但绝对可行。

另一种解决方案是将文本区域命名为“notes []”而不是“notes”。然后,在您的表单处理程序中,$_REQUEST['notes']将是表单中所有“笔记”字段的数组。如果只有一个动态字段需要处理,这工作正常;但是,如果每个动态添加的行都有多个彼此相关的字段,您将无法判断哪些字段连在一起。在这种情况下,您必须将索引附加到表单字段名称。

相关问题