【问题标题】:Passing user Input from a HTML page to a Perl script and displaying the results in webpage [closed]将用户输入从 HTML 页面传递到 Perl 脚本并在网页中显示结果 [关闭]
【发布时间】:2016-06-04 03:11:01
【问题描述】:

我有如下现有设置。

现有设置:

下面是用户交互式 perl 脚本,它以 EmpNo 作为参数并从 Employee 表中打印雇员的姓名和薪水。 目前我正在终端中运行这个脚本,并且输出也显示在终端上。

Perl 代码

#!/usr/bin/perl

use DBI;
use strict;

my $driver = "mysql";
my $database = "dbname";
my $dsn = "DBI:$driver:database=$database";
my $userid = "uid";

print "Enter employee Number \n";

my $input1 =<>;


my $dbh = DBI->connect($dsn, $userid) or die $DBI::errstr;

my $sth = $dbh->prepare("SELECT Empname ,Salary FROM Employee WHERE EmpNo ='$input1' ");

$sth->execute() or die $DBI::errstr;
print "Number of rows found :" + $sth->rows;
while (my @row = $sth->fetchrow_array()) {
   my ($name, $salary) = @row;
   print "Name = $name, Salary = $salary \n";
}
$sth->finish()

输出:perl test.pl

输入员工编号 207711 姓名=约翰薪水=10000

要求:

而不是使用用户 Input 在终端上运行脚本。我喜欢有一个 HTML 网页,用户可以在其中从下拉列表中选择 EmpNo,并且这个 EmpNo 应该在单击提交时传递给 Perl 脚本 按钮。然后脚本应该获取数据库详细信息并显示在网页上。

简要思路:

类似这样的表单。

<FORM action="/test.pl" method="POST">

< select name = "Employee details" >
    <option selected = "selected">EmpNo</option>
    <option value = "207711">207711</option>
    <option value = "207712">207712</option>
    <option value = "207713">207713</option>
</select>

<input type="submit" value="Submit">

</FORM>

我愿意使用 CGI 并安装了 Apache。等待您的宝贵回复。非常感谢!!!

【问题讨论】:

  • 如果你所说的“CGI”是指 CGI.pm,那么现在这并不是一个很好的选择(它实际上是 discouraged in the official documentation)。请参阅CGI::Alternatives
  • 你的问题太宽泛了。您必须设置一个 HTML 页面,并且您的 HTTP 服务器必须配置为期望 URL 为 /test.pl。然后您必须更改您的 Perl 脚本以通过 CGI 接口接受输入数据并提供 HTML 输出而不是简单的文本。所有这些都无法在一个答案中处理
  • @Borodin : HTML 页面已经准备好, /test.pl 的 URL 也已经准备好了。您能否建议通过 CGI 接口接受输入数据所需的更改。谢谢。

标签: html mysql apache perl cgi


【解决方案1】:

只是想方设法,没有尝试,只需在您的代码中添加/更改这些行:

use CGI qw(:standard);
print header;
print qq(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n);
print qq(<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">\n);
print "<head>\n";
print "  <title>Page Title Goes Here!</title>\n";
print "</head>\n";

my $input1 = param('Employee details') || "";

我没有听说过不推荐 CGI.pm,但上面的基本想法应该仍然有效。

【讨论】:

  • 嗨@jimtut,谢谢。有用。现在我能够将 HTML 页面中的数据读入 Perl/Cgi 并进行处理。目前我正在将 Sql 查询的结果复制到文本文件中。如何在同一个 cgi 中打印文本文件(作为文本或 html?)?
  • 有一些简单的方法可以读取文本文件(谷歌为“Perl 文件 slurp”),但我不确定这是否真的是你想要的。你的意思是 Perl 代码将 SQL 查询结果存储在一个文本文件中,然后你想在网页上显示它?为什么不直接使用您的示例中的代码,即 printing 结果?那些print 命令将直接打印到网页上。如果出于某种原因您确实需要从文本文件中读取 SQL 查询结果,您可以轻松地将其“吸”进去。但是,请尝试将所有代码(SQL 查询和打印到网页)合并到一个 Perl 脚本中。
  • 在最后一条评论中空间不足。我相信其他人会讨厌这个想法,但为了便于维护,我也将 HTML 输入表单放入 Perl CGI。这需要更多代码,以检测这是脚本的初始运行还是表单提交,但是您将所有与输入、搜索和输出相关的代码都放在一个文件中。再说一次,很多人会说这是一种糟糕的代码结构方式,但是当一切都像这样在一起时,它使得维护相当小的脚本变得非常容易。
  • 在网页中直接显示sql输出有一些缩进问题。因此,我将其重定向到文本文件,然后对文本文件进行超链接,以便用户可以单击并检查结果。非常感谢!!。将尝试研究在 cgi 中包含 html 的第二个选项
  • 很高兴它有帮助。如果你准备好了,请接受这个作为正确答案。
猜你喜欢
  • 2012-09-18
  • 1970-01-01
  • 2013-07-17
  • 2013-12-31
  • 2018-01-07
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2013-02-04
相关资源
最近更新 更多