- 追加された行はこの色です。
- 削除された行はこの色です。
CGI tips プログラムなどなど6
#contents
* CGI tips [#ze877ab3]
ローカルで perl を使うには必要ないけれども、cgi では必要なもの
** フォーム(post)からの値を受け取る 21 March 2016 [#xbe6ed04]
CGI Programing with Perl
[[5.4フォーム処理のCGI例(METHOD="post"の場合)>http://www.aikis.or.jp/~s-suzuki/cgilabo/kouza/cgi2.html#cgilabo54]]
の一部を再掲させていただきました。そのままです。
もっと有用なことも書いてあるのですで、そちらを参考下さいませ。
http://www.aikis.or.jp/~s-suzuki/cgilabo/kouza/cgi2.html#cgilabo54 より
$length = $ENV{'CONTENT_LENGTH'}; # パラメータ文字列の長さ
read(STDIN, $buffer, $length ); # 長さ分だけ標準入力から読み込む
($arg1,$arg2) = split( /&/ , $buffer ); #パラメータごとに分割
($name1,$value1) = split( /=/ , $arg1 ); #フォーム名と内容に分割
($name2,$value2) = split( /=/ , $arg2 ); # 〃
$value1 =~ tr/+/ /; # フォーム形式の + を、スペースに変換
$value2 =~ tr/+/ /; # 〃
# フォーム形式の特殊文字・漢字を変換する処理
$value1 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value2 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
こんな感じ(↓)のフォームのhtmlからデータを受け取るときです。
パラメータは2つではありませんが……、
text、textarea、radio、select の受け取りも同じということで。
<form name="form1" id="form1" method="post" action="https://kyotofly.kit.jp/cgi-bin/tools/pigen.cgi">
<table>
<tr>
<th>Your Name</th>
<td>
<input type="text" size="75" maxlength="200" name="username" id="username" />
</td>
</tr>
<tr>
<th>Numbers
</th>
<td>
<textarea cols="50" rows="3" id="inputnums" name="inputnums"></textarea>
</td>
</tr>
<tr>
<th>Shipping Type</th>
<td>
<input type="radio" name="shiptype" value="air" checked> Air Mail
<input type="radio" name="shiptype" value="EMS"> EMS (Express Mail Service)
<input type="radio" name="shiptype" value="Registered"> Registered Air Mail
</td>
</tr>
<tr>
<th>Country</th>
<td>
<select id="usercountry" name="usercountry">
<option value="NA">-- Select Your Country --</option>
<option value="Afghanistan">Afghanistan</option>
<option value="Albania">Albania</option>
(略)
<option value="Zambia">Zambia</option>
<option value="Zimbabwe">Zimbabwe</option>
</select>
</td>
</tr>
</table>
<input type="submit" value="Submit">
<input type="reset" value="Clear all">
** 別な html へ飛ぶ 21 March 2016 [#e00fdc8c]
!!! 「\n\n」がないと、500 Internal Server Error になります !!!
if(条件){
print "Location:http://hoge.hoge.jp/hoge.html\n\n";
exit;
}
** pdfファイルを表示する 21 March 2016 [#l95a383f]
[[CGI-BBS > CGI > Perl > PDFファイルのCGI経由での表示>https://www.rescue.ne.jp/CGI-BBS/cgi/perl/20020307102821.shtml]]
の会話から要約すると……
pdfファイルが(対応していれば)ブラウザのウィンドウの中に表示される
- filename=$downloadpdf は保存するときの(ダウンロードさせたい)ファイル名を指定する。実体とは別な名前でも構わない。ディレクトリ名は含ませてはいけない(Firefox では、「\」は「_」に変換された)。
- open (PDF, "<$mypdf"); は表示させる pdfファイルを指定する。当然ながら実体を指定する。ディレクトリも含んでよい。
- ブラウザには、cgi の URI が表示されるので、pdfファイルの実体は安全なところに隠せる。
print << "MYHTML";
Content-type: application/pdf
Content-disposition: inline;filename=$downloadpdf
Content-Transfer-Encoding: binary
MYHTML
open (PDF, "<$mypdf");
binmode(PDF);
while(read(PDF, $value, 4096)){
print $value;
}
close(PDF);
pdfファイルをダウンロードさせる(ダイアログを表示させる)には、inline の代りに attachment とする
Content-disposition: attachment;filename=$mypdf
|Today:&counter(today);|Yesterday:&counter(yesterday);|Total:&counter(); since 16 March 2016|