• 締切済み

[Netscape Communicator 4.7]×[FORMタグ]の組み合わせ続き

先に投稿した質問内容に利用規約違反してしまっている部分があったので、修正・追加したものを再度投稿します。 htmlファイル(特に関係無さそうな部分省略) <form name="form1" method="post" action="送り先CGI"> <input type="password" name="pasu1" size="10"> <input type="password" name="pasu2" size="10"> <input type="password" name="pasu3" size="10"> <input type="submit" name="sabu" value="nn4win"> </form> CGIファイル(特に関係無さそうな部分省略) #!/usr/bin/perl $title = 'フォーム内容表示'; $jcodelib = './jcode.pl'; $kanjicode = 'euc'; require "$jcodelib"; &init_form($kanjicode); $pasu1 = $form{'pasu1'}; $pasu2 = $form{'pasu2'}; $pasu3 = $form{'pasu3'}; $sabu = $form{'sabu'}; &error; exit(); sub init_form { local($query, @assocarray, $assoc, $property, $value, $charcode, $method); $charcode = $_[0]; $method = $ENV{'REQUEST_METHOD'}; $method =~ tr/A-Z/a-z/; if ($method eq 'post') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } @assocarray = split(/&/, $query); foreach $assoc (@assocarray) { ($property, $value) = split(/=/, $assoc); $value =~ tr/+/ /; $value =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg; &jcode'convert(*value, $charcode); $form{$property} = $value; } } sub error { print <<__END__; content-type:text/html <html> <head> <title>$title</title> $contenttype </head> <body bgcolor="#FFFFFF" text="#000000"> $pasu1<br> $pasu2<br> $pasu3<br> $sabu<br> </body> </html> __END__ exit(); }

  • CGI
  • 回答数4
  • ありがとう数4

みんなの回答

回答No.4

#1です。 別に、POSTからGETにして使ってくださいと 言っているのではなく、GETの場合の引数が ちゃんと出ているかどうかの確認をしてみては? というつもりでした(^^;; 目的としては、引数としてちゃんと渡されているのに 表示がおかしい場合は、PERL側の問題。 引数自体がすでにおかしい場合は、ブラウザ側の 問題という切り分けをして欲しかったのです。 こういうブラウザが変わる事によって起こるバグは ブラウザ自体のバグの場合もあれば、逆に そのブラウザだけが正しい動きをしていて、 他のブラウザが勝手に補足しているだけ という場合もあります。 ですので何が問題なのかというのを完全に切り分ける のが解決の糸口になります。 切り分けた後は、PERLの処理ならば 細かくデバッグ文を入れていったり、 HTMLなら必要最小限のタグだけのページを 作って、そこからちょっとずつ現在の形に近づけて いったり、逆に問題のタグを消してどうなるかなど いろいろ試して行く事が多いです。

TMEspion
質問者

お礼

回答ありがとうございます。 アドバイスの受け取り方を勘違いしていたようで申し訳ないです。 色々試してみたのですが、 一番上の記入欄のデータは、 POSTでも受信はしている事がわかり、 サブルーチンの途中で消えてしまっているようでした。 送信ボタンの方は、 初めから文字列の末尾が欠けた状態で またGETにしてもそうだったのですが、 原因が断定できないためもう少し調べてみようと思います。

TMEspion
質問者

補足

問題を未解決で終わらせたくないので、よろしければ回答、もしくはアドバイスよろしくお願いします。 Perlのプログラムを細かく区切って、各変数にどんな値が代入されているのかを調べていったところ、末尾が欠けたり、VALUE値の消失の二つの問題が read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); の所で発生している事がわかりました。 上記の一文で、$queryの受け取っている「STDIN」の中身が、Netscape Communicator 4.7で受け取った際、行頭に「半角スペース」が入り、行末は「1バイト分」削れた状態で入っていました。 そのため、 $pasu1 = $form{'pasu1'}; では、サブルーチンで代入されているのは「$form{' pasu1'};」で、$pass1に代入しようとしても空っぽなのは当然な事でした。 行末については、 $queryに入れる長さを「$ENV{'CONTENT_LENGTH'}」にしているため、半角スペースが増えた分、行末が削れるという事でした。 ・・・と結果的な原因はわかったのですが、 何故、「半角スペースが行頭に追加される」のかがわかりませんでした。 長さの設定を変更してみたりもしましたが、行末が欠けているのは相変わらずで、STDINの中で既に行末は切れてるようでした。 ・・・ブラウザによるものなんでしょうか? また、解決法はあるんでしょうか?

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

$method = $ENV{'REQUEST_METHOD'}; この値は 'POST' 大文字だったような?formタグに書いたものとは別にシステムで設定されるものなので。。

