- 締切済み
こんな事ってできますか?
フォームからCGIへデータをsubmitで送信する方法ですが、例えば下記において、(1)に10(2)に20(3)に30と入力すると、A=10&B=20&C=30というデータが送信されると思います。 これを送信段階で新たにname="D"を定義し、D="Aは10、Bは20、Cは30"という一つのデータとして送信することは可能でしょうか? (1)<INPUT size="10" type="text" name="A"> (2)<INPUT size="10" type="text" name="B"> (3)<INPUT size="10" type="text" name="C">
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- _mer_
- ベストアンサー率47% (27/57)
そもそもname=Dの定義というのは固定なのでしょうか? それともname=Dに実際何か入力されるものがある(つまりランダム・任意)という事でしょうか? また必ずname=Dのものは必須でしょうか? というのは、文面を拝見しておりまして、D=(A=10&B=20&C=30)という形式が欲しいのであれば、 CGI側で固定で書いてしまえば?という風に安直に(^^;思ったのです。 新たにname=Dを定義する意図みたいなものが分かると、 もう少し解答しやすいのではないかと思ったので投稿させて頂きました。 お役に立てずにスイマセン。。
- a-kuma
- ベストアンサー率50% (1122/2211)
<form ~ onsubmit="this.D.value='Aは'+this.A.value+'、Bは'+this.B.value+'、Cは'+this.C.value"> (1)<INPUT size="10" type="text" name="A"> (2)<INPUT size="10" type="text" name="B"> (3)<INPUT size="10" type="text" name="C"> <input type="hidden" name="D"> ~ </form> かな。 # 試してません
お礼
回答ありがとうございます。 でも、うまくいかなかったです。
お礼
回答ありがとうございます。 おっしゃるとおり、CGI側で書いてしまえばよいのです。 やりたい作業はCGIへ送った値(複数)を分解し、Dの部分だけ結合してsendmailを使ってそれぞれの値を送信するというものなのですが、どうもうまくいきませんでした。というわけで、今回の質問になったわけです。 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs){ ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/"/"/g; $value =~ s/\*//g; $value =~ s/^//g; $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); &jcode'convert(*name,'sjis'); $value2 = "$name:$value";-----(1) push(@NEW,$value2); }-----(2) $new = join("\n",@NEW); この$newをSendmailで送りたいのですが、このままではD=(A=10&B=20&C=30)ではなく、A=10、B=20、C=30が送られてしまうので、(1)の前にifでA、B、Cは除いておき、(2)の後でA、B、Cを結合した値を@NEWにpushすればいいのかと思ったのですが、うまくいきませんでした。 基本的に間違っているでしょうか?