CGI-BBS > データベース > その他 > ReadParseで、FORMで取得した値をカンマ削除など一括置換したい


カレッヂ
カレッヂ


質問者 サム  投稿日 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/</&lt;/g;
        $val = ~ s/>/&gt;/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/"/&quot;/g;
に直して下さい。

=~ は2文字で1つの演算子ですので、間にスペースを入れないで下さい。
質問者 サム  [削除]  投稿日 5/11(金) 16:37:21
解決いたしました。
本当にありがとうございました。

このページは終了したので返信(回答)は書きこめません

Web裏技