TMEspion
質問者

補足

回答ありがとうございます。 現状のプログラムだと、全て小文字にして If文で照らし合わせていたので、 大文字に直してやってみましたが、 結果は変わらず、同じでした。。。

  • nattouv
  • ベストアンサー率75% (3/4)
回答No.2

私のとこのNSC4.78では以下perlで受けると大丈夫そうに見えますが・・・どうでしょう。 #!/usr/bin/perl print "Content-Type: text/html; charset=EUC-JP\n\n"; read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); print $query; exit();

TMEspion
質問者

お礼

回答ありがとうございます。 こちらでもそのPerlで試してみた所、 NAME=pasu1のVALUEは受信していましたが、 NAME=subuの方は未だに末尾が欠けて VALUE=は「nn4wi」となってしまいます。 SUBMITのVALUEを全角文字にし、 他のブラウザで試した所 「サブミット」=「%A5%B5%A5%D6%A5%DF%A5%C3%A5%C8」 となるのですが、 問題のネスケで試すと、 「%A5%B5%A5%D6%A5%DF%A5%C3%A5%C」となり、 半角1文字分欠けてしまいます。 こちらのブラウザの設定でもおかしいのでしょうか?

回答No.1

回答では無いですが、 METHODをGETにしてみれば 何かがわかるような気がします。 一度GETの引数を確認してみてください。

TMEspion
質問者

お礼

助言、ありがとうございます。 >METHODをGETにしてみれば 試しに、GETにしてみたら 正常に受信する事はできましたが、 「nn4win.cgi?pasu1=aaa&pasu2=bbb&pasu3=ccc&sabu=nn4win」 と、上記のようにURLに入力内容が出てしまうので、 できる事ならPOSTで解決策があるといいです。

関連するQ&A

  • PHPでFormリクエスト

    ASPで以下実行したことをPHPで同じことはできるでしょうか? <form action=”Sample.asp” method=”post”> <input type=”text” name=”Name” value=”あ”><br> <input type=”text” name=”Name” value=”い”><br> <input type=”text” name=”Name” value=”う”><br> </form> Request.Form(“Name”)(1)  →あ Request.Form(“Name”)(2)  →い Request.Form(“Name”)(3)  →う

    • ベストアンサー
    • PHP
  • 5個のFormタグを1つのFormタグでまとめたい

    <form method="POST" action="jan_Edit.asp" id=form2 name=form2> <input type="hidden" name="a" Value =<% = YY1 %> > ~</form> <form method="POST" action="jan_Edit.asp"> <input type="submit" value="This Month"> </form> <form method="POST" action="jan_Edit.asp" id=form2 name=form2> <input type="hidden" name="a" Value =<% = YY2 %> >~</form> 現在、カレンダーを作成しています。上記(3つしか乗せてませんが同じ内容) 変数は YY1=1年前の月初 MM1=1か月前の月初 MM2=1ヶ月後の月初 YY2=1年後の月初で インプットタイプでサブミットを使用しています。端的にいうと、現在Formを5個使って月次、年次でカレンダーを作ってます しかし、Formがこれだけ並んでたら、かっこ悪いので1つのForm文でまとめれたらと 思ってますがなかなかグーグル先生でもみつかりません。 Formを一つにまとめれたらと思いますが、どなたか知恵をおかしください。

    • ベストアンサー
    • HTML
  • formタグのactionについて

    PHPを勉強している初心者ですが、 HTMLでつまづいています。 formタグのactionでは通常、送信先のファイルを指定すると思いますが、 action="?"と記載されています。 この場合どのような動きになるのでしょうか。 <form action="?" method="POST"> <img src="image.php?time=<?=$time?>&key=<?=$key?>"> <br> 画像の文字列:<input type=text name=image_key></td> <br> <br> <input type=hidden name=time value="<?=$time?>"> <input type=hidden name=key value="<?=$key?>"> <input type=submit value="ログイン"> <br> <hr> copyright(C) <a href="http://php.to/">http://php.to/</a> </form>

    • ベストアンサー
    • HTML
  • formタグ

    HTMLで、formを使用し、CGIへテキストエリアのデータをpostしたいと 考えております。 テキストエリアを3つ、ボタンを1つ設けるならば 通常以下のようにすると思います。(必要部分の抜粋) <form action="foo1.cgi" method="post" ENCTYPE="multipart/form-data"> <input type="text" name="text1" value="text1" size=50 maxlength=100> <input type="text" name="text2" value="text2" size=50 maxlength=100> <input type="text" name="text3" value="text3" size=50 maxlength=100> <input type="submit" name="aaa" value="実行"> </form> こうすると、実行ボタンをクリックすると、text1、text2、text3のテキストエリアに 記述されているテキストが送信されますが、ここにボタンをもう一つ設け、 上記3つのデータを別のCGIに送信したいのですが、 この場合どのようにHTMLを記述したらよいでしょうか? 新たに下記のようにformタグを設けると、テキストエリアは6つになってしまいますし。。。 <form action="foo2.cgi" method="post" ENCTYPE="multipart/form-data"> <input type="text" name="text1" value="text1" size=50 maxlength=100> <input type="text" name="text2" value="text2" size=50 maxlength=100> <input type="text" name="text3" value="text3" size=50 maxlength=100> <input type="submit" name="aaa" value="実行2"> </form> どなたか分かる方情報頂けますか。

    • ベストアンサー
    • HTML
  • FORMタグについて教えてください

    HPへの訪問者からメッセージを送ってもらおうと以下のHTMLを挿入して みたのですが、うまく行きません。名前を入力して、送信ボタンを押す とメールソフトは起動するのですが、メールの中身は空っぽです。私の 環境はWinXP+IE6.0+Beckey2.0です。HTMLの問題でしょうか?それとも、 環境(ブラウザーとメールソフトの相性の問題?)のせいでしょうか? <FORM ACTION="mailto:私のメルアド" METHOD="POST"> お名前<BR> <INPUT type="text" size="39" name="namae"> <BR> <INPUT type="submit" name="送信ボタン" value="送信ボタン"><BR> </FORM> よろしくお願いします。

  • 2つのFormタグの動作について

    同じページに2つのFormタグを設置したいと考えています。ページが長いため、上部と下部それぞれにFormタグを設置したいと考えています。 <form name="upForm" action="xxx.cgi" method="post"> <input type="text" name="name1"> <input type="submit" value="送信"> </form> --------------- 他の処理 --------------- --------------- 他の処理 --------------- --------------- 他の処理 --------------- <form name="downForm" action="xxx.cgi" method="post"> <input type="text" name="name1"> <input type="submit" value="送信"> </form> 下のFormの送信ボタンを押すと、上のFormが動作しているようで、下のFormの入力値が反映されません。それぞれのFormをそれぞれの送信ボタンで動作させる方法につきまして、ご存知の方がいましたらぜひ教えていただきたいと思います。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • <form>タグに2つのボタン

    <form>タグで2つのボタンを表示させ、以下のようにそれぞれのボタンで フィールドに別の値を入れて送信させることはできますでしょうか? できればHTMLで、できなければJavaScriptでできますでしょうか? ・button1を押したときは  フィールド「CASE」に1を入れて送信、  HTMLで書くと、<input type="hideen" name="CASE" value="1"> ・button2を押したときは  フィールド「CASE」に2を入れて送信、  HTMLで書くと、<input type="hideen" name="CASE" value="2"> ===== HTML ====================== <form action="test.cgi" method="post"> <input type="text" name="text1"> <input type="submit" value="button1"> <input type="submit" value="button2"> </form> 宜しくお願いします。

    • ベストアンサー
    • HTML
  • tableタグとformタグの組み合わせ

    tableタグとformタグの組み合わせでどのように記述すれば、構文上正しいのでしょうか? 私は下のパターンで書いておりますが、間違いでしたら早めに改めたいので お聞きしました。 <table> <form> <input type="hidden" name="a" value="1"> <tr> <td> <input type="text" name="b" value=""> </td> </tr> <tr> <td> <input type="submit" value="OK" value=""> </td> </tr> </fomr> </table>

    • ベストアンサー
    • HTML
  • FORMタグのテキストの中身に始めから値を入れることはできますか?

    <FORM ACTION="./cgi-bin/regist.cgi" METHOD=POST> <INPUT TYPE=TEXT NAME="USR" SIZE=20><BR> <INPUT TYPE=SUBMIT VALUE="xxxx"><BR> </FORM> このUSRのテキストエリアの中身に始めから、文章をいれておきたいのですが、可能でしょうか? もし可能であれば、ソースの提供をどなたか宜しくお願い致します。

    • ベストアンサー
    • HTML
  • ハッシュの要素を別ファイルに渡すことができますか

    perlで次のようなプログラムがあります。 sub { 中略 $USERS{$xy}       #$xyは変数  中略 } <form name="user" action="$ENV{'SCRIPT_NAME" method="POST"> ユーザー名:<input type="text" name="username"><br> パスワード:<input type="password" name="pass" value=""><br> <input type="submit" value="ログイン"> ------------- このとき$USERS{$xy} の要素を別ファイルに渡すことができますか。可能ならばどのようにすればよいでしょうか

    • ベストアンサー
    • Perl

専門家に質問してみよう