Perl CGI表单重用以前的数据

Perl CGI表单重用以前的数据,perl,forms,cgi,Perl,Forms,Cgi,我正在用Perl(使用模块)和recaptcha构建一个注册表单。表单工作正常,并将数据提交到SQL数据库。但是,当我使用表单创建另一个用户时,输入数据库的数据与第一个用户相同。我使用my$var=$cgi->param('param_name')在我的验证页面中检索表单数据我需要清除参数吗,还是其他原因。(我尝试了$cgi->delete_all();,但似乎没有任何效果) 表单验证代码:(它实际上是一个原型,所以安全性还没有得到解决) 是的,这就是它通常的工作方式。查看文档中的-nostic

我正在用Perl(使用模块)和recaptcha构建一个注册表单。表单工作正常,并将数据提交到SQL数据库。但是,当我使用表单创建另一个用户时,输入数据库的数据与第一个用户相同。我使用
my$var=$cgi->param('param_name')在我的验证页面中检索表单数据我需要清除参数吗,还是其他原因。(我尝试了
$cgi->delete_all();
,但似乎没有任何效果)

表单验证代码:(它实际上是一个原型,所以安全性还没有得到解决)


是的,这就是它通常的工作方式。查看文档中的-nosticky“pragma”

或delete_all()函数

---编辑---

我在CGI.pm的文档中使用了一个修改过的示例形式。包括在这里是为了便于参考,因为我对它做了一些修改

#!/usr/bin/perl

use CGI qw/-nosticky :standard/;

print header;
print start_html("Example CGI.pm Form");
print "<h1> Example CGI.pm Form</h1>\n";
do_work();
print_prompt();
print_tail();
print end_html;

sub print_prompt {
    print "<hr>\n";
    print start_form;
    print "<em>What's your name?</em><br>";
    print textfield('name');
    print checkbox('Not my real name');
    print "<p><em>Where can you find English Sparrows?</em><br>";
    print checkbox_group(
                            -name=>'Sparrow locations',
                            -values=>[England,France,Spain,Asia,Hoboken],
                            -linebreak=>'yes',
                            -defaults=>[England,Asia]);
    print "<p><em>How far can they fly?</em><br>",
        radio_group(
                -name=>'how far',
                -values=>['10 ft','1 mile','10 miles','real far'],
                -default=>'1 mile');
    print "<p><em>What's your favorite color?</em>  ";
    print popup_menu(-name=>'Color',
                            -values=>['black','brown','red','yellow'],
                            -default=>'red');
    print hidden('Reference','Monty Python and the Holy Grail');
    print "<p><em>What have you got there?</em><br>";
    print scrolling_list(
                    -name=>'possessions',
                    -values=>['A Coconut','A Grail','An Icon',
                            'A Sword','A Ticket'],
                    -size=>5,
                    -multiple=>'true');
    print "<p><em>Any parting comments?</em><br>";
    print textarea(-name=>'Comments',
                            -rows=>10,
                            -columns=>50);
    print "<p>",reset;
    print submit('Action','Shout');
    print submit('Action','Scream');
    print end_form;
    print "<hr>\n";
}

sub do_work {
    print "<h2>Here are the current settings in this form</h2>";
    for my $key (param) {
        print "<strong>$key</strong> -> ";
        my @values = param($key);
        print join(", ",@values),"<br>\n";
    }
}

sub print_tail {
    print <<END;
<hr>
<address>Lincoln D. Stein</address><br>
<a href="/">Home Page</a>
END
}
#/usr/bin/perl
使用CGI qw/-nosticky:standard/;
打印头;
打印start_html(“示例CGI.pm表单”);
打印“示例CGI.pm表单\n”;
你工作吗;
打印提示();
打印_tail();
打印结束html;
子打印提示{
打印“
\n”; 打印开始表格; 打印“你叫什么名字?”; 打印文本字段(“名称”); 打印复选框(“不是我的真名”); 打印“哪里可以找到英国麻雀?
”; 打印复选框组( -name=>“麻雀位置”, -values=>[英国、法国、西班牙、亚洲、霍博肯], -linebreak=>“是”, -默认值=>[英国、亚洲]; 打印“它们能飞多远?
”, 无线电组( -name=>“多远”, -值=>[“10英尺”,“1英里”,“10英里”,“实际距离], -默认值=>“1英里”); 打印“你最喜欢什么颜色?”; 打印弹出菜单(-name=>“Color”, -值=>[‘黑色’、‘棕色’、‘红色’、‘黄色’], -默认值=>“红色”); 打印隐藏(“参考”、“巨蟒和圣杯”); 打印“你有什么?
”; 打印滚动列表( -name=>“财产”, -值=>[‘一个椰子’、‘一个圣杯’、‘一个图标’, “一把剑”,“一张票”], -大小=>5, -multiple=>“true”); 打印“任何离别评论?
”; 打印文本区(-name=>'Comments', -行=>10, -列=>50); 打印“”,重置; 打印提交('Action','Shout'); 打印提交(“操作”、“尖叫”); 打印结束表格; 打印“
\n”; } 分包工作{ 打印“此处是此表单中的当前设置”; 对于我的$key(param){ 打印“$key->”; my@values=param($key); 打印联接(“,”,@values),“
\n”; } } 子打印尾{
打印相同是什么意思?加载表单时会预先填充相同的记录,或者说插入后会得到相同的记录?是否使用FastCGI或mod_perl或诸如此类的工具?嗨,这是相同的记录。我用一些测试信息作为“新用户1”填写表单并提交。这会按预期进入SQL数据库,但如果我回到表单,用一些不同的测试信息填写“新用户2”,它进入SQL数据库,与“新用户1”的信息相同。如果我修改源文件并再次输入它,它只会输入不同的信息。我没有使用CGI和Captcha::reCAPTCHA模块以外的任何东西。您是否使用GET而不是POST来提交数据表单?可能这些值已经在上次提交的URL中了。文档中说不要在重定向语句中使用相对URL。对此我不是很确定。CGI应该仍然是无状态的。如果是第二个请求,我在他的代码中看不到任何可以检索到以前值的内容。Nosticky只是关闭了默认值n表单是生成的。好吧,我们没有完整的代码,我要冒险一试,但是cgi.pm经常使用的方式是让相同的Perl脚本生成表单并处理POST请求。当您向表单发布时,它会处理信息,然后重新生成表单,重用发布的值。当然,值不会被保留ross进行了不同的会话,但当同一用户从他的浏览器向cgi.pm脚本发送多个帖子时,您会看到这种行为。我快速搜索了一下,还发现了一些关于-nosticky pragma的疑问和抱怨,因此可能需要进行更多的研究。感谢各位,我尝试了nosticky pragma并使用delete_all()我开始想/已经知道,php会变得更容易,因为我对Perl了解得越多,我就越不喜欢它。如果你发布一个经过净化的代码版本,我们也许能够找到它。你不需要隐藏php!:-)我不得不改变前端我已经把代码保留了下来,如果时间允许的话,我会设法解决这个问题:)
#!/usr/bin/perl

use CGI qw/-nosticky :standard/;

print header;
print start_html("Example CGI.pm Form");
print "<h1> Example CGI.pm Form</h1>\n";
do_work();
print_prompt();
print_tail();
print end_html;

sub print_prompt {
    print "<hr>\n";
    print start_form;
    print "<em>What's your name?</em><br>";
    print textfield('name');
    print checkbox('Not my real name');
    print "<p><em>Where can you find English Sparrows?</em><br>";
    print checkbox_group(
                            -name=>'Sparrow locations',
                            -values=>[England,France,Spain,Asia,Hoboken],
                            -linebreak=>'yes',
                            -defaults=>[England,Asia]);
    print "<p><em>How far can they fly?</em><br>",
        radio_group(
                -name=>'how far',
                -values=>['10 ft','1 mile','10 miles','real far'],
                -default=>'1 mile');
    print "<p><em>What's your favorite color?</em>  ";
    print popup_menu(-name=>'Color',
                            -values=>['black','brown','red','yellow'],
                            -default=>'red');
    print hidden('Reference','Monty Python and the Holy Grail');
    print "<p><em>What have you got there?</em><br>";
    print scrolling_list(
                    -name=>'possessions',
                    -values=>['A Coconut','A Grail','An Icon',
                            'A Sword','A Ticket'],
                    -size=>5,
                    -multiple=>'true');
    print "<p><em>Any parting comments?</em><br>";
    print textarea(-name=>'Comments',
                            -rows=>10,
                            -columns=>50);
    print "<p>",reset;
    print submit('Action','Shout');
    print submit('Action','Scream');
    print end_form;
    print "<hr>\n";
}

sub do_work {
    print "<h2>Here are the current settings in this form</h2>";
    for my $key (param) {
        print "<strong>$key</strong> -> ";
        my @values = param($key);
        print join(", ",@values),"<br>\n";
    }
}

sub print_tail {
    print <<END;
<hr>
<address>Lincoln D. Stein</address><br>
<a href="/">Home Page</a>
END
}
print header;
print start_html("Example CGI.pm Form");
print "<h1> Example CGI.pm Form</h1>\n";
do_work();
Delete_all();
print_prompt();
print_tail();
print end_html;