2011-03-07 70 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