0

我正在尝试使用 Perl 从网页中删除 MySQL 表行。我想遍历复选框,如果选中一个,则数据库中的该行将被删除。我已将复选框的值设为自动递增键值。这是我的一段代码,因此您可以按表格了解我的位置:

while (@data = $STH1->fetchrow_array()) {
    print "<tr>";
    print " <td>$data[2]</td>";
    print " <td>$data[3]</td>";
    print " <td>$data[7]</td>";
    print " <td>$data[6]</td>";
    print " <td>$data[4]</td>";
    print " <td>$data[5]</td>";
    print " <td>$data[1]</td>";
    print "<td>";
    print '<form><center>';
    print checkbox(
        -name     => 'delete',
        -value    => 'data[0]',
        -selected => 0,
        -label    => 'delete'
    );
    print '<center></form>';
    print "</td>";
    print "</tr>";
}

如果选中复选框,我只是不明白如何使它删除一行。

4

4 回答 4

0

使用CGI,创建一个form其中包含所有复选框的。

然后通过另一个脚本,再次CGI读取提交的表单值并根据选中的复选框执行 SQLdelete命令以从表中删除请求的行。

确保使用唯一id列作为表单复选框的标识符。

于 2012-06-14T16:41:25.417 回答
0

我相信您对复选框的调用需要稍作调整:

print checkbox(
    -name => 'delete',
    # -value => 'data[0]'
    # should be
    -value => $data[0],
    # do you need this ?
    # -selected => 0,
    -label => 'delete'
);

然后在您的 cgi 或对象中:

my @ids_to_delete = $q->param( 'delete' );

将让您按 id 删除行,然后您只需构建并运行您的删除语句。

于 2012-06-14T16:45:20.860 回答
0

您想将数据发布到第二个 perl 脚本。在第二个 perl 脚本中,您选择该行作为查询参数。您有要删除的行的 ID。然后使用包含 SQL 的 id 调用 deleteRow 函数。

我现在正在使用http://template-toolkit.org/来完成您所描述的基本操作。

于 2012-06-14T16:46:31.123 回答
0

好吧,您的表单在您的循环中,因此您将为每个复选框使用不同的表单。

如果要支持多次删除,则必须将表单打开和关闭标签移到循环之外。

然后在循环中添加一个隐藏的输入。使用“id”作为隐藏名称,使用“delete”作为复选框。

我不确定cgi,但您应该将表单作为两个字段的二维数组返回。循环通过该集合。如果复选框存在并被选中(有时您不会返回未选中的复选框)查找 id。然后将 id 添加到列表中并继续循环。

然后从列表中创建您的删除语句。检查删除的行数并将该消息返回给您的用户。

希望有帮助...

于 2012-06-14T19:55:28.767 回答