カレッヂ |
質問者 つくりん
投稿日 3/22(木) 18:03:34
こんにちわ!教えてください。 <form enctype="multipart/form-data" method="POST"〜で送信したテキストと画像データのうち、テキストデータの値を取得するにはどうすればいいのでしょうか?ファイルと同時に入力のデータも取得したいのです。どうか、よろしくお願いします。 |
回答者 まさ
[削除]
投稿日 3/22(木) 19:35:50
これにはPerl5の標準ライブラリーであるCGI.pmが使えます。 use CGI; # データを受け取る $query = new CGI; # 画像データ $file = $query->param('file'); # テキストデータ $txt = $query->param('txt'); こうして画像(バイナリー)もテキストも混ぜて取得することが可能です。 CGI.pmは何も考えなくていいので便利です。 |
質問者 つくりん
[削除]
投稿日 3/22(木) 20:11:47
まささん、ありがとうございました。しかし、取得したデータはバイナリか何かわかりませんが送ったものと違うんです。どうしてでしょう?よろしかったら教えてください。 |
回答者 まさ
[削除]
投稿日 3/22(木) 20:22:19
ちょっと意味がよくわかりませんが、それはformで入力したデータとCGI.pmで受け取った データが違うと言うことでしょうか? ちょっと気になりましたが ><form enctype="multipart/form-data" method="POST"〜 これを <form method="POST"〜 としても結果は同じになりますか? ちなみにわたしは <form method="POST"〜 としてCGI.pmでデータを受け取っていますけど、画像はちゃんと画像データとして、テキス トはテキストデータとして受け取れていますけどね? 意味が違うのかな? |
回答者 まさ
[削除]
投稿日 3/22(木) 20:33:40
もしかしたらこのことですかね? use CGI; @param = $query->param(); これで@paramをデコード処理してから値を取り出していませんか? こうしてしまったら画像データは壊れてしまいます。 そもそもCGI.pmにデコード処理は不要です。 バイナリーとテキストを自動的にデコードしてくれますから。 わたしは全ての値を先に取得してから、テキストデータだけJcode.pmを使って文字コード をセットしていますけど。 |
質問者 つくりん
[削除]
投稿日 3/22(木) 21:15:53
まささん、ありがとうございます。ですが、<form method="POST"〜でやっても結果は同じになります。何かいい方法はないでしょうか? ちなみに以下の様にして結果確認をしています。 use CGI; # データを受け取る $query = new CGI; # 画像データ $file = $query->param('file'); # ファイルを書込む open(FILE, ">123.gif"); print FILE $file; close(FILE); # テキストデータ $txt = $query->param('txt'); # テキストデータを書き込む open(LOG, ">> log.txt"); print(LOG "$txt\n"); close(LOG); |
回答者 まさ
[削除]
投稿日 3/22(木) 23:20:10
申し訳ないです、上記ですと、ファイルの中身はファイル名になってしまいます。 ># 画像データ >$file = $query->param('file'); これを # 画像データ $filename = $query->param('file'); while(read($filename, $buffer, 2048)) { $file .= $buffer; } こうすれば上手く行きます。 また<form>ですが、ENCTYPE="multipart/form-data"がないと上手く動きません。 こちらもややこしいことを言って、申し訳なかったです。 |
質問者 とこ
[削除]
投稿日 3/23(金) 11:48:28
まささん、親切に教えていただいてありがとうございます。今日は貫徹明けです。急いでたので違うやり方でやってしまいました。でも、まささんに様に親切にしていただいて嬉しく思います。本当にありがとうございました。 |
返信(回答)する
Web裏技 |