【问题标题】:Perl using Jquery to display html onclick looped database insertPerl 使用 Jquery 显示 html onclick 循环数据库插入
【发布时间】:2013-03-12 03:31:14
【问题描述】:

已编辑** 成为 Perl 新手很难,哈哈。我刚刚使用了正则表达式和我的哈希,我将我的 cgi 参数读入了。

my $regex = qr/tierrate/;
my $count = 0;

foreach (grep { /$regex/ } keys %form) {
$count++;
}

然后我可以使用该计数来确定我的插入循环。


再一次,我是编程新手。我的 Jquery 和 Perl 技能充其量只是初学者。

我希望能够根据用户添加的表行数将多条记录插入到数据库表中。我不确定如何处理这个问题,因为这是我的第一次非静态尝试。我正在使用 cgi.pm 和 dbi.pm。

我正在显示一些基于按钮单击的 HTML。每次用户选择“添加层”按钮时,我都会显示并尝试插入“层率”“层范围最小值”和“层范围最大值”。用户可以根据需要多次点击按钮,每次点击都会获得一个额外的表格行,我不确定如何循环动态行数。

基于用户单击“添加层”按钮,我显示 HTML。

\$('#addnewtier').click(function() {

\$('<tr id="inctier'+ (raisetierid++) +'"><TD ALIGN=left><font color="#ADD8E6">Tier '+ (rateplus++) +' Rate</TD><TD ALIGN=left><input type="text" name="tierrate'+ (tierrate++) +'" size=10 value="00.00" ></TD><TD ALIGN=left><font color="#ADD8E6">Tier '+ (rangeplus++) +' Range</TD><TD ALIGN=left><font color="#ADD8E6">Minimum&nbsp;<input type="text" name="rangemin'+ (rangemin++) +'" size=10 value="" ><font color="#ADD8E6">&nbsp;Maximum&nbsp;<input type="text" name="rangemax'+ (rangemax++) +'" size=10 value="" ></TD>').appendTo("#inctier1");

})

用户可以根据需要多次单击该按钮。我很熟悉能够在一定数量的东西上获取输入,但对于动态数量的东西来说却不是这样。我在我发布的代码上方声明了我正在递增的变量。在此先感谢您的帮助。

【问题讨论】:

  • 我不太明白你在那里做什么。但是您可能想要创建一个 javascript 变量,该变量会随着用户添加的每个新行而递增。然后在用户提交行时提交该值。然后你的 Perl 脚本会知道有多少行。这是一种可能的方法。我不知道如何在 Perl 中,但应该有一种方法可以找到表单提交的字段数,您可以在循环中使用它。
  • 我需要在用户添加的每一行中插入一个数据库表记录。每行我插入速率,范围最小值和范围最大值。因此,如果用户点击按钮 3 次以添加 3 个“层”,我需要通过我假设的循环插入三个记录。但是我可以使用什么来执行循环?我可以只使用我在 JQuery 中声明的变量吗?这似乎对我不起作用。

标签: jquery mysql perl


【解决方案1】:

当你的 jQuery 添加一个新行时,在你的表单中增加一个计数器变量,然后在你的 perl 代码中使用它来循环你的变量(这将作为一个帖子最有效,但如果你需要,你可以使用 get )并阅读您需要的每一行。

换句话说,在您的 HTML 表单中创建一个名为 tierCount 的隐藏输入字段 然后在您的 jQuery 中添加一个新行,将其更新为原地数字
添加新行时,您还需要只使用 1 个增量变量

然后在您的 perl 脚本中读取 tierCount 的表单值并循环遍历表单变量,一次一组读取它们

<input type="hidden" name="tierCount" value="1" />  
\$('<tr id="inctier'+ (raisetierid++) +'"><TD ALIGN=left><font color="#ADD8E6">Tier '+ (raisetierid) +' Rate</TD><TD ALIGN=left><input type="text" name="tierrate'+ (raisetierid) +'" size=10 value="00.00" ></TD><TD ALIGN=left><font color="#ADD8E6">Tier '+ (raisetierid) +' Range</TD><TD ALIGN=left><font color="#ADD8E6">Minimum&nbsp;<input type="text" name="rangemin'+ (raisetierid) +'" size=10 value="" ><font color="#ADD8E6">&nbsp;Maximum&nbsp;<input type="text" name="rangemax'+ (raisetierid) +'" size=10 value="" ></TD>').appendTo("#inctier1");  

$('#tierCount').val(raisetierid);

my $tierCount = $form{"tierCount"}
# Since we start with tier 1 start at 1 instead of the usual 0
for (my $i = 1; $i <= $tierCount; $i++)
{
    my $rate = $form{"rateField" . $i};
    my $range = $form{"rangeField" . $i};
    # Etc, etc
    # then do your insert here for that row
}  

请注意,上面的代码没有任何错误检查

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-22
    • 2018-10-02
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    相关资源
    最近更新 更多