2017-01-15 5 views
0

PERL/CGIでフォームを作成しようとしていますが、同じCGIファイル内でそのフォームに導入されたデータを処理したいと思います。ここHTMLフォームを生成して1つのPERL/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ファイルを作成せずに形で導入されたデータを処理することができます。

何か助けていただければ幸いです。

+0

https://metacpan.org/pod/distribution/CGI/lib/CGI.pod#CGI.pm-HAS-BEEN-REMOVED-FROM-THER-PERL-CORE – Quentin

+2

最新のガイドウェブページを書く。私たちは20年以上CSSを持っていました。 – Quentin

+2

CGI.pmからのHTML生成[最近非難されている](https://metacpan.org/pod/distribution/CGI/lib/CGI.pod#HTML-Generation-functions-should-no-longer-be-used )、[CGI.pmはコアから削除されました](https://metacpan.org/pod/distribution/CGI/lib/CGI.pod#CGI.pm-HAS-BEEN-REMOVED-FROM-THE-PERL-コア)。あなたの環境がCGIのみをサポートしているなら、この醜いエスケープされたHTMLの壁ではなく、[Text :: XSlate](https://metacpan.org/pod/Text::Xslate)のようなテンプレートエンジンを使うべきです。 [私はこの話を見る](https://www.youtube.com/watch?v=jKOqtRMT85s)を見てください。 – simbabque

答えて

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 >>> 
} 

私はこのような...

+1

もう少し説明すれば、あなたの答えが大きく改善されます。 – simbabque

+0

@Duncanこのコードをどこに配置すればよいですか? – rainman

+0

こんにちはレインマン。あなたのHTMLフォームコードを "no params"ビットの中に置き、他のビットに投稿されたデータを処理するだけです。あなたがデータを投稿したかしていないか、そうではないので、スクリプトの開始時にそれに応じて分岐することができます。 –

0

あなたは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を読んでこの千年紀に書かれたものにあなたの技術を更新することをお勧めします。

関連する問題