[リストへもどる]
一括表示
タイトルフォームからの入力データを次のページへ送信したいのですが・・・
記事No8413
投稿日: 2012/03/30(Fri) 16:00
投稿者km
毎度すみません、kmです。
perlのCGIで作ったhtmlのフォームから次のページへデータを送受信
する方法がわかりません。
色々調べてはみたのですが、よくわかりませんでした。

入力部分を
<INPUT TYPE=\"text\" NAME=\"quantity\" VALUE=\" \" SIZE=\"25\" MAXLENGTH=\"25\">";
として
#受け取ったパラメータに応じてリダイレクト
print "<form action = \"sbsc.cgi\" method=\"post\">";
print "<input type=\"submit\" value=\"送信\">";
で送信しているのですが、次のページでどのように受け取ったら良いのでしょうか?

受信部分は下記のように作ろうと思っているのですが、これで受信できるのでしょうか?

if($ENV{'QUERY_STRING'}eq""{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
@paris = split('&', $buffer);
foreach $pair(@paris)
{
($name, $value) = split('=', $pair);
$value =~ tr/t /;
$value =~ s%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$form_data{$name} = $value;
}

仕組みがまだよくわかっておりませんので教えて頂きたいです。

タイトルRe: フォームからの入力データを次のページへ送信したいのですが・・・
記事No8414
投稿日: 2012/03/30(Fri) 17:15
投稿者km
実験結果を報告します・・・
ページの移動はできたのですが、肝心のデータが受け取れませんでした。

タイトルRe^2: フォームからの入力データを次のページへ送信したいのですが・・・
記事No8415
投稿日: 2012/03/31(Sat) 18:30
投稿者km
&ReadParseを使うのでしょうか?
とりあえず、やってみます・・・

タイトルRe^3: フォームからの入力データを次のページへ送信したいのですが・・・
記事No8416
投稿日: 2012/03/31(Sat) 19:39
投稿者km
すみません、うまくいきませんでした。
色々試したのですが・・・・

タイトルRe^4: フォームからの入力データを次のページへ送信したいのですが・・・
記事No8417
投稿日: 2012/04/02(Mon) 20:06
投稿者km
すみません、まだハマってます・・・・
print "<input type=\"hidden\" name=\"$name\" value=\"$in{$name}\">";
で持ってこれると思ったのですがうまくいきません・・・

タイトルおやじからの最後のレスです
記事No8418
投稿日: 2012/04/02(Mon) 22:49
投稿者おやじ
> すみません、まだハマってます・・・・
> print "<input type=\"hidden\" name=\"$name\" value=\"$in{$name}\">";
> で持ってこれると思ったのですがうまくいきません・・・

申し訳けないですが、はまる以前の話ですね。何を説明したいのかわかりませんし・・・
仮にこの先何とかできたとしても、この状態で、お客様にきちんとした品質のものを自信を持って出せ、万が一問題が出たときに対応できますか?
おやじのプログラミング技術レベルでは個人の責任で個人利用が限界で、とてもユーザシステムとして出す気にはなれません。
プロとして仕事でやっているなら、こんなところではなく社内の専門家に聞くか任せるしかないのでは?
HTMLとperl(CGI)の基本を理解していない段階で、ネットの情報や参考書を拾い読みしていくようなアプローチをいくら繰り返しても結果は出せないです。
うちの会社なら、品質保証部門がこのレベルのソフトはそもそも受け取らないので、絶対に出荷できないでしょうね。

取りあえずCGI.pmを使う方法と、cgi-lib.pl(ReadParse)を使う方法を以下に示しますが、データを受け取るだけならどちらもたったの3行です。
ネットをチョット見れば、悩む余地はないレベルと思います。
後、説明の仕方だけ(できませんと言われてもできないから聞いているのでしょうから、具体的にどうやってやっているか書かなければ聞かれているほうも分かるはずもないのでは?)かもしれませんが、入力フォームの書き方が正しいのかも疑問です。

[入力フォーム]

# <form> </form>で囲む
print <<"_EOM_";
<form action="xxx.cgi" method = "post">
<input type="text" name="quantity" value="" size="25" maxlength="25">

<input type="submit" value="送信">
</form>
_EOM_

[xxx.cgiでCGI.pmを使う方法]

use CGI;
# 新しいCGIオブジェクトの作成
# 変数名は任意(ここでは$input)
$input = new CGI;
# 入力データをparam関数で取得
$data = $input->param('quantity');

[xxx.cgiでcgi-lib.pl(ReadParse)を使う方法]

require 'cgi-lib.pl';
# ReadParse関数で連想配列に入力データを取り込む
# デフォルトで連想配列%inに入力データが取り込まれる
&ReadParse;
# 連想配列配列(%in)からキー(quantity)を指定して入力された値を取得
$data = $in{'quantity'};

タイトル一応経過報告です。。
記事No8419
投稿日: 2012/04/03(Tue) 15:57
投稿者km
エラーが出て動かないです。
原因を調べています・・・・

タイトルまだ動かないです
記事No8420
投稿日: 2012/04/03(Tue) 18:34
投稿者km
malformed header from script. Bad header=#<form action = "***.cgi" meth: /virtual/www/send_data.cgi

エラー箇所はわかっているのですが直し方がわかりません。
<form action = "***.cgi" method = "POST">
のところでエラーが起こっているらしいです。
試しにフルパスを入れてみたのですがダメでした。

タイトルRe: まだ動かないです
記事No8421
投稿日: 2012/04/04(Wed) 11:18
投稿者瀬戸っぷ   <setoppu@gmail.com>
おやじさんの掲示板を利用させて頂いているのに、おやじさんの忠告はガン無視ですか?

> malformed header from script. Bad header=#<form action = "***.cgi" meth: /virtual/www/send_data.cgi
> エラー箇所はわかっているのですが直し方がわかりません。

ググってみましたか?

> <form action = "***.cgi" method = "POST">
> のところでエラーが起こっているらしいです。
> 試しにフルパスを入れてみたのですがダメでした。

検討違いっぽいですよ?

http://www.futomi.com/lecture/apache/cgierror.html
http://oshiete.goo.ne.jp/qa/1734292.html
http://blog.livedoor.jp/unixtips/archives/55108432.html
など……。
Bad headerと言われているのですから、HTTPレスポンスヘッダに「<form action = "〜」なんてヘッダが存在しましたか?
HTTPレスポンスヘッダに関しては前回の質問時に検索していたハズですよね?
perlの構文で#で始まるコメント行が標準出力に表示されるハズがありませんので、相変わらずヒアドキュメントでゴミを出力しているのでしょうか?
# ヒアドキュメントではperlのコメントとか意味ありませんよ?
# 何度かやっている出力見ていれば「意図していないのになぜか出力されている」ことは気づくハズですが…。


完成するまで付き合う気はありませんので、もっと自助努力をするか担当を変わって貰うかした方がいいかと思いますけど。
# なにをどうやったのか、そういった経過すら説明不足ですし……。