gpt4 book ai didi

html - 使用 CGI 处理表单数据

转载 作者:行者123 更新时间:2023-11-28 03:16:42 28 4
gpt4 key购买 nike

我正在用 Perl 编程,需要从以下 HTML 表单中获取数据:

<FORM action="./cgi-bin/Perl.pl" method="GET">
<br>
Full name: <br><input type="text" name="full_name" maxlength="20"><br>
Username: <br><input type="text" name="user_name" maxlength="8"><br>
Password: <br><input type="password" name="password" maxlength="15"><br>
Confirm password: <br><input type="password" name="new_password" maxlength="15"><br>
<input type="submit" value ="Submit"><br><br>
</FORM>

编辑:如果我不能使用 CGI.pm,下面的方法行得通吗?

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "GET") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
$buffer = $ENV{'QUERY_STRING'};
}

# Split information into name/value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%(..)/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}

但每次我尝试使用这些值时都会出现错误:

 Use of unitilialized value

如何正确使用 CGI 来处理我的表单数据?

编辑:我的错误可能出在别处。这是我的代码。这可能是我使用 grep 的方式吗?我不应该使用 GET 方法吗?

#!/usr/bin/perl 
use CGI qw(:standard);
use strict;
use warnings;

print "Content-type: text/html\n\n";

#getting these from HTML form
my $full_name = param('full_name');
my $user_name= param('user_name');
my $password = param('password');
my $new_password = param('new_password');

#checking that inputs are alphanumeric or an underscore
my $mismatch = grep /^[a-zA-Z0-9_]*$/i, $full_name, $user_name, $password, $new_password;

if($mismatch) {
#error message if invalid input
print qq(<html>\n);
print qq(<head>\n);
print qq(<title> Error: alphanumeric inputs only. </title>\n);
print qq{<meta http-equiv="refresh" content="5;URL="http://www.cs.mcgill.ca/~amosqu/registration.html">\n};
print qq(</head>\n);
print qq(<body>\n);
print qq(<b><center> Inputs with alphanumeric characters only please. </b></center>\n\n);
print qq(</body>\n);
print qq(</html>\n);
}

最佳答案

您更改了我在对 your previous question 的回答中建议的正则表达式, 这是

grep /[^A-Z0-9]/i, $full_name, $user_name, $password, $new_password

你已经改变了它 $mismatch现在设置为有效参数的数量,无效参数集的条件现在是尴尬的$mismatch < 4 .

如果您的要求已从字母数字更改为字母数字加下划线,那么您可以恢复 grep 的意义通过写作

my $mismatch = grep /\W/, $full_name, $user_name, $password, $new_password

这将设置 $mismatch如果任何值包含“非单词”字符,即字母数字加下划线,则为正值true

但是,你看到的问题

Use of uninitialized value $_ in pattern match (m//)

是因为至少有一个参数$full_name , $user_name , $password , 或 $new_password未定义。您需要找出是哪一个以及它发生的原因。您确定所有四个查询参数 full_name , user_name , password , 和 new_password是否出现在您要返回的查询字符串中?看看query_string是什么方法返回查看。

关于html - 使用 CGI 处理表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27251272/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com