【问题标题】:Given checkboxes, how do I delete the corresponding database row?给定复选框,如何删除相应的数据库行?
【发布时间】:2012-06-17 17:50:33
【问题描述】:

我正在尝试使用 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>";
}

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

【问题讨论】:

  • print "&lt;td&gt;$_&lt;/td&gt;" for @data[2,3,7,6,4,5,1]; 将替换您重复的打印语句。
  • 会提出同样的建议。 print 是一个列表函数,这是一件好事(tm)。 ;-)

标签: mysql html perl datatable


【解决方案1】:

我认为您对复选框的调用需要稍作调整:

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 为您获取要删除的行,然后您只需构建并运行您的删除语句。

【讨论】:

  • 好吧,我有点听从你说的话,但我不知道如何设置我的删除语句
  • 伪代码:“从 中删除 中的 id”其中 是 @ids_to_delete。查看 sql 'in' 运算符。此外,请记住在将列表中的值插入 sql 语句之前对其进行清除。有意义吗?
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      你的表单在你的循环中,所以每个复选框都有不同的表单。

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

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

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

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

      希望对您有所帮助...

      【讨论】:

      • 另外,看起来您将复选框的值设置为 id。我认为这行不通。复选框的值为“已选中”或为空。
      猜你喜欢
      • 2012-09-05
      • 1970-01-01
      • 2014-05-27
      • 2012-03-03
      • 2015-11-13
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多