![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
CGIかなりの初心者です。
infoseek iswebでcgi-lib.plを使って、フォームからデータを取得してテキストファイルに保存してまたそのファイルから読み込んで表示するだけのプログラムを作っているのですが、アクセスするたびにテキストファイルが空になってしまいます。以下のソースなのですが、間違いを指摘していただけないでしょうか?
尚、ひとまず、フォームの項目は3つあり、そのうちの最後だけが0か1か選択でき、他は0しか選択できないようにしています。
#!/usr/bin/perl
require "cgi-lib.pl";
print "Content-type: text/html;\n\n";
# 値をテキストファイルから読み込む
open (IN,"test.txt");
$aaa = <IN>;
close (IN);
$h = substr($aaa,0,1);
$i = substr($aaa,1,1);
$k = substr($aaa,2,1);
print "
<html>
<head>
<title>テスト</title>
</head>
<body>
$h$i$k
<br>
<form method=\"post\" action=\"test.cgi\">
データ1<br><input type=\"radio\" name=\"h\" value=\"0\" checked=\"checked\">0<br>
データ2<br><input type=\"radio\" name=\"i\" value=\"0\" checked=\"checked\">0<br>
データ3<br><input type=\"radio\" name=\"k\" value=\"0\" checked=\"checked\">0<br>
<input type=\"radio\" name=\"k\" value=\"1\">1<br>
<input type=\"submit\" value=\"送信\">
</form>
";
&ReadParse(*form);
# フォームの値を取得
$fh = $form{"h"};
$fi = $form{"i"};
$fk = $form{"k"};
# 値をテキストファイルに書き出す
@faaa = ("$fh","$fi","$fk");
open (OUT,"> test.txt");
print OUT @faaa;
close (OUT);
print "
</body>
</html>
";
A 回答 (3件)
- 最新から表示
- 回答順に表示
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_15.png?e8efa67)
No.2
- 回答日時:
実行順をよく考えて下さい。
初回実行
1. ファイル読み込み:先にファイルを作ってあれば、$h$i$kにデータが入る。
2. フォームデータの読み込み:まだデータはないので、$h$i$kはnullとなる、ハッシュ配列で定義されていないキーを指定してもperlではエラーは出ない。
3. 書き込み、データがnullなので、上書きモードだと消去になってしまう。
フォーム送信後
1. ファイル読み込み:null書き込み状態なので、$h$i$kにはデータが無い。
2. フォームデータの読み込み:$h$i$kに送信されたデータが入る。
3. 書き込み、送信データが上書きされる。
ということで、「# フォームの値を取得」のところは、送信データの有無チェックをしてから代入しましょう。
あと、「print "<html>..」の文字列が改行状態になってますけど、実際のプログラムでは、一行ですよね。でないとエラーになるはずだし?。
でも、こういうとき、ヒアドキュメントっていう便利な記述法があります。文字列を複数行に分けて書けて、2重引用符と一重引用符ともにエスケープしなくても記述できます。
print <<EOL;
<html>
<head>
略
<body>
$h$i$k
<br>
<form method="post" action="test.cgi">
略
</form>
EOL
回答ありがとうございます。まずヒアドキュメントを教えていただきありがとうございます。
CGIのほうですが、初回実行のところの2の「まだデータはない…」あたりがよくわかりません。詳しく教えていただけないでしょうか?すみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP php ログイン 1 2022/11/01 00:24
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javascriptの変数をCGIに送る方法
-
(Perl)ReadParseによるハッシ...
-
フォームからデータを取得して...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
このメールフォームが機能しな...
-
[HTML]プルダウンメニューの横...
-
FORMのselectの選択肢を最初か...
-
tracert ができない原因
-
チェックボックスの返す値
-
WEBページを強制的に横画面で見...
-
拡張子'html'と'htm'はどっちが...
-
VB初心者。小数点以下の表示で...
-
INPUT TYPE
-
チェックボックスとセレクトボ...
-
ボタンの処理
-
VB.net データーグリッドビュー...
-
ブックマークからのアクセスを...
-
select値をhiddenのvalueに渡し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
(Perl)ReadParseによるハッシ...
-
別サーバーのcgiへバイナリデー...
-
さくらインターネットのCGI...
-
CGIのボタンの処理について
-
入力規則をまとめて定義
-
何れかが入力されていれば全て入力
-
perlで自動ログインをしたいが...
-
htmlのフォームからcgiにデータ...
-
<form method=post action="***...
-
if構文を追加するとうまくうま...
-
フォームに入力した情報をその...
-
cgi-libを使って変数値渡しをし...
-
携帯電話のセッション管理
-
HPの作り方
-
確認ページが表示できない
-
アンケートCGI作成について、fo...
-
[Netscape Communicator 4.7]×[...
-
アクセス元URLによって振り分け...
-
CGIプログラムの最後に?がつい...
-
VBで表示したホームページの...
おすすめ情報