改行処理について教えてください。
今まで書き込み処理で
unshift @DATA, "$tm,$FORM{'name'},$FORM{'title'},$FORM{'text'}\n";
としていたのですが、これを
use CGI;
my $form = new CGI;
my $NAME = $form->param('name');
my $TITLE = $form->param('title');
my $TEXT = $form->param('text');
unshift(@DATA,"$tm,$NAME,$TITLE,$TEXT\n");
に変更しました。
すると
sub loadFormdata
が聞かなくなり、
改行処理他が対応しなくなってしまいました、
この場合、 loadFormdataの部分のどこを変えればよいでしょうか?
|------書き込み処理------|
sub printdata{
use CGI;
my $form = new CGI;
&loadFormdata();
open(FILE, "<$FILE");
eval{ flock(FILE, 1) };
@DATA = <FILE>;
close FILE;
my $tm = time;
my $NAME = $form->param('name');
my $TITLE = $form->param('title');
my $TEXT = $form->param('text');
unshift(@DATA,"$tm,$NAME,$TITLE,$TEXT\n");
while(@DATA > $MAX) {
pop @DATA;
}
open(FILE, ">$FILE") or die("error :$!");
eval{ flock(FILE, 2) };
print FILE @DATA;
close FILE;
}
|------改行処理他------|
sub loadFormdata
{
my ($query, $pair);
if($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}
else {
$query = $ENV{'QUERY_STRING'};
}
foreach $pair (split(/&/, $query)) {
my $key = ("$NAME,$TITLE,$TEXT");
my ($key, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
$value =~ s/&/&/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\x0D\x0A\s*/<br>/g;
$value =~ s/\s+/ /;
$FORM{$key} = $value;
}
}
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
それぞれが、何をやっているか、理解した上での変更ですか?
やってることがメチャクチャですよ。
sub loadFormdata に 「改行処理他」と書いてありますが、実際には、次の処理を行なっています。
(1)フォームからの値を取り込む
(2)%XX という16進文字列に符号化されているので、それを元に戻す
(3)HTMLとして特殊な文字を変換する。(含:改行処理)
(4)%FORMに処理結果を書き込む
このうち、 (1)、(2)、(4)はCGIモジュールが自動でやって $form->param として使えるようにしてくれているものなので、二度手間です。
(3)はCGIモジュールでは行なわれないので、この処理だけ行う必要があります。
ですが、現プログラムでは、「フォームから取り込んだ値を%FORMに」となっていて、 $form->paramには何も影響与えません。
「(3)の処理だけするプログラムにする」
というのが対処方法となります。
その際には、引数を受けとって、結果を返すような関数にするべきでしょう。
例えば encodeHTML という名前にして
my $TEXT = encodeHTML( $form->param('text') );
と、paramの内容を変換して、$TEXTに代入する、というのがよくある方法です。
ご回答ありがとうございます!
>「(3)の処理だけするプログラムにする」
この部分の処理に困っておりました。(教えていただけるまで
どのようにするのかもわかっておりませんでした;;)
おかげさまで解決できました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のflagの使い方が分かりま...
-
UWSC SLCTBOXもしくはSELECTに...
-
バッファリング処理を高速化し...
-
初回起動のみ判別したい
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
SELECT OPTIONの中身をコピペ...
-
FindFirst を複数条件で検索
-
【至急!!!】python言語で本を見...
-
構造体の各データの表示につい...
-
文字の横にプルダウンを表示さ...
-
ACCESS テキストボックスを隙...
-
セレクトメニューで2つの項目...
-
UWSCのSELECT文の記述方法
-
16進の10進変換について
-
formで特定のinputを送信しない...
-
テーブル内でドロップダウンメ...
-
「*:*」って何を意味するのでし...
-
c言語 16進数の2進数への変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のflagの使い方が分かりま...
-
VB6で、長い時間かかる処理...
-
初回起動のみ判別したい
-
arduino の割り込み処理について
-
回数を指定しないで空白行まで...
-
スカラー変数に処理を入れる
-
実行中の変数の中身をイミディ...
-
perl:ループのカウンタ変数の値...
-
処理終了後、他のページへジャ...
-
$postflag=1とか$flag=1とかっ...
-
VBAのCallステートメントについて
-
プログラミング、VB.NET(初歩です)
-
同パッケージ内の関数を呼び出...
-
10000通りのシリアル番号を生成...
-
C言語のプログラミング
-
SetDlgItemInt( ) c++
-
問題作成のWebアプリの作り方を...
-
フラグをたてる、、の意味を教...
-
内部処理中にNow Loadingみたい...
-
バッファリング処理を高速化し...
おすすめ情報