1

我对 jQuery 比较陌生,我在使用 jQuery 动态添加表单元素然后使用 PHP 遍历这些表单元素以添加到数据库时遇到问题。

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

$('.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

4

3 回答 3

1

PHP 代码<?php $count++; ?>在页面发送到客户端之前在服务器上执行;当 JavaScript 函数触发时它不会执行。您需要为增量字段计数使用JavaScript变量。

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

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

另一种解决方案是将文本区域命名为“notes[]”而不是“notes”。然后,在您的表单处理程序中,$_REQUEST['notes']将是表单中所有“注释”字段的数组。如果只有一个动态字段要处理,这很好用;但是,如果每个动态添加的行都有多个相互关联的字段,则您将无法分辨出哪些字段一起出现在一行中。在这种情况下,您必须将索引附加到表单字段名称。

于 2013-04-12T16:15:56.230 回答
0

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

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

希望这可以帮助。

于 2013-04-12T10:03:07.670 回答
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... 
    }
  }
}
?>
于 2013-04-12T16:14:27.560 回答