2011-03-07 39 views
1

我想创建一种更新按钮,当用户点击一个HTML Perl按钮时,它会要求确认(是/否)。HTML Perl更新按钮与SQL问题

如果用户点击“是”,它将运行一个SQL脚本,然后返回一个弹出窗口(JavaScript),表示操作成功(或不是)。

SQL代码正在创建备份表,然后将存储在数据库中的当前值复制到此备份表中,因此不需要刷新屏幕。完整的功能和代码提供如下:

CREATE TABLE IF NOT EXISTS backup_tab_right_mapping 
    LIKE tab_right_mapping; 
DELETE FROM backup_tab_right_mapping 
    WHERE group_id = "1" 
    AND role_id = "1"; 
INSERT INTO backup_tab_right_mapping 
SELECT * FROM tab_right_mapping 
    WHERE group_id = "1" 
    AND role_id = "1"; 

但是我不想使用PHP,我正在寻找一个子解决方案。

感谢您的时间和任何帮助,您可以提供XD

编辑:项目要求只允许我使用的Perl,HTML和JavaScript。

+0

你说的“亚健康”的解决方案是说,你想一个存储过程来执行备份?另外,由于您创建了一个空表,所以您不必在CREATE后发出DELETE。 – Tony 2011-03-07 13:13:38

+0

@Tony'DELETE'在那里,因为它只创建表,如果它不存在,否则它将使用现有的表。如果这些值已经存在,则需要删除它们。当我说'Sub'时,我的意思是装在一个Perl Sub中 - 当然如果这对我想要做的事是可能的。 – schuhmi2 2011-03-07 13:32:09

回答

2

Works还没有JavaScript。您需要添加更多的客户端错误检查,以防程序异常中止。

要遵循最佳实践,请将数据库凭据存储在程序之外。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE HTML> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head><title /> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" /> 
</head><body><form action="backup-table" method="POST"><input type="submit" /></form> 
<script> 
$('form').submit(function() { 
    if (confirm('Backup table?')) { 
     $.post("backup-table", function(data) { 
      alert($(data).text()); 
     }); 
     return false; 
    }; 
}); 
</script> 
</body></html> 

#!/usr/bin/perl -T 
use strict; 
use warnings FATAL => 'all'; 
use CGI qw(); 
use DBI qw(); 

my $dbh = DBI->connect('dbi:…', '…username…', '…password…', {RaiseError => 1, AutoCommit => 1,}); 

for my $sql (
    'CREATE TABLE IF NOT EXISTS backup_tab_right_mapping 
     LIKE tab_right_mapping;', 
    'DELETE FROM backup_tab_right_mapping 
     WHERE group_id = "1" 
     AND role_id = "1";', 
    'INSERT INTO backup_tab_right_mapping 
    SELECT * FROM tab_right_mapping 
     WHERE group_id = "1" 
     AND role_id = "1";', 
) { 
    $dbh->do($sql); 
} 

my $cgi = CGI->new; 
print $cgi->header('application/xhtml+xml'); 
print '<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE HTML> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head><title /></head> 
<body><p>Backup complete</p></body></html>'; 
+0

谢谢你,我明天会试试,现在就告诉你,它的结束时间。 – schuhmi2 2011-03-07 14:30:17

0

我不确定你为什么要这样做。 但我会做到这一点

  • 创建一个脚本,它不会全部复制的东西把它的服务器。
  • 在其提交按钮中创建一个XMLHttpRequest的网页,其中inturn将调用执行sql操作的原始脚本。
  • 捕获响应文本响应并使用js在您的页面上打印消息,或者在其中放置一个警报框。

简单的解决方法是:

  • 创建于服务器的脚本具有提交按钮和一个隐藏的输入,可以告诉基础上的隐藏参数下一步操作
  • 打电话给你的子可用与sub相同的脚本。
  • 捕获响应,并执行任何你想要做的Java脚本魔法。 如果您需要,我也可以为第二种方法提供样本。
+0

其目的是允许管理员用户备份或恢复(代码未显示)网站的用户权限,权限存储在数据库中。我要求将它保存在perl中的唯一原因是我必须保持简单 - 项目需求只允许我使用公司内部支持的语言(perl,HTML和JavaScript)。所以我只是在寻找一种方法来以某种方式从网站运行此查询,并在之前发出警告,然后再进行确认。其他更简单的方法当然是受欢迎的。谢谢你, – schuhmi2 2011-03-07 14:08:42