![]() |
カレッヂ |
質問者 サム
投稿日 5/11(金) 13:42:20
以下のようなCGIを書いたのですが、どうも値がうまく入ってくれません。 下のCGIは、HTMLのFORMから値が来るものとして作ってます。 例えばユーザーがIDなどを入れたときに、カンマを削除したりタグを無効にして、テキスト ファイルに書き出すものを作ろうとしています。 しかし、IDなどを入れても値が変わって送られてきてしまいます。while文の中の処理に 問題があるみたいなのですが、どうしても分かりません。 どこが悪いのでしょうか? すみませんが、どなたかご教授ください。 #!/usr/bin/perl require './cgi-lib.pl'; require './jcode.pl'; &ReadParse; while (($key,$val) = each %in) { &jcode'convert(*val,"sjis"); $val = ~ s/&/&/g; $val = ~ s/"/quot;/g; $val = ~ s/</</g; $val = ~ s/>/>/g; $val = ~ s/\t//g; $val = ~ s/\r//g; $val = ~ s/\,//g; $in{$key} = $val; } $id = $in{"id"}; $pc = $in{"pc"}; &message("$id",'テスト実行中'); exit; sub message { print "Content-type: text/html\n\n"; print "<html><head><title>入力エラー</title>\n"; print "<SCRIPT language=\"JavaScript\">\n"; print "<!--// \n"; print "function pageBack(){history.back();}\n"; print "// -->\n"; print "</SCRIPT></head>\n"; print "<body bgcolor=\"#ffffff\"><center>\n"; print "<h3><font color=\"#ff0000\">$_[0]</font></h3>\n"; print "<font size=3>$_[1]</font>\n"; print "<hr size=1><form>\n"; print "<p align=center>\n"; print "<INPUT type=\"button\" value=\"前へ戻る\" onClick=\"pageBack()\">\n"; print "</p>\n"; print "</form></center></body></html>\n"; exit; } |
回答者 しあわせのツボ
[削除]
投稿日 5/11(金) 15:20:34
値がどのように変わるのですか? 入力画面はどのようになっていますか? テキストファイルに書き出すルーティンはどうなっていますか? |
質問者 サム
[削除]
投稿日 5/11(金) 15:42:54
早速のお返事ありがとうございます。 入力させるHTMLは、 <form method="post" action="test.cgi"> <input type="text" name="id" size="10"> <input type="text" name="pc" size="10"> <input type="submit" value="送信する"> </form> のような形で作成してあります。 例えば、idに『123』と入力して送信した場合、CGI側では『476589』というような値が かえってきてしまいます。また入力するidは『123』じゃなくても(『789456』とか 入れたとしても)CGI側で取得する値は上述した『476589』となってしまいます。つまり何 を入れても同じ値がかえってきてしまいます。 ただ、while文の置換処理を書かないと、うまく値を取得してくれます。 テキストファイルに書き出すルーチンはまだ書いておりません。 とりあえず、CGIを実行する(HTMLから実行)とidの値を表示するようには作ってある のですが、正確な値を取得してくれませんので、まだ作ってないという状態でして。 いったい何が原因なのでしょうか? 文法チェックしても何もひっかかりませんし、書籍など見て書いてみたのですが...。 |
回答者 しあわせのツボ
[削除]
投稿日 5/11(金) 16:29:47
見つけました。 $val = ~ s/"/quot;/g; を $val =~ s/"/"/g; に直して下さい。 =~ は2文字で1つの演算子ですので、間にスペースを入れないで下さい。 |
質問者 サム
[削除]
投稿日 5/11(金) 16:37:21
解決いたしました。 本当にありがとうございました。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |