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