我正在尝试创建一种更新按钮,当用户点击HTML Perl按钮时,它会要求确认(是/否)。
如果用户单击“是”,则运行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,我正在寻找Sub解决方案。
感谢您的时间和任何帮助,您可以提供XD
编辑:项目要求只允许我使用perl,HTML和JavaScript。
答案 0 :(得分:2)
也可以不使用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>';
答案 1 :(得分:0)
我不确定你为什么要这样做。 但我会这样做
更简单的解决方案是: