• 締切済み

FORMメソッドでvalueがうまく渡されない

Perlで下記のようにFORMメソッドを 色々なところで使っているのですが ↓のFORMメソッドだけVALUEが渡らないのです。 print "<FORM ACTION=\"$homeurl\" METHOD=$method>\n"; print "<TABLE BORDER=1>\n"; print "<TR>\n"; print "<TD>会員番号</TD>\n"; print "<TD><TT>会員番号-</TT><INPUT type=text name=mytonum value=\"$mynum\"></TD>\n"; print "</TR>\n"; print "<TR>\n"; print "<TD COLSPAN=2>\n"; print "<INPUT TYPE=SUBMIT VALUE=\" 基本情報 \">\n"; print "<INPUT TYPE=hidden NAME=mynum VALUE=\"$c_mynum\">\n"; #非表示。クッキー用 print "<INPUT TYPE=HIDDEN NAME=mycmd VALUE=write2>\n"; print "</TD>\n"; print "</TR>\n"; print "</TABLE>\n"; print "</FORM>\n"; それで改変したのが↓です。 こちらはボタンを押したらちゃんと値が渡りました。 ただ、予定した位置にテキストボックスが表示されず別の位置に表示されそれも困っています。 上の表記はどこが間違っているのでしょうか? print "<FORM ACTION=\"$homeurl\" METHOD=$method>\n"; print "<TABLE BORDER=1>\n"; print "<TR>\n"; print "<TD>編集先の会員番号</TD>\n"; # print "<TD><TT>会員番号-</TT><INPUT type=text name=mytonum value=\"$mynum\"></TD>\n"; #コメントにして・・・ print "</TR>\n"; print "<TR>\n"; print "<TD COLSPAN=2>\n"; print "<INPUT TYPE=SUBMIT VALUE=\" 基本情報 \">\n"; print "<INPUT TYPE=text NAME=mynum VALUE=\"$mynum\">\n"; #こちらtypeを変更→OK ~~以下上記同じ~~

みんなの回答

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

$mynumは、どこから持ってきているのかこれだけでは不明ですけど、 おそらく入力されたデータですよね。 そうすると、その文字列内に "<>& のいずれかが入っていると html出力したときに、No2でご指摘されているようにhtmlとしておかしな文になったり、 こわいことに、ブラウザクラッシャーなどのjavascriptが仕掛けられたりします。 そこで、対策は、これらの特殊文字を文字実体参照に変換してからページ表示用文字列に使います。 変換方法はいろんなところで述べられているので省略 とりあえず参考サイトはセキュリティ関連 「クロスサイトスクリプティング対策の基本」 一連のページの後編サニタイジングのところを特に見ておいてください。 http://www.atmarkit.co.jp/fsecurity/special/30xss/xss01.html

すると、全ての回答が全文表示されます。
  • mekerock
  • ベストアンサー率64% (9/14)
回答No.2

ブラウザに表示されたHTMLソースを確認してみましょう。 一見、文法的に、大きなミスがあるとは思えません。 \"$mynum\" を $mynum に変更したら、動いた、ということなので、もしかしたら、と思ったことがありました。 既に、$mynumがダブルクォーテーションで括られたデータになっていませんか? $mynum = "\"なんとか\""; のような感じです。 もし、ブラウザに出力されたソースを確認したときに、 <INPUT type=text name=mytonum value=""なんとか""> みたいになっていないですかね? そうなると、value=""となってしまうので、値が入らない、なんて考えてみました。 違っていたら、ごめんなさい。

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

1行目と2行目でTDの数が異なるような気がします <TR><TD></TD><TD></TD></TR>←1行目 <TR><TD></TD></TR>←2行目

aoitorigairu
質問者

お礼

回答ありがとうございます。 TDの数はあっているようです。 自分で解決したのですが、 print "<TD><TT>会員番号-</TT><INPUT type=text maxlength=4 size=5 name=mynum value=$mynum></TD>\n"; 1画面に2つのフォームがあり、 name=mynum value=$mynum></TD>\n"; と value=\"$mynum\"></TD>\n"; の違いでクリアできたのですが、 なぜこれでクリアできたのかわかりません。 また # print "<INPUT TYPE=HIDDEN NAME=mynum VALUE=$c_mynum>\n"; をコメントにしたらそれでもクリアできた かも知れません。 $c_mynumはクッキー用変数。 原因がわかりましたら教えてください。

すると、全ての回答が全文表示されます。

専門家に質問してみよう