2013-06-10 2 views
1

У меня есть сценарий CGI, который выглядит следующим образом.Как вернуть поле ввода CGI в исходное состояние при выполнении условия (CGI.pm/Perl)

#!/usr/local/bin/perl 

use CGI ':standard'; 

print header; 
print start_html('A Simple Example'), 
h1('A Simple Example'), 
start_form, 
"What's your name? ",textfield('name'), 
p, submit, end_form, 
hr; 

my %unwantedwords = {'foo' => 1 }; 

if (param()) 
{ 
    my $text =param('name'); 

    # I attempted this to but failed. 
    unless ($unwantedwords{$text}){ 
     print "Your name is: ",$text, 
    } 
    hr; 
} 
print 
end_html; 

Что я хочу сделать, это в основном получить текст через «текстовое поле», а затем распечатать его в Интернете. Но когда слово, вставленное пользователем, является нежелательным словом (сохраненным в хеше), вместо того, чтобы его печатать, я бы хотел, чтобы сеть вернулась в новое исходное состояние.

Каков наилучший способ сделать это? Приведенный выше код не работает.

+0

Используйте @array для хранения ваших нежелательных ключевых слов и grep для их фильтрации. – hwnd

ответ

1

Что-то (не проиндексирован).

use strict; 
use warnings; 
use CGI qw(:standard); 
use CGI::Carp qw(fatalsToBrowser); 

my @unwanted = qw(foo bar baz); 

my $text = param('name'); 

print header, 
     start_html('A Simple Example'); 

display_form() and exit unless !grep($text eq $_, @unwanted); 

print "Hello $text\n"; 

sub display_form { 
    print start_form, 
     h1('A Simple Example'), 
     qq(What's your name?), textfield(-name => 'name', -value => '', -override => 1), p, 
     submit, hr, 
     end_form; 
} 

print end_html; 
+0

Спасибо, это работает очень хорошо. Но хотя нежелательные слова не распечатывались, они все еще сохраняются в текстовом поле в Интернете. Как я могу очистить содержимое этого текстового поля? – neversaint

+1

Я отредактировал исправление. Попробуй это. – hwnd

0

Вам нужно сохранить состояние слова перед его отправкой и вернуть его, чтобы отправить обратно, если поданное слово находится в вашем списке плохих слов.

Ваша реализация будет отличаться в зависимости от вашей настойчивости двигателя, но независимо от того, используете ли вы кук для хранения старого слова, или использовать сессионный магазин, вы будете делать что-то вроде этого:

1. store the old word 

2. send the old word along with the web form. 

3. receive new word back 

4. if (new word is in the bad word list) { 
     get the old word from storage 
    } 
    else { 
     store the new word 
    } 

5. do what comes next 
+0

Спасибо. Но как вы реализуете no.2 и 3? – neversaint

+0

2) Код, который генерирует форму, устанавливает его как атрибут значения соответствующего текстового поля –

+0

3) вы уже реализовали (3) в коде, который вы указали выше. –

Смежные вопросы