Кнопка обновления HTML Perl с проблемой SQL - PullRequest
1 голос
/ 07 марта 2011

Я пытаюсь создать своего рода кнопку обновления, когда пользователь нажимает кнопку 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, я ищу дополнительное решение.

Спасибо за ваше время и любую помощь, которую вы можетепредоставить XD

РЕДАКТИРОВАТЬ: требования проекта позволяют мне использовать только Perl, HTML и JavaScript.

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

Работает также без 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 голосов
/ 07 марта 2011

Я не уверен, почему вы хотите сделать это таким образом. Но я бы сделал это

  • Создайте один скрипт, который хранит все копии на сервере.
  • Создайте веб-страницу с XMLHttpRequest в ее кнопке отправки, которая inturn будет вызывать оригинальный сценарий, выполняющий операцию sql.
  • Захватите ответ responseText и распечатайте сообщение на своей странице, используя js, или поставьте там одно окно с предупреждением.

Более простое решение:

  • Создайте скрипт на сервере, который имеет кнопку отправки и один скрытый ввод, который может рассказать о следующей операции
  • в зависимости от скрытого параметра, вызов вашего сабвуфера доступен в том же скрипте, что и саб.
  • перехватите ответ и сделайте то, что вы хотите, используя магию java-скрипта. Если вам нужно, я могу предоставить образец для второго подхода.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...