※ ChatGPTを利用し、要約された質問です(原文:要素の上書きについて)
要素の上書きについて
このQ&Aのポイント
HTMLのフォームからCGIにデータを送り、そのデータを表示するだけのCGIを作っているのですが、HTMLフォームの中の項目を空のまま送信したときに、CGI側でその表示部分はなくなります。
項目が空の時には、CGIで以前に登録していたデータが上書きされずに表示されるようにしたいのですが、どうしたら良いのかわかりません。
perl初心者です。どなたかご教授していただけないでしょうか。
perl初心者です。HTMLのフォームからCGIにデータを送り、そのデータを表示するだけのCGIを作っているのですが、HTMLフォームの中の項目を空のまま送信したときに、CGI側でその表示部分はなくなります。できれば、項目が空の時には、CGIで以前に登録していたデータが上書きされずに表示されるようにしたいのですが、どうしたら良いのかわかりません。どなたかご教授していただけないでしょうか。よろしくお願いいたします。(うまく説明できず、ご迷惑おかけします。)
#!/usr/local/bin/perl
#データファイル
$datafile='./data.dat';
#ライブラリの読み込み
require './jcode.pl';
#フォームデータの読み込み
if ($ENV{REQUEST_METHOD} eq "POST"){
read (STDIN,$input,$ENV{CONTENT_LENGTH});
}else{
$input=$ENV{QUERY_STRING};
}
#フォームデータのデコード
$input =~ tr/+/ /;
$input =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
#SJISコード変換
&jcode::convert(\$input, 'sjis');
#データのオープン
open(DAT,"+< $datafile");
flock(DAT, 2);
#データの書き込みとクローズ
seek(DAT,0,0);
print DAT $input;
close(DAT);
open(IN,"$datafile");
$input=<IN>;
#フォームデータの分解
@form=split (/&/,$input);
close(IN);
&header;
print "<div class=\"iframe_body\">";
#データを表示する(左側)
print "<div class=\"iframe_left\">";
$a=$form[0];
$a=~s/名前=/ /;
print "<b><font color=\"#ff0000\">$a</font></b>";
print "<br>";
$a=$form[1];
$a=~s/画像=/ /;
print "<img src=\"$a\" width=\"120\" height=\"100\" border=\"0\">";
print "<br>";
$a=$form[2];
$a=~s/住所=/ /;
print $a;
print "<br></div>";
#データを表示する(中央)
・
・
#データを表示する(右側)
・
・
print <<EOM;
</body>
</html>
EOM
exit;
#-----------------------------------------------------------------------------------
# HTMLヘッダー
#-----------------------------------------------------------------------------------
sub header {
print "Content-type: text/html\n\n";
print "<link rel=\"stylesheet\" href=\"../iframe.css\" type=\"text/css\">\n";
print <<EOM;
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html";charset=shift_jis>
<title></title>
</head>
<body>
EOM
}
お礼
ANo.1~3のg_p_さん! できました!ありがとうございました!!感謝感激です!! 私がすんなり書かれていることを理解して手直しできてれば、もっと早くにお礼を言えたのですが、超ど級の素人の悲しさ・・・すっごい無駄なことを繰り返していたので、お礼が遅れました。 私の要領を得ない最初の質問から、ヒントどころか答えまで出していただき、本当にありがとうございました。また、私のような超ど級の素人の為に時間を割いていただき、重ね重ねお礼を申し上げます。 ありがとうございました!!!!!!