こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

cgi.pm を使用してファイルUP時にtextエリア等の情報もcgiに引き渡す

何度もPerlのところで質問していますが・・・今回は
ファイルのアップロードをするときに少々もんだいが出てきてしまうことについてです。<input type="file"... を使います

以下の二つのファイルで構成しています(一部分だけ)

---form.html---
<form action="upload.cgi" method="POST" ENCTYPE="multipart/form-data">
<textarea name="input_textarea" rows="20" cols="70"></textarea>
<input type="file" name="File" size=32>
<input type-"submit" value="ok">


---upload.cgi---
[formからの情報を配列変数に代入するスクリプト・・・]
use CGI;
$query = new CGI;
$filename = $query->param('File'); # ファイル名の取得
$type = $query->uploadInfo($filename)->{'Content-Type'};
同じファイル名が無いことを確認して、保存

という処理を行っています。upload.cgiの中身がとぼしくて申し訳ありません。
かなり省略してます。

さて、、問題となるのは ENCTYPE="multipart/form-data" とすると
配列変数にFORMからの情報がうまく入ってくれないということです、
かといってENCTYPE="multipart/form-data"を外すと CGI.pm を使った
ファイルのアップロードができなくなってしまいます。
ENCTYPE="multipart/form-data" のオプションをつけて
配列変数にテキストエリアの内容を入れるにはどうすればいいのでしょうか。
テキストエリアを取り除くとファイルのアップロードはできます。
ただ、ファイルと入力したテキストを同時に処理することができないんです。

投稿日時 - 2002-06-27 20:14:37

QNo.301498

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

うちではできましたよ。

ちなみに「配列変数」ってのが、、、。
どこで配列に値を格納しているのでしょうか?
そのあたりで妙な事になっているのですかね。。。?

-wオプションつけて変数名に誤りがないか調べてみるのもいいかもしれません。

以下かなり適当に作ってしまったサンプル。
でも動作確認済み。
------------------------------
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>

<FORM ENCTYPE="multipart/form-data" METHOD="post" ACTION="upload.pl">
<TEXTAREA NAME="textarea"></TEXTAREA>
file : <INPUT TYPE="file" NAME="file">
<INPUT TYPE="submit" NAME="submit">
</FORM>

</BODY>
</HTML>
------------------------------

------------------------------
#!/usr/bin/perl

use CGI;

my $cgi = new CGI;

my $filename = $cgi->param('file');
my $textarea = $cgi->param('textarea');
my $type = $cgi->uploadInfo($filename)->{'Content-Type'};

open (OUTFILE,">>/tmp/feedback");
while ($bytesread=read($filename,$buffer,1024)) {
print OUTFILE $buffer;
}

print "Content-type: text/html\n\n";
print <<"_HERE_";
<html>
<body>
たぶん処理は正常に終了しています。<BR>
textarea : $textarea<BR>
type : $type
</body>
</html>
_HERE_
------------------------------

投稿日時 - 2002-06-28 10:03:37

補足

なんとかできました、ありがとうございました、、

テキストエリアの情報は$textarea = $cgi->param('textarea');
で取得するのではなく、一般的なcgi-lib.plを使った方法で取得したかったわけです。。。

投稿日時 - 2002-07-02 19:10:14

お礼

回答ありがとうございます
それと、配列変数ではなく連想配列でした
やってみたらご報告します。

投稿日時 - 2002-06-28 12:05:56

あなたにオススメの質問