【问题标题】:Generate HTML form and process it in one PERL/CGI file生成 HTML 表单并在一个 PERL/CGI 文件中处理它
【发布时间】:2017-05-30 17:23:47
【问题描述】:

我正在尝试使用 PERL/CGI 创建一个表单,并且我想在同一个 CGI 文件中处理该表单中引入的数据。

这是我的代码:

#! /usr/bin/perl

use CGI qw(:standard);

my $cgi = new CGI;

print header, start_html("Shop web"),

  h1({-align=>center, -style=>"color:blue;Font-Size: 35pt;"},'Oferta T-shirt' ), 
  "<p align=\"center\">
  \<img src=\"/img/t-shirts.jpg\" width=\"30%\">
    <\/p>",

    "<br\\>
    <table align = \"center\" border = \"2\" bordercolor=\"green\" >
            <col width=\"120\">
            <col width=\"120\">
            <col width=\"120\"> 
            <tr>
                <th bgcolor=\"lightgray\">Talla</th>
                <th bgcolor=\"lightgray\">Color</th> 
                <th bgcolor=\"lightgray\">Precio</th>
            </tr>
            <tr>
                <td align=\"center\">S</td>
                <td align=\"center\">Negro</td> 
                <td align = \"center\">8 &euro;</td>
            </tr>
            <tr>
                <td align=\"center\">M</td>
                <td align=\"center\">Blanco</td> 
                <td align=\"center\">9 &euro; </td>
            </tr>
            <tr>
                <td align=\"center\">L</td>
                <td align=\"center\">Azul</td> 
                <td align= \"center\">11.5 &euro; </td>
            </tr>
            <tr>
                <td align= \"center\">XL</td>
                <td align= \"center\">Rojo</td> 
                <td align= \"center\">12 &euro; </td>
            </tr>
            <tr>
                <td align= \"center\">XXL</td>
                <td align= \"center\">Amarillo</td> 
                <td align= \"center\">15.5 &euro; </td>
            </tr>
        </table> ",

        "<br />
        <h2 align=\"center\"><font color = \"blue\"> Compra tu camiseta</font></h2>
        <br>",

        "<center>

            <form action=\"compra.cgi\" method=\"POST\" >
                <input type=\"hidden\" name=\"subject\" value=\"Formulario por email\">
                <table> 

                    <tr><td>Direcci&oacuten de envio</td>
                        <td><input type=\"text\" name=\"nombre\" size=\"35\"></td>
                    </tr> 

                    <tr> 
                        <td>Cantidad</td> 
                        <td> <input type=\"text\" name=\"cantidad\" size=\"6\"></td> 
                    </tr> 

                    <tr> 

                        <td colspan=\"2\" align=\"center\">   
                            <br>
                            <input type=\"submit\" name=\"Enviar\" value=\"Comprar\"  style=\"height: 30px; width: 120px\"> 
                        </td> 
                    </tr> 
                </table> 
            </form> 
        </center>",


end_html();

换句话说:如何在不创建另一个 CGI 文件来捕获该数据的情况下处理表单中引入的数据。

感谢任何帮助。

【问题讨论】:

标签: forms perl cgi


【解决方案1】:
#!/usr/bin/perl -w

use CGI qw/:standard/;

print header( 'text/plain' );

$cgi = CGI->new();

if ( $cgi->param )
{
    <<< YOU HAVE POST DATA - PROCESS IT >>>
}
else
{
    <<< THERE IS NO POST DATA - PRINT YOUR HTML >>>
}

我就是这样做的……

【讨论】:

  • 多一点解释会大大改善你的答案。
  • @Duncan 我应该将此代码放在我的代码中的什么位置??
  • 嗨雨人。只需将您的 HTML 表单代码放在“无参数”位中,然后在另一位中处理发布的数据。要么您发布了数据,要么您没有发布数据,因此您可以在脚本开始时进行相应的分支。
  • 我稍微编辑了脚本以使其更加明显。
【解决方案2】:

您似乎在 1990 年代中期编写 Web 应用程序。这至少会让您从本世纪初开始使用 Perl 实践。

#!/usr/bin/perl

use strict;
use warnings;

use CGI qw[params header];
use Template;

my $tt = Template->new;

if (params) {
  # We have some CGI parameters, extract them, do something
  # useful with them and then display a page thanking the user.

  my $foo = param('foo');
  my $bar = param('bar');

  process_user_input($foo, $bar);

  $tt->process('thankyou.tt', { foo => $foo, bar => $bar })
    or die $tt->error;
} else {
  # No parameters, so let's show the user the input form
  $tt->process('form.tt')
    or die $tt->error;
}

请注意,我们避免使用 CGI.pm 中严重弃用的 HTML 生成函数。相反,我们使用Template Toolkit,它允许我们将输出分离到模板文件中(这里称为form.ttthankyou.tt)。

请注意,这里有一定程度的挥手,因为我不知道您的参数名称是什么或您需要对它们做什么。

但这仍然是旧技术。建议您阅读 CGI::Alternatives 并将您的技术更新到本千年所写的内容。

【讨论】:

    猜你喜欢
    • 2012-11-06
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多